Compare commits

...
Author SHA1 Message Date
Serge Schneider acc4f56597 Add .gitlab-ci.yml 2017-04-05 16:50:37 +01:00
Serge Schneider 0ee2578bc6 export-noobs: replace all spaces with underscores in OS icon file 2017-04-03 16:39:20 +01:00
Serge Schneider fa1e67f92e export-noobs: rename Raspbian.png to match NOOBS_NAME 2017-04-03 16:19:20 +01:00
Serge Schneider 7360f24430 Add a 4GB image 2017-04-03 16:01:13 +01:00
Serge Schneider 6c146a7bb7 Clean up clean up 2017-04-03 16:01:13 +01:00
Serge Schneider c0a5b85f8f Update release notes 2017-04-03 16:01:13 +01:00
Benjamin Parzella 762e20cc0a Minor error in stage2 sys-tweaks debconf file
Seems like there is a misplaced line break
2017-04-03 15:59:16 +01:00
Mike Roberts 000e61f84d Updated {i}-run-chroot script filename to match {i}-run.sh format 2017-03-20 15:53:55 +01:00
David C Wang 16b3133f46 Make WORK_DIR and DEPLOY_DIR configurable through config file 2017-03-14 14:00:28 +00:00
Serge Schneider 9cffa42a35 config.txt: update documentation URL 2017-03-13 17:46:14 +00:00
Serge Schneider 8373e58195 build.sh: execute postrun.sh, if executable 2017-03-13 17:44:31 +00:00
Serge Schneider 1f1ddb5f13 Specify additional variables in EXPORT_* files 2017-03-13 17:39:58 +00:00
Serge Schneider 8f22f2f27e stage2: install libpam-chksshpwd 2017-03-13 17:31:49 +00:00
Serge Schneider 718a4e8c21 Switch to PARTUUID 2017-03-07 15:14:03 +00:00
Serge Schneider 8e74b4f15c Revert "Enable pi-gen build when "pi-gen/work" dir is a symlink"
This reverts commit 40b5af925b.
2017-03-06 14:37:13 +00:00
Serge Schneider 8f7c537d71 partition_setup.sh: Only copy files 2017-03-06 11:58:48 +00:00
David C Wang 40b5af925b Enable pi-gen build when "pi-gen/work" dir is a symlink
* Occasionally, it is necessary to symbolically link the pi-gen/work
  directory to a different place on the filesystem.  This is true if
  the current partition is low on space, or when building within
  vagrant virtual machine shared mounts which do not support all
  regular fs operations.
* Without this change, the pi-gen build will fail to unmount because
  the OS 'mount' command returns canonical paths which fails to match
  the symbolically linked path to 'work' dir.
