1 |
#!/bin/bash |
#!/bin/bash |
2 |
# $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/mkinitrd.in,v 1.2 2008-03-31 13:50:09 niro Exp $ |
# $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/mkinitrd.in,v 1.4 2008-06-11 22:11:40 niro Exp $ |
3 |
|
|
4 |
# mkinitrd |
# mkinitrd |
5 |
# |
# |
93 |
deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \ |
deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \ |
94 |
function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \ |
function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \ |
95 |
function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \ |
function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \ |
96 |
/^\/lib/ { show(); \ |
/^.*kernel/ { show(); \ |
97 |
orig=modname($1); dep=""; \ |
orig=modname($1); dep=""; \ |
98 |
if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \ |
if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \ |
99 |
/^ / { dep=sprintf("%s %s", dep, modname($1)); } \ |
/^ / { dep=sprintf("%s %s", dep, modname($1)); } \ |
319 |
fi |
fi |
320 |
} |
} |
321 |
|
|
322 |
|
get_blkid() |
323 |
|
{ |
324 |
|
local UUID |
325 |
|
local SEC_TYPE |
326 |
|
local TYPE |
327 |
|
|
328 |
|
local dev="$1" |
329 |
|
[[ -z ${dev} ]] && die "no dev given" |
330 |
|
|
331 |
|
eval $(busybox.mkinitrd blkid ${dev} | grep "${dev}:" | sed 's/.*:\ //') |
332 |
|
echo ${UUID} |
333 |
|
} |
334 |
|
|
335 |
# need r00t privs |
# need r00t privs |
336 |
[[ $(id -u) != 0 ]] && die "you must be r00t." |
[[ $(id -u) != 0 ]] && die "you must be r00t." |
337 |
|
|
662 |
|
|
663 |
|
|
664 |
# create basic filesystem layout |
# create basic filesystem layout |
665 |
install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sbin,sys,sysroot} || die |
install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sbin,sys,sysroot,usr/bin,usr/sbin} || die |
666 |
|
|
667 |
# install busybox |
# install busybox |
668 |
echo "$(which busybox.mkinitrd)" |
echo "$(which busybox.mkinitrd)" |
682 |
# sbin related |
# sbin related |
683 |
for i in chroot init losetup modprobe pivot_root |
for i in chroot init losetup modprobe pivot_root |
684 |
do |
do |
685 |
# static links |
ln -s ${DEST}/bin/busybox ${DEST}/sbin/${i} || die "${i}" |
|
ln ${DEST}/bin/busybox ${DEST}/sbin/${i} || die "${i}" |
|
686 |
done |
done |
687 |
|
|
688 |
# install run-init |
# install run-init |
690 |
install -m0755 $(which run-init.mkinitrd) ${DEST}/sbin/run-init || die |
install -m0755 $(which run-init.mkinitrd) ${DEST}/sbin/run-init || die |
691 |
|
|
692 |
# install insmod.static |
# install insmod.static |
693 |
echo "$(which insmod.static)" |
#echo "$(which insmod.static)" |
694 |
install -m0755 $(which insmod.static) ${DEST}/sbin/insmod || die |
#install -m0755 $(which insmod.static) ${DEST}/sbin/insmod || die |
695 |
|
|
696 |
# install v86d for uvesafb support if installed |
# install v86d for uvesafb support if installed |
697 |
if which v86d &> /dev/null |
if which v86d &> /dev/null |
698 |
then |
then |
699 |
echo "$(which insmod.static)" |
echo "$(which v86d)" |
700 |
install -m0755 $(which v86d) ${DEST}/sbin/v86d || die |
install -m0755 $(which v86d) ${DEST}/sbin/v86d || die |
701 |
fi |
fi |
702 |
|
|
739 |
|
|
740 |
add_initrd 'mount -t proc proc /proc' |
add_initrd 'mount -t proc proc /proc' |
741 |
add_initrd 'mount -t sysfs sysfs /sys' |
add_initrd 'mount -t sysfs sysfs /sys' |
742 |
|
add_initrd 'mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024' |
743 |
|
|
744 |
[[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /' |
[[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /' |
745 |
|
|
746 |
|
# install all busybox applets |
747 |
|
add_initrd 'busybox --install -s' |
748 |
|
|
749 |
# silencio |
# silencio |
750 |
add_initrd 'echo 0 > /proc/sys/kernel/printk' |
add_initrd 'echo 0 > /proc/sys/kernel/printk' |
751 |
|
|
752 |
add_initrd 'echo "-- Creating inital device nodes ..."' |
add_initrd 'echo "-- Creating initial device nodes ..."' |
753 |
add_initrd 'mount -o exec,nosuid,mode=0755,size=10M -t tmpfs udev /dev' |
# populate dev |
754 |
add_initrd 'mkdir /dev/pts' |
add_initrd 'mdev -s' |
755 |
add_initrd 'mkdir /dev/shm' |
# handle hotplug events properly |
756 |
add_initrd 'mkdir /dev/mapper' |
add_initrd 'echo /sbin/mdev > /proc/sys/kernel/hotplug' |
|
add_initrd 'mkdir /dev/misc' |
|
|
add_initrd 'mkdir /dev/fb' |
|
|
add_initrd 'mkdir /dev/vc' |
|
|
add_initrd 'mknod /dev/console c 5 1' |
|
|
add_initrd 'mknod /dev/null c 1 3' |
|
|
add_initrd 'mknod /dev/ram b 1 1' |
|
|
add_initrd 'mknod /dev/rtc c 10 135' |
|
|
add_initrd 'mknod /dev/systty c 4 0' |
|
|
add_initrd 'mknod /dev/tty c 5 0' |
|
|
add_initrd 'mknod /dev/zero c 1 5' |
|
|
for (( i=0; i < 13; i++ )); do |
|
|
add_initrd "mknod /dev/tty${i} c 4 ${i}" |
|
|
done |
|
|
for (( i=64; i < 68; i++)); do |
|
|
add_initrd "mknod /dev/ttyS$((${i} - 64)) c 4 ${i}" |
|
|
done |
|
|
|
|
|
# some needed symlinks |
|
|
add_initrd 'ln -snf /proc/self/fd /dev/fd' |
|
|
add_initrd 'ln -snf fd/0 /dev/stdin' |
|
|
add_initrd 'ln -snf fd/1 /dev/stdout' |
|
|
add_initrd 'ln -snf fd/2 /dev/stderr' |
|
|
add_initrd 'ln -snf /proc/kcore /dev/core' |
|
757 |
|
|
758 |
# loading detected modules with options |
# loading detected modules with options |
759 |
for MODULE in ${MODULES} |
for MODULE in ${MODULES} |
836 |
add_initrd '. /etc/rootdev' |
add_initrd '. /etc/rootdev' |
837 |
add_initrd '[ ! -e ${device} ] && mknod ${device} b ${major} ${minor}' |
add_initrd '[ ! -e ${device} ] && mknod ${device} b ${major} ${minor}' |
838 |
add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' |
add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' |
839 |
add_initrd 'mount /sysroot' |
add_initrd 'mount /sysroot || ash' |
840 |
|
|
841 |
|
# unset hotplug event-manager |
842 |
|
add_initrd 'echo > /proc/sys/kernel/hotplug' |
843 |
|
|
844 |
# de-silencio |
# de-silencio |
845 |
add_initrd 'echo 3 > /proc/sys/kernel/printk' |
add_initrd 'echo 3 > /proc/sys/kernel/printk' |
846 |
|
|
847 |
add_initrd 'echo "-- Switching to real sysroot ..."' |
add_initrd 'echo "-- Switching to real sysroot ..."' |
848 |
|
add_initrd 'umount /dev' |
849 |
add_initrd 'umount /sys' |
add_initrd 'umount /sys' |
850 |
add_initrd 'umount /proc' |
add_initrd 'umount /proc' |
|
add_initrd 'umount /dev' |
|
851 |
|
|
852 |
[[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console' |
[[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console' |
853 |
if [[ ${IMAGE_TYPE} = loopback ]] |
if [[ ${IMAGE_TYPE} = loopback ]] |
861 |
|
|
862 |
# setup root block device |
# setup root block device |
863 |
[[ -z ${rootdev} ]] && die "no known rootdev found." |
[[ -z ${rootdev} ]] && die "no known rootdev found." |
864 |
echo "device=${rootdev}" > ${DEST}/etc/rootdev || die |
echo "device='UUID=$(get_blkid ${rootdev})'" > ${DEST}/etc/rootdev || die |
865 |
echo "major=$(stat -c %t ${rootdev})" >> ${DEST}/etc/rootdev || die |
echo "major=$(stat -c %t ${rootdev})" >> ${DEST}/etc/rootdev || die |
866 |
echo "minor=$(stat -c %T ${rootdev})" >> ${DEST}/etc/rootdev || die |
echo "minor=$(stat -c %T ${rootdev})" >> ${DEST}/etc/rootdev || die |
867 |
echo "rootfs=${rootfs}" >> ${DEST}/etc/rootdev || die |
echo "rootfs='${rootfs}'" >> ${DEST}/etc/rootdev || die |
868 |
|
|
869 |
# install detected modules |
# install detected modules |
870 |
echo "Coping your modules to '${DEST}/lib' ..." |
echo "Coping your modules to '${DEST}/lib' ..." |