d5a4230042665ee0e569dff5c36003d0140ee9a0
[live-tools.git] / bin / live-medium-install
1 #!/bin/sh
2
3 ## live-tools(7) - System Support Scripts
4 ## Copyright (C) 2013 Richard Nelson <unixabg@gmail.com>
5 ## Copyright (C) 2013 Daniel Baumann <mail@daniel-baumann.ch>
6 ##
7 ## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
8 ## This is free software, and you are welcome to redistribute it
9 ## under certain conditions; see COPYING for details.
10
11
12 set -e
13
14 # Defaults
15 _VERSION="7.2"
16
17 _URL="http://live.debian.net/files/stable/images/${_VERSION}/amd64/webboot/"
18
19 _FILES="debian-live-${_VERSION}-amd64-gnome-desktop.vmlinuz debian-live-${_VERSION}-amd64-gnome-desktop.initrd.img debian-live-${_VERSION}-amd64-gnome-desktop.squashfs"
20
21 _TARGET="/dev/sda"
22
23 # Dependencies
24 if [ ! -e /sbin/parted ]
25 then
26         echo "E: /sbin/parted - no such file"
27         echo "E: On Debian based systems, parted can be installed with:"
28         echo "E:   apt-get install parted"
29
30         exit 1
31 fi
32
33 if [ ! -e /usr/bin/extlinux ]
34 then
35         echo "E: /usr/bin/extlinux - no such file"
36         echo "E: On Debian based systems, extlinux can be installed with:"
37         echo "E:   apt-get install extlinux"
38
39         exit 1
40 fi
41
42 if [ ! -e /usr/bin/wget ]
43 then
44         echo "E: /usr/bin/wget - no such file"
45         echo "E: On Debian based systems, wget can be installed with:"
46         echo "E:   apt-get install wget"
47
48         exit 1
49 fi
50
51 if [ ! -e /usr/share/syslinux/themes/debian/extlinux/splash.png ]
52 then
53         echo "E: /usr/share/syslinux/themes/debian/extlinux/splash.png - no such file"
54         echo "E: On Debian based systems, splash.png image can be installed with:"
55         echo "E:   apt-get install syslinux-themes-debian"
56
57         exit 1
58 fi
59
60 if [ ! -e /usr/lib/syslinux/vesamenu.c32 ]
61 then
62         echo "E: /usr/lib/syslinux/vesamenu.c32 - no such file"
63         echo "E: On Debian based systems, vesamenu.c32 can be installed with:"
64         echo "E:   apt-get install syslinux-common"
65
66         exit 1
67 fi
68
69 if [ ! -e /boot/memtest86+.bin ]
70 then
71         echo "E: /boot/memtest86+.bin - no such file"
72         echo "E: On Debian based systems, memtest86+ can be installed with:"
73         echo "E:   apt-get install memtest86+"
74
75         exit 1
76 fi
77
78 # Display warning
79 cat << EOF
80 ######################################################
81 WARNING: This will erase all data on the target device
82 ######################################################
83
84 Please enter URL to download the ${_IMAGE_FILE} image from
85 (default: ${_URL})
86 EOF
87
88 # Ask for URL
89 echo -n ": "
90 read _READ
91
92 _URL="${_READ:-${_URL}}"
93
94 # Display partitions
95 cat << EOF
96
97 -------------------------------------------------------------------------------
98 $(blkid | sort)
99 -------------------------------------------------------------------------------
100
101 EOF
102
103 # Ask for target device
104 echo -n "Please enter block device to install system to (default: ${_TARGET}): "
105 read _READ
106
107 _TARGET="${_READ:-${_TARGET}}"
108
109 if [ ! -b "${_TARGET}" ]
110 then
111         echo "E: ${_TARGET} not a block device, aborting."
112         exit 1
113 fi
114
115 cat << EOF
116
117 #########################################################
118 WARNING: This will erase all data on the ${_TARGET} device
119 #########################################################
120
121 You are about to do something potentially harmful.
122 To continue type in the phrase 'Yes, do as I say!'
123 EOF
124
125 echo -n ": "
126 read _CONTINUE
127
128 case "${_CONTINUE}" in
129         'Yes, do as I say!')
130
131                 ;;
132
133         *)
134                 echo "Abort."
135
136                 exit 1
137                 ;;
138 esac
139
140 # Zero fill just a bit
141 echo "Starting dd command for short zero fill..."
142 dd if=/dev/zero of=${_TARGET} bs=1024 count=1024
143
144 # Make a single partition
145 echo "Starting parted command to make lablel and partition..."
146 #parted -s -a optimal ${_TARGET} mklabel gpt -- mkpart primary ext4 1 -1
147 #parted -s -a optimal ${_TARGET} mklabel msdos -- mkpart primary ext4 1 3000
148 #parted -s -a optimal ${_TARGET} -- mkpart primary ext4 3000 -1
149 parted -s -a optimal ${_TARGET} mklabel msdos -- mkpart primary ext4 1 -1
150
151 # Set the block device to boot.
152 echo "Starting parted command to enable boot..."
153 parted -s ${_TARGET} --  set 1 boot on
154
155 # Make new filesystem on the new partitions.
156 echo "Making filesystem..."
157 mkfs.ext4 -L Firmware ${_TARGET}1
158 #mkfs.ext4 -L persistence ${_TARGET}2
159
160 # Mount the target filesystem
161 echo "Mounting file system to allow saving of webboot files..."
162 mount ${_TARGET}1 /mnt
163
164 # Create the directory to save webboot files
165 echo "Creating /live dir..."
166 mkdir -p /mnt/live
167
168 # Download the webboot files from server
169 echo "Downloading webboot files..."
170 for _FILE in ${_FILES}
171 do
172         wget -c ${_URL}/${_FILE} -O /mnt/live/${_FILE}
173 done
174
175 # Renaming files
176 mv /mnt/live/debian-live-*.vmlinuz /mnt/live/vmlinuz
177 mv /mnt/live/debian-live-*.initrd.img /mnt/live/initrd.img
178 mv /mnt/live/debian-live-*.squashfs /mnt/live/filesystem.squashfs
179
180 # Writing mbr
181 # FIXME: needs update for syslinux 6.0
182 dd if=/usr/lib/extlinux/mbr.bin of="${_TARGET}" bs=440 count=1 conv=notrunc
183
184 # Configuring bootloader
185 mkdir -p /mnt/boot/extlinux
186
187 cp /usr/lib/syslinux/vesamenu.c32 /mnt/boot/extlinux/
188 cp /usr/share/syslinux/themes/debian/extlinux/splash.png /mnt/boot/extlinux/
189 cp /boot/memtest86+.bin /mnt/boot/
190
191 cat > /mnt/boot/extlinux/extlinux.conf << EOF
192 default live
193 prompt 0
194 timeout 50
195
196 default vesamenu.c32
197 menu background splash.png
198 menu color title        * #FFFFFFFF *
199 menu color border       * #00000000 #00000000 none
200 menu color sel          * #ffffffff #76a1d0ff *
201 menu color hotsel       1;7;37;40 #ffffffff #76a1d0ff *
202 menu color tabmsg       * #ffffffff #00000000 *
203 menu color help         37;40 #ffdddd00 #00000000 none
204 menu vshift 16
205 menu rows 10
206 menu helpmsgrow 15
207 # The command line must be at least one line from the bottom.
208 menu cmdlinerow 16
209 menu timeoutrow 16
210 menu tabmsgrow 18
211 menu tabmsg Press ENTER to boot or TAB to edit a menu entry
212
213
214 label live
215         menu label ^Live
216         menu default
217         linux /live/vmlinuz
218         initrd /live/initrd.img
219         append boot=live config vga=normal video=vesa quiet splash
220
221 label live-failsafe
222         menu label Live (failsafe)
223         linux /live/vmlinuz
224         initrd /live/initrd.img
225         append boot=live config memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal
226
227 label memtest
228         menu label Memory Diagnostic Tool (memtest86+)
229         linux /boot/memtest86+.bin
230 EOF
231
232 # Writing bootloader
233 extlinux --install /mnt/boot/extlinux
234
235 # Sync and umount
236 echo "Cleanup with sync and umount..."
237 umount /mnt
238 sync
239
240 echo "Please halt your machine and boot up to your live firmware."