Compare commits
44
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd7de2554c | ||
|
|
234c4b7937 | ||
|
|
be2018ee5f | ||
|
|
cdf1cf2aba | ||
|
|
22c4105b57 | ||
|
|
d2f88a6e4f | ||
|
|
c92638438a | ||
|
|
50e5c01f57 | ||
|
|
a0060bd475 | ||
|
|
d2b8d634b9 | ||
|
|
d347d8d5f7 | ||
|
|
530b66fd3f | ||
|
|
02728fe65e | ||
|
|
e583c18eba | ||
|
|
046db2d3d3 | ||
|
|
f9637fb24e | ||
|
|
921202e371 | ||
|
|
dc7b589e7a | ||
|
|
3c0b364028 | ||
|
|
51f27e752c | ||
|
|
f89ebe2382 | ||
|
|
d64c21bfc9 | ||
|
|
7bbaac3344 | ||
|
|
8e377c407f | ||
|
|
4e5dc43a36 | ||
|
|
d729fc2dbb | ||
|
|
0ee2578bc6 | ||
|
|
fa1e67f92e | ||
|
|
7360f24430 | ||
|
|
6c146a7bb7 | ||
|
|
c0a5b85f8f | ||
|
|
762e20cc0a | ||
|
|
000e61f84d | ||
|
|
16b3133f46 | ||
|
|
9cffa42a35 | ||
|
|
8373e58195 | ||
|
|
1f1ddb5f13 | ||
|
|
8f22f2f27e | ||
|
|
718a4e8c21 | ||
|
|
8e74b4f15c | ||
|
|
8f7c537d71 | ||
|
|
40b5af925b | ||
|
|
7748ed0df1 | ||
|
|
b0be14afdf |
@@ -1,6 +1,7 @@
|
|||||||
deploy/*
|
deploy/*
|
||||||
work/*
|
work/*
|
||||||
config
|
config
|
||||||
|
postrun.sh
|
||||||
SKIP
|
SKIP
|
||||||
.pc
|
.pc
|
||||||
*-pc
|
*-pc
|
||||||
|
|||||||
@@ -1,12 +1,24 @@
|
|||||||
# pi-gen
|
# pi-gen
|
||||||
|
|
||||||
_Tool used to create the raspberrypi.org Raspbian images_
|
_Tool used to create the raspberrypi.org Raspbian images_
|
||||||
|
|
||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
1. Documentation
|
1. Documentation
|
||||||
|
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
`quilt parted realpath qemu-user-static debootstrap zerofree pxz zip dosfstools bsdtar libcap2-bin grep rsync`
|
On Debian-based systems:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt-get install quilt parted realpath qemu-user-static debootstrap zerofree pxz zip \
|
||||||
|
dosfstools bsdtar libcap2-bin grep rsync
|
||||||
|
```
|
||||||
|
|
||||||
|
The file `depends` contains a list of tools needed. The format of this
|
||||||
|
package is `<tool>[:<debian-package>]`.
|
||||||
|
|
||||||
|
|
||||||
## Config
|
## Config
|
||||||
|
|
||||||
@@ -29,29 +41,57 @@ The following environment variables are supported:
|
|||||||
will not be included in the image, making it safe to use an `apt-cacher` or
|
will not be included in the image, making it safe to use an `apt-cacher` or
|
||||||
similar package for development.
|
similar package for development.
|
||||||
|
|
||||||
|
* `BASE_DIR` (Default: location of `build.sh`)
|
||||||
|
|
||||||
|
**CAUTION**: Currently, changing this value will probably break build.sh
|
||||||
|
|
||||||
|
Top-level directory for `pi-gen`. Contains stage directories, build
|
||||||
|
scripts, and by default both work and deployment directories.
|
||||||
|
|
||||||
|
* `WORK_DIR` (Default: `"$BASE_DIR/work"`)
|
||||||
|
|
||||||
|
Directory in which `pi-gen` builds the target system. This value can be
|
||||||
|
changed if you have a suitably large, fast storage location for stages to
|
||||||
|
be built and cached. Note, `WORK_DIR` stores a complete copy of the target
|
||||||
|
system for each build stage, amounting to tens of gigabytes in the case of
|
||||||
|
Raspbian.
|
||||||
|
|
||||||
|
* `DEPLOY_DIR` (Default: `"$BASE_DIR/deploy"`)
|
||||||
|
|
||||||
|
Output directory for target system images and NOOBS bundles.
|
||||||
|
|
||||||
|
|
||||||
A simple example for building Raspbian:
|
A simple example for building Raspbian:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
IMG_NAME='Raspbian'
|
IMG_NAME='Raspbian'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Docker Build
|
## Docker Build
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
vi config # Edit your config file. See above.
|
vi config # Edit your config file. See above.
|
||||||
./build-docker.sh
|
./build-docker.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
If everything goes well, your finished image will be in the `deploy/` folder.
|
If everything goes well, your finished image will be in the `deploy/` folder.
|
||||||
You can then remove the build container with `docker rm pigen_work`
|
You can then remove the build container with `docker rm -v pigen_work`
|
||||||
|
|
||||||
If something breaks along the line, you can edit the corresponding scripts, and
|
If something breaks along the line, you can edit the corresponding scripts, and
|
||||||
continue:
|
continue:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
CONTINUE=1 ./build-docker.sh
|
CONTINUE=1 ./build-docker.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
There is a possibility that even when running from a docker container, the installation of `qemu-user-static` will silently fail when building the image because `binfmt-support` _must be enabled on the underlying kernel_. An easy fix is to ensure `binfmt-support` is installed on the host machine before starting the `./build-docker.sh` script (or using your own docker build solution).
|
There is a possibility that even when running from a docker container, the
|
||||||
|
installation of `qemu-user-static` will silently fail when building the image
|
||||||
|
because `binfmt-support` _must be enabled on the underlying kernel_. An easy
|
||||||
|
fix is to ensure `binfmt-support` is installed on the host machine before
|
||||||
|
starting the `./build-docker.sh` script (or using your own docker build
|
||||||
|
solution).
|
||||||
|
|
||||||
|
|
||||||
## Stage Anatomy
|
## Stage Anatomy
|
||||||
|
|
||||||
@@ -98,20 +138,32 @@ maintenance and allows for more easy customization.
|
|||||||
enhancements, etc. This is a base desktop system, with some development
|
enhancements, etc. This is a base desktop system, with some development
|
||||||
tools installed.
|
tools installed.
|
||||||
|
|
||||||
- **Stage 4** - complete Raspbian system. More development tools, an email
|
- **Stage 4** - Raspbian system meant to fit on a 4GB card. More development
|
||||||
client, learning tools like Scratch, specialized packages like sonic-pi and
|
tools, an email client, learning tools like Scratch, specialized packages
|
||||||
wolfram-engine, system documentation, office productivity, etc. This is
|
like sonic-pi, system documentation, office productivity, etc. This is the
|
||||||
the stage that installs all of the things that make Raspbian friendly to
|
stage that installs all of the things that make Raspbian friendly to new
|
||||||
new users.
|
users.
|
||||||
|
|
||||||
|
- **Stage 5** - The official Raspbian Desktop image. Right now only adds
|
||||||
|
Mathematica.
|
||||||
|
|
||||||
### Stage specification
|
### Stage specification
|
||||||
If you wish to build up to a specified stage (such as building up to stage 2 for a lite system), place an empty file named `SKIP` in each of the `./stage` directories you wish not to include.
|
|
||||||
|
|
||||||
Then remove the `EXPORT*` files from `./stage4` (if building up to stage 2) or from `./stage2` (if building a minimal system).
|
If you wish to build up to a specified stage (such as building up to stage 2
|
||||||
|
for a lite system), place an empty file named `SKIP` in each of the `./stage`
|
||||||
|
directories you wish not to include.
|
||||||
|
|
||||||
```
|
Then remove the `EXPORT*` files from `./stage4` (if building up to stage 2) or
|
||||||
|
from `./stage2` (if building a minimal system).
|
||||||
|
|
||||||
|
```bash
|
||||||
# Example for building a lite system
|
# Example for building a lite system
|
||||||
$ touch ./stage3/SKIP ./stage4/SKIP
|
echo "IMG_NAME='Raspbian'" > config
|
||||||
$ rm stage4/EXPORT*
|
touch ./stage3/SKIP ./stage4/SKIP ./stage5/SKIP
|
||||||
|
rm stage4/EXPORT*
|
||||||
|
sudo ./build.sh # or ./build-docker.sh
|
||||||
```
|
```
|
||||||
If you wish to build further configurations upon (for example) the lite system, you can also delete the contents of `./stage3` and `./stage4` and replace with your own contents in the same format.
|
|
||||||
|
If you wish to build further configurations upon (for example) the lite
|
||||||
|
system, you can also delete the contents of `./stage3` and `./stage4` and
|
||||||
|
replace with your own contents in the same format.
|
||||||
|
|||||||
+7
-5
@@ -12,9 +12,9 @@ if ! $DOCKER ps >/dev/null; then
|
|||||||
fi
|
fi
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
config_mount=
|
config_mount="/dev/null:/dev/null"
|
||||||
if [ -f config ]; then
|
if [ -f config ]; then
|
||||||
config_mount="-v $(pwd)/config:/pi-gen/config:ro"
|
config_mount="$(pwd)/config:/pi-gen/config:ro"
|
||||||
source config
|
source config
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ fi
|
|||||||
if [ "$CONTAINER_EXISTS" != "" ] && [ "$CONTINUE" != "1" ]; then
|
if [ "$CONTAINER_EXISTS" != "" ] && [ "$CONTINUE" != "1" ]; then
|
||||||
echo "Container $CONTAINER_NAME already exists and you did not specify CONTINUE=1. Aborting."
|
echo "Container $CONTAINER_NAME already exists and you did not specify CONTINUE=1. Aborting."
|
||||||
echo "You can delete the existing container like this:"
|
echo "You can delete the existing container like this:"
|
||||||
echo " docker rm $CONTAINER_NAME"
|
echo " docker rm -v $CONTAINER_NAME"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -54,6 +54,7 @@ if [ "$CONTAINER_EXISTS" != "" ]; then
|
|||||||
trap "echo 'got CTRL+C... please wait 5s';docker stop -t 5 ${CONTAINER_NAME}_cont" SIGINT SIGTERM
|
trap "echo 'got CTRL+C... please wait 5s';docker stop -t 5 ${CONTAINER_NAME}_cont" SIGINT SIGTERM
|
||||||
time $DOCKER run --rm --privileged \
|
time $DOCKER run --rm --privileged \
|
||||||
--volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \
|
--volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \
|
||||||
|
-e IMG_NAME=${IMG_NAME}\
|
||||||
pi-gen \
|
pi-gen \
|
||||||
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
|
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
|
||||||
cd /pi-gen; ./build.sh;
|
cd /pi-gen; ./build.sh;
|
||||||
@@ -62,8 +63,9 @@ if [ "$CONTAINER_EXISTS" != "" ]; then
|
|||||||
else
|
else
|
||||||
trap "echo 'got CTRL+C... please wait 5s'; docker stop -t 5 ${CONTAINER_NAME}" SIGINT SIGTERM
|
trap "echo 'got CTRL+C... please wait 5s'; docker stop -t 5 ${CONTAINER_NAME}" SIGINT SIGTERM
|
||||||
$DOCKER run --name "${CONTAINER_NAME}" --privileged \
|
$DOCKER run --name "${CONTAINER_NAME}" --privileged \
|
||||||
-v $(pwd)/deploy:/pi-gen/deploy \
|
-e IMG_NAME=${IMG_NAME}\
|
||||||
${config_mount} \
|
-v "$(pwd)/deploy:/pi-gen/deploy" \
|
||||||
|
-v "${config_mount}" \
|
||||||
pi-gen \
|
pi-gen \
|
||||||
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
|
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
|
||||||
cd /pi-gen; ./build.sh &&
|
cd /pi-gen; ./build.sh &&
|
||||||
|
|||||||
@@ -67,10 +67,10 @@ EOF
|
|||||||
./${i}-run.sh
|
./${i}-run.sh
|
||||||
log "End ${SUB_STAGE_DIR}/${i}-run.sh"
|
log "End ${SUB_STAGE_DIR}/${i}-run.sh"
|
||||||
fi
|
fi
|
||||||
if [ -f ${i}-run-chroot ]; then
|
if [ -f ${i}-run-chroot.sh ]; then
|
||||||
log "Begin ${SUB_STAGE_DIR}/${i}-run-chroot"
|
log "Begin ${SUB_STAGE_DIR}/${i}-run-chroot.sh"
|
||||||
on_chroot < ${i}-run-chroot
|
on_chroot < ${i}-run-chroot.sh
|
||||||
log "End ${SUB_STAGE_DIR}/${i}-run-chroot"
|
log "End ${SUB_STAGE_DIR}/${i}-run-chroot.sh"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
@@ -128,12 +128,12 @@ if [ -z "${IMG_NAME}" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export IMG_DATE=${IMG_DATE:-"$(date -u +%Y-%m-%d)"}
|
export IMG_DATE=${IMG_DATE:-"$(date +%Y-%m-%d)"}
|
||||||
|
|
||||||
export BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
export BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
export SCRIPT_DIR="${BASE_DIR}/scripts"
|
export SCRIPT_DIR="${BASE_DIR}/scripts"
|
||||||
export WORK_DIR="${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"
|
export WORK_DIR=${WORK_DIR:-"${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"}
|
||||||
export DEPLOY_DIR="${BASE_DIR}/deploy"
|
export DEPLOY_DIR=${DEPLOY_DIR:-"${BASE_DIR}/deploy"}
|
||||||
export LOG_FILE="${WORK_DIR}/build.log"
|
export LOG_FILE="${WORK_DIR}/build.log"
|
||||||
|
|
||||||
export CLEAN
|
export CLEAN
|
||||||
@@ -148,6 +148,8 @@ export PREV_STAGE_DIR
|
|||||||
export ROOTFS_DIR
|
export ROOTFS_DIR
|
||||||
export PREV_ROOTFS_DIR
|
export PREV_ROOTFS_DIR
|
||||||
export IMG_SUFFIX
|
export IMG_SUFFIX
|
||||||
|
export NOOBS_NAME
|
||||||
|
export NOOBS_DESCRIPTION
|
||||||
export EXPORT_DIR
|
export EXPORT_DIR
|
||||||
export EXPORT_ROOTFS_DIR
|
export EXPORT_ROOTFS_DIR
|
||||||
|
|
||||||
@@ -172,13 +174,21 @@ done
|
|||||||
CLEAN=1
|
CLEAN=1
|
||||||
for EXPORT_DIR in ${EXPORT_DIRS}; do
|
for EXPORT_DIR in ${EXPORT_DIRS}; do
|
||||||
STAGE_DIR=${BASE_DIR}/export-image
|
STAGE_DIR=${BASE_DIR}/export-image
|
||||||
IMG_SUFFIX=$(cat ${EXPORT_DIR}/EXPORT_IMAGE)
|
source "${EXPORT_DIR}/EXPORT_IMAGE"
|
||||||
EXPORT_ROOTFS_DIR=${WORK_DIR}/$(basename ${EXPORT_DIR})/rootfs
|
EXPORT_ROOTFS_DIR=${WORK_DIR}/$(basename ${EXPORT_DIR})/rootfs
|
||||||
run_stage
|
run_stage
|
||||||
if [ -e ${EXPORT_DIR}/EXPORT_NOOBS ]; then
|
if [ -e ${EXPORT_DIR}/EXPORT_NOOBS ]; then
|
||||||
|
source ${EXPORT_DIR}/EXPORT_NOOBS
|
||||||
STAGE_DIR=${BASE_DIR}/export-noobs
|
STAGE_DIR=${BASE_DIR}/export-noobs
|
||||||
run_stage
|
run_stage
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [ -x postrun.sh ]; then
|
||||||
|
log "Begin postrun.sh"
|
||||||
|
cd "${BASE_DIR}"
|
||||||
|
./postrun.sh
|
||||||
|
log "End postrun.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
log "End ${BASE_DIR}"
|
log "End ${BASE_DIR}"
|
||||||
|
|||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
|
||||||
|
|
||||||
|
IMGID="$(fdisk -l ${IMG_FILE} | sed -n 's/Disk identifier: 0x\([^ ]*\)/\1/p')"
|
||||||
|
|
||||||
|
BOOT_PARTUUID="${IMGID}-01"
|
||||||
|
ROOT_PARTUUID="${IMGID}-02"
|
||||||
|
|
||||||
|
sed -i "s/BOOTDEV/PARTUUID=${BOOT_PARTUUID}/" ${ROOTFS_DIR}/etc/fstab
|
||||||
|
sed -i "s/ROOTDEV/PARTUUID=${ROOT_PARTUUID}/" ${ROOTFS_DIR}/etc/fstab
|
||||||
|
|
||||||
|
sed -i "s/ROOTDEV/PARTUUID=${ROOT_PARTUUID}/" ${ROOTFS_DIR}/boot/cmdline.txt
|
||||||
@@ -18,6 +18,31 @@ if [ -e ${ROOTFS_DIR}/etc/ld.so.preload.disabled ]; then
|
|||||||
mv ${ROOTFS_DIR}/etc/ld.so.preload.disabled ${ROOTFS_DIR}/etc/ld.so.preload
|
mv ${ROOTFS_DIR}/etc/ld.so.preload.disabled ${ROOTFS_DIR}/etc/ld.so.preload
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/apt/sources.list~
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/apt/trusted.gpg~
|
||||||
|
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/passwd-
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/group-
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/shadow-
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/gshadow-
|
||||||
|
|
||||||
|
rm -f ${ROOTFS_DIR}/var/cache/debconf/*-old
|
||||||
|
rm -f ${ROOTFS_DIR}/var/lib/dpkg/*-old
|
||||||
|
|
||||||
|
rm -f ${ROOTFS_DIR}/usr/share/icons/*/icon-theme.cache
|
||||||
|
|
||||||
|
rm -f ${ROOTFS_DIR}/var/lib/dbus/machine-id
|
||||||
|
|
||||||
|
true > ${ROOTFS_DIR}/etc/machine-id
|
||||||
|
|
||||||
|
ln -nsf /proc/mounts ${ROOTFS_DIR}/etc/mtab
|
||||||
|
|
||||||
|
for _FILE in $(find ${ROOTFS_DIR}/var/log/ -type f); do
|
||||||
|
true > ${_FILE}
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -f "${ROOTFS_DIR}/root/.vnc/private.key"
|
||||||
|
|
||||||
update_issue $(basename ${EXPORT_DIR})
|
update_issue $(basename ${EXPORT_DIR})
|
||||||
install -m 644 ${ROOTFS_DIR}/etc/rpi-issue ${ROOTFS_DIR}/boot/issue.txt
|
install -m 644 ${ROOTFS_DIR}/etc/rpi-issue ${ROOTFS_DIR}/boot/issue.txt
|
||||||
install files/LICENSE.oracle ${ROOTFS_DIR}/boot/
|
install files/LICENSE.oracle ${ROOTFS_DIR}/boot/
|
||||||
@@ -8,19 +8,19 @@ rm -f ${IMG_FILE}
|
|||||||
rm -rf ${ROOTFS_DIR}
|
rm -rf ${ROOTFS_DIR}
|
||||||
mkdir -p ${ROOTFS_DIR}
|
mkdir -p ${ROOTFS_DIR}
|
||||||
|
|
||||||
BOOT_SIZE=$(du -sh ${EXPORT_ROOTFS_DIR}/boot -B M | cut -f 1 | tr -d M)
|
BOOT_SIZE=$(du --apparent-size -s ${EXPORT_ROOTFS_DIR}/boot --block-size=1 | cut -f 1)
|
||||||
TOTAL_SIZE=$(du -sh ${EXPORT_ROOTFS_DIR} -B M | cut -f 1 | tr -d M)
|
TOTAL_SIZE=$(du --apparent-size -s ${EXPORT_ROOTFS_DIR} --exclude var/cache/apt/archives --block-size=1 | cut -f 1)
|
||||||
|
|
||||||
IMG_SIZE=$(expr $BOOT_SIZE \* 2 \+ $TOTAL_SIZE \+ 512)M
|
IMG_SIZE=$((BOOT_SIZE + TOTAL_SIZE + (800 * 1024 * 1024)))
|
||||||
|
|
||||||
fallocate -l ${IMG_SIZE} ${IMG_FILE}
|
truncate -s ${IMG_SIZE} ${IMG_FILE}
|
||||||
fdisk ${IMG_FILE} > /dev/null 2>&1 <<EOF
|
fdisk -H 255 -S 63 ${IMG_FILE} <<EOF
|
||||||
o
|
o
|
||||||
n
|
n
|
||||||
|
|
||||||
|
|
||||||
8192
|
8192
|
||||||
+`expr $BOOT_SIZE \* 3`M
|
+$((BOOT_SIZE * 2 /512))
|
||||||
p
|
p
|
||||||
t
|
t
|
||||||
c
|
c
|
||||||
@@ -51,10 +51,10 @@ echo "/boot: offset $BOOT_OFFSET, length $BOOT_LENGTH"
|
|||||||
echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH"
|
echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH"
|
||||||
|
|
||||||
mkdosfs -n boot -F 32 -v $BOOT_DEV > /dev/null
|
mkdosfs -n boot -F 32 -v $BOOT_DEV > /dev/null
|
||||||
mkfs.ext4 -O ^huge_file $ROOT_DEV > /dev/null
|
mkfs.ext4 -O ^metadata_csum,^huge_file $ROOT_DEV > /dev/null
|
||||||
|
|
||||||
mount -v $ROOT_DEV ${ROOTFS_DIR} -t ext4
|
mount -v $ROOT_DEV ${ROOTFS_DIR} -t ext4
|
||||||
mkdir -p ${ROOTFS_DIR}/boot
|
mkdir -p ${ROOTFS_DIR}/boot
|
||||||
mount -v $BOOT_DEV ${ROOTFS_DIR}/boot -t vfat
|
mount -v $BOOT_DEV ${ROOTFS_DIR}/boot -t vfat
|
||||||
|
|
||||||
rsync -aHAXx ${EXPORT_ROOTFS_DIR}/ ${ROOTFS_DIR}/
|
rsync -aHAXx --exclude var/cache/apt/archives ${EXPORT_ROOTFS_DIR}/ ${ROOTFS_DIR}/
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
|
|||||||
install -v -m 744 files/partition_setup.sh ${NOOBS_DIR}/
|
install -v -m 744 files/partition_setup.sh ${NOOBS_DIR}/
|
||||||
install -v files/partitions.json ${NOOBS_DIR}/
|
install -v files/partitions.json ${NOOBS_DIR}/
|
||||||
install -v files/os.json ${NOOBS_DIR}/
|
install -v files/os.json ${NOOBS_DIR}/
|
||||||
install -v files/Raspbian.png ${NOOBS_DIR}/
|
install -v files/OS.png ${NOOBS_DIR}/
|
||||||
install -v files/release_notes.txt ${NOOBS_DIR}/
|
install -v files/release_notes.txt ${NOOBS_DIR}/
|
||||||
|
|
||||||
tar -v -c -C files/marketing -f ${NOOBS_DIR}/marketing.tar .
|
tar -v -c -C files/marketing -f ${NOOBS_DIR}/marketing.tar .
|
||||||
@@ -19,13 +19,18 @@ ROOT_SIZE=$(expr ${ROOT_SIZE} / 1000000 \+ 1)
|
|||||||
BOOT_NOM=$(expr ${BOOT_SIZE} \* 3)
|
BOOT_NOM=$(expr ${BOOT_SIZE} \* 3)
|
||||||
ROOT_NOM=$(expr ${ROOT_SIZE} \+ 400)
|
ROOT_NOM=$(expr ${ROOT_SIZE} \+ 400)
|
||||||
|
|
||||||
|
mv "${NOOBS_DIR}/OS.png" "${NOOBS_DIR}/$(echo ${NOOBS_NAME} | sed 's/ /_/g').png"
|
||||||
|
|
||||||
sed ${NOOBS_DIR}/partitions.json -i -e "s|BOOT_SIZE|${BOOT_SIZE}|"
|
sed ${NOOBS_DIR}/partitions.json -i -e "s|BOOT_SIZE|${BOOT_SIZE}|"
|
||||||
sed ${NOOBS_DIR}/partitions.json -i -e "s|ROOT_SIZE|${ROOT_SIZE}|"
|
sed ${NOOBS_DIR}/partitions.json -i -e "s|ROOT_SIZE|${ROOT_SIZE}|"
|
||||||
|
|
||||||
sed ${NOOBS_DIR}/partitions.json -i -e "s|BOOT_NOM|${BOOT_NOM}|"
|
sed ${NOOBS_DIR}/partitions.json -i -e "s|BOOT_NOM|${BOOT_NOM}|"
|
||||||
sed ${NOOBS_DIR}/partitions.json -i -e "s|ROOT_NOM|${ROOT_NOM}|"
|
sed ${NOOBS_DIR}/partitions.json -i -e "s|ROOT_NOM|${ROOT_NOM}|"
|
||||||
|
|
||||||
sed ${NOOBS_DIR}/release_notes.txt -i -e "s|UNRELEASED|${IMG_DATE}|"
|
|
||||||
sed ${NOOBS_DIR}/os.json -i -e "s|UNRELEASED|${IMG_DATE}|"
|
sed ${NOOBS_DIR}/os.json -i -e "s|UNRELEASED|${IMG_DATE}|"
|
||||||
|
sed ${NOOBS_DIR}/os.json -i -e "s|NOOBS_NAME|${NOOBS_NAME}|"
|
||||||
|
sed ${NOOBS_DIR}/os.json -i -e "s|NOOBS_DESCRIPTION|${NOOBS_DESCRIPTION}|"
|
||||||
|
|
||||||
|
sed ${NOOBS_DIR}/release_notes.txt -i -e "s|UNRELEASED|${IMG_DATE}|"
|
||||||
|
|
||||||
cp -a ${NOOBS_DIR} ${DEPLOY_DIR}/
|
cp -a ${NOOBS_DIR} ${DEPLOY_DIR}/
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"description": "A community-created port of Debian jessie for the Raspberry Pi",
|
"description": "NOOBS_DESCRIPTION",
|
||||||
"feature_level": 35120124,
|
"feature_level": 35120124,
|
||||||
"kernel": "4.4",
|
"kernel": "4.9",
|
||||||
"name": "Raspbian",
|
"name": "NOOBS_NAME",
|
||||||
"password": "raspberry",
|
"password": "raspberry",
|
||||||
"release_date": "UNRELEASED",
|
"release_date": "UNRELEASED",
|
||||||
"supported_hex_revisions": "2,3,4,5,6,7,8,9,d,e,f,10,11,12,14,19,1040,1041,0092,0093,2082",
|
"supported_hex_revisions": "2,3,4,5,6,7,8,9,d,e,f,10,11,12,14,19,1040,1041,0092,0093,2082",
|
||||||
|
|||||||
@@ -12,18 +12,22 @@ mkdir -p /tmp/1 /tmp/2
|
|||||||
mount "$part1" /tmp/1
|
mount "$part1" /tmp/1
|
||||||
mount "$part2" /tmp/2
|
mount "$part2" /tmp/2
|
||||||
|
|
||||||
sed /tmp/1/cmdline.txt -i -e "s|root=/dev/[^ ]*|root=${part2}|"
|
sed /tmp/1/cmdline.txt -i -e "s|root=[^ ]*|root=${part2}|"
|
||||||
sed /tmp/2/etc/fstab -i -e "s|^.* / |${part2} / |"
|
sed /tmp/2/etc/fstab -i -e "s|^.* / |${part2} / |"
|
||||||
sed /tmp/2/etc/fstab -i -e "s|^.* /boot |${part1} /boot |"
|
sed /tmp/2/etc/fstab -i -e "s|^.* /boot |${part1} /boot |"
|
||||||
|
|
||||||
if [ -e /mnt/ssh ]; then
|
if [ -f /mnt/ssh ]; then
|
||||||
cp /mnt/ssh /tmp/1/
|
cp /mnt/ssh /tmp/1/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e /mnt/ssh.txt ]; then
|
if [ -f /mnt/ssh.txt ]; then
|
||||||
cp /mnt/ssh.txt /tmp/1/
|
cp /mnt/ssh.txt /tmp/1/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f /settings/wpa_supplicant.conf ]; then
|
||||||
|
cp /settings/wpa_supplicant.conf /tmp/1/
|
||||||
|
fi
|
||||||
|
|
||||||
if ! grep -q resize /proc/cmdline; then
|
if ! grep -q resize /proc/cmdline; then
|
||||||
sed -i 's| quiet init=/usr/lib/raspi-config/init_resize.sh||' /tmp/1/cmdline.txt
|
sed -i 's| quiet init=/usr/lib/raspi-config/init_resize.sh||' /tmp/1/cmdline.txt
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,23 @@
|
|||||||
UNRELEASED:
|
UNRELEASED:
|
||||||
|
* New kernel and firmware
|
||||||
|
* Filesystem created without the metadata_csum feature
|
||||||
|
2017-06-21:
|
||||||
|
* Scratch 2 application included
|
||||||
|
* Thonny Python IDE included
|
||||||
|
* New icons with thinner outlines
|
||||||
|
* Volume control more linear in behaviour
|
||||||
|
* Updated Flash player
|
||||||
|
* Updated RealVNC server and viewer
|
||||||
|
* Various tweaks and bugfixes
|
||||||
|
* New kernel and firmware
|
||||||
|
2017-04-10:
|
||||||
|
* Wolfram Mathematica updated to version 11.0.1
|
||||||
|
* Adobe Flash Player updated to version 25.0.0.127
|
||||||
|
* Use PARTUUID to support USB boot
|
||||||
|
2017-03-02:
|
||||||
* Updated kernel and firmware (final Pi Zero W support)
|
* Updated kernel and firmware (final Pi Zero W support)
|
||||||
|
* Wolfram Mathematica updated to version 11
|
||||||
|
* NOOBS installs now checks for presence of 'ssh' file on the NOOBS partition.
|
||||||
2017-02-16:
|
2017-02-16:
|
||||||
* Chromium browser updated to version 56
|
* Chromium browser updated to version 56
|
||||||
* Adobe Flash Player updated to version 24.0.0.221
|
* Adobe Flash Player updated to version 24.0.0.221
|
||||||
|
|||||||
+4
-4
@@ -16,9 +16,9 @@ bootstrap(){
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
capsh --drop=cap_setfcap -- -c "${BOOTSTRAP_CMD} --components=main,contrib,non-free \
|
capsh --drop=cap_setfcap -- -c "${BOOTSTRAP_CMD} --components=main,contrib,non-free \
|
||||||
--arch armhf\
|
--arch armhf \
|
||||||
--no-check-gpg \
|
--keyring "${STAGE_DIR}/files/raspberrypi.gpg" \
|
||||||
$1 $2 $3"
|
$1 $2 $3" || rmdir "$2/debootstrap"
|
||||||
}
|
}
|
||||||
export -f bootstrap
|
export -f bootstrap
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ copy_previous(){
|
|||||||
false
|
false
|
||||||
fi
|
fi
|
||||||
mkdir -p "${ROOTFS_DIR}"
|
mkdir -p "${ROOTFS_DIR}"
|
||||||
rsync -aHAXx "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
|
rsync -aHAXx --exclude var/cache/apt/archives "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
|
||||||
}
|
}
|
||||||
export -f copy_previous
|
export -f copy_previous
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
locales
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# For more options and information see
|
# For more options and information see
|
||||||
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
|
# http://rpf.io/configtxt
|
||||||
# Some settings may impact device functionality. See link above for details
|
# Some settings may impact device functionality. See link above for details
|
||||||
|
|
||||||
# uncomment if you get no picture on HDMI for a default "safe" mode
|
# uncomment if you get no picture on HDMI for a default "safe" mode
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
proc /proc proc defaults 0 0
|
proc /proc proc defaults 0 0
|
||||||
/dev/mmcblk0p1 /boot vfat defaults 0 2
|
BOOTDEV /boot vfat defaults 0 2
|
||||||
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
|
ROOTDEV / ext4 defaults,noatime 0 1
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
ssh locales less fbset sudo psmisc strace module-init-tools ed ncdu crda
|
ssh less fbset sudo psmisc strace module-init-tools ed ncdu crda
|
||||||
console-setup keyboard-configuration debconf-utils parted unzip
|
console-setup keyboard-configuration debconf-utils parted unzip
|
||||||
build-essential manpages-dev python bash-completion gdb pkg-config
|
build-essential manpages-dev python bash-completion gdb pkg-config
|
||||||
python-rpi.gpio v4l-utils
|
python-rpi.gpio v4l-utils
|
||||||
@@ -15,3 +15,5 @@ pi-bluetooth
|
|||||||
apt-listchanges
|
apt-listchanges
|
||||||
usb-modeswitch
|
usb-modeswitch
|
||||||
apt-transport-https
|
apt-transport-https
|
||||||
|
libpam-chksshpwd
|
||||||
|
rpi-update
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
--- a/rootfs/boot/cmdline.txt
|
--- a/rootfs/boot/cmdline.txt
|
||||||
+++ b/rootfs/boot/cmdline.txt
|
+++ b/rootfs/boot/cmdline.txt
|
||||||
@@ -1 +1 @@
|
@@ -1 +1 @@
|
||||||
-dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
-dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
||||||
+dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
|
+dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
log_daemon_msg "Starting resize2fs_once"
|
log_daemon_msg "Starting resize2fs_once"
|
||||||
ROOT_DEV=`grep -Eo 'root=[[:graph:]]+' /proc/cmdline | cut -d '=' -f 2-` &&
|
ROOT_DEV=$(findmnt / -o source -n) &&
|
||||||
resize2fs $ROOT_DEV &&
|
resize2fs $ROOT_DEV &&
|
||||||
update-rc.d resize2fs_once remove &&
|
update-rc.d resize2fs_once remove &&
|
||||||
rm /etc/init.d/resize2fs_once &&
|
rm /etc/init.d/resize2fs_once &&
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
on_chroot << EOF
|
|
||||||
apt-get clean
|
|
||||||
EOF
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
-lite
|
IMG_SUFFIX="-lite"
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
NOOBS_NAME="Raspbian Lite"
|
||||||
|
NOOBS_DESCRIPTION="A port of Debian jessie for the Raspberry Pi (minimal version)"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
gstreamer1.0-x gstreamer1.0-omx gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-libav
|
gstreamer1.0-x gstreamer1.0-omx gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-libav
|
||||||
xpdf gtk2-engines alsa-utils
|
xpdf gtk2-engines alsa-utils
|
||||||
desktop-base
|
desktop-base
|
||||||
git-core rpi-update
|
git
|
||||||
omxplayer
|
omxplayer
|
||||||
raspberrypi-artwork
|
raspberrypi-artwork
|
||||||
policykit-1
|
policykit-1
|
||||||
|
|||||||
@@ -1,4 +1,2 @@
|
|||||||
# Enable realtime process priority?
|
# Enable realtime process priority?
|
||||||
jackd2 jackd/tweak_rt_limits boolean true
|
jackd2 jackd/tweak_rt_limits boolean true
|
||||||
# Do you accept the Wolfram - Raspberry Pi® Bundle License Agreement?
|
|
||||||
wolfram-engine shared/accepted-wolfram-eula boolean true
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ python3-pgzero
|
|||||||
python-serial python3-serial
|
python-serial python3-serial
|
||||||
python-picamera python3-picamera
|
python-picamera python3-picamera
|
||||||
debian-reference-en dillo x2x
|
debian-reference-en dillo x2x
|
||||||
wolfram-engine
|
|
||||||
raspberrypi-net-mods raspberrypi-ui-mods
|
raspberrypi-net-mods raspberrypi-ui-mods
|
||||||
smartsim penguinspuzzle
|
smartsim penguinspuzzle
|
||||||
python-pip python3-pip
|
python-pip python3-pip
|
||||||
@@ -34,3 +33,5 @@ python-picraft python3-picraft
|
|||||||
python3-codebug-tether python3-codebug-i2c-tether
|
python3-codebug-tether python3-codebug-i2c-tether
|
||||||
python-sense-emu python3-sense-emu sense-emu-tools python-sense-emu-doc
|
python-sense-emu python3-sense-emu sense-emu-tools python-sense-emu-doc
|
||||||
pprompt
|
pprompt
|
||||||
|
scratch2
|
||||||
|
python3-thonny
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
python-automationhat python3-automationhat
|
||||||
|
python-blinkt python3-blinkt
|
||||||
|
python-cap1xxx python3-cap1xxx
|
||||||
|
python-drumhat python3-drumhat
|
||||||
|
python-envirophat python3-envirophat
|
||||||
|
python-explorerhat python3-explorerhat
|
||||||
|
python-fourletterphat python3-fourletterphat
|
||||||
|
python-microdotphat python3-microdotphat
|
||||||
|
python-mote python3-mote
|
||||||
|
python-motephat python3-motephat
|
||||||
|
python-phatbeat python3-phatbeat
|
||||||
|
python-pianohat python3-pianohat
|
||||||
|
python-piglow python3-piglow
|
||||||
|
python-rainbowhat python3-rainbowhat
|
||||||
|
python-scrollphat python3-scrollphat
|
||||||
|
python-scrollphathd python3-scrollphathd
|
||||||
|
python-sn3218 python3-sn3218
|
||||||
|
python-skywriter python3-skywriter
|
||||||
|
python-touchphat python3-touchphat
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
rm -f "${ROOTFS_DIR}/root/.vnc/private.key"
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
on_chroot << EOF
|
|
||||||
apt-get clean
|
|
||||||
EOF
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
IMG_SUFFIX="-4GB"
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Do you accept the Wolfram - Raspberry Pi® Bundle License Agreement?
|
||||||
|
wolfram-engine shared/accepted-wolfram-eula boolean true
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
wolfram-engine
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
IMG_SUFFIX=""
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
NOOBS_NAME="Raspbian"
|
||||||
|
NOOBS_DESCRIPTION="A port of Debian jessie for the Raspberry Pi (full desktop version)"
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
|
copy_previous
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user