mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.8 KiB

  1. #!/bin/sh
  2. kernel=`uname -r`
  3. tmpdir=`mktemp -d`
  4. if [ -n "$1" ]; then
  5. if [ -d "/lib/modules/$1" ]; then
  6. kernel="$1"
  7. else
  8. echo "Can't open /lib/modules/$1: No such directory."
  9. echo "Usage: $0 [ kernel-version ]"
  10. exit 1
  11. fi
  12. fi
  13. echo "Creating /boot/initrdnew-${kernel}.img ..."
  14. mkdir -p $tmpdir/etc/conf
  15. grep '^modprobe ' /etc/conf/kernel | grep -v 'no-initrd' | \
  16. sed 's,[ ]#.*,,' | \
  17. while read a b ; do
  18. b="`find /lib/modules/$kernel -name "$b.o" -o -name "$b.ko"`"
  19. #b=${b//`uname -r`/$kernel} # substitute autodetected value by correct value
  20. echo "Adding $b."
  21. mkdir -p $tmpdir/${b%/*}
  22. cp $b $tmpdir/$b
  23. echo "/sbin/insmod $b $c" >> $tmpdir/etc/conf/kernel
  24. done
  25. mkdir -p $tmpdir/dev $tmpdir/root $tmpdir/tmp $tmpdir/proc $tmpdir/sys
  26. mknod $tmpdir/dev/ram0 b 1 0
  27. mknod $tmpdir/dev/null c 1 3
  28. mknod $tmpdir/dev/zero c 1 5
  29. mknod $tmpdir/dev/tty c 5 0
  30. mknod $tmpdir/dev/console c 5 1
  31. # this copies a set of programs and the necessary libraries into a
  32. # chroot environment
  33. targetdir=$tmpdir
  34. programs="/bin/bash /bin/bash2 /bin/sh /bin/ls /sbin/pivot_root /sbin/insmod /sbin/insmod.old /bin/mount /bin/umount /usr/bin/chroot /etc/fstab /bin/mkdir"
  35. libs=""
  36. for x in $programs ; do
  37. [ -e $x ] || continue
  38. mkdir -p $targetdir/${x%/*}
  39. cp -a $x $targetdir/$x
  40. file $x | grep -q ELF || continue
  41. libs="$libs `ldd $x 2>/dev/null | grep -v 'not a dynamic executable' | sed -e 's,^[\t ]*,,g' | cut -f 3 -d' '`"
  42. done
  43. for x in /etc/conf/initrd/initrd_* ; do
  44. [ -f $x ] || continue
  45. while read file target ; do
  46. if [ -d $file ] ; then
  47. find $file -type f | while read f ; do
  48. tfile=${targetdir}/${target}/${f#$file}
  49. [ -e $tfile ] && continue
  50. mkdir -p ${tfile%/*}
  51. cp $f $tfile
  52. libs="$libs `ldd $f 2>/dev/null | grep -v 'not a dynamic executable' | sed -e 's,^[\t ]*,,g' | cut -f 3 -d' '`"
  53. done
  54. fi
  55. [ -f $file ] || continue
  56. mkdir -p $targetdir/${target%/*}
  57. cp $file $targetdir/$target
  58. file $file | grep -q ELF || continue
  59. libs="$libs `ldd $file 2>/dev/null | grep -v 'not a dynamic executable' | sed -e 's,^[\t ]*,,g' | cut -f 3 -d' '`"
  60. done < $x
  61. done
  62. while [ -n "$libs" ] ; do
  63. oldlibs=$libs
  64. libs=""
  65. for x in $oldlibs ; do
  66. mkdir -p $targetdir/${x%/*}
  67. cp $x $targetdir/$x
  68. file $x | grep -q ELF || continue
  69. for y in `ldd $x 2>/dev/null | grep -v 'not a dynamic executable' | sed -e 's,^[\t ]*,,g' | cut -f 3 -d' '` ; do
  70. [ ! -e "$targetdir/$y" ] && libs="$libs $y"
  71. done
  72. done
  73. done
  74. # This works, but only for initrd images < 4 MB
  75. itmp=`mktemp`
  76. #/boot/initrdnew-${kernel}.img.tmp \
  77. dd if=/dev/zero of=${itmp} count=8192 bs=1024 > /dev/null 2>&1
  78. mke2fs -m 0 -N 5120 -F ${itmp} > /dev/null 2>&1
  79. mntpoint="`mktemp -d`"
  80. mount -o loop ${itmp} $mntpoint
  81. rmdir $mntpoint/lost+found/
  82. cp -a $tmpdir/* $mntpoint/
  83. umount -d $mntpoint
  84. rmdir $mntpoint
  85. gzip -9 < ${itmp} > /boot/initrdnew-${kernel}.img
  86. rm -f ${itmp}
  87. rm -rf $tmpdir
  88. echo "Done."