Initrd for Raid-Boot
From NAS-Central Buffalo - The Linkstation Wiki
Lsuser1985 (Talk | contribs) (Created page with "If you are going to have Debian and a RAID on your Linkstation, you'll need a initrd for setting up the root filesystem. <span style="color: red">'''This page is work in progres…") |
Lsuser1985 (Talk | contribs) (intermediate save) |
||
| Line 1: | Line 1: | ||
If you are going to have Debian and a RAID on your Linkstation, you'll need a initrd for setting up the root filesystem. | If you are going to have Debian and a RAID on your Linkstation, you'll need a initrd for setting up the root filesystem. | ||
| + | |||
| + | '''Note:''' An ''initrd'' is only required of you have to set up some things to make the system boot, like starting the RAID, loading special modules or starting dm-crypt. If you do not have any of these needs, there is simply no need for an ''initrd'', since the kernel will happily boot from hard disk. | ||
<span style="color: red">'''This page is work in progress'''.</span> While all relevant information is already present, the description is not yet complete. Please have a look here again in a few days. | <span style="color: red">'''This page is work in progress'''.</span> While all relevant information is already present, the description is not yet complete. Please have a look here again in a few days. | ||
| + | |||
| + | == Credits == | ||
| + | |||
| + | Some ideas are taken from [[Debian Lenny on LS-WXL#Create an initrd]]. | ||
| + | |||
| + | == What you need beforehand == | ||
| + | |||
| + | This guide assumes you already [[Open Stock Firmware LS-VL|opened your box]] and bootstrapped Debian as described in [[Debian Squeeze on 'V' and 'X' Series#Debootstrap]]. You may easily adapt this guide to other directory names or Debian versions. Or you may build the ''initrd'' on another device. | ||
| + | |||
| + | == The Guide == | ||
Basic steps are: | Basic steps are: | ||
# Create an empty file and mount it as a filesystem to be able to copy data into | # Create an empty file and mount it as a filesystem to be able to copy data into | ||
# Into this mounted filesystem | # Into this mounted filesystem | ||
| - | ## copy | + | ## copy a prepared ''linuxrc'' script |
## copy all binaries required by ''linuxrc'' plus the libraries required by the binaries | ## copy all binaries required by ''linuxrc'' plus the libraries required by the binaries | ||
## create all required directories and device nodes required | ## create all required directories and device nodes required | ||
| Line 13: | Line 25: | ||
For that you will | For that you will | ||
| - | # Create a text-file/script ''linuxrc.txt'' | + | # Create and edit a text-file/script ''linuxrc.txt'' |
# Create a text-file/script ''make-initrd.txt'' | # Create a text-file/script ''make-initrd.txt'' | ||
# Copy both files to your LS | # Copy both files to your LS | ||
| Line 19: | Line 31: | ||
# Run the script on your LS | # Run the script on your LS | ||
| - | + | '''Note:''' This Guide will install additional software into your debootstraped environment. Thus you may really want to create ''hddrootfs.buffalo.updated'' (as descriped in [[Debian_Squeeze_on_'V'_and_'X'_Series#Personalize the deboostrap]]) prior to building the ''initrd''. | |
| - | + | ||
| - | + | ||
| - | + | ||
=== Required linuxrc.txt === | === Required linuxrc.txt === | ||
| - | Put this into a | + | Put this into a text-file called ''linuxrc.txt''. You'll need to uncomment the line matching you root device. |
#!/bin/busybox sh | #!/bin/busybox sh | ||
| Line 54: | Line 63: | ||
=== File make-initrd.txt === | === File make-initrd.txt === | ||
| - | Put this into a textfile called ''make-initrd.txt'' | + | Put this into a textfile called ''make-initrd.txt''. |
| - | + | chroot debian-squeeze | |
| + | # install | ||
apt-get install --no-install-recommends busybox uboot-mkimage makedev | apt-get install --no-install-recommends busybox uboot-mkimage makedev | ||
| Line 70: | Line 80: | ||
mkdir -p INITRD/{bin,lib,dev,etc/mdadm,proc,sbin} | mkdir -p INITRD/{bin,lib,dev,etc/mdadm,proc,sbin} | ||
cp -a /dev/{null,console,tty,sd{a,b,c,d}?,md*} INITRD/dev/ | cp -a /dev/{null,console,tty,sd{a,b,c,d}?,md*} INITRD/dev/ | ||
| - | # ensure sd? and md exits, even if chrooted installation | + | # ensure sd? and md exits, even if chrooted installation does not have them |
cd INITRD/dev/ | cd INITRD/dev/ | ||
MAKEDEV sda sdb sdc sdd md | MAKEDEV sda sdb sdc sdd md | ||
| Line 77: | Line 87: | ||
cp -aL /bin/busybox INITRD/bin/ | cp -aL /bin/busybox INITRD/bin/ | ||
cp -aL /sbin/mdadm /sbin/pivot_root INITRD/sbin | cp -aL /sbin/mdadm /sbin/pivot_root INITRD/sbin | ||
| - | # | + | |
| - | + | # find required libs and install into INITRD/lib | |
| - | + | libs2install=$( ldd INITRD/*bin/* | grep -v "^INITRD/" | sed -e 's/.*=> *//' -e 's/ *(.*//' | sort -u ) | |
| + | cp -aL $libs2install INITRD/lib | ||
| + | |||
ln -s INITRD/bin/busybox INITRD/bin/sh | ln -s INITRD/bin/busybox INITRD/bin/sh | ||
Revision as of 12:03, 10 May 2011
If you are going to have Debian and a RAID on your Linkstation, you'll need a initrd for setting up the root filesystem.
Note: An initrd is only required of you have to set up some things to make the system boot, like starting the RAID, loading special modules or starting dm-crypt. If you do not have any of these needs, there is simply no need for an initrd, since the kernel will happily boot from hard disk.
This page is work in progress. While all relevant information is already present, the description is not yet complete. Please have a look here again in a few days.
Contents |
Credits
Some ideas are taken from Debian Lenny on LS-WXL#Create an initrd.
What you need beforehand
This guide assumes you already opened your box and bootstrapped Debian as described in Debian Squeeze on 'V' and 'X' Series#Debootstrap. You may easily adapt this guide to other directory names or Debian versions. Or you may build the initrd on another device.
The Guide
Basic steps are:
- Create an empty file and mount it as a filesystem to be able to copy data into
- Into this mounted filesystem
- copy a prepared linuxrc script
- copy all binaries required by linuxrc plus the libraries required by the binaries
- create all required directories and device nodes required
- unmount the filesystem-file
- compress the file and make an initrd out of
For that you will
- Create and edit a text-file/script linuxrc.txt
- Create a text-file/script make-initrd.txt
- Copy both files to your LS
- Fix the line endings
- Run the script on your LS
Note: This Guide will install additional software into your debootstraped environment. Thus you may really want to create hddrootfs.buffalo.updated (as descriped in Debian_Squeeze_on_'V'_and_'X'_Series#Personalize the deboostrap) prior to building the initrd.
Required linuxrc.txt
Put this into a text-file called linuxrc.txt. You'll need to uncomment the line matching you root device.
#!/bin/busybox sh # linuxrc - to be put into the inted # Mount the /proc and /sys filesystems. mount -t proc none /proc mount -t sysfs none /sys echo 'DEVICE /dev/sd??*' > /etc/mdadm/mdadm.conf mdadm -Eb /dev/sd??* >> /etc/mdadm/mdadm.conf mdadm -As --force # use /dev/md1 as root echo "0x901" > /proc/sys/kernel/real-root-dev # use /dev/md2 as root #echo "0x902" > /proc/sys/kernel/real-root-dev # use /dev/sda6 as root # echo "0x806" > /proc/sys/kernel/real-root-dev # use /dev/sdb6 as root # echo "0x822" > /proc/sys/kernel/real-root-dev # Clean up. umount /proc umount /sys
File make-initrd.txt
Put this into a textfile called make-initrd.txt.
chroot debian-squeeze
# install
apt-get install --no-install-recommends busybox uboot-mkimage makedev
cd /tmp
rm initrd.gz
dd if=/dev/zero of=initrd bs=1k count=0 seek=3K
mke2fs -F -m 0 -b 1024 initrd
tune2fs -c0 -i0 initrd
mkdir INITRD
mount -o loop initrd INITRD
mkdir -p INITRD/{bin,lib,dev,etc/mdadm,proc,sbin}
cp -a /dev/{null,console,tty,sd{a,b,c,d}?,md*} INITRD/dev/
# ensure sd? and md exits, even if chrooted installation does not have them
cd INITRD/dev/
MAKEDEV sda sdb sdc sdd md
cd -
cp -aL /bin/busybox INITRD/bin/
cp -aL /sbin/mdadm /sbin/pivot_root INITRD/sbin
# find required libs and install into INITRD/lib libs2install=$( ldd INITRD/*bin/* | grep -v "^INITRD/" | sed -e 's/.*=> *//' -e 's/ *(.*//' | sort -u ) cp -aL $libs2install INITRD/lib
ln -s INITRD/bin/busybox INITRD/bin/sh cp ../linuxrx.txt INITRD/linuxrc chmod +x INITRD/linuxrc umount INITRD gzip initrd mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 -n initrd -d initrd.gz initrd.buffalo