2017-03-06 11:56:12 +00:00
Serge Schneider 7748ed0df1 Copy wpa_supplicant.conf from NOOBS 2017-03-06 11:49:13 +00:00
Serge Schneider b0be14afdf Update release notes 2017-03-06 09:27:48 +00:00
Serge Schneider daa9e35ada Copy ssh and ssh.txt to boot partition 2017-03-06 09:27:48 +00:00
Serge Schneider a68a0713e6 Format boot partition as FAT32 2017-03-06 09:27:48 +00:00
Serge Schneider d664bfed4b Update release notes 2017-03-06 09:27:48 +00:00
Serge Schneider 5cccd741fe stage4: install RealVNC with no recommends 2017-03-06 09:27:48 +00:00
Serge Schneider 3fa66a0699 Update release notes 2017-03-06 09:27:48 +00:00
Serge Schneider 37902fb114 export-image: Format /boot as FAT32 2017-03-06 09:27:48 +00:00
Serge Schneider 51fbf45dd7 stage2: Manually install /etc/default/console-setup
debconf alone does not seem to work
2017-03-06 09:27:48 +00:00
Ross Schulman 8f017cb69a Building in a different direction by replacing stage folders (#51) 2017-02-26 18:12:37 +00:00
Sam Holmes a45a061ec4 Add README warning for binfmt-support requirement (#46) 2017-02-08 16:10:11 +00:00
Claus F. Strasburger 667318116a Added Docker support (#40)
* Added Docker support

- replaced necessity for devicemapper (through kpartx) by using parted and
  losetup with offsets
- added Dockerfile
- added dependency for parted and grep
- added hints to README.md
- common: loop through unmounts, fix shellcheck warnings

* stage2: use debconf instead of console-setup patch. Fixes #41
2017-01-23 12:44:03 +00:00
XECDesign bc8a74858e Merge pull request #43 from sam3d/dev
Add stage specification documentation
2017-01-20 17:51:55 +00:00
Sam Holmes a1c26242f6 Add stage specification instructions 2017-01-20 17:38:41 +00:00
Sam Holmes c5e36bc86a Tidy up README hierarchy further 2017-01-20 17:38:41 +00:00
Sam Holmes 9f5cfdea6b Update README markdown formatting
The additional space between the # at the beginning of a section and
title conforms to correct markdown spec (and works in all markdown
renderers, as opposed to just GitHub)
2017-01-20 17:38:37 +00:00
Serge Schneider 1806504983 stage2: Add apt-transport-https
Fixes RPi-Distro/repo#52
2017-01-12 14:24:43 +00:00
Serge Schneider a9c27d27bd stage4: don't copy ui-mods files 2016-12-06 16:32:33 +00:00
XECDesign d0020af839 README.md: Add libcap2-bin as a dependency 2016-12-05 12:32:19 +00:00
XECDesign 09a29f745c Merge pull request #35 from martignoni/dev
Add bsdtar to dependencies
2016-12-05 12:31:09 +00:00
Nicolas Martignoni 2b3cb8ff72 Add bsdtar to dependencies 2016-12-04 20:38:28 +01:00
47 changed files with 356 additions and 134 deletions
+3
View File
@@ -0,0 +1,3 @@
output/
work/
deploy/
+1
View File
@@ -1,6 +1,7 @@
deploy/*
work/*
config
postrun.sh
SKIP
.pc
*-pc
+3
View File
@@ -0,0 +1,3 @@
test:
script:
- echo "test"
+12
View File
@@ -0,0 +1,12 @@
FROM debian:jessie
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 \
&& rm -rf /var/lib/apt/lists/*
COPY . /pi-gen/
VOLUME [ "/pi-gen/work", "/pi-gen/deploy"]
Regular → Executable
+41 -11
View File
@@ -1,12 +1,14 @@
#TODO
# pi-gen
_Tool used to create the raspberrypi.org Raspbian images_
### TODO
1. Documentation
#Dependencies
## Dependencies
`quilt kpartx realpath qemu-user-static debootstrap zerofree pxz zip dosfstools`
`quilt parted realpath qemu-user-static debootstrap zerofree pxz zip dosfstools bsdtar libcap2-bin grep rsync`
#Config
## Config
Upon execution, `build.sh` will source the file `config` in the current
working directory. This bash shell fragment is intended to set needed
@@ -33,17 +35,33 @@ A simple example for building Raspbian:
IMG_NAME='Raspbian'
```
#Stage Anatomy
## Docker Build
```bash
vi config # Edit your config file. See above.
./build-docker.sh
```
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`
If something breaks along the line, you can edit the corresponding scripts, and
continue:
#Raspbian Stage Overview
```
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).
## Stage Anatomy
### Raspbian Stage Overview
The build of Raspbian is divided up into several stages for logical clarity
and modularity. This causes some initial complexity, but it simplifies
maintenance and allows for more easy customization.
- Stage 0, bootstrap. The primary purpose of this stage is to create a
- **Stage 0** - bootstrap. The primary purpose of this stage is to create a
usable filesystem. This is accomplished largely through the use of
`debootstrap`, which creates a minimal filesystem suitable for use as a
base.tgz on Debian systems. This stage also configures apt settings and
@@ -51,7 +69,7 @@ maintenance and allows for more easy customization.
minimal core is installed but not configured, and the system will not quite
boot yet.
- Stage 1, truly minimal system. This stage makes the system bootable by
- **Stage 1** - truly minimal system. This stage makes the system bootable by
installing system files like `/etc/fstab`, configures the bootloader, makes
the network operable, and installs packages like raspi-config. At this
stage the system should boot to a local console from which you have the
@@ -60,7 +78,7 @@ maintenance and allows for more easy customization.
really usable yet in a traditional sense yet. Still, if you want minimal,
this is minimal and the rest you could reasonably do yourself as sysadmin.
- State 2, lite system. This stage produces the Raspbian-Lite image. It
- **Stage 2** - lite system. This stage produces the Raspbian-Lite image. It
installs some optimized memory functions, sets timezone and charmap
defaults, installs fake-hwclock and ntp, wifi and bluetooth support,
dphys-swapfile, and other basics for managing the hardware. It also
@@ -75,13 +93,25 @@ maintenance and allows for more easy customization.
you were looking for something between truly minimal and Raspbian-lite,
here's where you start trimming.
- Stage 3, desktop system. Here's where you get the full desktop system
- **Stage 3** - desktop system. Here's where you get the full desktop system
with X11 and LXDE, web browsers, git for development, Raspbian custom UI
enhancements, etc. This is a base desktop system, with some development
tools installed.
- Stage 4, complete Raspbian system. More development tools, an email
- **Stage 4** - complete Raspbian system. More development tools, an email
client, learning tools like Scratch, specialized packages like sonic-pi and
wolfram-engine, system documentation, office productivity, etc. This is
the stage that installs all of the things that make Raspbian friendly to
new users.
### 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).
```
# Example for building a lite system
$ touch ./stage3/SKIP ./stage4/SKIP
$ rm stage4/EXPORT*
```
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.
+73
View File
@@ -0,0 +1,73 @@
#!/bin/bash -e
DOCKER="docker"
set +e
$DOCKER ps >/dev/null 2>&1
if [ $? != 0 ]; then
DOCKER="sudo docker"
fi
if ! $DOCKER ps >/dev/null; then
echo "error connecting to docker:"
$DOCKER ps
exit 1
fi
set -e
config_mount=
if [ -f config ]; then
config_mount="-v $(pwd)/config:/pi-gen/config:ro"
source config
fi
CONTAINER_NAME=${CONTAINER_NAME:-pigen_work}
CONTINUE=${CONTINUE:-0}
if [ "$*" != "" ] || [ -z "${IMG_NAME}" ]; then
if [ -z "${IMG_NAME}" ]; then
echo "IMG_NAME not set in 'build'" 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=0 continue from a previously started container
EOF
exit 1
fi
CONTAINER_EXISTS=$($DOCKER ps -a --filter name="$CONTAINER_NAME" -q)
CONTAINER_RUNNING=$($DOCKER ps --filter name="$CONTAINER_NAME" -q)
if [ "$CONTAINER_RUNNING" != "" ]; then
echo "The build is already running in container $CONTAINER_NAME. Aborting."
exit 1
fi
if [ "$CONTAINER_EXISTS" != "" ] && [ "$CONTINUE" != "1" ]; then
echo "Container $CONTAINER_NAME already exists and you did not specify CONTINUE=1. Aborting."
echo "You can delete the existing container like this:"
echo " docker rm $CONTAINER_NAME"
exit 1
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
time $DOCKER run --rm --privileged \
--volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \
pi-gen \
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
cd /pi-gen; ./build.sh;
rsync -av work/*/build.log deploy/" &
wait
else
trap "echo 'got CTRL+C... please wait 5s'; docker stop -t 5 ${CONTAINER_NAME}" SIGINT SIGTERM
$DOCKER run --name "${CONTAINER_NAME}" --privileged \
-v $(pwd)/deploy:/pi-gen/deploy \
${config_mount} \
pi-gen \
bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static &&
cd /pi-gen; ./build.sh &&
rsync -av work/*/build.log deploy/" &
wait
fi
echo "Done! Your image(s) should be in deploy/"
+17 -7
View File
@@ -67,10 +67,10 @@ EOF
./${i}-run.sh
log "End ${SUB_STAGE_DIR}/${i}-run.sh"
fi
if [ -f ${i}-run-chroot ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-run-chroot"
on_chroot < ${i}-run-chroot
log "End ${SUB_STAGE_DIR}/${i}-run-chroot"
if [ -f ${i}-run-chroot.sh ]; then
log "Begin ${SUB_STAGE_DIR}/${i}-run-chroot.sh"
on_chroot < ${i}-run-chroot.sh
log "End ${SUB_STAGE_DIR}/${i}-run-chroot.sh"
fi
done
popd > /dev/null
@@ -132,8 +132,8 @@ export IMG_DATE=${IMG_DATE:-"$(date -u +%Y-%m-%d)"}
export BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export SCRIPT_DIR="${BASE_DIR}/scripts"
export WORK_DIR="${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"
export DEPLOY_DIR="${BASE_DIR}/deploy"
export WORK_DIR=${WORK_DIR:-"${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"}
export DEPLOY_DIR=${DEPLOY_DIR:-"${BASE_DIR}/deploy"}
export LOG_FILE="${WORK_DIR}/build.log"
export CLEAN
@@ -148,6 +148,8 @@ export PREV_STAGE_DIR
export ROOTFS_DIR
export PREV_ROOTFS_DIR
export IMG_SUFFIX
export NOOBS_NAME
export NOOBS_DESCRIPTION
export EXPORT_DIR
export EXPORT_ROOTFS_DIR
@@ -172,13 +174,21 @@ done
CLEAN=1
for EXPORT_DIR in ${EXPORT_DIRS}; do
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
run_stage
if [ -e ${EXPORT_DIR}/EXPORT_NOOBS ]; then
source ${EXPORT_DIR}/EXPORT_NOOBS
STAGE_DIR=${BASE_DIR}/export-noobs
run_stage
fi
done
if [ -x postrun.sh ]; then
log "Begin postrun.sh"
cd "${BASE_DIR}"
./postrun.sh
log "End postrun.sh"
fi
log "End ${BASE_DIR}"
+5 -1
View File
@@ -1,8 +1,12 @@
quilt
parted
realpath
qemu-arm-static:qemu-user-static
debootstrap
kpartx zerofree
zerofree
pxz zip
mkdosfs:dosfstools
capsh:libcap2-bin
bsdtar
grep
rsync
+12
View File
@@ -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,29 @@ if [ -e ${ROOTFS_DIR}/etc/ld.so.preload.disabled ]; then
mv ${ROOTFS_DIR}/etc/ld.so.preload.disabled ${ROOTFS_DIR}/etc/ld.so.preload
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
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})
install -m 644 ${ROOTFS_DIR}/etc/rpi-issue ${ROOTFS_DIR}/boot/issue.txt
install files/LICENSE.oracle ${ROOTFS_DIR}/boot/
+22 -10
View File
@@ -8,19 +8,19 @@ rm -f ${IMG_FILE}
rm -rf ${ROOTFS_DIR}
mkdir -p ${ROOTFS_DIR}
BOOT_SIZE=$(du -sh ${EXPORT_ROOTFS_DIR}/boot -B M | cut -f 1 | tr -d M)
TOTAL_SIZE=$(du -sh ${EXPORT_ROOTFS_DIR} -B M | cut -f 1 | tr -d M)
BOOT_SIZE=$(du -s ${EXPORT_ROOTFS_DIR}/boot --block-size=1 | cut -f 1)
TOTAL_SIZE=$(du -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 + (400 * 1024 * 1024)))
fallocate -l ${IMG_SIZE} ${IMG_FILE}
fdisk ${IMG_FILE} > /dev/null 2>&1 <<EOF
fdisk -H 255 -S 63 ${IMG_FILE} <<EOF
o
n
8192
+`expr $BOOT_SIZE \* 3`M
+$((BOOT_SIZE * 2 /512))
p
t
c
@@ -34,15 +34,27 @@ p
w
EOF
LOOP_DEV=`kpartx -asv ${IMG_FILE} | grep -E -o -m1 'loop[[:digit:]]+' | head -n 1`
BOOT_DEV=/dev/mapper/${LOOP_DEV}p1
ROOT_DEV=/dev/mapper/${LOOP_DEV}p2
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)
mkdosfs -n boot -S 512 -s 16 -v $BOOT_DEV > /dev/null
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)
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})
echo "/boot: offset $BOOT_OFFSET, length $BOOT_LENGTH"
echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH"
mkdosfs -n boot -F 32 -v $BOOT_DEV > /dev/null
mkfs.ext4 -O ^huge_file $ROOT_DEV > /dev/null
mount -v $ROOT_DEV ${ROOTFS_DIR} -t ext4
mkdir -p ${ROOTFS_DIR}/boot
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}/
+7 -2
View File
@@ -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 files/partitions.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}/
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)
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|ROOT_SIZE|${ROOT_SIZE}|"
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}/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|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}/

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

+2 -2
View File
@@ -1,8 +1,8 @@
{
"description": "A community-created port of Debian jessie for the Raspberry Pi",
"description": "NOOBS_DESCRIPTION",
"feature_level": 35120124,
"kernel": "4.4",
"name": "Raspbian",
"name": "NOOBS_NAME",
"password": "raspberry",
"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",
@@ -12,10 +12,22 @@ mkdir -p /tmp/1 /tmp/2
mount "$part1" /tmp/1
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|^.* /boot |${part1} /boot |"
if [ -f /mnt/ssh ]; then
cp /mnt/ssh /tmp/1/
fi
if [ -f /mnt/ssh.txt ]; then
cp /mnt/ssh.txt /tmp/1/
fi
if [ -f /settings/wpa_supplicant.conf ]; then
cp /settings/wpa_supplicant.conf /tmp/1/
fi
if ! grep -q resize /proc/cmdline; then
sed -i 's| quiet init=/usr/lib/raspi-config/init_resize.sh||' /tmp/1/cmdline.txt
fi
@@ -3,6 +3,7 @@
{
"filesystem_type": "FAT",
"label": "boot",
"mkfs_options": "-F 32",
"partition_size_nominal": BOOT_NOM,
"uncompressed_tarball_size": BOOT_SIZE,
"want_maximised": false
@@ -1,4 +1,27 @@
UNRELEASED:
* 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)
* Wolfram Mathematica updated to version 11
* NOOBS installs now checks for presence of 'ssh' file on the NOOBS partition.
2017-02-16:
* Chromium browser updated to version 56
* Adobe Flash Player updated to version 24.0.0.221
* RealVNC Server and Viewer updated to version 6.0.2 (RealVNC Connect)
* Sonic Pi updated to version 2.11
* Node-RED updated to version 0.15.3
* Scratch updated to version 120117
* Detection of SSH enabled with default password moved into PAM
* Updated desktop GL driver to support use of fake KMS option
* Raspberry Pi Configuration and raspi-config allow setting of fixed HDMI resolution
* raspi-config allows enabling of serial hardware independent of serial terminal
* Updates to kernel and firmware
* Various minor bug fixes and usability and appearance tweaks
2017-01-11:
* Re-release of the 2016-11-25 image with a FAT32-formatted boot partition
2016-11-25:
* SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
* Prompt for password change at boot when SSH enabled with default password unchanged
* Adobe Flash Player included
+15 -3
View File
@@ -9,9 +9,21 @@ cp ${WORK_DIR}/export-image/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img ${STAGE_WOR
rm -rf ${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}
LOOP_DEV=`kpartx -asv ${IMG_FILE} | grep -E -o -m1 'loop[[:digit:]]+' | head -n 1`
BOOT_DEV=/dev/mapper/${LOOP_DEV}p1
ROOT_DEV=/dev/mapper/${LOOP_DEV}p2
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)
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)
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})
echo "/boot: offset $BOOT_OFFSET, length $BOOT_LENGTH"
echo "/: offset $ROOT_OFFSET, length $ROOT_LENGTH"
mkdir -p ${STAGE_WORK_DIR}/rootfs
mkdir -p ${NOOBS_DIR}
+35 -28
View File
@@ -1,10 +1,11 @@
log (){
date +"[%T] $@" | tee -a ${LOG_FILE}
date +"[%T] $@" | tee -a "${LOG_FILE}"
}
export -f log
bootstrap(){
local ARCH=$(dpkg --print-architecture)
local ARCH
ARCH=$(dpkg --print-architecture)
export http_proxy=${APT_PROXY}
@@ -22,12 +23,12 @@ bootstrap(){
export -f bootstrap
copy_previous(){
if [ ! -d ${PREV_ROOTFS_DIR} ]; then
if [ ! -d "${PREV_ROOTFS_DIR}" ]; then
echo "Previous stage rootfs not found"
false
fi
mkdir -p ${ROOTFS_DIR}
rsync -aHAXx ${PREV_ROOTFS_DIR}/ ${ROOTFS_DIR}/
mkdir -p "${ROOTFS_DIR}"
rsync -aHAXx --exclude var/cache/apt/archives "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
}
export -f copy_previous
@@ -38,10 +39,11 @@ unmount(){
DIR=$1
fi
while mount | grep -q $DIR; do
local LOCS=`mount | grep $DIR | cut -f 3 -d ' ' | sort -r`
while mount | grep -q "$DIR"; do
local LOCS
LOCS=$(mount | grep "$DIR" | cut -f 3 -d ' ' | sort -r)
for loc in $LOCS; do
umount $loc
umount "$loc"
done
done
}
@@ -50,42 +52,47 @@ export -f unmount
unmount_image(){
sync
sleep 1
local LOOP_DEV=$(losetup -j ${1} | cut -f1 -d':')
if [ -n "${LOOP_DEV}" ]; then
local MOUNTED_DIR=$(mount | grep $(basename ${LOOP_DEV}) | head -n 1 | cut -f 3 -d ' ')
if [ -n "${MOUNTED_DIR}" ]; then
unmount $(dirname ${MOUNTED_DIR})
local LOOP_DEVICES
LOOP_DEVICES=$(losetup -j "${1}" | cut -f1 -d':')
for LOOP_DEV in ${LOOP_DEVICES}; do
if [ -n "${LOOP_DEV}" ]; then
local MOUNTED_DIR
MOUNTED_DIR=$(mount | grep "$(basename "${LOOP_DEV}")" | head -n 1 | cut -f 3 -d ' ')
if [ -n "${MOUNTED_DIR}" ] && [ "${MOUNTED_DIR}" != "/" ]; then
unmount "$(dirname "${MOUNTED_DIR}")"
fi
sleep 1
losetup -d "${LOOP_DEV}"
fi
sleep 1
kpartx -ds ${LOOP_DEV}
losetup -d ${LOOP_DEV}
fi
done
}
export -f unmount_image
on_chroot() {
if ! mount | grep -q `realpath ${ROOTFS_DIR}/proc`; then
mount -t proc proc ${ROOTFS_DIR}/proc
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/proc)"; then
mount -t proc proc "${ROOTFS_DIR}/proc"
fi
if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev`; then
mount --bind /dev ${ROOTFS_DIR}/dev
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev)"; then
mount --bind /dev "${ROOTFS_DIR}/dev"
fi
if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev/pts`; then
mount --bind /dev/pts ${ROOTFS_DIR}/dev/pts
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev/pts)"; then
mount --bind /dev/pts "${ROOTFS_DIR}/dev/pts"
fi
if ! mount | grep -q `realpath ${ROOTFS_DIR}/sys`; then
mount --bind /sys ${ROOTFS_DIR}/sys
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/sys)"; then
mount --bind /sys "${ROOTFS_DIR}/sys"
fi
capsh --drop=cap_setfcap --chroot=${ROOTFS_DIR}/ -- "$@"
capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- "$@"
}
export -f on_chroot
update_issue() {
local 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
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"
}
export -f update_issue
+1 -1
View File
@@ -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 -1
View File
@@ -1,5 +1,5 @@
# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# http://rpf.io/configtxtreadme
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
+2 -2
View File
@@ -1,3 +1,3 @@
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
BOOTDEV /boot vfat defaults 0 2
ROOTDEV / ext4 defaults,noatime 0 1
+7 -1
View File
@@ -1,6 +1,12 @@
# Encoding to use on the console:
# Choices: ARMSCII-8, CP1251, CP1255, CP1256, GEORGIAN-ACADEMY, GEORGIAN-PS, IBM1133, ISIRI-3342, ISO-8859-1, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, KOI8-R, KOI8-U, TIS-620, UTF-8, VISCII
console-setup console-setup/charmap47 select UTF-8
console-setup console-setup/charmap47 select UTF-8
# Character set to support:
# Choices: . Arabic, # Armenian, # Cyrillic - KOI8-R and KOI8-U, # Cyrillic - non-Slavic languages, # Cyrillic - Slavic languages (also Bosnian and Serbian Latin), . Ethiopic, # Georgian, # Greek, # Hebrew, # Lao, # Latin1 and Latin5 - western Europe and Turkic languages, # Latin2 - central Europe and Romanian, # Latin3 and Latin8 - Chichewa; Esperanto; Irish; Maltese and Welsh, # Latin7 - Lithuanian; Latvian; Maori and Marshallese, . Latin - Vietnamese, # Thai, . Combined - Latin; Slavic Cyrillic; Hebrew; basic Arabic, . Combined - Latin; Slavic Cyrillic; Greek, . Combined - Latin; Slavic and non-Slavic Cyrillic, Guess optimal character set
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
# Geographic area:
# Choices: Africa, America, Antarctica, Australia, Arctic Ocean, Asia, Atlantic Ocean, Europe, Indian Ocean, Pacific Ocean, System V timezones, US, None of the above
tzdata tzdata/Areas select Etc
+2
View File
@@ -14,3 +14,5 @@ raspberrypi-sys-mods
pi-bluetooth
apt-listchanges
usb-modeswitch
apt-transport-https
libpam-chksshpwd
@@ -1,17 +0,0 @@
Index: jessie-stage2/rootfs/etc/default/console-setup
===================================================================
--- jessie-stage2.orig/rootfs/etc/default/console-setup
+++ jessie-stage2/rootfs/etc/default/console-setup
@@ -6,9 +6,9 @@ ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
-CODESET="Lat15"
-FONTFACE="Fixed"
-FONTSIZE="8x16"
+CODESET="guess"
+FONTFACE=""
+FONTSIZE=""
VIDEOMODE=
@@ -1,5 +1,5 @@
--- a/rootfs/boot/cmdline.txt
+++ b/rootfs/boot/cmdline.txt
@@ -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=/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
+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
-1
View File
@@ -1,6 +1,5 @@
01-useradd.diff
02-swap.diff
03-console-setup.diff
04-inputrc.diff
05-path.diff
06-rc_local.diff
+1
View File
@@ -9,6 +9,7 @@ install -m 644 files/ttyoutput.conf ${ROOTFS_DIR}/etc/systemd/system/rc-local.
install -m 644 files/50raspi ${ROOTFS_DIR}/etc/apt/apt.conf.d/
install -m 644 files/console-setup ${ROOTFS_DIR}/etc/default/
on_chroot << EOF
systemctl disable hwclock.sh
+16
View File
@@ -0,0 +1,16 @@
# CONFIGURATION FILE FOR SETUPCON
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="guess"
FONTFACE=""
FONTSIZE=""
VIDEOMODE=
# The following is an example how to use a braille font
# FONT='lat9w-08.psf.gz brl-8x8.psf'
+1 -1
View File
@@ -12,7 +12,7 @@
case "$1" in
start)
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 &&
update-rc.d resize2fs_once remove &&
rm /etc/init.d/resize2fs_once &&
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash -e
on_chroot << EOF
apt-get clean
EOF
+1 -1
View File
@@ -1 +1 @@
-lite
IMG_SUFFIX="-lite"
+2
View File
@@ -0,0 +1,2 @@
NOOBS_NAME="Raspbian Lite"
NOOBS_DESCRIPTION="A port of Debian jessie for the Raspberry Pi (minimal version)"
-2
View File
@@ -1,4 +1,2 @@
# Enable realtime process priority?
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
-2
View File
@@ -7,7 +7,6 @@ python3-pgzero
python-serial python3-serial
python-picamera python3-picamera
debian-reference-en dillo x2x
wolfram-engine
raspberrypi-net-mods raspberrypi-ui-mods
smartsim penguinspuzzle
python-pip python3-pip
@@ -27,7 +26,6 @@ piclone
pulseaudio-module-bluetooth
wiringpi pigpio python-pigpio python3-pigpio raspi-gpio python-gpiozero python3-gpiozero python3-rpi.gpio
python-spidev python3-spidev
realvnc-vnc-server realvnc-vnc-viewer
python-twython python3-twython
python-smbus python3-smbus
python-flask python3-flask
@@ -1,3 +1,4 @@
libreoffice libreoffice-gtk
timidity
pi-package
realvnc-vnc-server realvnc-vnc-viewer
-3
View File
@@ -1,3 +0,0 @@
#!/bin/bash -e
rm -f "${ROOTFS_DIR}/root/.vnc/private.key"
-25
View File
@@ -31,28 +31,3 @@ 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/pi/.config
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.config/pcmanfm
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.config/pcmanfm/LXDE-pi
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.config/openbox
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.config/lxsession
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.themes
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.config/gtk-3.0
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/.config/lxpanel
install -v -o 1000 -g 1000 -d ${ROOTFS_DIR}/home/pi/Desktop
install -v -m 644 -o 1000 -g 1000 ${ROOTFS_DIR}/etc/xdg/pcmanfm/LXDE-pi/pcmanfm.conf ${ROOTFS_DIR}/home/pi/.config/pcmanfm/LXDE-pi/
install -v -m 644 -o 1000 -g 1000 ${ROOTFS_DIR}/etc/xdg/pcmanfm/LXDE-pi/desktop-items-0.conf ${ROOTFS_DIR}/home/pi/.config/pcmanfm/LXDE-pi/
install -v -m 644 -o 1000 -g 1000 ${ROOTFS_DIR}/etc/xdg/openbox/lxde-pi-rc.xml ${ROOTFS_DIR}/home/pi/.config/openbox/
rsync -a --chown=1000:1000 ${ROOTFS_DIR}/etc/xdg/lxsession/LXDE-pi ${ROOTFS_DIR}/home/pi/.config/lxsession/
rsync -a --chown=1000:1000 ${ROOTFS_DIR}/usr/share/themes/PiX ${ROOTFS_DIR}/home/pi/.themes/
install -v -m 644 -o 1000 -g 1000 ${ROOTFS_DIR}/usr/share/raspi-ui-overrides/gtk.css ${ROOTFS_DIR}/home/pi/.config/gtk-3.0/
install -v -m 644 -o 1000 -g 1000 ${ROOTFS_DIR}/usr/share/raspi-ui-overrides/Trolltech.conf ${ROOTFS_DIR}/home/pi/.config/
install -v -m 644 -o 1000 -g 1000 ${ROOTFS_DIR}/etc/xdg/lxpanel/launchtaskbar.cfg ${ROOTFS_DIR}/home/pi/.config/lxpanel/
rsync -a --chown=1000:1000 ${ROOTFS_DIR}/etc/xdg/lxpanel/profile/LXDE-pi ${ROOTFS_DIR}/home/pi/.config/lxpanel/
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash -e
on_chroot << EOF
apt-get clean
EOF
+1
View File
@@ -0,0 +1 @@
IMG_SUFFIX="-4GB"
View File
+2
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
IMG_SUFFIX=""
+2
View File
@@ -0,0 +1,2 @@
NOOBS_NAME="Raspbian with PIXEL"
NOOBS_DESCRIPTION="A port of Debian jessie for the Raspberry Pi (full desktop version)"
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash -e
if [ ! -d ${ROOTFS_DIR} ]; then
copy_previous
fi