1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#!/bin/bash
#
if [ -z $CPU ]; then
echo "CPU needs to be set"
exit 1
fi
. ./vars.sh
LOOP=$(sudo losetup -f)
LOOPPART="${LOOP}p1"
IMG_SIZE=2048MB
BASE_SYS_ROOT=$(basename $SYS_ROOT)
INITRD_FILE=initrd.ext2
INITRD_SIZE=100MB
DISK_SIZE=2048MB
IMG=hd.img
create_initrd () {
print_info "Creating disk image $INITRD_FILE using $LOOP..."
fallocate -l $INITRD_SIZE $INITRD_FILE &&
sudo losetup $LOOP $INITRD_FILE &&
sudo mkfs.ext2 -o hurd -b 4096 -v $LOOP
sudo losetup -d $LOOP &&
sudo losetup -P $LOOP $INITRD_FILE &&
sleep 2 &&
fill_initrd
}
fill_initrd () {
local src=$SYSTEM/$BASE_SYS_ROOT
echo "Copying from $src"
mkdir -p output-initrd &&
sudo mount -o rw -t ext2 $LOOP output-initrd &&
sudo chmod ogu+w -R output-initrd &&
mkdir -p output-initrd/{dev,hurd,bin,lib,libexec,proc,sbin,servers} &&
touch output-initrd/servers/{exec,crash-kill,default-pager,password,socket,startup,proc,auth,symlink} &&
cp $src/hurd/{exec,auth,init,null,devnode,storeio,ext2fs,console,hello,streamio,proc,procfs,startup} output-initrd/hurd/ &&
cp $src/lib/*.so* output-initrd/lib/ &&
cp $src/bin/{settrans,echo,uname} output-initrd/bin/ &&
cp $src/bin/bash output-initrd/bin/sh &&
cp $src/bin/{ls,ps,settrans,cat,uptime,wall,who,yes,whoami,sleep,portinfo,msgport,fsysopts,env,sleep,date,tty,rpctrace,md5sum,cal,df,du} output-initrd/bin/ &&
cp $src/sbin/{halt,reboot} output-initrd/sbin/ &&
cp files/runsystem.initrd output-initrd/libexec/runsystem &&
cp $src/bin/dash output-initrd/libexec/console-run &&
ln -sf / output-initrd/tools-$CPU &&
sudo mknod -m 600 output-initrd/dev/mach-console c 5 1 &&
echo "Contents of initrd:" &&
pushd output-initrd &&
find .
popd &&
sudo losetup -d $LOOP
}
create_image () {
print_info "Creating disk image $IMG using $LOOP..."
fallocate -l $IMG_SIZE $IMG &&
sudo losetup $LOOP $IMG &&
sudo parted -a optimal -s $LOOP mklabel msdos &&
sudo parted -a optimal -s $LOOP -- mkpart primary ext2 2048s -1 &&
sudo parted -s $LOOP -- set 1 boot on &&
sudo losetup -d $LOOP &&
sudo losetup -P $LOOP $IMG &&
sleep 2 &&
sudo mkfs.ext2 -o hurd -m 1 -v $LOOPPART
}
mount_image () {
mkdir -p output-disk &&
sudo mount -o rw -t ext2 $LOOPPART output-disk &&
sudo chmod ogu+w -R output-disk/
}
fill_disk () {
local src=$SYSTEM/$BASE_SYS_ROOT
mkdir -p output-disk/{sbin,boot,tools,lib} &&
mkdir -p output-disk/boot/grub &&
cp $src/hurd/ext2fs.static output-disk/sbin &&
cp $src/lib/ld-x86-64.so.1 output-disk/lib/ld.so.1 &&
mv $INITRD_FILE output-disk/boot &&
cp $SYSTEM/boot/gnumach output-disk/boot &&
cp files/boot/grub.initrd.cfg output-disk/boot/grub/grub.cfg &&
echo "Disk contents:"
pushd output-disk &&
find .
popd
}
install_grub () {
print_info "Installing the GRUB on $IMG..."
sudo grub-install --target=i386-pc --directory=$SYS_ROOT/lib/grub/i386-pc --boot-directory=output-disk/boot $LOOP
}
umount_initrd () {
sudo umount output-initrd
sudo losetup -d $LOOP
}
umount_image () {
sudo umount output-disk >/dev/null 2>&1
sudo losetup -d $LOOP >/dev/null 2>&1
}
trap umount_initrd EXIT
trap umount_initrd INT
trap umount_image EXIT
trap umount_image INT
rm -f $INITRD_FILE &&
rm -f $IMG &&
create_initrd &&
sudo umount output-initrd &&
echo $(losetup -f)
create_image &&
mount_image &&
fill_disk &&
install_grub &&
umount_image
|