m (→Boot Options: remove unnecessary <srv> from ip= example) |
(→Boot Options: Update graphical/text/cmdline and lang/keymap) |
||
Line 104: | Line 104: | ||
|- | |- | ||
| [[Anaconda/Options#graphical|graphical]]<br/>[[Anaconda/Options#text|text]]<br/>[[Anaconda/Options#cmdline|cmdline]] | | [[Anaconda/Options#graphical|graphical]]<br/>[[Anaconda/Options#text|text]]<br/>[[Anaconda/Options#cmdline|cmdline]] | ||
| KEEP || | | KEEP || anaconda || anaconda can figure this out itself || | ||
|- | |- | ||
| [[Anaconda/Options#keymap|keymap=<keymap>]] || | | [[Anaconda/Options#keymap|keymap=<keymap>]] || KEEP || dracut | ||
| | | Implies <code>vconsole.keymap=<keymap></code> | ||
|- | |- | ||
| [[Anaconda/Options#ks|ks]] || KEEP || dracut || || | | [[Anaconda/Options#ks|ks]] || KEEP || dracut || || | ||
|- | |- | ||
| [[Anaconda/Options#lang|lang]] || || || || | | [[Anaconda/Options#lang|lang]] || KEEP || dracut || Implies <code>locale.LANG</code> (and/or <code>locale.LC_ALL</code>?) || | ||
|- | |- | ||
| [[Anaconda/Options#loglevel|loglevel]] || KEEP || || || | | [[Anaconda/Options#loglevel|loglevel]] || KEEP || || || |
Revision as of 22:47, 17 November 2011
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 textloader
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!
- Moving to dracut-based initramfs means that anaconda can mount anything that dracut can mount
- 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 |
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
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 | ||
display=<display> | KEEP? | anaconda | just exports DISPLAY=<display>
|
|
gdb | ||||
graphical text cmdline |
KEEP | anaconda | anaconda can figure this out itself | |
keymap=<keymap> | KEEP | dracut | Implies vconsole.keymap=<keymap>
| |
ks | KEEP | dracut | ||
lang | KEEP | dracut | Implies locale.LANG (and/or locale.LC_ALL ?) |
|
loglevel | KEEP | |||
mediacheck | ||||
method | DEPRECATE | dracut | repo |
|
nofirewire | REMOVE | blacklist=firewire-ohci |
||
nokill | ||||
nopass | ||||
noprobe | ||||
noshell | REMOVE | Does nothing. | YES | |
nousb | REMOVE | kernel | the kernel handles nousb itself these days. |
YES |
noverifyssl | ||||
repo | KEEP | dracut | set root=live:XXX from repo value
|
|
rescue | KEEP | |||
selinux noselinux |
||||
serial | DEPRECATE | console=ttyS0 |
||
sshd | ||||
syslog | ||||
updates | ||||
utf8 | ||||
vncpassword | ||||
NETWORK | ||||
Boot Option | Status | Handled in | Notes | Done? |
ip | MODIFIED | dracut | ip={dhcp|dhcp6|auto6|ibft} see dracut.kernel(7) and items below |
|
ipv6 | DEPRECATE | dracut | ip={[v6addr:goes::here]|auto6|dhcp6}
|
|
dns=<ip> | DEPRECATE | dracut | nameserver=<ip> |
|
gateway=<gw> netmask=<nm> |
DEPRECATE | dracut | ip=<ip>::<gw>:<nm>:<hostname>:<iface>
|
|
dhcpclass | ||||
dhcptimeout | ||||
ethtool | ||||
mtu | KEEP | dracut | ||
ksdevice | KEEP | dracut | add special handling for link , bootif , ibft ? |
|
kssendmac kssendsn |
KEEP | dracut | ||
linksleep | ||||
nicdelay | ||||
noipv4 | ||||
noipv6 | ||||
proxy | ||||
essid | ||||
wepkey wpakey |
Kickstart Commands
Yes, loader has its own kickstart parser. Here are the kickstart items it cares about.
Kickstart Command | Handled by | Notes | Done? |
---|---|---|---|
lang keyboard |
dracut | see lang/keymap above | |
network | dracut | see dns/mtu/dhcpclass/etc. above | |
mediacheck | dracut | ||
install |
dracut | includes cdrom , harddrive , nfs , and url |
|
selinux | anaconda | systemd loads SELinux policy if needed | Yes |
graphical text cmdline |
anaconda | ||
vnc | dracut | ||
updates | dracut | ||
driverdisk | dracut | ||
%include | dracut |
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.