~mvo/snappy/mksnap-os-kernel

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
#!/bin/sh

set -e

modify_initrd() {
    rm -rf initramfs
    mkdir initramfs
    cd initramfs

    initrd=$(ls ../initrd.img-*)
    xzcat $initrd | cpio -i

    # FIXME2: add this to the kernel
    cp -a ../lib/modules/*/kernel/fs/squashfs lib/modules/*/kernel/fs/

    #mkdir -p lib/modules/*/kernel/fs/nls
    #cp -a ../lib/modules/*/kernel/fs/nls/*iso8859-1*.ko lib/modules/*/kernel/fs/nls

    find . | cpio --quiet -o -H newc | xz -c -9 --check=crc32 > $initrd
    
    cd ..
    rm -rf initramfs
}

#ARCH=amd64
#FNAME=xenial-preinstalled-core-$ARCH.device.tar.gz
ARCH=armhf
FNAME=xenial-preinstalled-core-$ARCH.raspi2.device.tar.gz
VERSION="4.4.0-1004.5-1"

wget -c http://cdimage.ubuntu.com/ubuntu-core/daily-preinstalled/current/$FNAME

rm -rf unpack-kernel
mkdir -p unpack-kernel
mkdir -p writable

cd unpack-kernel
tar xf ../$FNAME

# shuffle stuff around
mv system/* .
rmdir system

mv assets/* .
rmdir assets

# create meta
mkdir meta

# create symlinks so that uboot can eventually boot the kernel directly
kernel="$(ls vmlinuz-*)"
initrd="$(ls initrd.img-*)"
ln -s $kernel vmlinuz
ln -s $initrd initrd.img

cat > meta/snap.yaml <<EOF
name: canonical-pi2-linux
version: $VERSION
summary: The canonical pi2 kernel snap
architectures: [$ARCH]
type: kernel

kernel: $kernel
initrd: $initrd
modules: $(ls -d lib/modules/*)
firmware: lib/firmware
EOF
# dtbs
if [ -d dtbs ]; then
    printf "dtbs: dtbs/ \n" >> meta/snap.yaml
fi

# FIXME: we need to add squashfs.ko to the initrd so that we can mount
#        stuff
#modify_initrd

rm -f hardware.yaml

cd ..

# needs root for root owned files
fakeroot snappy build --squashfs unpack-kernel