Anaconda/Features/NoLoader

From FedoraProject

< Anaconda | Features(Difference between revisions)
Jump to: navigation, search
(Current status)
(Boot Options: table intro, dns, keymap, nousb, repo, ipv6)
Line 79: Line 79:
 
Some options (e.g. <code>[[Anaconda Boot Options#autostep|autostep]]</code>, <code>[[Anaconda Boot Options#nogpt|nogpt]]</code>) are handled by the main anaconda program and don't need to be changed.}}
 
Some options (e.g. <code>[[Anaconda Boot Options#autostep|autostep]]</code>, <code>[[Anaconda Boot Options#nogpt|nogpt]]</code>) are handled by the main anaconda program and don't need to be changed.}}
  
<!-- yeah this list needs to be reorganized. it's a wiki; feel free. -->
+
Some boot options may be removed, since they no longer apply.<br/>Anything that says '''deprecate''' ''will still be accepted'' (with a warning/error message) for a release or two.
  
 +
<!-- yeah this list needs to be reorganized. it's a wiki; feel free. -->
 
{|
 
{|
 
! Boot Option !! Status !! Handled in !! Notes !! Done?
 
! Boot Option !! Status !! Handled in !! Notes !! Done?
 
|-
 
|-
| [[Anaconda/Options#askmethod|askmethod]] || REMOVE? || bootloader || use <code>repo=</code> ||
+
| [[Anaconda/Options#askmethod|askmethod]] || REMOVE || bootloader || use <code>repo=</code> || YES
 
|-
 
|-
| [[Anaconda/Options#asknetwork|asknetwork]] || REMOVE? || bootloader || use <code>ip=</code> ||
+
| [[Anaconda/Options#asknetwork|asknetwork]] || REMOVE || bootloader || use <code>ip=</code> || YES
 
|-
 
|-
| [[Anaconda/Options#blacklist|blacklist=&lt;module&gt;]] || DEPRECATE || dracut || <code>rd.driver.blacklist=&lt;module&gt;</code> || Upstream
+
| [[Anaconda/Options#blacklist|blacklist=&lt;module&gt;]] || DEPRECATE || dracut || <code>rd.driver.blacklist=&lt;module&gt;</code> ||
 
|-
 
|-
 
| [[Anaconda/Options#dd|dd]]/[[Anaconda/Options#driverdisk|driverdisk]] || KEEP || dracut || ||
 
| [[Anaconda/Options#dd|dd]]/[[Anaconda/Options#driverdisk|driverdisk]] || KEEP || dracut || ||
 
|-
 
|-
| [[Anaconda/Options#dhcpclass|dhcpclass]] ||  || || ||
+
| [[Anaconda/Options#dhcpclass|dhcpclass]]<br/>[[Anaconda/Options#dhcptimeout|dhcptimeout]] ||  || || ||
 
|-
 
|-
| [[Anaconda/Options#dhcptimeout|dhcptimeout]] || || || ||
+
| [[Anaconda/Options#display|display=&lt;display&gt;]] || KEEP? || anaconda || just exports <code>DISPLAY=&lt;display&gt;</code> ||
 
|-
 
|-
| [[Anaconda/Options#display|display]] || KEEP? || anaconda || just sets DISPLAY=XXX. easy! ||
+
| [[Anaconda/Options#dns|dns=&lt;ip&gt;]] || DEPRECATE || dracut || <code>nameserver=&lt;ip&gt;</code> ||
|-
+
| [[Anaconda/Options#dns|dns]] || || || ||
+
 
|-
 
|-
 
| [[Anaconda/Options#essid|essid]] || || || ||
 
| [[Anaconda/Options#essid|essid]] || || || ||
Line 108: Line 107:
 
| [[Anaconda/Options#gdb|gdb]] || || || ||
 
| [[Anaconda/Options#gdb|gdb]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#graphical|graphical]]/[[Anaconda/Options#text|text]] || KEEP || systemd || use .targets ||
+
| [[Anaconda/Options#graphical|graphical]]<br/>[[Anaconda/Options#text|text]] || KEEP || systemd || we can use .targets for this ||
 
|-
 
|-
 
| [[Anaconda/Options#ip|ip]] || MODIFIED? || dracut || see [http://people.redhat.com/harald/dracut.html#dracut.kernel dracut.kernel(7)] ||
 
| [[Anaconda/Options#ip|ip]] || MODIFIED? || dracut || see [http://people.redhat.com/harald/dracut.html#dracut.kernel dracut.kernel(7)] ||
 
|-
 
|-
| [[Anaconda/Options#ipv6|ipv6]] || DEPRECATE || dracut || use <code>ip=auto6</code> or <code>ip=[2001:DB8::1]</code> ||
+
| [[Anaconda/Options#ipv6|ipv6]] || DEPRECATE || dracut || <code>ip=[2001:DB8::1]</code><br/>may also need to add prefixing support to dracut? ||
|-
+
| [[Anaconda/Options#keymap|keymap]] || || || ||
+
 
|-
 
|-
| [[Anaconda/Options#ks|ks]] || || || ||
+
| [[Anaconda/Options#keymap|keymap=&lt;keymap&gt;]] || DEPRECATE || dracut || use <code>vconsole.keymap=&lt;keymap&gt;</code><br/>lorax will need to use loader's 'keymaps' list to put keymaps into initramfs ||
 
|-
 
|-
| [[Anaconda/Options#ksdevice|ksdevice]] || || || ||
+
| [[Anaconda/Options#ks|ks]] || KEEP || dracut || ||
 
|-
 
|-
| [[Anaconda/Options#kssendmac|kssendmac]],[[Anaconda/Options#kssendsn|kssendsn]] || KEEP || dracut || ||
+
| [[Anaconda/Options#ksdevice|ksdevice]] || KEEP || || ||
 
|-
 
|-
 +
| [[Anaconda/Options#kssendmac|kssendmac]]<br/>[[Anaconda/Options#kssendsn|kssendsn]] || KEEP || dracut || ||
 
|-
 
|-
 
| [[Anaconda/Options#lang|lang]] || || || ||
 
| [[Anaconda/Options#lang|lang]] || || || ||
Line 127: Line 125:
 
| [[Anaconda/Options#linksleep|linksleep]] || || || ||
 
| [[Anaconda/Options#linksleep|linksleep]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#loglevel|loglevel]] || || || ||
+
| [[Anaconda/Options#loglevel|loglevel]] || KEEP || || ||
 
|-
 
|-
 
| [[Anaconda/Options#mediacheck|mediacheck]] || || || ||
 
| [[Anaconda/Options#mediacheck|mediacheck]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#method|method]] || DEPRECATE || dracut || See <code>repo</code> ||
+
| [[Anaconda/Options#method|method]] || DEPRECATE || dracut || <code>repo</code> ||
 
|-
 
|-
 
| [[Anaconda/Options#mtu|mtu]] || || || ||
 
| [[Anaconda/Options#mtu|mtu]] || || || ||
Line 139: Line 137:
 
| [[Anaconda/Options#nicdelay|nicdelay]] || || || ||
 
| [[Anaconda/Options#nicdelay|nicdelay]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#nofirewire|nofirewire]] || REMOVE || || try <code>blacklist=firewire-ohci</code> ||
+
| [[Anaconda/Options#nofirewire|nofirewire]] || REMOVE || || <code>blacklist=firewire-ohci</code> ||
 
|-
 
|-
 
| [[Anaconda/Options#noipv4|noipv4]] || || || ||
 
| [[Anaconda/Options#noipv4|noipv4]] || || || ||
Line 151: Line 149:
 
| [[Anaconda/Options#noprobe|noprobe]] || || || ||
 
| [[Anaconda/Options#noprobe|noprobe]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#noshell|noshell]] || REMOVE || || Does nothing. ||
+
| [[Anaconda/Options#noshell|noshell]] || REMOVE || || Does nothing. || YES
 
|-
 
|-
| [[Anaconda/Options#nousb|nousb]] || || || ||
+
| [[Anaconda/Options#nousb|nousb]] || REMOVE || kernel || the kernel handles <code>nousb</code> itself these days. || YES
 
|-
 
|-
 
| [[Anaconda/Options#noverifyssl|noverifyssl]] || || || ||
 
| [[Anaconda/Options#noverifyssl|noverifyssl]] || || || ||
Line 159: Line 157:
 
| [[Anaconda/Options#proxy|proxy]] || || || ||
 
| [[Anaconda/Options#proxy|proxy]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#repo|repo]] || KEEP || || ||
+
| [[Anaconda/Options#repo|repo]] || KEEP || dracut || set <code>root=live:XXX</code> from <code>repo</code> value ||
 
|-
 
|-
 
| [[Anaconda/Options#rescue|rescue]] || KEEP || || ||
 
| [[Anaconda/Options#rescue|rescue]] || KEEP || || ||
 
|-
 
|-
| [[Anaconda/Options#selinux|selinux]],[[Anaconda/Options#noselinux|noselinux]] || || || ||
+
| [[Anaconda/Options#selinux|selinux]]<br/>[[Anaconda/Options#noselinux|noselinux]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#serial|serial]] || REMOVE || || use <code>console=ttyS0</code> instead ||
+
| [[Anaconda/Options#serial|serial]] || DEPRECATE || || <code>console=ttyS0</code> ||
 
|-
 
|-
 
| [[Anaconda/Options#sshd|sshd]] || || || ||
 
| [[Anaconda/Options#sshd|sshd]] || || || ||
Line 177: Line 175:
 
| [[Anaconda/Options#vncpassword|vncpassword]] || || || ||
 
| [[Anaconda/Options#vncpassword|vncpassword]] || || || ||
 
|-
 
|-
| [[Anaconda/Options#wepkey|wepkey]],[[Anaconda/Options#wpakey|wpakey]] || || || ||
+
| [[Anaconda/Options#wepkey|wepkey]]<br/>[[Anaconda/Options#wpakey|wpakey]] || || || ||
 
|-
 
|-
 
|}
 
|}

Revision as of 17:42, 14 November 2011

Contents

Get rid of anaconda's loader

Summary

Stop using our old, crufty, hard-to-maintain C-based custom initrd. Move everything out of loader and into dracut or anaconda proper.

Owner

Current status

  • Targeted release: Fedora 17
  • Last updated: Nov. 14, 2011
  • Percentage of completion: 50%

Detailed Description

Since 1999, anaconda has been divided into two parts:

  • stage1, a.k.a. initrd.img: the blue and red text loader environment (no shell, no virtual terminals, just a custom startup binary written in C - statically linked until 2008)
  • stage2, a.k.a. install.img: the full installer environment (for graphical or text installs), complete with Python interpreter and shells and stuff.

In olden days, loader did what its name says - it loaded the stage2 (full graphical) anaconda environment and did a couple other tasks required to reach that objective. Those other tasks include things like:

  • Prompting for language and keyboard (if loader goes interactive for one of the other tasks)
  • Bringing up the network (if required by one of the other tasks)
  • Fetching kickstart files, product.img, and updates.img (if requested)
  • Loading driver disks (if required)
  • Running media check

Most of the time, all of these things are skipped or happen automatically. If you use a boot.iso, you will most likely never see anything besides a blue background and the "Loading anaconda..." message. This means it's a whole lot of code that is just special cases and receives less testing all the time. Further, it's a special environment: It's newt, it's C, it's old, and it's another layer of stuff getting execed between startup and anaconda.

We need to decide how many of these tasks anaconda still needs to do. For those that are still important, they need to move either into the initramfs (if it's something that needs to happen before anaconda can start) or into the main anaconda program - or some other tool that anaconda can run when we're in the full graphical environment. Everything else should go away.

This may mean we keep some sort of loader-like program, but it could be Python based and non-interactive.

Benefit to Fedora

  • Maintainability!
    • Gobs of custom code will move into upstream dracut modules or nice neat Python modules.
    • New stuff added to dracut will automatically appear in the installer!
  • Debuggability!
    • There's a shell available as soon as the installer boots
    • Every part of the anaconda startup process becomes much easier to modify, since it's all shell or python
  • Flexibility!
    • Moving to dracut-based initramfs means that anaconda can mount anything that dracut can mount
      • preupgrade won't need need to cram files into /boot anymore!
  • Consistency!
    • The installer boots up the same way as a normal system, and the same as the Live images

Scope

There's 3 major sets of things that loader does: interactive screens, boot arguments, and kickstart commands.

Interactive Screens

All interactive prompts presented by loader will either be moved later (into anaconda proper) or earlier (configure on boot commandline).

Step Names Status Handled By Notes Complete?
STEP_LANG move anaconda already present in anaconda UI Yes
STEP_KBD move anaconda already present in anaconda UI Yes
STEP_METHOD boot opt dracut only needed for netboot.
use repo=, verify validity, give clear error message on failure
STEP_DRIVER boot opt dracut unlikely, usually represents a bug.
use rd.driver.pre and/or rd.driver.post to manually load drivers.
fail with a clear error message if we can't find usable devices at boot.
STEP_DRIVERDISK boot opt dracut make dd/driverdisk take an argument specifying location.
STEP_NETWORK
STEP_IFACE
STEP_IP
boot opt dracut configure network at boot prompt
if network required and unconfigured, try autoconfig (dhcp/auto6/etc).
STEP_EXTRAS keep dracut non-interactive check for updates.img/product.img inside installation source

Boot Options

Note.png
Not a complete option list
Some options (e.g. autostep, nogpt) are handled by the main anaconda program and don't need to be changed.

Some boot options may be removed, since they no longer apply.
Anything that says deprecate will still be accepted (with a warning/error message) for a release or two.

Boot Option Status Handled in Notes Done?
askmethod REMOVE bootloader use repo= YES
asknetwork REMOVE bootloader use ip= YES
blacklist=<module> DEPRECATE dracut rd.driver.blacklist=<module>
dd/driverdisk KEEP dracut
dhcpclass
dhcptimeout
display=<display> KEEP? anaconda just exports DISPLAY=<display>
dns=<ip> DEPRECATE dracut nameserver=<ip>
essid
ethtool
gateway
gdb
graphical
text
KEEP systemd we can use .targets for this
ip MODIFIED? dracut see dracut.kernel(7)
ipv6 DEPRECATE dracut ip=[2001:DB8::1]
may also need to add prefixing support to dracut?
keymap=<keymap> DEPRECATE dracut use vconsole.keymap=<keymap>
lorax will need to use loader's 'keymaps' list to put keymaps into initramfs
ks KEEP dracut
ksdevice KEEP
kssendmac
kssendsn
KEEP dracut
lang
linksleep
loglevel KEEP
mediacheck
method DEPRECATE dracut repo
mtu
netmask
nicdelay
nofirewire REMOVE blacklist=firewire-ohci
noipv4
noipv6
nokill
nopass
noprobe
noshell REMOVE Does nothing. YES
nousb REMOVE kernel the kernel handles nousb itself these days. YES
noverifyssl
proxy
repo KEEP dracut set root=live:XXX from repo value
rescue KEEP
selinux
noselinux
serial DEPRECATE console=ttyS0
sshd
syslog
updates
utf8
vncpassword
wepkey
wpakey

Kickstart Commands

Yes, loader had its own kickstart parser. Here are the kickstart items it cares about.

Kickstart Command Moving To Notes Done?
driverdisk
XXX MORE GO HERE

Test Plan

The normal Install Test Plans should suffice.

User Experience

TBD. Some notes:

  • We may remove all the interactive bits, so a few things there used to be (crappy text-based) UI for will now be configured on the boot commandline and/or in the bootloader menu.
  • Some of the anaconda boot options may change or become deprecated.
    • We will do our best to keep backwards compatibility - for a few releases.

Dependencies

TBD; currently none.

Contingency Plan

Leave the system as-is - one big combined image, with loader still setting up for anaconda.

Documentation

Release Notes