summaryrefslogtreecommitdiff
path: root/packages/images/openprotium-image.bb
blob: faec2664ca3adf1e3d127f5eed0fec7d756c3536 (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
DESCRIPTION = "OpenProtium image"
HOMEPAGE = "http://www.openprotium.com"
LICENSE = "MIT"
PR = "r0"

DEPENDS = "${MACHINE_TASK_PROVIDER}"
# SLUGOS_IMAGENAME defines the name of the image to be build, if it
# is not set this package will be skipped!
EXTRA_IMAGECMD_jffs2 = "--pad --big-endian --eraseblock=0x10000 -D ${SLUGOS_DEVICE_TABLE}"
IMAGE_LINGUAS = ""

# Setting USE_DEVFS prevents *any* entries being created initially
# in /dev
USE_DEVFS = "1"

# This is passed to the image command to build the correct /dev
# directory (because only the image program can make actual
# dev entries!)
SLUGOS_DEVICE_TABLE = "${@bb.which(bb.data.getVar('BBPATH', d, 1), 'files/device_table-slugos.txt')}"

# IMAGE_PREPROCESS_COMMAND is run before making the image.
# We use this to do a few things:
# . remove the uImage, which is in a separate part of the flash already.
# . adjust the default run level (sysvinit is 5 by default, we like 3)
# . set a default root password, which is no more secure than a blank one
#	(since it is documented, in case you were wondering)
# . make the boot more verbose
#
IMAGE_PREPROCESS_COMMAND += "rm ${IMAGE_ROOTFS}/boot/uImage-*;"
IMAGE_PREPROCESS_COMMAND += "sed -i -es,^id:5:initdefault:,id:3:initdefault:, ${IMAGE_ROOTFS}/etc/inittab;"
IMAGE_PREPROCESS_COMMAND += "sed -i -es,^root::0,root:BTMzOOAQfESg6:0, ${IMAGE_ROOTFS}/etc/passwd;"
IMAGE_PREPROCESS_COMMAND += "sed -i -es,^VERBOSE=no,VERBOSE=very, ${IMAGE_ROOTFS}/etc/default/rcS;"

# Always just make a new flash image.
PACK_IMAGE = 'storcenter_pack_image;'
IMAGE_POSTPROCESS_COMMAND += "${PACK_IMAGE}"
PACK_IMAGE_DEPENDS = ""
#EXTRA_IMAGEDEPENDS += "${PACK_IMAGE_DEPENDS}"

# This hack removes '${MACHINE}' from the end of the arch.conf for ipk,
# preventing _mach.ipk (with no byte sex) taking precedence over everything
# else.
# but we want 'storcenter' in there so kernel modules work correctly.
#
#ROOTFS_POSTPROCESS_COMMAND += "sed -i '$d' '${IMAGE_ROOTFS}/etc/ipkg/arch.conf';"

# These depends define native utilities - they do not get put in the flash and
# are not required to build the image.
IMAGE_TOOLS = ""
#EXTRA_IMAGEDEPENDS += "${IMAGE_TOOLS}"

# CONFIG:
# SLUGOS_EXTRA_RDEPENDS: set in conf, things to add to the image
# SLUGOS_SUPPORT:        set to here, see below, added to the image.
# SLUGOS_KERNEL:         set here, kernel modules added to the image
#
# Do not override the last two unless you really know what you
# are doing - there is more information below.

# diff, cpio and find are required for reflash and turnup ram.
# Removing these probably leaves the system bootable, but standard
# openslug and ucslugc stuff won't work, so only take these out in
# very non-standard turnkey slugos builds.
#
# udev is the default way of handling devices, there is no guarantee
# that the static device table is completely correct (it is just
# known to be sufficient for boot.)
# we'ere still on 2.6.12 devfs....
#OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils udev"
#
OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils uboot-utils"

# kernel-module-af-packet must be in the image for DHCP to work
# kernel-module-netconsole is here because it is small and is
# highly useful on minimal systems (which really don't have anywhere
# other than the network to output error messages!)
SLUGOS_KERNEL ?= "kernel-module-af-packet kernel-module-netconsole \
		kernel-module-mii "

# this gets /lib/modules made....
OPENPROTIUM_KERNEL = "kernel-module-dummy \
			kernel-module-af-packet "

RDEPENDS = " \
	kernel base-files base-passwd netbase \
        busybox initscripts-openprotium openprotium-init \
        update-modules sysvinit tinylogin \
	module-init-tools modutils-initscripts \
        ipkg-collateral ipkg ipkg-link \
	libgcc1 \
	portmap \
	dropbear \
	e2fsprogs-blkid \
	mdadm \
	hdparm \
	mtd-utils \
	sccd \
	util-linux-mount \
	util-linux-umount \
	util-linux-swaponoff \
	util-linux-losetup \
	${OPENPROTIUM_SUPPORT} \
	${OPENPROTIUM_KERNEL} "
#	${SLUGOS_EXTRA_RDEPENDS}"

PACKAGE_INSTALL = "${RDEPENDS}"

inherit image

storcenter_pack_image() {
	# find latest kernel
	KERNEL=`ls -tr ${DEPLOY_DIR_IMAGE}/uImage* | tail -1`
	if [ -z "$KERNEL" ]; then
		oefatal "No kernel found in ${DEPLOY_DIR_IMAGE}. Bitbake linux-storcenter to create one."
		exit 1
	fi
	ROOTFS=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2
	OUTPUT=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flash.img
	PADFILE=${DEPLOY_DIR_IMAGE}/padfile.zzz
	HEX_MAX_KERN_SIZE=170000
	DEC_MAX_KERN_SIZE=`echo "ibase=16; $HEX_MAX_KERN_SIZE" | bc `
	HEX_MAX_ROOT_SIZE=590000
	DEC_MAX_ROOT_SIZE=`echo "ibase=16; $HEX_MAX_ROOT_SIZE" | bc `
	KERNEL_SIZE=`ls -l $KERNEL | awk '{print $5}'`
	if [ $KERNEL_SIZE -gt $DEC_MAX_KERN_SIZE ]; then
	        oefatal "Kernel too large at $KERNEL_SIZE bytes.  Max is $DEC_MAX_KERN_SIZE."
		exit 1
	fi
	ROOT_SIZE=`ls -l $ROOTFS | awk '{print $5}'`
	if [ $ROOT_SIZE -gt $DEC_MAX_ROOT_SIZE ]; then
		oefatal "Rootfs is too large at $ROOT_SIZE bytes.  Max is $DEC_MAX_ROOT_SIZE."
		exit 1
	fi
	PAD_SIZE=`echo "$DEC_MAX_KERN_SIZE - $KERNEL_SIZE" | bc `
	dd if=/dev/zero of=$PADFILE bs=$PAD_SIZE count=1 2>>/dev/null
	cat $KERNEL $PADFILE $ROOTFS > $OUTPUT
	rm -f $PADFILE
	ls -l $OUTPUT
}