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