1 |
#!/bin/bash |
#!/bin/bash |
2 |
# $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/mkinitrd.sh,v 1.4 2005-12-03 19:52:07 niro Exp $ |
# $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/mkinitrd.sh,v 1.6 2005-12-06 21:38:12 niro Exp $ |
3 |
|
|
4 |
# mkinitrd |
# mkinitrd |
5 |
# |
# |
55 |
modulefile=/etc/modules.conf |
modulefile=/etc/modules.conf |
56 |
rc=0 |
rc=0 |
57 |
|
|
58 |
IMAGESIZE=8000 |
IMAGESIZE=4000 |
59 |
PRESCSIMODS="sd_mod" |
PRESCSIMODS="sd_mod" |
60 |
fstab="/etc/fstab" |
fstab="/etc/fstab" |
61 |
|
|
391 |
--allow-missing) allowmissing=yes ;; |
--allow-missing) allowmissing=yes ;; |
392 |
--noresume) noresume=1 ;; |
--noresume) noresume=1 ;; |
393 |
--help) usage -n ;; |
--help) usage -n ;; |
394 |
|
--initramfs) IMAGE_TYPE=initramfs ;; |
395 |
|
--loopback) IMAGE_TYPE=loopback ;; |
396 |
*) |
*) |
397 |
if [ -z "${target}" ] |
if [ -z "${target}" ] |
398 |
then |
then |
409 |
shift |
shift |
410 |
done |
done |
411 |
|
|
412 |
|
# enforce loopback method as default |
413 |
|
[[ -z ${IMAGE_TYPE} ]] && IMAGE_TYPE=loopback |
414 |
|
|
415 |
if [ -z "${target}" -o -z "${kernel}" ] |
if [ -z "${target}" -o -z "${kernel}" ] |
416 |
then |
then |
417 |
usage |
usage |
450 |
############################## |
############################## |
451 |
####### get modules ########## |
####### get modules ########## |
452 |
|
|
453 |
echo "Creating initramfs" |
echo "Creating ${IMAGE_TYPE} initrd image" |
454 |
modulefile=/etc/modprobe.conf |
modulefile=/etc/modprobe.conf |
455 |
|
|
456 |
for n in ${PREMODS} |
for n in ${PREMODS} |
650 |
install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sys,sysroot} || die |
install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sys,sysroot} || die |
651 |
|
|
652 |
# install busybox |
# install busybox |
653 |
|
echo "$(which busybox.mkinitrd)" |
654 |
install -m0755 $(which busybox.mkinitrd) ${DEST}/bin/busybox || die |
install -m0755 $(which busybox.mkinitrd) ${DEST}/bin/busybox || die |
655 |
for i in '[' ash basename cat cut chroot clear cp dirname echo env false find \ |
for i in '[' ash basename cat cut chroot clear cp dirname echo env false find \ |
656 |
grep gunzip gzip ln ls loadkmap losetup mkdir mknod modprobe more mount mv \ |
grep gunzip gzip init ln ls loadkmap losetup mkdir mknod modprobe more mount mv \ |
657 |
ps pwd rm rmdir sh sleep test touch true umount uname \ |
pivot_root ps pwd rm rmdir sh sleep test touch true umount uname \ |
658 |
xargs yes chmod chown |
xargs yes chmod chown |
659 |
do |
do |
660 |
# static links |
# static links |
662 |
done |
done |
663 |
|
|
664 |
# install run-init |
# install run-init |
665 |
|
echo "$(which run-init.mkinitrd)" |
666 |
install -m0755 $(which run-init.mkinitrd) ${DEST}/bin/run-init || die |
install -m0755 $(which run-init.mkinitrd) ${DEST}/bin/run-init || die |
667 |
|
|
668 |
# install insmod.static |
# install insmod.static |
669 |
|
echo "$(which insmod.static)" |
670 |
install -m0755 $(which insmod.static) ${DEST}/bin/insmod || die |
install -m0755 $(which insmod.static) ${DEST}/bin/insmod || die |
671 |
|
|
672 |
# install udev |
# install udev |
710 |
add_initrd 'mount -t proc proc /proc' |
add_initrd 'mount -t proc proc /proc' |
711 |
add_initrd 'mount -t sysfs sysfs /sys' |
add_initrd 'mount -t sysfs sysfs /sys' |
712 |
|
|
713 |
|
[[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /' |
714 |
|
|
715 |
add_initrd 'echo "-- Creating inital device nodes ..."' |
add_initrd 'echo "-- Creating inital device nodes ..."' |
716 |
add_initrd 'mount -o mode=0755 -t tmpfs udev /dev' |
add_initrd 'mount -o mode=0755 -t tmpfs udev /dev' |
717 |
add_initrd 'mkdir /dev/pts' |
add_initrd 'mkdir /dev/pts' |
834 |
|
|
835 |
add_initrd 'echo "-- Mounting sysroot ..."' |
add_initrd 'echo "-- Mounting sysroot ..."' |
836 |
add_initrd '. /etc/rootdev' |
add_initrd '. /etc/rootdev' |
837 |
add_initrd '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' |
840 |
|
|
841 |
add_initrd 'echo "-- Switching to real sysroot ..."' |
add_initrd 'echo "-- Switching to real sysroot ..."' |
842 |
add_initrd 'umount /sys' |
add_initrd 'umount /sys' |
843 |
add_initrd 'umount /proc' |
add_initrd 'umount /proc' |
844 |
add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console' |
|
845 |
|
[[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console' |
846 |
|
if [[ ${IMAGE_TYPE} = loopback ]] |
847 |
|
then |
848 |
|
add_initrd 'cd /sysroot' |
849 |
|
add_initrd 'pivot_root . initrd' |
850 |
|
add_initrd "exec /sbin/chroot . sh -c 'umount -n /initrd >/dev/null 2>&1;exec -a init.new /sbin/init'</dev/console >/dev/console 2>&1" |
851 |
|
fi |
852 |
|
|
853 |
chmod +x ${DEST}/init || die |
chmod +x ${DEST}/init || die |
854 |
|
|
873 |
|
|
874 |
# create the image |
# create the image |
875 |
echo "Creating initrd image '${target}' ..." |
echo "Creating initrd image '${target}' ..." |
876 |
(cd "${DEST}" ; find . | cpio --quiet --dereference -o -H newc | gzip -9 >${IMAGE}) |
if [[ ${IMAGE_TYPE} = initramfs ]] |
877 |
cat ${IMAGE} > ${target} || die |
then |
878 |
|
(cd "${DEST}" ; find . | cpio --quiet -o -H newc | gzip -9 >${IMAGE}) |
879 |
|
cat ${IMAGE} > ${target} || die |
880 |
|
fi |
881 |
|
|
882 |
|
if [[ ${IMAGE_TYPE} = loopback ]] |
883 |
|
then |
884 |
|
MOUNTTMP="$(mktemp -d)" |
885 |
|
|
886 |
|
# create ext2 img |
887 |
|
dd if=/dev/zero of=${IMAGE} bs=1024 count=${IMAGESIZE} &> /dev/null || die |
888 |
|
mke2fs -m 0 -i 1024 -F ${IMAGE} &> /dev/null || die |
889 |
|
mount -o loop ${IMAGE} ${MOUNTTMP} || die |
890 |
|
mv ${DEST}/* ${MOUNTTMP} || die |
891 |
|
umount ${MOUNTTMP} || die |
892 |
|
gzip -9 ${IMAGE} || die |
893 |
|
cat ${IMAGE}.gz > ${target} || die |
894 |
|
[ -d ${MOUNTTMP} ] && rm -rf ${MOUNTTMP} |
895 |
|
|
896 |
|
# create inird dir for pivot_root |
897 |
|
[ ! -d /initrd ] && { install -d /initrd || die; } |
898 |
|
fi |
899 |
|
|
900 |
# clean up |
# clean up |
901 |
[ -d ${DEST} ] && rm -rf ${DEST} |
[ -d ${DEST} ] && rm -rf ${DEST} |
902 |
[ -f ${IMAGE} ] && rm -f ${IMAGE} |
[ -f ${IMAGE} ] && rm -f ${IMAGE} |
903 |
|
|
904 |
|
# all went ok at this point |
905 |
|
exit 0 |