blob: 2f14d0b963395393892495ca4fc2db4ce4c7ccb1 (
plain)
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
#!/bin/sh
# installs a rootfs tar archive from OpenADK onto a Compact Flash disk
check_exit() {
if [ $? -ne 0 ];then
echo "Installation failed."
exit 1
fi
}
rescue=0
while getopts "r" option
do
case $option in
r)
rescue=1
;;
*)
printf "Option not recognized\n"
exit 1
;;
esac
done
shift $(($OPTIND - 1))
if [ -z $1 ];then
printf "Please give your root tar archive as parameter\n"
exit 1
fi
if [ $rescue -eq 1 ];then
if [ -z $2 ];then
printf "Please give your rescue kernel image as second parameter\n"
exit 2
fi
if [ ! -f $2 ];then
printf "$2 is not a file, Exiting.\n"
exit 1
fi
fi
printf "Creating partitions ...\n"
parted -s /dev/sda mklabel msdos
check_exit
sleep 2
maxsize=$(env LC_ALL=C parted /dev/sda -s unit cyl print |awk '/^Disk/ { print $3 }'|sed -e 's/cyl//')
rootsize=$(($maxsize-2))
start=0
rootp=1
cfgfsp=2
if [ $rescue -eq 1 ];then
rootp=3
cfgfsp=4
start=2
parted -s /dev/sda unit cyl mkpart primary ext2 0 1
check_exit
mke2fs -q /dev/sda1
check_exit
parted -s /dev/sda unit cyl mkpart primary ext2 1 2
check_exit
mke2fs -q /dev/sda2
check_exit
fi
parted -s /dev/sda unit cyl mkpart primary ext2 $start $rootsize
check_exit
mke2fs -q /dev/sda1
check_exit
parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize
check_exit
parted -s /dev/sda set $rootp boot on
check_exit
sfdisk --change-id /dev/sda $cfgfsp 88 >/dev/null 2>&1
check_exit
# settle down
sleep 2
mount -t ext2 /dev/sda$rootp /mnt
check_exit
printf "Extracting install archive ...\n"
tar -C /mnt -xzpf $1
check_exit
chmod 1777 /mnt/tmp
chmod 4755 /mnt/bin/busybox
if [ $rescue -eq 1 ];then
mkdir /mnt/boot/grub
fi
speed=$(awk -F \, '/console=ttyS0/ { print $2 }' /proc/cmdline|sed -e "s/ .*$//")
if [ $rescue -eq 1 ];then
umount /mnt
mount /dev/sda2 /mnt
cp $2 /mnt/rescue
fi
printf "Installing bootloader ...\n"
mkdir -p /mnt/boot/grub
if [ $rescue -eq 1 ];then
mount /dev/sda1 /mnt/boot/grub
cat << EOF > /mnt/boot/grub/grub.cfg
set timeout=1
serial --unit=0 --speed=$speed
terminal_output serial
terminal_input serial
if [ -s \$prefix/grubenv ]; then
load_env
fi
set default="\${saved_entry}"
if [ \${prev_saved_entry} ]; then
set saved_entry=\${prev_saved_entry}
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z \${boot_once} ]; then
saved_entry=\${chosen}
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n \${have_grubenv} ]; then if [ -z \${boot_once} ]; then save_env recordfail; fi; fi
}
menuentry "GNU/Linux (OpenADK)" {
recordfail
insmod ext2
set root=(hd0,3)
linux /boot/kernel root=/dev/sda$rootp ro init=/init panic=10
}
menuentry "GNU/Linux (OpenADK) Rescue Mode" {
recordfail
insmod ext2
set root=(hd0,2)
linux /rescue ro init=/init panic=10
}
EOF
else
cat << EOF > /mnt/boot/grub/grub.cfg
set default=0
set timeout=1
serial --unit=0 --speed=$speed
terminal_output serial
terminal_input serial
menuentry "GNU/Linux (OpenADK)" {
insmod ext2
set root=(hd0,1)
linux /boot/kernel root=/dev/sda$rootp ro init=/init panic=10
}
EOF
fi
grub-install --root-directory=/mnt /dev/sda
check_exit
if [ $rescue -eq 1 ];then
grub-set-default --root-directory=/mnt 0
umount /mnt/boot/grub
fi
umount /mnt
printf "Successfully installed. You can reboot now.\n"
exit 0
|