home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / sbin / mkinitramfs < prev    next >
Encoding:
Text File  |  2006-07-12  |  4.7 KB  |  220 lines

  1. #!/bin/sh
  2.  
  3. umask 0022
  4.  
  5. # Defaults
  6. keep="n"
  7. CONFDIR="/etc/initramfs-tools"
  8. verbose="n"
  9. errors_to="2>/dev/null"
  10. BUSYBOXDIR="/usr/lib/initramfs-tools/bin/"
  11. # BUSYBOXDIR="/bin"
  12.  
  13. OPTIONS=`getopt -o d:ko:r:v -n "$0" -- "$@"`
  14.  
  15. # Check for non-GNU getopt
  16. if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
  17.  
  18. eval set -- "$OPTIONS"
  19.  
  20. while true; do
  21.     case "$1" in
  22.     -d)
  23.         CONFDIR="$2"
  24.         shift 2
  25.         if [ ! -d "${CONFDIR}" ]; then
  26.             echo "${0}: ${CONFDIR}: Not a directory" >&2
  27.             exit 1
  28.         fi
  29.         ;;
  30.     -o)
  31.         touch $2
  32.         outfile="$(readlink -f "$2")"
  33.         shift 2
  34.         ;;
  35.     -k)
  36.         keep="y"
  37.         shift
  38.         ;;
  39.     -r)
  40.         ROOT="$2"
  41.         shift 2
  42.         ;;
  43.     -v)
  44.         verbose="y"
  45.         shift
  46.         ;;
  47.     --)
  48.         shift
  49.         break
  50.         ;;
  51.     *)
  52.         echo "Internal error!" >&2
  53.         exit 1
  54.         ;;
  55.     esac
  56. done
  57.  
  58. # For dependency ordered mkinitramfs hook scripts.
  59. . /usr/share/initramfs-tools/scripts/functions
  60. . /usr/share/initramfs-tools/hook-functions
  61.  
  62. . "${CONFDIR}/initramfs.conf"
  63. EXTRA_CONF=''
  64. for i in ${CONFDIR}/conf.d/* /usr/share/initramfs-tools/conf.d/*; do
  65.     EXTRA_CONF="${EXTRA_CONF} $(basename $i | grep '^[a-z0-9][a-z0-9\._-]*$' | grep -v '\.dpkg-.*$')";
  66. done
  67. for i in ${EXTRA_CONF}; do
  68. . ${CONFDIR}/conf.d/${i}
  69. done
  70.  
  71. if [ -z "${outfile}" ]; then
  72.     usage
  73. fi
  74.  
  75. # And by "version" we really mean path to kernel modules
  76. # This is braindead, and exists to preserve the interface with mkinitrd
  77. if [ ${#} -ne 1 ]; then
  78.     version="$(uname -r)"
  79. else
  80.     version="${1}"
  81. fi
  82.  
  83. # Check that we're using a new enough kernel version, first for ourselves,
  84. # then for each of the hooks, which can have a MINKVER variable defined
  85. check_minkver ${version}
  86. check_minkver ${version} /usr/share/initramfs-tools/hooks
  87. check_minkver ${version} ${CONFDIR}/hooks
  88.  
  89. case "${version}" in
  90. /lib/modules/*/[!/]*)
  91.         ;;
  92. /lib/modules/[!/]*)
  93.         version="${version#/lib/modules/}"
  94.         version="${version%%/*}"
  95.         ;;
  96. esac
  97.  
  98. case "${version}" in
  99. */*)
  100.         echo "$PROG: ${version} is not a valid kernel version" >&2
  101.         exit 1
  102.         ;;
  103. esac
  104.  
  105. if [ -d "${outfile}" ]; then
  106.     echo "${outfile} is a directory"
  107.     exit 1
  108. fi
  109.  
  110. MODULESDIR="/lib/modules/${version}"
  111.  
  112. if [ ! -e "${MODULESDIR}" ]; then
  113.     echo "Cannot find ${MODULESDIR}"
  114.     exit 1
  115. fi
  116. if [ ! -e "${MODULESDIR}/modules.depmod" ]; then
  117.     depmod ${version}
  118. fi
  119.  
  120. DESTDIR="$(mktemp -t -d mkinitramfs_XXXXXX)" || exit 1
  121. __TMPCPIOGZ="$(mktemp -t mkinitramfs-OL_XXXXXX)" || exit 1
  122.  
  123. DPKG_ARCH=`dpkg --print-installation-architecture`
  124.  
  125. # Export environment for hook scripts.
  126. #
  127. export MODULESDIR
  128. export version
  129. export CONFDIR
  130. export DESTDIR
  131. export DPKG_ARCH
  132. export verbose
  133.  
  134. # Private, used by 'catenate_cpiogz'.
  135. export __TMPCPIOGZ
  136.  
  137. for d in bin conf/conf.d etc lib modules sbin scripts; do
  138.     mkdir -p "${DESTDIR}/${d}"
  139. done
  140.  
  141. # MODULES=list case.  Always honour.
  142. for x in "${CONFDIR}/modules" /usr/share/initramfs-tools/modules.d/*; do
  143.     if [ -f "${x}" ]; then
  144.         add_modules_from_file "${x}"
  145.     fi
  146. done
  147.  
  148. if [ "${MODULES}" = "dep" ]; then
  149.     dep_add_modules
  150. fi
  151.  
  152. if [ "${MODULES}" = "most" ]; then
  153.     auto_add_modules
  154. fi
  155.  
  156. if [ "${MODULES}" = "netboot" ]; then
  157.     auto_add_modules base
  158.     auto_add_modules net
  159. fi
  160.  
  161. # Have to do each file, because cpio --dereference doesn't recurse down
  162. # symlinks.
  163.  
  164. ln -s /usr/lib/klibc/bin/* ${DESTDIR}/bin
  165. ln -s /lib/klibc-*.so ${DESTDIR}/lib
  166. copy_exec /usr/share/initramfs-tools/init /init
  167. cp -a /usr/share/initramfs-tools/scripts/* "${DESTDIR}/scripts"
  168. for f in $(cd ${CONFDIR}/scripts && \
  169.     find . \( -name '*.dpkg*' -prune -o -name '*~' -prune \) \
  170.         -o -type f -print); do
  171.     mkdir --parents "${DESTDIR}/scripts/$(dirname "${f}")"
  172. cp -p "${CONFDIR}/scripts/${f}" "${DESTDIR}/scripts/$(dirname "${f}")"
  173. done
  174. echo "DPKG_ARCH=${DPKG_ARCH}" > ${DESTDIR}/conf/arch.conf
  175. copy_exec "${CONFDIR}/initramfs.conf" /conf
  176. for i in ${EXTRA_CONF}; do
  177.     copy_exec "${CONFDIR}/conf.d/${i}" /conf/conf.d
  178. done
  179. echo "ROOT=${ROOT}" > ${DESTDIR}/conf/conf.d/root
  180.  
  181. # Busybox
  182. if [ "x${BUSYBOX}" = "xn" ]; then
  183.     ln -s ${DESTDIR}/bin/sh.shared ${DESTDIR}/bin/sh
  184.     echo "Warning: Busybox is required for successful boot!"
  185. else
  186.     rm -f ${DESTDIR}/bin/sh
  187.     copy_exec ${BUSYBOXDIR}/busybox /bin/busybox
  188.     ln -s ${BUSYBOXDIR}/busybox ${DESTDIR}/bin/sh
  189. fi
  190.  
  191. # Modutils
  192. copy_exec /sbin/modprobe /sbin
  193. copy_exec /sbin/depmod /sbin
  194. copy_exec /sbin/rmmod /sbin
  195. mkdir -p "${DESTDIR}/etc/modprobe.d"
  196. cp -a /etc/modprobe.d/* "${DESTDIR}/etc/modprobe.d"
  197.  
  198. run_scripts /usr/share/initramfs-tools/hooks
  199. run_scripts "${CONFDIR}"/hooks
  200.  
  201. # Apply DSDT to initramfs
  202. if [ -e "${CONFDIR}/DSDT.aml" ]; then
  203.     copy_exec "${CONFDIR}/DSDT.aml" /
  204. fi
  205.  
  206. (cd "${DESTDIR}" && find . | cpio --quiet --dereference -o -H newc | gzip -9 >"${outfile}") || exit 1
  207.  
  208. if [ -s "${__TMPCPIOGZ}" ]; then
  209.     cat "${__TMPCPIOGZ}" >>"${outfile}" || exit 1
  210. fi
  211.  
  212. if [ "${keep}" = "y" ]; then
  213.     echo "Working files in ${DESTDIR} and overlay in ${__TMPCPIOGZ}"
  214. else
  215.     rm -rf "${DESTDIR}"
  216.     rm -rf "${__TMPCPIOGZ}"
  217. fi
  218.  
  219. exit 0
  220.