Syslinux
| Özet |
|---|
| Syslinux, önyükleyicilerin bir koleksiyonu, kurulumu ve yapılandırılması anlatılmaktadır.
|
| Genel Bakış |
| Arch Linux' u başlatabilmek için GRUB, GRUB2, LILO veya Syslinux gibi bir Linux uyumlu önyükleyicinin sabit diskin MBR kaydına veya GUID Bölümlendirme Tablosuna kurulu olması gerekir. Bir önyükleyici, önyükleme süreci başlamadan önce çekirdeği ve birincil ram diski yüklemekten sorumludur.
|
Syslinux, sabit diskler, CD/DVDler ve PXE ile ağ üzerinden önyükleme yapabilen bir önyükleyiciler koleksiyonudur. Ext2, ext3, ext4, fat ve btrfs dosya sistemlerini destekler.
Syslinux Önyükleme Süreci
Açılışta bilgisayar MBR (/usr/lib/syslinux/mbr.bin) yükler. Daha sonra MBR etkin (önyükleme işaretli) sabit disk bölümünü arar. Bulunduğunda disk bölümü önyükleme kaydı (VBR-Volume Boot Record) çalıştırılır. Ext2/3/4 ve fat12/*16/32 dosya sistemlerinde ldlinux.sys başlangıç sektörü VBR içine kodlanmıştır. VBR (ldlinux.sys) çalıştırır. Bunun sonucu olarak ldlinux.sys yeri değişirse syslinux önyükleme yapamaz. Btrfs dosya sisteminde yukarıdaki yöntem işlemez çünkü dosyalar sürekli yer değiştirirler ve ldlinux.sys konumu da değişir. Bunun bir sonucu olarak tüm Syslinux kodunun dosya sistemi dışında kayıtlı olması gerekir. Kod, VBR' yi takip eden sektörlerde tutulur.Syslinux tam olarak yüklendiğinde, yapılandırma dosyasını (ya extlinux.conf veya syslinux.cfg) arar. Biri bulunduğunda yapılandırma yüklenir. Bulunamazsa syslinux kabuğu ile karşılaşırsınız.
Kurulum
Otomatik Kurulum - syslinux
Syslinux-install_update betiği Syslinux' u kurar, COM32 modüllerini /boot/syslinux dizinine kopyalar, önyükleme işaretini ayarlar ve MBR üzerine kurulum yapar. Softraid ile birlikte MBR ve GPT sabit disklerle de çalışabilir.
pacman -S syslinux
2. /boot dizininin sisteme bağlı olduğundan emin olun
3. syslinux-install_update betiğini şu anahtarlarla çalıştırın: -i (kur) -a (önyükleme işaretini ayarla) -m (mbr üzerine kur)
/usr/sbin/syslinux-install_update -iam
4. /boot/syslinux/syslinux.cfg yapılandırma dosyasını düzenleyin
Elle kurulum - syslinux
Make sure you have the syslinux package installed. Then install Syslinux onto your boot partition, which must contain a fat, ext2, ext3, ext4, or btrfs file system. You should install it on a mounted directory, not a /dev/sdXY device. You do not have to install it on the root directory of a file system, e.g., with device /dev/sda1 mounted on /boot you can install syslinux in the syslinux directory:
mkdir /boot/syslinux extlinux --install /boot/syslinux
MBR Partition Table
Next you need mark your boot partition active in your partition table. Applications capable of doing this include fdisk, cfdisk, sfdisk, (g)parted. It should look like this:
fdisk -l /dev/sda [...] Device Boot Start End Blocks Id System /dev/sda1 * 2048 104447 51200 83 Linux /dev/sda2 104448 625142447 312519000 83 Linux
Install the master boot record:
dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sda
GUID Partition Table aka GPT
Main article GUID Partition Table.
Bit 2 of the attributes for the /boot partition need to be set.
sgdisk /dev/sda --attributes=1:set:2
This would toggle the attribute legacy BIOS bootable on partition 1
Verify:
sgdisk /dev/sda --attributes=1:show 1:2:1 (legacy BIOS bootable)
Install the master boot record:
dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/gptmbr.bin of=/dev/sda
Rebooting
When you reboot your system now, you will have a syslinux prompt. To automatically boot your system or get a boot menu, you still need to create a configuration file.
Configuring syslinux
The syslinux configuration file, syslinux.cfg, should be created in the same directory where you installed syslinux. In our case, '/boot/syslinux/'.
The bootloader will look for either syslinux.cfg (preferred) or extlinux.conf
Tips:
- Instead of LINUX, the keyword KERNEL can also be used. KERNEL tries to detect the type of the file, while LINUX always expects a Linux kernel.
- TIMEOUT value is in units of 1/10 of a second.
Examples
Basic Syslinux Config
This is a simple configuration file that will show a boot: prompt and automatically boot after 5 seconds.
Config:
PROMPT 1
TIMEOUT 50
DEFAULT arch
LABEL arch
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux.img
LABEL archfallback
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux-fallback.img
If you want to boot directly without seeing a prompt, set PROMPT to 0.
If you want to use UUID for persistent device naming instead of device names, change:
APPEND root=/dev/sda2 ro
to:
APPEND root=UUID=<uuid here> ro
Syslinux also allows you to use a boot menu. To use it, copy the menu COM32 module to your syslinux directory:
cp /usr/lib/syslinux/menu.c32 /boot/syslinux/
If /boot is in the same partition as /usr, a symlink will also work:
ln -s /usr/lib/syslinux/menu.c32 /boot/syslinux/
Config:
UI menu.c32
PROMPT 0
MENU TITLE Boot Menu
TIMEOUT 50
DEFAULT arch
LABEL arch
MENU LABEL Arch Linux
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux.img
LABEL archfallback
MENU LABEL Arch Linux Fallback
LINUX /vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD /initramfs-linux-fallback.img
For more details about the menu system, see http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=blob;f=doc/menu.txt.
Syslinux also allows you to use a graphical boot menu. To use it, copy the vesamenu COM32 module to your syslinux folder:
cp /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
If /boot is the same partition as /, a symlink will also work:
ln -s /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
This config uses the same menu design as the Arch Install CD. The background file can be found there too.
Config:
UI vesamenu.c32 DEFAULT arch PROMPT 0 MENU TITLE Boot Menu MENU BACKGROUND splash.png TIMEOUT 50 MENU WIDTH 78 MENU MARGIN 4 MENU ROWS 5 MENU VSHIFT 10 MENU TIMEOUTROW 13 MENU TABMSGROW 11 MENU CMDLINEROW 11 MENU HELPMSGROW 16 MENU HELPMSGENDROW 29 # Refer to http://www.syslinux.org/wiki/index.php/Comboot/menu.c32 MENU COLOR border 30;44 #40ffffff #a0000000 std MENU COLOR title 1;36;44 #9033ccff #a0000000 std MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all MENU COLOR unsel 37;44 #50ffffff #a0000000 std MENU COLOR help 37;40 #c0ffffff #a0000000 std MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std MENU COLOR msg07 37;40 #90ffffff #a0000000 std MENU COLOR tabmsg 31;40 #30ffffff #00000000 std LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux APPEND root=/dev/sda2 ro INITRD ../initramfs-linux.img LABEL archfallback MENU LABEL Arch Linux Fallback LINUX ../vmlinuz-linux APPEND root=/dev/sda2 ro INITRD ../initramfs-linux-fallback.img
Since Syslinux 3.84, vesamenu.c32 supports the "MENU RESOLUTION $WIDTH $HEIGHT" directive.
To use it, insert "MENU RESOLUTION 1440 900" into your config for a 1440x900 resolution.
The background picture has to have exactly the right resolution, however, as syslinux will otherwise refuse to load the menu.
Chainloading
If you want to chainload other operating systems (such as Windows) or boot loaders, copy (or symlink) the chain.c32 module to the syslinux directory (for details, see the instructions in the previous section). Then create a section in the configuration file:
LABEL windows
MENU LABEL Windows
COM32 chain.c32
APPEND hd0 3
hd0 3 is the third partition on the first BIOS drive - drives are counted from zero, but partitions are counted from one. For more details about chainloading, see [1].
If you have grub2 installed in your boot partition, you can chainload it by using:
LABEL grub2
MENU LABEL Grub2
COM32 chain.c32
append file=../grub/boot.img
This may be required for booting from ISO images.
Using memtest
Use this LABEL section to launch memtest (install the memtest86+ package):
LABEL memtest
MENU LABEL Memtest86+
LINUX ../memtest86+/memtest.bin
HDT
HDT (Hardware Detection Tool) displays hardware information. Like before, the .c32 file has to be copied or symlinked from /boot/syslinux/.
For PCI info, either copy or symlink /usr/share/hwdata/pci.ids to /boot/syslinux/pci.ids
LABEL hdt
MENU LABEL Hardware Info
COM32 hdt.c32
Reboot and power off
Use the following sections to reboot or power off your machine:
LABEL reboot
MENU LABEL Reboot
COM32 reboot.c32
LABEL poweroff
MENU LABEL Power Off
COMBOOT poweroff.com
Clear Menu
To clear the screen when exiting the menu, add the following line:
MENU CLEAR
Troubleshooting
I have a Syslinux Prompt - Yikes!
You can type in the LABEL name of the entry that you want to boot (as per your syslinux.cfg). If you used the example configs, just type
boot: arch
If you get an error that the config file could not be loaded, you can pass your needed boot parameters, e.g.:
boot: ../vmlinuz-linux root=/dev/sda2 ro initrd=../initramfs-linux.img
If you do not have access to 'boot:' in ramfs, and therefore temporarily unable to boot kernel again,
1) create temp directory, in order to mount your root partition (if it does not exist already)
mkdir -p /new_root
2) mount / under /new_root (in case /boot/ is on the same partition, otherwise you will need to mount them both) Note: if /boot is on its own ext2 partition then busybox cannot mount it.
mount /dev/sd[a-z][1-9] /new_root
3) use 'vi' and edit syslinux.cfg again to suit your needs and save file;
4) reboot
No Default or UI found on some computers
Certain motherboard manufacturers have less compatibility for booting from USB devices than others. While an ext4 formatted USB drive may boot on a more recent computer, some computers may hang if the boot partition containing the kernel and initrd are not on a fat16 partition. To prevent an older machine from loading ldlinux and failing to read syslinux.cfg, use cfdisk to create a fat16 partition (<=2GB) and format with
pacman -S dosfstools mkfs.msdos -F 16 /dev/sda1
then install and configure syslinux.
Windows boots up! No Syslinux!
Solution: Make sure the partition that contains /boot has the boot flag enabled. Also, make sure the boot flag is not enabled on the Windows partition. See the installation section above.
The MBR that comes with syslinux looks for the first active partition that has the boot flag set. The Windows partition was likely found first and had the boot flag set. If you wanted, you could use the MBR that Windows or MS-DOS fdisk provides.
Menu entries do nothing
You select a menu entry and it does nothing. It "refreshes" the menu.
This usually means that you have an error in your configuration. Hit TAB to edit your boot parameters. Alternatively, press Esc and type in the LABEL of your boot entry (Example: arch)
Cannot remove ldlinux.sys
ldlinux.sys has the immutable attribute set which prevents the file from being deleted or overwritten. This is because the sector location of the file must not change or else syslinux has to be reinstalled. To remove:
chattr -i /boot/syslinux/ldlinux.sys rm /boot/syslinux/ldlinux.sys
Brain0 said: As of linux-3.0, the modesetting driver tries to keep the current contents of the screen after changing the resolution (at least it does so with my Intel, when having syslinux in text mode). It seems that this goes wrong when combined with the vesamenu module in syslinux (the white block is actually an attempt to keep the syslinux menu, but the driver fails to capture the picture from vesa graphics mode).
If you have a custom resolution and a vesamenu with early modesetting, try to append the following in the kernel line in syslinux.cfg to remove the white block and continue in graphics mode:
APPEND root=/dev/sda6 ro 5 radeon.modeset=1 vga=current logo.nologo quiet splash
See also
- The Syslinux Project's web site.