3 # mkinitrd.sh: Shell script to make an initial initrd image
4 # by Jose V Beneyto, sepen at crux dot nu
9 echo "Usage: $APPNAME <options>"
10 echo "Where options are:"
11 echo " --name=NAME Name for the result image (default: initrd.gz)"
12 echo " --size=SIZE Size expecified in bytes (default: 4096)"
13 echo " --type=TYPE Filesystem type for the image (default: ext2)"
15 echo " $APPNAME --name=myinitrd.gz --size=8192"
25 [ "$(id -u)" != "0" ] && msgError
"you need to be root to do this."
29 [ $# -lt 1 ] && msgUsage
32 --name=*) IMG_NAME
=${arg##*=} ;;
33 --size=*) IMG_SIZE
=${arg##*=} ;;
34 --type=*) IMG_TYPE
=${arg##*=} ;;
41 rm -rf $TMP_PATH $MNT_PATH
42 install -d $TMP_PATH $MNT_PATH
45 dd if=/dev
/zero of
=initrd bs
=1024 count
=$IMG_SIZE && \
46 mkfs.
$IMG_TYPE -F -m 0 -b 1024 initrd
$IMG_SIZE && \
47 mount
-v -o loop
-t $IMG_TYPE initrd
$MNT_PATH && \
48 rm -rf $MNT_PATH/lost
+found
&& \
49 install -d -m 0755 $MNT_PATH/{mnt
,media
,etc
,dev
,sys
,proc
,lib
,usr
,var
/{log
,lock
,run
},tmp
} && \
50 mknod
$MNT_PATH/dev
/console c
5 1 && chmod 666 $MNT_PATH/dev
/console
&& \
51 mknod
$MNT_PATH/dev
/null c
1 3 && chmod 666 $MNT_PATH/dev
/null
&& \
52 mknod
$MNT_PATH/dev
/tty c
5 0 && chmod 666 $MNT_PATH/dev
/tty
&& \
53 mkdir
$MNT_PATH/dev
/rd
&& mknod
$MNT_PATH/dev
/rd
/0 b
1 0
54 mknod
$MNT_PATH/dev
/ram0 b
1 0 && chmod 600 $MNT_PATH/dev
/ram0
55 for i
in 0 1 2 3 4 5 6 7; do
56 mknod
$MNT_PATH/dev
/tty
$i c
4 $i && chmod 666 $MNT_PATH/dev
/tty
$i
58 umount
-v $MNT_PATH && \
61 mv $TMP_PATH/initrd.gz
$IMG_NAME
64 APPNAME
="$(basename $0)"
66 TMP_PATH
="$(cd $(dirname $APPNAME); pwd)/.tmp"
67 MNT_PATH
="$(cd $(dirname $APPNAME); pwd)/.mnt"
69 IMG_SIZE
=4096 # default image size = 4MB
70 IMG_TYPE
=ext2
# default filesystem type = ext2
72 export PATH
=$PATH:/sbin
:/usr
/sbin
76 main
|| msgError
"$APPNAME failed"
79 rm -rf $TMP_PATH $MNT_PATH