View difference between Paste ID: b0dF7d7n and iWijRbvT
SHOW: | | - or go back to the newest paste.
1
#!/usr/bin/env bash
2
3
die( )
4
{
5-
	echo $1 ; exit 1
5+
	echo $1 >&2 ; exit 1
6
}
7
8
doit( )
9
{
10-
	echo "+ $*"
10+
	echo "+ $*" >&2 ; $* || die "command failed"
11-
	$* || die "command failed"
11+
12
13
unmount( )
14
{
15
	for dev in `mount | grep ^$1 | cut -f 1 -d ' '` ; do doit umount $dev ; done
16-
	devices=`mount | grep ^$1 | cut -f 1 -d ' '`
16+
17-
	for dev in $devices ; do doit umount $dev ; done
17+
18
last( )
19
{
20
	ls -d $* 2>/dev/null | tail -1
21
}
22-
	ls -d $* | tail -1
22+
23
check( )
24
{
25
	result=1
26
	partitions=( `sudo fdisk -l | grep ^$1 | cut -d " " -f 1` )
27
	if [ ${#partitions[@]} -eq 2 ]
28
	then
29
		file -sL ${partitions[0]} | grep \"System > /dev/null 2>&1 &&
30
		file -sL ${partitions[1]} | grep \"Storage\" > /dev/null 2>&1 &&
31
		result=0
32
	elif [ ${#partitions[@]} -eq 0 ]
33
	then
34
		die "Error: $1 is invalid"
35
	fi
36
	
37
	return $result
38
}
39
40
[ $# -ne 1 ] && die "Usage: sudo `basename $0` /dev/sdb"
41
42
device=$1
43
device1=${device}1
44
device2=${device}2
45
46
bootloader=`last build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*`
47
system=`last target/OpenELEC-RPi.arm-devel-*.system`
48
kernel=`last target/OpenELEC-RPi.arm-devel-*.kernel`
49
50
mount="/tmp/media/System"
51
52
[ -e "$device" ] || die "Error: $device is not found"
53
[ "$bootloader" == "" ] && die "Error: Unable to find bootloader - you need to run this script in your openelectv build directory"
54
[ "$system" == "" ] && die "Error: Unable to find system - you need to run this script in your openelectv build directory"
55
[ "$kernel" == "" ] && die "Error: Unable to find kernel - you need to run this script in your openelectv build directory"
56
57
echo "Updating $device with:"
58
echo
59
echo "bootloader = $bootloader"
60
echo "system     = $system"
61
echo "kernel     = $kernel"
62
echo
63
echo -n "Do you want to continue (y/n)? "
64
65
read answer
66
67
[ "$answer" != "y" ] && exit 0
68
69
echo
70
71
unmount $device
72
73
if ! check $device
74
then
75
	echo
76-
doit mkdir -p /tmp/media/System
76+
	echo "This sd card has not be paritioned for openelec - continuing will destroy"
77-
doit mount $device1 /tmp/media/System
77+
	echo "the contents of the disk."
78
	echo
79-
doit cp $bootloader/arm128_start.elf /tmp/media/System/start.elf
79+
	echo -n "Are you sure you want to continue (y/n)? "
80-
doit cp $bootloader/bootcode.bin /tmp/media/System/
80+
81-
doit cp $bootloader/loader.bin /tmp/media/System/
81+
	read answer
82
83-
doit cp $system /tmp/media/System/SYSTEM
83+
	[ "$answer" != "y" ] && exit 0
84-
doit cp $kernel /tmp/media/System/kernel.img
84+
85
	echo
86-
echo "boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ssh quiet" > /tmp/media/System/cmdline.txt
86+
87
	doit parted -s $device mklabel msdos
88
	doit parted -s $device unit cyl mkpart primary fat32 -- 0 16
89
	doit parted -s $device set 1 boot on
90
	doit parted -s $device unit cyl mkpart primary ext2 -- 16 -2
91
92
	doit mkfs.vfat -n System $device1
93
	doit mkfs.ext4 -L Storage $device2
94
	doit partprobe
95
fi
96
97
doit mkdir -p $mount
98
doit mount $device1 $mount
99
100
doit cp $bootloader/arm128_start.elf $mount/start.elf
101
doit cp $bootloader/bootcode.bin $mount
102
doit cp $bootloader/loader.bin $mount
103
104
doit cp $system $mount/SYSTEM
105
doit cp $kernel $mount/kernel.img
106
107
echo "boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ssh quiet" > cmdline.txt
108
doit cp cmdline.txt $mount/cmdline.txt
109
rm cmdline.txt
110
111
doit sync
112
113
doit umount $device1