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 |