Compare commits

..
Author SHA1 Message Date
Serge Schneider e910bf55ac Update release notes 2019-04-02 18:58:30 +01:00
Serge Schneider ee11b802b5 stage2: ethtool 2019-04-01 13:05:30 +01:00
XECDesign 3e9b176fab stage2: install rng-tools
https://github.com/raspberrypi/linux/issues/2799
2019-03-29 19:45:31 +00:00
Andrew Scheller 30a1528ae1 Switch to using parted's machine parseable output (#270) 2019-03-18 14:49:18 +00:00
Serge Schneider fb23b8ba92 Replace pxz with xz -T0 2019-03-11 11:49:04 +00:00
XECDesign 91bc38d510 Update Dockerfile 2019-03-11 11:14:04 +00:00
Serge Schneider 67241b9626 Handle cases where binfmt_misc is built into the kernel
Fixes #264
2019-03-06 16:25:42 +00:00
samtygier b7812278a8 Warn early if proxy not reachable (#262)
Avoids a later failure with a less informative message. See #248
2019-02-18 23:41:41 +00:00
Hugo Hromic 564f8ef1b8 Silence shellcheck warnings (#255)
* Made more specific shellcheck disables
* Fixed variable quoting (SC2086,SC2064)
* Use `$*` expansion instead of `$@` when not using arrays (SC2124)
* Use cleaner `$()` syntax instead of back quotes (SC2006)
* Improved comparator (SC2166)
* Minor improvements in coding style

Tested clean output using: `find -name "*.sh" | xargs -n1 shellcheck -x`.
2019-02-18 12:54:15 +00:00
Sam Tygier 7068086c94 Make sure unmount_image finds stale loop devices
Fixes #257 #104 #193

Instead of searching by full path, which is prone to fail, read full list and grep on filename.
2019-02-18 12:01:00 +00:00
Sam Tygier 9d38bfac23 README.md: Add more info on Docker 2019-02-18 09:45:10 +00:00
Sam Tygier 82bcfa427a Use different rsync options for boot and root
When copying files to boot, options that are not supported on fat32 can cause errors. For example owner, group and xattrs.
2019-02-18 09:45:10 +00:00
Sam Tygier a8eb03a5e4 Check binfmt_misc module is loaded
Give a friendly error message early.
2019-02-18 09:45:10 +00:00
Sam Tygier c147df99bc Ensure extra config file is passed to docker
Fixes #253

Rather than use --env-file, which gets overwritten by the regular config file, pass the any arguments to build-docker.sh through to build.sh.
2019-02-18 09:30:23 +00:00
Hugo Hromic 9e6af47045 Improve update_issue() function in common script
* Allow to customise pi-gen script name and repository in the generated issue file
* Preserve compatibility with existing function calls
2019-02-18 09:21:10 +00:00
Hugo Hromic 3b90b7ffed Improve bootstrap() function in common script
* Tidy up and simplify function code
* Allow to pass extra arguments to debootstrap, e.g. `--variant minbase`
* Preserve compatibility with existing function calls
2019-02-18 09:21:10 +00:00
Louis Matthijssen 3961bff8a4 Decrease zerofree verbosity
Fixes #251
2019-01-30 20:49:45 +00:00
Louis Matthijssen 61a994c88c Add a DEPLOY_ZIP setting 2019-01-30 19:05:22 +00:00
XECDesign d945d422d4 Update 00-run.sh
Fix typo
2019-01-23 15:32:08 +00:00
Sam Tygier c72f0b47ff Quote wpa wifi variables
Allows essid and passwords with special characters.
2019-01-22 17:44:28 +10:00
Sam Tygier 9714a11204 Add username validation
Check that the username is valid before doing any work. Use the default regex from debian's adduser.conf. Will also avoid risk of special characters causing issues.
2019-01-22 17:44:28 +10:00
Błażej Sowa d88f536536 IMG_SUFFIX evaluation in export image (fix #241) 2019-01-22 17:33:18 +10:00
Hereath 21aeca1b0c fixeb package realpath (via coreutils) 2019-01-21 19:42:08 +10:00
gudata 640027d5df build script is build.sh
build script is build.sh
2019-01-21 19:29:17 +10:00
Mike Roberts 3b1d05144f Fixed another hard reference to the 'pi' user name 2019-01-15 21:16:02 +10:00
rkubes 189b8f0400 Fixed a hard reference to the 'pi' user name 2019-01-15 12:16:42 +10:00
Sam Tygier d7ef46b06a Allow custom stages
STAGE_LIST can be specified in the config file to run additional build stages.
2019-01-07 12:49:45 +10:00
Błażej Sowa d7ca8e8f14 Allow custom deploy zip filename 2018-12-21 04:11:13 +00:00
Błażej Sowa 08405eb792 Allow custom image filename 2018-12-21 04:11:13 +00:00
Sam Tygier 7fbfdda31e Add commandline argument for config file
A config file can be specified when running build, e.g.:

  ./build.sh myconfig
2018-12-21 04:09:47 +00:00
Sam Tygier cc6605695d Allow enabling ssh server from config
Add ENABLE_SSH option
2018-12-21 04:09:47 +00:00
Sam Tygier f4dc2dcce6 Allow setting up wifi from config
Add WPA_ESSID, WPA_PASSWORD and WPA_COUNTRY options to config.
2018-12-21 04:09:47 +00:00
Sam Tygier d07096ebb5 Allow setting user name and password from config
Add FIRST_USER_NAME and FIRST_USER_PASS variables that can be set
in the config (or enviroment). Defaults to the standard pi and
raspberry.
2018-12-21 04:09:47 +00:00
Serge Schneider d1b747747c Add PINN restore support 2018-12-11 15:12:40 +00:00
Serge Schneider 980bdb961b Update release notes 2018-11-14 15:27:58 +00:00
Serge Schneider 7e0c786c64 stage4: add vlc 2018-11-08 12:26:07 +00:00
Serge Schneider 0f7e3dec05 export-noobs: fix units 2018-11-08 12:26:07 +00:00
Serge Schneider 181218ea9d Install libreoffice with all recommended packages
Move python-games to Raspbian Full and install as a Debian package.
2018-11-08 12:26:07 +00:00
Serge Schneider 6ffcafe1b8 Update release notes 2018-11-08 12:26:07 +00:00
Serge Schneider cbe273b850 Add extra packages back and create a 4GB image 2018-11-08 12:26:07 +00:00
Tomas Cerskus 4fc1423fdf scripts: do not ignore errors inside on_chroot calls 2018-11-08 12:12:04 +00:00
Krisjanis Rijnieks c9b658ecd6 Add curl to apt-get script in README 2018-10-22 13:58:15 +01:00
Serge Schneider f8b629d6c7 Check /debootstrap exists before trying to remove 2018-10-15 09:12:13 +01:00
Serge Schneider 33e94c46f3 stage2: set timezone properly 2018-10-11 17:20:18 +01:00
Serge Schneider 7ccf8185b3 Remove /debootstrap 2018-10-11 16:29:31 +01:00
Serge Schneider 378a2bdfa7 stage2: remove left-over debconf file 2018-10-11 16:24:38 +01:00
33 changed files with 306 additions and 151 deletions
+2 -2
View File
@@ -5,8 +5,8 @@ ENV DEBIAN_FRONTEND noninteractive
RUN apt-get -y update && \
apt-get -y install \
git vim parted \
quilt realpath qemu-user-static debootstrap zerofree pxz zip dosfstools \
bsdtar libcap2-bin rsync grep udev xz-utils curl xxd file \
quilt coreutils qemu-user-static debootstrap zerofree zip dosfstools \
bsdtar libcap2-bin rsync grep udev xz-utils curl xxd file kmod\
&& rm -rf /var/lib/apt/lists/*
COPY . /pi-gen/
+47 -3
View File
@@ -7,13 +7,14 @@ _Tool used to create the raspberrypi.org Raspbian images_
pi-gen runs on Debian based operating systems. Currently it is only supported on
either Debian Stretch or Ubuntu Xenial and is known to have issues building on
earlier releases of these systems.
earlier releases of these systems. On other Linux distributions it may be possible
to use the Docker build described below.
To install the required dependencies for pi-gen you should run:
```bash
apt-get install quilt parted realpath qemu-user-static debootstrap zerofree pxz zip \
dosfstools bsdtar libcap2-bin grep rsync xz-utils file git
apt-get install coreutils quilt parted qemu-user-static debootstrap zerofree zip \
dosfstools bsdtar libcap2-bin grep rsync xz-utils file git curl
```
The file `depends` contains a list of tools needed. The format of this
@@ -68,11 +69,34 @@ The following environment variables are supported:
Output directory for target system images and NOOBS bundles.
* `DEPLOY_ZIP` (Default: `1`)
Setting to `0` will deploy the actual image (`.img`) instead of a zipped image (`.zip`).
* `USE_QEMU` (Default: `"0"`)
Setting to '1' enables the QEMU mode - creating an image that can be mounted via QEMU for an emulated
environment. These images include "-qemu" in the image file name.
* `FIRST_USER_NAME` (Default: "pi" )
Username for the first user
* `FIRST_USER_PASS` (Default: "raspberry")
Password for the first user
* `WPA_ESSID`, `WPA_PASSWORD` and `WPA_COUNTRY` (Default: unset)
If these are set, they are use to configure `wpa_supplicant.conf`, so that the raspberry pi can automatically connect to a wifi network on first boot.
* `ENABLE_SSH` (Default: `0`)
Setting to `1` will enable ssh server for remote log in. Note that if you are using a common password such as the defaults there is a high risk of attackers taking over you RaspberryPi.
* `STAGE_LIST` (Default: `stage*`)
If set, then instead of working through the numeric stages in order, this list will be followed. For example setting to `stage0 stage1 mystage stage2` will run the contents of `mystage` before stage2. An absolute or relative path can be given for stages outside the pi-gen directory.
A simple example for building Raspbian:
@@ -80,6 +104,13 @@ A simple example for building Raspbian:
IMG_NAME='Raspbian'
```
The config file can also be specified on the command line as an argument the `build.sh` or `build-docker.sh` scripts.
```
./build.sh -c myconfig
```
This is parsed after `config` so can be used to override values set there.
## How the build process works
@@ -128,6 +159,13 @@ It is recommended to examine build.sh for finer details.
## Docker Build
Docker can be used to perform the build inside a container. This partially isolates
the build from the host system, and allows using the script on non-debian based
systems (e.g. Fedora Linux). The isolate is not complete due to the need to use
some kernel level services for arm emulation (binfmt) and loop devices (losetup).
To build:
```bash
vi config # Edit your config file. See above.
./build-docker.sh
@@ -143,6 +181,12 @@ continue:
CONTINUE=1 ./build-docker.sh
```
To examine the container after a failure you can enter a shell within it using:
```bash
sudo docker run -it --privileged --volumes-from=pigen_work pi-gen /bin/bash
```
After successful build, the build container is by default removed. This may be undesired when making incremental changes to a customized build. To prevent the build script from remove the container add
```bash
+20 -22
View File
@@ -1,9 +1,10 @@
#!/bin/bash -e
BUILD_OPTS="$*"
DOCKER="docker"
set +e
$DOCKER ps >/dev/null 2>&1
if [ $? != 0 ]; then
if ! $DOCKER ps >/dev/null 2>&1; then
DOCKER="sudo docker"
fi
if ! $DOCKER ps >/dev/null; then
@@ -13,29 +14,29 @@ if ! $DOCKER ps >/dev/null; then
fi
set -e
config_file=()
if [ -f config ]; then
config_file=("--env-file" "$(pwd)/config")
source config
fi
while getopts "c:" flag
do
case "$flag" in
c)
# shellcheck disable=SC1090
source "$OPTARG"
;;
*)
;;
esac
done
CONTAINER_NAME=${CONTAINER_NAME:-pigen_work}
CONTINUE=${CONTINUE:-0}
PRESERVE_CONTAINER=${PRESERVE_CONTAINER:-0}
if [ "$*" != "" ] || [ -z "${IMG_NAME}" ]; then
if [ -z "${IMG_NAME}" ]; then
echo "IMG_NAME not set in 'config'" 1>&2
echo 1>&2
fi
cat >&2 <<EOF
Usage:
build-docker.sh [options]
Optional environment arguments: ( =<default> )
CONTAINER_NAME=pigen_work set a name for the build container
CONTINUE=1 continue from a previously started container
PRESERVE_CONTAINER=1 keep build container even on successful build
EOF
exit 1
fi
@@ -54,23 +55,20 @@ fi
$DOCKER build -t pi-gen .
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 \
--volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \
-e IMG_NAME="${IMG_NAME}"\
pi-gen \
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
cd /pi-gen; ./build.sh;
cd /pi-gen; ./build.sh ${BUILD_OPTS} ;
rsync -av work/*/build.log deploy/" &
wait "$!"
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
time $DOCKER run --name "${CONTAINER_NAME}" --privileged \
-e IMG_NAME="${IMG_NAME}"\
"${config_file[@]}" \
pi-gen \
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
cd /pi-gen; ./build.sh &&
cd /pi-gen; ./build.sh ${BUILD_OPTS} &&
rsync -av work/*/build.log deploy/" &
wait "$!"
fi
@@ -80,7 +78,7 @@ ls -lah deploy
# cleanup
if [ "$PRESERVE_CONTAINER" != "1" ]; then
$DOCKER rm -v $CONTAINER_NAME
$DOCKER rm -v "$CONTAINER_NAME"
fi
echo "Done! Your image(s) should be in deploy/"
+43 -3
View File
@@ -1,5 +1,5 @@
#!/bin/bash -e
# shellcheck disable=SC2119,SC1091
# shellcheck disable=SC2119
run_sub_stage()
{
log "Begin ${SUB_STAGE_DIR}"
@@ -102,7 +102,7 @@ run_stage(){
./prerun.sh
log "End ${STAGE_DIR}/prerun.sh"
fi
for SUB_STAGE_DIR in ${STAGE_DIR}/*; do
for SUB_STAGE_DIR in "${STAGE_DIR}"/*; do
if [ -d "${SUB_STAGE_DIR}" ] &&
[ ! -f "${SUB_STAGE_DIR}/SKIP" ]; then
run_sub_stage
@@ -124,9 +124,26 @@ fi
if [ -f config ]; then
# shellcheck disable=SC1091
source config
fi
while getopts "c:" flag
do
case "$flag" in
c)
EXTRA_CONFIG="$OPTARG"
# shellcheck disable=SC1090
source "$EXTRA_CONFIG"
;;
*)
;;
esac
done
export PI_GEN=${PI_GEN:-pi-gen}
export PI_GEN_REPO=${PI_GEN_REPO:-https://github.com/RPi-Distro/pi-gen}
if [ -z "${IMG_NAME}" ]; then
echo "IMG_NAME not set" 1>&2
exit 1
@@ -134,13 +151,23 @@ fi
export USE_QEMU="${USE_QEMU:-0}"
export IMG_DATE="${IMG_DATE:-"$(date +%Y-%m-%d)"}"
export IMG_FILENAME="${IMG_FILENAME:-"${IMG_DATE}-${IMG_NAME}"}"
export ZIP_FILENAME="${ZIP_FILENAME:-"image_${IMG_DATE}-${IMG_NAME}"}"
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export SCRIPT_DIR="${BASE_DIR}/scripts"
export WORK_DIR="${WORK_DIR:-"${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"}"
export DEPLOY_DIR=${DEPLOY_DIR:-"${BASE_DIR}/deploy"}
export DEPLOY_ZIP="${DEPLOY_ZIP:-1}"
export LOG_FILE="${WORK_DIR}/build.log"
export FIRST_USER_NAME=${FIRST_USER_NAME:-pi}
export FIRST_USER_PASS=${FIRST_USER_PASS:-raspberry}
export WPA_ESSID
export WPA_PASSWORD
export WPA_COUNTRY
export ENABLE_SSH="${ENABLE_SSH:-0}"
export BASE_DIR
export CLEAN
@@ -170,13 +197,26 @@ source "${SCRIPT_DIR}/common"
# shellcheck source=scripts/dependencies_check
source "${SCRIPT_DIR}/dependencies_check"
#check username is valid
if [[ ! "$FIRST_USER_NAME" =~ ^[a-z][-a-z0-9_]*$ ]]; then
echo "Invalid FIRST_USER_NAME: $FIRST_USER_NAME"
exit 1
fi
if [[ -n "${APT_PROXY}" ]] && ! curl --silent ${APT_PROXY} >/dev/null ; then
echo "Could not reach APT_PROXY server:" ${APT_PROXY}
exit 1
fi
dependencies_check "${BASE_DIR}/depends"
mkdir -p "${WORK_DIR}"
log "Begin ${BASE_DIR}"
for STAGE_DIR in "${BASE_DIR}/stage"*; do
STAGE_LIST=${STAGE_LIST:-${BASE_DIR}/stage*}
for STAGE_DIR in $STAGE_LIST; do
STAGE_DIR=$(realpath "${STAGE_DIR}")
run_stage
done
+3 -2
View File
@@ -1,10 +1,10 @@
quilt
parted
realpath
realpath:coreutils
qemu-arm-static:qemu-user-static
debootstrap
zerofree
pxz zip
zip
mkdosfs:dosfstools
capsh:libcap2-bin
bsdtar
@@ -15,3 +15,4 @@ curl
xxd
file
git
lsmod:kmod
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
IMGID="$(dd if="${IMG_FILE}" skip=440 bs=1 count=4 2>/dev/null | xxd -e | cut -f 2 -d' ')"
+12 -7
View File
@@ -1,15 +1,15 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
INFO_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.info"
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
INFO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.info"
on_chroot << EOF
/etc/init.d/fake-hwclock stop
hardlink -t /usr/share/doc
EOF
if [ -d "${ROOTFS_DIR}/home/pi/.config" ]; then
chmod 700 "${ROOTFS_DIR}/home/pi/.config"
if [ -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config" ]; then
chmod 700 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config"
fi
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache"
@@ -68,17 +68,22 @@ cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE"
ROOT_DEV="$(mount | grep "${ROOTFS_DIR} " | cut -f1 -d' ')"
unmount "${ROOTFS_DIR}"
zerofree -v "${ROOT_DEV}"
zerofree "${ROOT_DEV}"
unmount_image "${IMG_FILE}"
mkdir -p "${DEPLOY_DIR}"
rm -f "${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip"
rm -f "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip"
rm -f "${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
if [ "${DEPLOY_ZIP}" == "1" ]; then
pushd "${STAGE_WORK_DIR}" > /dev/null
zip "${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip" \
zip "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip" \
"$(basename "${IMG_FILE}")"
popd > /dev/null
else
cp "$IMG_FILE" "$DEPLOY_DIR"
fi
cp "$INFO_FILE" "$DEPLOY_DIR"
+8 -11
View File
@@ -1,6 +1,6 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
unmount_image "${IMG_FILE}"
@@ -37,16 +37,12 @@ p
w
EOF
PARTED_OUT=$(parted -s "${IMG_FILE}" unit b print)
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^ 1'| xargs echo -n \
| cut -d" " -f 2 | tr -d B)
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^ 1'| xargs echo -n \
| cut -d" " -f 4 | tr -d B)
PARTED_OUT=$(parted -sm "${IMG_FILE}" unit b print)
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 2 | tr -d B)
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 4 | tr -d B)
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^ 2'| xargs echo -n \
| cut -d" " -f 2 | tr -d B)
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^ 2'| xargs echo -n \
| cut -d" " -f 4 | tr -d B)
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 2 | tr -d B)
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 4 | tr -d B)
BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}")
ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}")
@@ -66,4 +62,5 @@ mount -v "$ROOT_DEV" "${ROOTFS_DIR}" -t ext4
mkdir -p "${ROOTFS_DIR}/boot"
mount -v "$BOOT_DEV" "${ROOTFS_DIR}/boot" -t vfat
rsync -aHAXx --exclude var/cache/apt/archives "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
rsync -aHAXx --exclude /var/cache/apt/archives --exclude /boot "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/" "${ROOTFS_DIR}/boot/"
+2 -2
View File
@@ -13,8 +13,8 @@ tar -v -c -C files/marketing -f "${NOOBS_DIR}/marketing.tar" .
BOOT_SIZE="$(xz --robot -l "${NOOBS_DIR}/boot.tar.xz" | grep totals | cut -f 5)"
ROOT_SIZE="$(xz --robot -l "${NOOBS_DIR}/root.tar.xz" | grep totals | cut -f 5)"
BOOT_SIZE="$(( BOOT_SIZE / 1000000 + 1))"
ROOT_SIZE="$(( ROOT_SIZE / 1000000 + 1))"
BOOT_SIZE="$(( BOOT_SIZE / 1024 / 1024 + 1))"
ROOT_SIZE="$(( ROOT_SIZE / 1024 / 1024 + 1))"
BOOT_NOM="$(( BOOT_SIZE * 3 ))"
ROOT_NOM="$(( ROOT_SIZE + 400 ))"
@@ -1,7 +1,9 @@
#!/bin/sh
#supports_backup in PINN
set -ex
# shellcheck disable=SC2154
if [ -z "$part1" ] || [ -z "$part2" ]; then
printf "Error: missing environment variable part1 or part2\n" 1>&2
exit 1
@@ -13,9 +15,11 @@ mount "$part1" /tmp/1
mount "$part2" /tmp/2
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|^.* /boot |${part1} /boot |"
sed /tmp/2/etc/fstab -i -e "s|^[^#].* / |${part2} / |"
sed /tmp/2/etc/fstab -i -e "s|^[^#].* /boot |${part1} /boot |"
# shellcheck disable=SC2154
if [ -z "$restore" ]; then
if [ -f /mnt/ssh ]; then
cp /mnt/ssh /tmp/1/
fi
@@ -31,6 +35,7 @@ fi
if ! grep -q resize /proc/cmdline; then
sed -i 's| init=/usr/lib/raspi-config/init_resize.sh||;s| quiet||2g' /tmp/1/cmdline.txt
fi
fi
umount /tmp/1
umount /tmp/2
@@ -1,4 +1,43 @@
UNRELEASED:
* Chromium browser updated to version 72
* VLC media player updated to version 3.0.6
* RealVNC Server updated to version 6.4.0
* Flash player updated to version 32.0.0.156
* Performance improvements to SDL library
* Performance improvements to pixman library
* Option to set display underscan added to startup wizard
* Mounted external drives now displayed on desktop by default
* Network plugin modified for improved compatibility with wpa_passphrase
* SD Card Copier tweaks to reduce copy failures
* Various minor bug fixes and appearance tweaks
* Added ethtool
* Added rng-tools
* Add PINN restore support
* Linux kernel 4.14.98
* Raspberry Pi firmware f8939644f7bd3065068787f1f92b3f3c79cf3de9
2018-11-13:
* Two versions of image created - "base" image has no optional software packages included; "full" image has all optional packages
- Removed from "base" image - LibreOffice, Thonny, Scratch, Scratch 2, Sonic Pi, Minecraft, Python Games, SmartSim, SenseHAT Emulator
- Added to "full" image - Mathematica, BlueJ, Greenfoot, Node-RED, Claws Mail, VNC Viewer
* Python Games and SmartSim added to Recommended Software
* VLC media player with VideoCore hardware acceleration included in image
* Version 3.0.5 of Thonny included
* Modifications to LXDE components to enable local configuration to override global configuration correctly
* Modifications to Appearance Settings to support above configuration changes
* Modifications to various initial config defaults and relevant package to support above configuration changes
* Selecting default option in Appearance Settings now deletes relevant local configuration files
* PiX theme modified so that all changes made in Appearance Settings are in override files rather than in theme files
* Design of scrollbar buttons changed
* Image Viewer moved into Graphics category on main menu
* Recommended Software now installs LibreOffice language support files if needed, and suggests reboot if needed
* Latest version of Pepper Flash plugin included
* Chromium h264ify plugin permissions set correctly by default
* Corrections to various MIME types so that files open in sensible default applications
* Set default timezone to 'Europe/London'
* Linux kernel 4.14.79
* Raspberry Pi firmware 12e0bf86e08d6067372bc0a45d7e8a10d3113210
2018-10-09:
* Raspberry Pi 3A+ support
* In startup wizard, assign keyboard to country as per Debian installer recommendations
* In startup wizard, add option to use US keyboard in preference to country-specific option
* In startup wizard, show IP address on first page
@@ -19,7 +58,6 @@ UNRELEASED:
* Add ability to prevent software update changing configuration files, by creating ~/.config/.lock file
* Various other small bug fixes, tweaks and changes to text
* Make dhcpcd work with 3G devices
* Set default timezone to 'Europe/London'
* Add hw acceleration to ffmpeg
* Improved WiFi-BT coexistence parameters
* Run fake-hwclock before systemd-fsck-root
+10 -14
View File
@@ -1,24 +1,20 @@
#!/bin/bash -e
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img"
NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
unmount_image "${IMG_FILE}"
mkdir -p "${STAGE_WORK_DIR}"
cp "${WORK_DIR}/export-image/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img" "${STAGE_WORK_DIR}/"
cp "${WORK_DIR}/export-image/${IMG_FILENAME}${IMG_SUFFIX}.img" "${STAGE_WORK_DIR}/"
rm -rf "${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
rm -rf "${NOOBS_DIR}"
PARTED_OUT=$(parted -s "${IMG_FILE}" unit b print)
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^ 1'| xargs echo -n \
| cut -d" " -f 2 | tr -d B)
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^ 1'| xargs echo -n \
| cut -d" " -f 4 | tr -d B)
PARTED_OUT=$(parted -sm "${IMG_FILE}" unit b print)
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 2 | tr -d B)
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 4 | tr -d B)
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^ 2'| xargs echo -n \
| cut -d" " -f 2 | tr -d B)
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^ 2'| xargs echo -n \
| cut -d" " -f 4 | tr -d B)
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 2 | tr -d B)
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 4 | tr -d B)
BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}")
ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}")
@@ -33,8 +29,8 @@ mount "$BOOT_DEV" "${STAGE_WORK_DIR}/rootfs/boot"
ln -sv "/lib/systemd/system/apply_noobs_os_config.service" "$ROOTFS_DIR/etc/systemd/system/multi-user.target.wants/apply_noobs_os_config.service"
bsdtar --numeric-owner --format gnutar --use-compress-program pxz -C "${STAGE_WORK_DIR}/rootfs/boot" -cpf "${NOOBS_DIR}/boot.tar.xz" .
bsdtar --numeric-owner --format gnutar -C "${STAGE_WORK_DIR}/rootfs/boot" -cpf - . | xz -T0 > "${NOOBS_DIR}/boot.tar.xz"
umount "${STAGE_WORK_DIR}/rootfs/boot"
bsdtar --numeric-owner --format gnutar --use-compress-program pxz -C "${STAGE_WORK_DIR}/rootfs" --one-file-system -cpf "${NOOBS_DIR}/root.tar.xz" .
bsdtar --numeric-owner --format gnutar -C "${STAGE_WORK_DIR}/rootfs" --one-file-system -cpf - . | xz -T0 > "${NOOBS_DIR}/root.tar.xz"
unmount_image "${IMG_FILE}"
+17 -13
View File
@@ -4,21 +4,25 @@ log (){
export -f log
bootstrap(){
local ARCH
ARCH=$(dpkg --print-architecture)
local BOOTSTRAP_CMD=debootstrap
local BOOTSTRAP_ARGS=()
export http_proxy=${APT_PROXY}
if [ "$ARCH" != "armhf" ]; then
local BOOTSTRAP_CMD=qemu-debootstrap
else
local BOOTSTRAP_CMD=debootstrap
if [ "$(dpkg --print-architecture)" != "armhf" ]; then
BOOTSTRAP_CMD=qemu-debootstrap
fi
capsh --drop=cap_setfcap -- "${BOOTSTRAP_CMD}" --components=main,contrib,non-free \
--arch armhf \
--keyring "${STAGE_DIR}/files/raspberrypi.gpg" \
"$1" "$2" "$3" || rmdir "$2/debootstrap"
BOOTSTRAP_ARGS+=(--arch armhf)
BOOTSTRAP_ARGS+=(--components "main,contrib,non-free")
BOOTSTRAP_ARGS+=(--keyring "${STAGE_DIR}/files/raspberrypi.gpg")
BOOTSTRAP_ARGS+=("$@")
capsh --drop=cap_setfcap -- "${BOOTSTRAP_CMD}" "${BOOTSTRAP_ARGS[@]}" || true
if [ -d "$2/debootstrap" ]; then
rmdir "$2/debootstrap"
fi
}
export -f bootstrap
@@ -53,7 +57,7 @@ unmount_image(){
sync
sleep 1
local LOOP_DEVICES
LOOP_DEVICES=$(losetup -j "${1}" | cut -f1 -d':')
LOOP_DEVICES=$(losetup --list | grep "$(basename "${1}")" | cut -f1 -d' ')
for LOOP_DEV in ${LOOP_DEVICES}; do
if [ -n "${LOOP_DEV}" ]; then
local MOUNTED_DIR
@@ -85,14 +89,14 @@ on_chroot() {
mount --bind /sys "${ROOTFS_DIR}/sys"
fi
capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- "$@"
capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- -e "$@"
}
export -f on_chroot
update_issue() {
local GIT_HASH
GIT_HASH=$(git rev-parse HEAD)
echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using pi-gen, https://github.com/RPi-Distro/pi-gen, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue"
echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue"
}
export -f update_issue
+8
View File
@@ -27,4 +27,12 @@ dependencies_check()
echo "$missing"
false
fi
if ! grep -q "/proc/sys/fs/binfmt_misc" /proc/mounts; then
echo "Module binfmt_misc not loaded in host"
echo "Please run:"
echo " sudo modprobe binfmt_misc"
exit 1
fi
}
+3 -3
View File
@@ -5,10 +5,10 @@ install -m 644 files/noclear.conf "${ROOTFS_DIR}/etc/systemd/system/[email protected]
install -v -m 644 files/fstab "${ROOTFS_DIR}/etc/fstab"
on_chroot << EOF
if ! id -u pi >/dev/null 2>&1; then
adduser --disabled-password --gecos "" pi
if ! id -u ${FIRST_USER_NAME} >/dev/null 2>&1; then
adduser --disabled-password --gecos "" ${FIRST_USER_NAME}
fi
echo "pi:raspberry" | chpasswd
echo "${FIRST_USER_NAME}:${FIRST_USER_PASS}" | chpasswd
echo "root:root" | chpasswd
EOF
-2
View File
@@ -7,8 +7,6 @@ console-setup console-setup/codeset47 select Guess optimal character set
# Font for the console:
# Choices: Fixed, Goha, GohaClassic, Terminus, TerminusBold, TerminusBoldVGA, VGA, Do not change the boot/kernel font, Let the system select a suitable font
console-setup console-setup/fontface47 select Do not change the boot/kernel font
tzdata tzdata/Areas select Europe
tzdata tzdata/Zones/Europe select London
# Key to function as AltGr:
# Choices: The default for the keyboard layout, No AltGr key, Right Alt (AltGr), Right Control, Right Logo key, Menu key, Left Alt, Left Logo key, Keypad Enter key, Both Logo keys, Both Alt keys
keyboard-configuration keyboard-configuration/altgr select The default for the keyboard layout
+2
View File
@@ -23,3 +23,5 @@ htop
man-db
policykit-1
ssh-import-id
rng-tools
ethtool
+7 -3
View File
@@ -15,7 +15,11 @@ on_chroot << EOF
systemctl disable hwclock.sh
systemctl disable nfs-common
systemctl disable rpcbind
if [ "${ENABLE_SSH}" == "1" ]; then
systemctl enable ssh
else
systemctl disable ssh
fi
systemctl enable regenerate_ssh_host_keys
EOF
@@ -32,12 +36,12 @@ systemctl enable resize2fs_once
EOF
fi
on_chroot << \EOF
on_chroot <<EOF
for GRP in input spi i2c gpio; do
groupadd -f -r "$GRP"
groupadd -f -r "\$GRP"
done
for GRP in adm dialout cdrom audio users sudo video games plugdev input gpio spi i2c netdev; do
adduser pi $GRP
adduser $FIRST_USER_NAME \$GRP
done
EOF
+9
View File
@@ -6,3 +6,12 @@ install -v -m 644 files/wait.conf "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.serv
install -v -d "${ROOTFS_DIR}/etc/wpa_supplicant"
install -v -m 600 files/wpa_supplicant.conf "${ROOTFS_DIR}/etc/wpa_supplicant/"
if [ -v WPA_COUNTRY ]; then
echo "country=${WPA_COUNTRY}" >> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf"
fi
if [ -v WPA_ESSID ] && [ -v WPA_PASSWORD ]; then
on_chroot <<EOF
wpa_passphrase "${WPA_ESSID}" "${WPA_PASSWORD}" >> "/etc/wpa_supplicant/wpa_supplicant.conf"
EOF
fi
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash -e
echo "Europe/London" > "${ROOTFS_DIR}/etc/timezone"
rm "${ROOTFS_DIR}/etc/localtime"
on_chroot << EOF
dpkg-reconfigure -f noninteractive tzdata
EOF
+1 -1
View File
@@ -1,2 +1,2 @@
NOOBS_NAME="Raspbian Lite"
NOOBS_DESCRIPTION="A port of Debian Stretch for the Raspberry Pi (minimal version)"
NOOBS_DESCRIPTION="A port of Debian with no desktop environment"
+2 -9
View File
@@ -1,21 +1,16 @@
java-common oracle-java8-jdk
libreoffice-sdbc-hsqldb
sonic-pi
python idle python3-pygame python-pygame python-tk
python3 idle3 python3-tk
python3-pgzero
python-serial python3-serial
python-picamera python3-picamera
debian-reference-en dillo x2x
debian-reference-en dillo
raspberrypi-net-mods raspberrypi-ui-mods
smartsim
python-pip python3-pip
python3-numpy
pypy
minecraft-pi python-minecraftpi
alacarte rc-gui sense-hat
tree
scratch nuscratch
libgl1-mesa-dri libgles1-mesa libgles2-mesa xcompmgr
geany
piclone
@@ -25,10 +20,8 @@ python-twython python3-twython
python-smbus python3-smbus
python-flask python3-flask
python-picraft python3-picraft
python-sense-emu python3-sense-emu sense-emu-tools python-sense-emu-doc
pprompt
scratch2
python3-thonny
piwiz
rp-prefapps
libav-tools
vlc
@@ -1,4 +1,3 @@
libreoffice-pi
timidity
pi-package
realvnc-vnc-server
-2
View File
@@ -1,6 +1,4 @@
hunspell-en-gb
hyphen-en-gb
libreoffice-help-en-gb
libreoffice-l10n-en-gb
wamerican
wbritish
+4 -22
View File
@@ -1,25 +1,7 @@
#!/bin/bash -e
HASH="$(wget https://api.github.com/repos/KenT2/python-games/git/refs/heads/master -qO -| grep \"sha\" | cut -f 2 -d ':' | cut -f 2 -d \")"
if [ -f files/python_games.hash ]; then
HASH_LOCAL="$(cat files/python_games.hash)"
fi
if [ ! -e files/python_games.tar.gz ] || [ "$HASH" != "$HASH_LOCAL" ]; then
wget "https://github.com/KenT2/python-games/tarball/master" -O files/python_games.tar.gz
echo "$HASH" > files/python_games.hash
fi
ln -sf pip3 "${ROOTFS_DIR}/usr/bin/pip-3.2"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/pi/python_games"
tar xvf files/python_games.tar.gz -C "${ROOTFS_DIR}/home/pi/python_games" --strip-components=1
chown 1000:1000 "${ROOTFS_DIR}/home/pi/python_games" -Rv
chmod +x "${ROOTFS_DIR}/home/pi/python_games/launcher.sh"
#Alacarte fixes
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/pi/.local"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/pi/.local/share"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/pi/.local/share/applications"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/pi/.local/share/desktop-directories"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share/applications"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share/desktop-directories"
-2
View File
@@ -1,2 +0,0 @@
python_games.hash
python_games.tar.gz
+2 -3
View File
@@ -11,6 +11,5 @@ fi
file "files/$magpi_latest" | grep -q "PDF document"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/pi/MagPi"
install -v -o 1000 -g 1000 -m 644 "files/$magpi_latest" "${ROOTFS_DIR}/home/pi/MagPi/"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/MagPi"
install -v -o 1000 -g 1000 -m 644 "files/$magpi_latest" "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/MagPi/"
+1 -1
View File
@@ -1,2 +1,2 @@
NOOBS_NAME="Raspbian"
NOOBS_DESCRIPTION="A port of Debian Stretch for the Raspberry Pi (full desktop version)"
NOOBS_DESCRIPTION="A port of Debian with the Raspberry Pi Desktop"
+15
View File
@@ -0,0 +1,15 @@
python3-thonny
sonic-pi
scratch nuscratch scratch2
smartsim
minecraft-pi python-minecraftpi
python-sense-emu sense-emu-tools python-sense-emu-doc
wolfram-engine
claws-mail
greenfoot bluej
nodered
realvnc-vnc-viewer
python-games
@@ -0,0 +1,3 @@
libreoffice-pi
libreoffice-help-en-gb
libreoffice-l10n-en-gb
+4
View File
@@ -0,0 +1,4 @@
IMG_SUFFIX="-full"
if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi
+2
View File
@@ -0,0 +1,2 @@
NOOBS_NAME="Raspbian Full"
NOOBS_DESCRIPTION="A port of Debian with desktop and recommended applications"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash -e
if [ ! -d "${ROOTFS_DIR}" ]; then
copy_previous
fi