I have a fairly standard initial ramdisk created using mkinitcpio
. I'm on Arch GNU/Linux.
A while ago I got dropped to a rescue shell and poked around in the /bin
of the ramdisk to see what was available. For some reason, there was a bunch of utilities that seemed irrelevant (think things like ping
- why would you want that in a rescue environment?).
alex@alexs-arch-imac:/tmp$ mkdir initramfs
alex@alexs-arch-imac:/tmp$ cd initramfs
alex@alexs-arch-imac:/tmp/initramfs$ cp /boot/initramfs-linux.img .
alex@alexs-arch-imac:/tmp/initramfs$ cat initramfs-linux.img | unlzma - >
initramfs-linux # needed because unlzma complains that it doesn't recognize the .img extension
alex@alexs-arch-imac:/tmp/initramfs$ cpio -iV < initramfs-linux
.............................................................................................................................................................................................................................................................................................................................................................
24225 blocks
alex@alexs-arch-imac:/tmp/initramfs$ ls
bin buildconfig config dev etc hooks init init_functions initramfs-linux initramfs-linux.img lib lib64 new_root proc run sbin shutdown sys tmp usr VERSION
alex@alexs-arch-imac:/tmp/initramfs$ ls -l bin
lrwxrwxrwx 1 alex alex 7 Mar 24 17:06 bin -> usr/bin
alex@alexs-arch-imac:/tmp/initramfs$ ls bin
[ blkid chown cttyhack dirname egrep free hexdump ip iptunnel less ls mkfifo mount nslookup ping6 readlink route sha1sum stat tac touch uniq yes
[[ busybox chroot cut dmesg env getopt ifconfig ipaddr kbd_mode ln lsblk mknod mountpoint openvt poweroff reboot sed sha256sum strings tail true uptime
ash cat clear dd dmsetup expr grep init iplink kill loadfont lsmod mktemp mv pgrep printf rm seq sha512sum switch_root telnet udevadm vi
awk chgrp cp depmod du false halt insmod iproute killall loadkmap md5sum modinfo nc pidof ps rmdir setfont sleep sync test umount wc
basename chmod cryptsetup df echo findmnt head install iprule kmod losetup mkdir modprobe netstat ping pwd rmmod sh sort systemd-tmpfiles tftp uname wget
alex@alexs-arch-imac:/tmp/initramfs$
Notice that the image has the weirdest utilities. Just looking at it, I see wget
, ping
, telnet
, sha1sum
... why are these here?
Here's the output of my /etc/mkinitcpio.conf
. Images were generated using mkinitcpio -p linux
.
# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run. Advanced users may wish to specify all system modules
# in this array. For instance:
# MODULES="piix ide_disk reiserfs"
MODULES=""
# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image. This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=""
# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way. This is useful for config files.
FILES=""
# HOOKS
# This is the most important setting in this file. The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
## This setup specifies all modules in the MODULES setting above.
## No raid, lvm2, or encrypted root is needed.
# HOOKS="base"
#
## This setup will autodetect all modules for your system and should
## work as a sane default
# HOOKS="base udev autodetect block filesystems"
#
## This setup will generate a 'full' image which supports most systems.
## No autodetection is done.
# HOOKS="base udev block filesystems"
#
## This setup assembles a pata mdadm array with an encrypted root FS.
## Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
# HOOKS="base udev block mdadm encrypt filesystems"
#
## This setup loads an lvm2 volume group on a usb device.
# HOOKS="base udev block lvm2 filesystems"
#
## NOTE: If you have /usr on a separate partition, you MUST include the
# usr, fsck and shutdown hooks.
HOOKS="base udev autodetect modconf keyboard block encrypt resume filesystems fsck shutdown"
# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=""