Compare commits
131
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aaaf0aea13 | ||
|
|
c2db8285a1 | ||
|
|
3fe8d79947 | ||
|
|
8d40bc1bb4 | ||
|
|
178b1e404b | ||
|
|
f2060a8ee2 | ||
|
|
7149e20f2d | ||
|
|
207003b5ed | ||
|
|
c77669ad9f | ||
|
|
6618df4b08 | ||
|
|
0f5f10d925 | ||
|
|
19fc4a367e | ||
|
|
036e5242b3 | ||
|
|
8f361a1c38 | ||
|
|
68cdf34cb4 | ||
|
|
3441133d1c | ||
|
|
fe45b73987 | ||
|
|
bab0fe3b0d | ||
|
|
4d65b2b357 | ||
|
|
137efd2379 | ||
|
|
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 | ||
|
|
daa9e35ada | ||
|
|
a68a0713e6 | ||
|
|
d664bfed4b | ||
|
|
5cccd741fe | ||
|
|
3fa66a0699 | ||
|
|
37902fb114 | ||
|
|
51fbf45dd7 | ||
|
|
8f017cb69a | ||
|
|
a45a061ec4 | ||
|
|
667318116a | ||
|
|
bc8a74858e | ||
|
|
a1c26242f6 | ||
|
|
c5e36bc86a | ||
|
|
9f5cfdea6b | ||
|
|
1806504983 | ||
|
|
a9c27d27bd | ||
|
|
d0020af839 | ||
|
|
09a29f745c | ||
|
|
2b3cb8ff72 | ||
|
|
06ba664bfc | ||
|
|
848cbf48a0 | ||
|
|
21a681692a | ||
|
|
c5e4f61df2 | ||
|
|
58e7e4023e | ||
|
|
845496123b | ||
|
|
b84399f9aa | ||
|
|
09590eba4a | ||
|
|
c4fb032d3b | ||
|
|
db10424a9b | ||
|
|
354be6e00b | ||
|
|
88622b63d3 | ||
|
|
dd72c202ce | ||
|
|
a6c7ad7736 | ||
|
|
efb26e03d8 | ||
|
|
ed1643bcda | ||
|
|
0908332966 | ||
|
|
5854406f80 | ||
|
|
c017c51d46 | ||
|
|
e06f61b573 | ||
|
|
801c8cac74 | ||
|
|
71793ce183 | ||
|
|
232d0a48a0 | ||
|
|
e800956bd8 | ||
|
|
24ad8c2adb | ||
|
|
017d3a4341 | ||
|
|
d1f766d2b8 | ||
|
|
1d18e27f9c | ||
|
|
7f0c59d5c1 | ||
|
|
62406bad92 | ||
|
|
7c38f07bb3 | ||
|
|
d5f1040054 | ||
|
|
14914c7075 | ||
|
|
4a76f38f45 | ||
|
|
a1f89797ee | ||
|
|
ea205dc387 | ||
|
|
a07b9c5c4e | ||
|
|
0245cbb958 | ||
|
|
8605ca74b2 | ||
|
|
6ee83b0eab | ||
|
|
abc3e45727 | ||
|
|
b9b8df3d11 | ||
|
|
9cf2f2efe6 | ||
|
|
fa88d07848 | ||
|
|
0ff507a048 | ||
|
|
2413210a6f | ||
|
|
9b0a793dfb | ||
|
|
dddb5b5f74 |
@@ -0,0 +1,3 @@
|
|||||||
|
output/
|
||||||
|
work/
|
||||||
|
deploy/
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
deploy/*
|
deploy/*
|
||||||
work/*
|
work/*
|
||||||
config
|
config
|
||||||
|
postrun.sh
|
||||||
SKIP
|
SKIP
|
||||||
.pc
|
.pc
|
||||||
*-pc
|
*-pc
|
||||||
|
apt-cacher-ng/
|
||||||
|
|||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
FROM debian:stretch
|
||||||
|
|
||||||
|
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 \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY . /pi-gen/
|
||||||
|
|
||||||
|
VOLUME [ "/pi-gen/work", "/pi-gen/deploy"]
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright (c) 2015 Raspberry Pi (Trading) Ltd.
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -1,10 +1,175 @@
|
|||||||
#TODO
|
# pi-gen
|
||||||
|
|
||||||
1. Image export
|
_Tool used to create the raspberrypi.org Raspbian images_
|
||||||
1. NOOBS export
|
|
||||||
1. Simplify running a single stage
|
|
||||||
|
### TODO
|
||||||
1. Documentation
|
1. Documentation
|
||||||
|
|
||||||
#Dependencies
|
|
||||||
|
|
||||||
`quilt kpartx realpath qemu-user-static debootstrap zerofree`
|
## Dependencies
|
||||||
|
|
||||||
|
On Debian-based systems:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt-get install quilt parted realpath qemu-user-static debootstrap zerofree pxz zip \
|
||||||
|
dosfstools bsdtar libcap2-bin grep rsync xz-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
The file `depends` contains a list of tools needed. The format of this
|
||||||
|
package is `<tool>[:<debian-package>]`.
|
||||||
|
|
||||||
|
|
||||||
|
## Config
|
||||||
|
|
||||||
|
Upon execution, `build.sh` will source the file `config` in the current
|
||||||
|
working directory. This bash shell fragment is intended to set needed
|
||||||
|
environment variables.
|
||||||
|
|
||||||
|
The following environment variables are supported:
|
||||||
|
|
||||||
|
* `IMG_NAME` **required** (Default: unset)
|
||||||
|
|
||||||
|
The name of the image to build with the current stage directories. Setting
|
||||||
|
`IMG_NAME=Raspbian` is logical for an unmodified RPi-Distro/pi-gen build,
|
||||||
|
but you should use something else for a customized version. Export files
|
||||||
|
in stages may add suffixes to `IMG_NAME`.
|
||||||
|
|
||||||
|
* `APT_PROXY` (Default: unset)
|
||||||
|
|
||||||
|
If you require the use of an apt proxy, set it here. This proxy setting
|
||||||
|
will not be included in the image, making it safe to use an `apt-cacher` or
|
||||||
|
similar package for development.
|
||||||
|
|
||||||
|
If you have Docker installed, you can set up a local apt caching proxy to
|
||||||
|
like speed up subsequent builds like this:
|
||||||
|
|
||||||
|
docker-compose up -d
|
||||||
|
echo 'APT_PROXY=http://172.17.0.1:3142' >> config
|
||||||
|
|
||||||
|
* `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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
IMG_NAME='Raspbian'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 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 -v pigen_work`
|
||||||
|
|
||||||
|
If something breaks along the line, you can edit the corresponding scripts, and
|
||||||
|
continue:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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
|
||||||
|
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
|
||||||
|
installs `raspberrypi-bootloader` which is missed by debootstrap. The
|
||||||
|
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
|
||||||
|
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
|
||||||
|
means to perform basic tasks needed to configure and install the system.
|
||||||
|
This is as minimal as a system can possibly get, and its arguably not
|
||||||
|
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.
|
||||||
|
|
||||||
|
- **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
|
||||||
|
creates necessary groups and gives the pi user access to sudo and the
|
||||||
|
standard console hardware permission groups.
|
||||||
|
|
||||||
|
There are a few tools that may not make a whole lot of sense here for
|
||||||
|
development purposes on a minimal system such as basic Python and Lua
|
||||||
|
packages as well as the `build-essential` package. They are lumped right
|
||||||
|
in with more essential packages presently, though they need not be with
|
||||||
|
pi-gen. These are understandable for Raspbian's target audience, but if
|
||||||
|
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
|
||||||
|
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** - Raspbian system meant to fit on a 4GB card. More development
|
||||||
|
tools, an email client, learning tools like Scratch, specialized packages
|
||||||
|
like sonic-pi, system documentation, office productivity, etc. This is the
|
||||||
|
stage that installs all of the things that make Raspbian friendly to new
|
||||||
|
users.
|
||||||
|
|
||||||
|
- **Stage 5** - The official Raspbian Desktop image. Right now only adds
|
||||||
|
Mathematica.
|
||||||
|
|
||||||
|
### 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).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Example for building a lite system
|
||||||
|
echo "IMG_NAME='Raspbian'" > config
|
||||||
|
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.
|
||||||
|
|||||||
Executable
+77
@@ -0,0 +1,77 @@
|
|||||||
|
#!/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 -v $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" \
|
||||||
|
-e IMG_NAME=${IMG_NAME}\
|
||||||
|
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 \
|
||||||
|
-e IMG_NAME=${IMG_NAME}\
|
||||||
|
-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/"
|
||||||
@@ -7,7 +7,7 @@ run_sub_stage()
|
|||||||
for i in {00..99}; do
|
for i in {00..99}; do
|
||||||
if [ -f ${i}-debconf ]; then
|
if [ -f ${i}-debconf ]; then
|
||||||
log "Begin ${SUB_STAGE_DIR}/${i}-debconf"
|
log "Begin ${SUB_STAGE_DIR}/${i}-debconf"
|
||||||
on_chroot sh -e - << EOF
|
on_chroot << EOF
|
||||||
debconf-set-selections <<SELEOF
|
debconf-set-selections <<SELEOF
|
||||||
`cat ${i}-debconf`
|
`cat ${i}-debconf`
|
||||||
SELEOF
|
SELEOF
|
||||||
@@ -16,9 +16,9 @@ EOF
|
|||||||
fi
|
fi
|
||||||
if [ -f ${i}-packages-nr ]; then
|
if [ -f ${i}-packages-nr ]; then
|
||||||
log "Begin ${SUB_STAGE_DIR}/${i}-packages-nr"
|
log "Begin ${SUB_STAGE_DIR}/${i}-packages-nr"
|
||||||
PACKAGES=`cat $i-packages-nr | tr '\n' ' '`
|
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < ${i}-packages-nr)"
|
||||||
if [ -n "$PACKAGES" ]; then
|
if [ -n "$PACKAGES" ]; then
|
||||||
on_chroot sh -e - << EOF
|
on_chroot << EOF
|
||||||
apt-get install --no-install-recommends -y $PACKAGES
|
apt-get install --no-install-recommends -y $PACKAGES
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
@@ -26,9 +26,9 @@ EOF
|
|||||||
fi
|
fi
|
||||||
if [ -f ${i}-packages ]; then
|
if [ -f ${i}-packages ]; then
|
||||||
log "Begin ${SUB_STAGE_DIR}/${i}-packages"
|
log "Begin ${SUB_STAGE_DIR}/${i}-packages"
|
||||||
PACKAGES=`cat $i-packages | tr '\n' ' '`
|
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < ${i}-packages)"
|
||||||
if [ -n "$PACKAGES" ]; then
|
if [ -n "$PACKAGES" ]; then
|
||||||
on_chroot sh -e - << EOF
|
on_chroot << EOF
|
||||||
apt-get install -y $PACKAGES
|
apt-get install -y $PACKAGES
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
@@ -42,8 +42,9 @@ EOF
|
|||||||
rm -rf *-pc
|
rm -rf *-pc
|
||||||
fi
|
fi
|
||||||
QUILT_PATCHES=${SUB_STAGE_DIR}/${i}-patches
|
QUILT_PATCHES=${SUB_STAGE_DIR}/${i}-patches
|
||||||
mkdir -p ${i}-pc
|
SUB_STAGE_QUILT_PATCH_DIR="$(basename $SUB_STAGE_DIR)-pc"
|
||||||
ln -sf ${i}-pc .pc
|
mkdir -p $SUB_STAGE_QUILT_PATCH_DIR
|
||||||
|
ln -snf $SUB_STAGE_QUILT_PATCH_DIR .pc
|
||||||
if [ -e ${SUB_STAGE_DIR}/${i}-patches/EDIT ]; then
|
if [ -e ${SUB_STAGE_DIR}/${i}-patches/EDIT ]; then
|
||||||
echo "Dropping into bash to edit patches..."
|
echo "Dropping into bash to edit patches..."
|
||||||
bash
|
bash
|
||||||
@@ -66,16 +67,17 @@ 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 sh -e - < ${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
|
||||||
log "End ${SUB_STAGE_DIR}"
|
log "End ${SUB_STAGE_DIR}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
run_stage(){
|
run_stage(){
|
||||||
log "Begin ${STAGE_DIR}"
|
log "Begin ${STAGE_DIR}"
|
||||||
STAGE=$(basename ${STAGE_DIR})
|
STAGE=$(basename ${STAGE_DIR})
|
||||||
@@ -126,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
|
||||||
@@ -146,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
|
||||||
|
|
||||||
@@ -155,6 +159,10 @@ export QUILT_NO_DIFF_TIMESTAMPS=1
|
|||||||
export QUILT_REFRESH_ARGS="-p ab"
|
export QUILT_REFRESH_ARGS="-p ab"
|
||||||
|
|
||||||
source ${SCRIPT_DIR}/common
|
source ${SCRIPT_DIR}/common
|
||||||
|
source ${SCRIPT_DIR}/dependencies_check
|
||||||
|
|
||||||
|
|
||||||
|
dependencies_check ${BASE_DIR}/depends
|
||||||
|
|
||||||
mkdir -p ${WORK_DIR}
|
mkdir -p ${WORK_DIR}
|
||||||
log "Begin ${BASE_DIR}"
|
log "Begin ${BASE_DIR}"
|
||||||
@@ -166,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}"
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
quilt
|
||||||
|
parted
|
||||||
|
realpath
|
||||||
|
qemu-arm-static:qemu-user-static
|
||||||
|
debootstrap
|
||||||
|
zerofree
|
||||||
|
pxz zip
|
||||||
|
mkdosfs:dosfstools
|
||||||
|
capsh:libcap2-bin
|
||||||
|
bsdtar
|
||||||
|
grep
|
||||||
|
rsync
|
||||||
|
xz:xz-utils
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
apt-cacher-ng:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: sameersbn/apt-cacher-ng:latest
|
||||||
|
ports:
|
||||||
|
- "3142:3142"
|
||||||
|
volumes:
|
||||||
|
- ./apt-cacher-ng:/var/cache/apt-cacher-ng
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
exit 101
|
exit 101
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Index: export-jessie/rootfs/etc/apt/sources.list.d/raspi.list
|
|||||||
--- export-jessie.orig/rootfs/etc/apt/sources.list.d/raspi.list
|
--- export-jessie.orig/rootfs/etc/apt/sources.list.d/raspi.list
|
||||||
+++ export-jessie/rootfs/etc/apt/sources.list.d/raspi.list
|
+++ export-jessie/rootfs/etc/apt/sources.list.d/raspi.list
|
||||||
@@ -1,3 +1,3 @@
|
@@ -1,3 +1,3 @@
|
||||||
-deb http://archive.raspberrypi.org/debian/ jessie main ui staging
|
-deb http://archive.raspberrypi.org/debian/ stretch main ui staging
|
||||||
+deb http://archive.raspberrypi.org/debian/ jessie main ui
|
+deb http://archive.raspberrypi.org/debian/ stretch main ui
|
||||||
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
|
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
|
||||||
#deb-src http://archive.raspberrypi.org/debian/ jessie main ui
|
#deb-src http://archive.raspberrypi.org/debian/ stretch main ui
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
on_chroot << EOF
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get -y dist-upgrade
|
apt-get -y dist-upgrade
|
||||||
apt-get clean
|
apt-get clean
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
install -m 644 files/resolv.conf ${ROOTFS_DIR}/etc/
|
install -m 644 files/resolv.conf ${ROOTFS_DIR}/etc/
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
|
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
|
||||||
/etc/init.d/fake-hwclock stop
|
|
||||||
hardlink -t /usr/share/doc
|
|
||||||
EOF
|
|
||||||
|
|
||||||
rm -f ${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache
|
|
||||||
rm -f ${ROOTFS_DIR}/usr/sbin/policy-rc.d
|
|
||||||
rm -f ${ROOTFS_DIR}/usr/bin/qemu-arm-static
|
|
||||||
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
|
|
||||||
|
|
||||||
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/
|
|
||||||
|
|
||||||
ROOT_DEV=$(mount | grep "${ROOTFS_DIR} " | cut -f1 -d' ')
|
|
||||||
|
|
||||||
unmount ${ROOTFS_DIR}
|
|
||||||
zerofree -v ${ROOT_DEV}
|
|
||||||
|
|
||||||
unmount_image ${IMG_FILE}
|
|
||||||
|
|
||||||
mkdir -p ${DEPLOY_DIR}
|
|
||||||
|
|
||||||
rm -f ${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip
|
|
||||||
|
|
||||||
echo zip ${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip ${IMG_FILE}
|
|
||||||
pushd ${STAGE_WORK_DIR} > /dev/null
|
|
||||||
zip ${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip $(basename ${IMG_FILE})
|
|
||||||
popd > /dev/null
|
|
||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/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
|
||||||
Executable
+84
@@ -0,0 +1,84 @@
|
|||||||
|
#!/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"
|
||||||
|
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f ${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache
|
||||||
|
rm -f ${ROOTFS_DIR}/usr/sbin/policy-rc.d
|
||||||
|
rm -f ${ROOTFS_DIR}/usr/bin/qemu-arm-static
|
||||||
|
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
|
||||||
|
|
||||||
|
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})
|
||||||
|
install -m 644 ${ROOTFS_DIR}/etc/rpi-issue ${ROOTFS_DIR}/boot/issue.txt
|
||||||
|
install files/LICENSE.oracle ${ROOTFS_DIR}/boot/
|
||||||
|
|
||||||
|
|
||||||
|
cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE"
|
||||||
|
|
||||||
|
firmware=$(zgrep "firmware as of" "$ROOTFS_DIR/usr/share/doc/raspberrypi-kernel/changelog.Debian.gz" | \
|
||||||
|
head -n1 | \
|
||||||
|
sed -n 's|.* \([^ ]*\)$|\1|p')
|
||||||
|
|
||||||
|
printf "\nFirmware: https://github.com/raspberrypi/firmware/tree/%s\n" "$firmware" >> "$INFO_FILE"
|
||||||
|
|
||||||
|
kernel=$(curl -s -L "https://github.com/raspberrypi/firmware/raw/$firmware/extra/git_hash")
|
||||||
|
printf "Kernel: https://github.com/raspberrypi/linux/tree/%s\n" "$kernel" >> "$INFO_FILE"
|
||||||
|
|
||||||
|
uname=$(curl -s -L "https://github.com/raspberrypi/firmware/raw/$firmware/extra/uname_string7")
|
||||||
|
printf "Uname string: %s\n" "$uname" >> "$INFO_FILE"
|
||||||
|
|
||||||
|
printf "\nPackages:\n">> "$INFO_FILE"
|
||||||
|
dpkg -l --root "$ROOTFS_DIR" >> "$INFO_FILE"
|
||||||
|
|
||||||
|
ROOT_DEV=$(mount | grep "${ROOTFS_DIR} " | cut -f1 -d' ')
|
||||||
|
|
||||||
|
unmount ${ROOTFS_DIR}
|
||||||
|
zerofree -v ${ROOT_DEV}
|
||||||
|
|
||||||
|
unmount_image ${IMG_FILE}
|
||||||
|
|
||||||
|
mkdir -p ${DEPLOY_DIR}
|
||||||
|
|
||||||
|
rm -f ${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip
|
||||||
|
|
||||||
|
pushd ${STAGE_WORK_DIR} > /dev/null
|
||||||
|
zip ${DEPLOY_DIR}/image_${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.zip $(basename ${IMG_FILE})
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
|
cp "$INFO_FILE" "$DEPLOY_DIR"
|
||||||
+31
-12
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
|
IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
|
||||||
|
|
||||||
unmount_image ${IMG_FILE}
|
unmount_image ${IMG_FILE}
|
||||||
@@ -8,19 +9,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
|
||||||
@@ -34,15 +35,33 @@ p
|
|||||||
w
|
w
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
LOOP_DEV=`kpartx -asv ${IMG_FILE} | grep -E -o -m1 'loop[[:digit:]]+' | head -n 1`
|
PARTED_OUT=$(parted -s ${IMG_FILE} unit b print)
|
||||||
BOOT_DEV=/dev/mapper/${LOOP_DEV}p1
|
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^ 1'| xargs echo -n \
|
||||||
ROOT_DEV=/dev/mapper/${LOOP_DEV}p2
|
| 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 \
|
||||||
mkfs.ext4 -O ^huge_file $ROOT_DEV > /dev/null
|
| 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"
|
||||||
|
|
||||||
|
ROOT_FEATURES="^huge_file"
|
||||||
|
for FEATURE in metadata_csum 64bit; do
|
||||||
|
if grep -q "$FEATURE" /etc/mke2fs.conf; then
|
||||||
|
ROOT_FEATURES="^$FEATURE,$ROOT_FEATURES"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
mkdosfs -n boot -F 32 -v $BOOT_DEV > /dev/null
|
||||||
|
mkfs.ext4 -O $ROOT_FEATURES $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 ${EXPORT_ROOTFS_DIR}/ ${ROOTFS_DIR}/ -aHAX
|
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",
|
||||||
@@ -14,5 +14,5 @@
|
|||||||
],
|
],
|
||||||
"url": "http://www.raspbian.org/",
|
"url": "http://www.raspbian.org/",
|
||||||
"username": "pi",
|
"username": "pi",
|
||||||
"version": "jessie"
|
"version": "stretch"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,24 @@ 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 [ -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
|
if ! grep -q resize /proc/cmdline; then
|
||||||
sed -i 's/ quiet init=.*$//' /tmp/1/cmdline.txt
|
sed -i 's| quiet init=/usr/lib/raspi-config/init_resize.sh||' /tmp/1/cmdline.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
umount /tmp/1
|
umount /tmp/1
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
{
|
{
|
||||||
"filesystem_type": "FAT",
|
"filesystem_type": "FAT",
|
||||||
"label": "boot",
|
"label": "boot",
|
||||||
|
"mkfs_options": "-F 32",
|
||||||
"partition_size_nominal": BOOT_NOM,
|
"partition_size_nominal": BOOT_NOM,
|
||||||
"uncompressed_tarball_size": BOOT_SIZE,
|
"uncompressed_tarball_size": BOOT_SIZE,
|
||||||
"want_maximised": false
|
"want_maximised": false
|
||||||
|
|||||||
@@ -1,4 +1,75 @@
|
|||||||
UNRELEASED:
|
UNRELEASED:
|
||||||
|
* Based on Raspbian Stretch (Debian version 9)
|
||||||
|
* Version 60 of Chromium browser included
|
||||||
|
* Version 3.0.1 of Sonic Pi included
|
||||||
|
* Version 6.1.1 of RealVNC included
|
||||||
|
* Version 0.17.4 of NodeRED included
|
||||||
|
* Bluetooth audio routed via ALSA rather than Pulseaudio
|
||||||
|
* SenseHAT extension added to Scratch 2
|
||||||
|
* Various desktop applications modified to prompt for sudo password if needed
|
||||||
|
* lxinput control options for mouse speed simplified
|
||||||
|
* lxpanel plugins moved into separate packages
|
||||||
|
* Latest kernel and firmware
|
||||||
|
* Various small tweaks, bug fixes and theme modifications
|
||||||
|
2017-07-05:
|
||||||
|
* 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)
|
||||||
|
* 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
|
||||||
|
* Updates to hardware video acceleration in Chromium browser
|
||||||
|
* Greeter now uses background image from last set in Appearance Settings rather than pi user
|
||||||
|
* Updated version of Scratch
|
||||||
|
* Rastrack option removed from raspi-config and Raspberry Pi Configuration
|
||||||
|
* Ability to disable graphical boot splash screen added to raspi-config and Raspberry Pi Configuration
|
||||||
|
* Appearance Settings dialog made tabbed to work better on small screens
|
||||||
|
* Raspberry Pi Configuration now requires current password to change password
|
||||||
|
* Various small bug fixes
|
||||||
|
* Updated firmware and kernel
|
||||||
|
2016-09-23:
|
||||||
|
* New PIXEL desktop environment - new icon set, window design, desktop images, splash screen and greeter
|
||||||
|
* Chromium web browser included
|
||||||
|
* Infinality font rendering patches included
|
||||||
|
* RealVNC server and viewer included
|
||||||
|
* SenseHAT emulator included
|
||||||
|
* Rfkill entries added to Wifi and Bluetooth panel plugins
|
||||||
|
* Updates to various standard applications, including Scratch and NodeRED
|
||||||
|
* Various bug fixes, tweaks and translation updates
|
||||||
|
* Updated firmware and kernel (https://github.com/raspberrypi/firmware/commit/ad8608c08b122b2c228dba0ff5070d6e9519faf5)
|
||||||
|
2016-05-27:
|
||||||
* Fixed crash of lxpanel when D-bus not accessible
|
* Fixed crash of lxpanel when D-bus not accessible
|
||||||
* Fixed permissions for D-bus Bluetooth access
|
* Fixed permissions for D-bus Bluetooth access
|
||||||
* Removed sudo from shutdown options
|
* Removed sudo from shutdown options
|
||||||
|
|||||||
+22
-7
@@ -4,22 +4,37 @@ IMG_FILE="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}.img"
|
|||||||
NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
|
NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}"
|
||||||
unmount_image ${IMG_FILE}
|
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_DATE}-${IMG_NAME}${IMG_SUFFIX}.img ${STAGE_WORK_DIR}/
|
||||||
|
|
||||||
rm -rf ${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}
|
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`
|
PARTED_OUT=$(parted -s ${IMG_FILE} unit b print)
|
||||||
BOOT_DEV=/dev/mapper/${LOOP_DEV}p1
|
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^ 1'| xargs echo -n \
|
||||||
ROOT_DEV=/dev/mapper/${LOOP_DEV}p2
|
| 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 ${STAGE_WORK_DIR}/rootfs
|
||||||
mkdir -p ${STAGE_WORK_DIR}/bootfs
|
|
||||||
mkdir -p ${NOOBS_DIR}
|
mkdir -p ${NOOBS_DIR}
|
||||||
|
|
||||||
mount $ROOT_DEV ${STAGE_WORK_DIR}/rootfs
|
mount $ROOT_DEV ${STAGE_WORK_DIR}/rootfs
|
||||||
mount $BOOT_DEV ${STAGE_WORK_DIR}/bootfs
|
mount $BOOT_DEV ${STAGE_WORK_DIR}/rootfs/boot
|
||||||
|
|
||||||
tar -I pxz -C ${STAGE_WORK_DIR}/bootfs -cpf ${NOOBS_DIR}/boot.tar.xz .
|
ln -sv "/lib/systemd/system/apply_noobs_os_config.service" "$ROOTFS_DIR/etc/systemd/system/multi-user.target.wants/apply_noobs_os_config.service"
|
||||||
tar -I pxz -C ${STAGE_WORK_DIR}/rootfs -cpf ${NOOBS_DIR}/root.tar.xz .
|
|
||||||
|
bsdtar --format gnutar --use-compress-program pxz -C ${STAGE_WORK_DIR}/rootfs/boot -cpf ${NOOBS_DIR}/boot.tar.xz .
|
||||||
|
umount ${STAGE_WORK_DIR}/rootfs/boot
|
||||||
|
bsdtar --format gnutar --use-compress-program pxz -C ${STAGE_WORK_DIR}/rootfs --one-file-system -cpf ${NOOBS_DIR}/root.tar.xz .
|
||||||
|
|
||||||
unmount_image ${IMG_FILE}
|
unmount_image ${IMG_FILE}
|
||||||
|
|||||||
+39
-32
@@ -1,10 +1,11 @@
|
|||||||
log (){
|
log (){
|
||||||
date +"[%T] $@" | tee -a ${LOG_FILE}
|
date +"[%T] $@" | tee -a "${LOG_FILE}"
|
||||||
}
|
}
|
||||||
export -f log
|
export -f log
|
||||||
|
|
||||||
bootstrap(){
|
bootstrap(){
|
||||||
local ARCH=$(dpkg --print-architecture)
|
local ARCH
|
||||||
|
ARCH=$(dpkg --print-architecture)
|
||||||
|
|
||||||
export http_proxy=${APT_PROXY}
|
export http_proxy=${APT_PROXY}
|
||||||
|
|
||||||
@@ -14,20 +15,20 @@ bootstrap(){
|
|||||||
local BOOTSTRAP_CMD=debootstrap
|
local BOOTSTRAP_CMD=debootstrap
|
||||||
fi
|
fi
|
||||||
|
|
||||||
${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
|
||||||
|
|
||||||
copy_previous(){
|
copy_previous(){
|
||||||
if [ ! -d ${PREV_ROOTFS_DIR} ]; then
|
if [ ! -d "${PREV_ROOTFS_DIR}" ]; then
|
||||||
echo "Previous stage rootfs not found"
|
echo "Previous stage rootfs not found"
|
||||||
false
|
false
|
||||||
fi
|
fi
|
||||||
mkdir -p ${ROOTFS_DIR}
|
mkdir -p "${ROOTFS_DIR}"
|
||||||
rsync -aHAX ${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
|
||||||
|
|
||||||
@@ -38,10 +39,11 @@ unmount(){
|
|||||||
DIR=$1
|
DIR=$1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while mount | grep -q $DIR; do
|
while mount | grep -q "$DIR"; do
|
||||||
local LOCS=`mount | grep $DIR | cut -f 3 -d ' ' | sort -r`
|
local LOCS
|
||||||
|
LOCS=$(mount | grep "$DIR" | cut -f 3 -d ' ' | sort -r)
|
||||||
for loc in $LOCS; do
|
for loc in $LOCS; do
|
||||||
umount $loc
|
umount "$loc"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -50,42 +52,47 @@ export -f unmount
|
|||||||
unmount_image(){
|
unmount_image(){
|
||||||
sync
|
sync
|
||||||
sleep 1
|
sleep 1
|
||||||
local LOOP_DEV=$(losetup -j ${1} | cut -f1 -d':')
|
local LOOP_DEVICES
|
||||||
if [ -n "${LOOP_DEV}" ]; then
|
LOOP_DEVICES=$(losetup -j "${1}" | cut -f1 -d':')
|
||||||
local MOUNTED_DIR=$(mount | grep $(basename ${LOOP_DEV} | head -n 1 | cut -f 3 -d ' '))
|
for LOOP_DEV in ${LOOP_DEVICES}; do
|
||||||
if [ -n "${MOUNTED_DIR}" ]; then
|
if [ -n "${LOOP_DEV}" ]; then
|
||||||
unmount $(dirname ${MOUNTED_DIR})
|
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
|
fi
|
||||||
sleep 1
|
done
|
||||||
kpartx -ds ${LOOP_DEV}
|
|
||||||
losetup -d ${LOOP_DEV}
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
export -f unmount_image
|
export -f unmount_image
|
||||||
|
|
||||||
on_chroot() {
|
on_chroot() {
|
||||||
if ! mount | grep -q `realpath ${ROOTFS_DIR}/proc`; then
|
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/proc)"; then
|
||||||
mount -t proc proc ${ROOTFS_DIR}/proc
|
mount -t proc proc "${ROOTFS_DIR}/proc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev`; then
|
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev)"; then
|
||||||
mount --bind /dev ${ROOTFS_DIR}/dev
|
mount --bind /dev "${ROOTFS_DIR}/dev"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev/pts`; then
|
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev/pts)"; then
|
||||||
mount --bind /dev/pts ${ROOTFS_DIR}/dev/pts
|
mount --bind /dev/pts "${ROOTFS_DIR}/dev/pts"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! mount | grep -q `realpath ${ROOTFS_DIR}/sys`; then
|
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/sys)"; then
|
||||||
mount --bind /sys ${ROOTFS_DIR}/sys
|
mount --bind /sys "${ROOTFS_DIR}/sys"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chroot ${ROOTFS_DIR}/ "$@"
|
capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- "$@"
|
||||||
}
|
}
|
||||||
export -f on_chroot
|
export -f on_chroot
|
||||||
|
|
||||||
update_issue() {
|
update_issue() {
|
||||||
local GIT_HASH=$(git rev-parse HEAD)
|
local GIT_HASH
|
||||||
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
|
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
|
export -f update_issue
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# dependencies_check
|
||||||
|
# $@ Dependency files to check
|
||||||
|
#
|
||||||
|
# Each dependency is in the form of a tool to test for, optionally followed by
|
||||||
|
# a : and the name of a package if the package on a Debian-ish system is not
|
||||||
|
# named for the tool (i.e., qemu-user-static).
|
||||||
|
dependencies_check()
|
||||||
|
{
|
||||||
|
local depfile deps missing
|
||||||
|
|
||||||
|
for depfile in "$@"; do
|
||||||
|
if [[ -e "$depfile" ]]; then
|
||||||
|
deps="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < ${BASE_DIR}/depends)"
|
||||||
|
|
||||||
|
fi
|
||||||
|
for dep in $deps; do
|
||||||
|
if ! hash ${dep%:*} 2>/dev/null; then
|
||||||
|
missing="${missing:+$missing }${dep#*:}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$missing" ]]; then
|
||||||
|
echo "Required dependencies not installed"
|
||||||
|
echo
|
||||||
|
echo "This can be resolved on Debian/Raspbian systems by installing:"
|
||||||
|
echo "$missing"
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Deletes comments and collapses whitespace in ##-packages files
|
||||||
|
|
||||||
|
# Append (N)ext line to buffer
|
||||||
|
# if (!)not ($)buffer is EOF, (b)ranch to (:)label loop
|
||||||
|
:loop
|
||||||
|
N
|
||||||
|
$ !b loop
|
||||||
|
|
||||||
|
# Buffer is "line1\nline2\n...lineN", del comments and collapse whitespace
|
||||||
|
s/#[^\n]*//g
|
||||||
|
s/[[:space:]]\{1,\}/ /g
|
||||||
@@ -11,7 +11,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
on_chroot apt-key add - < files/raspberrypi.gpg.key
|
on_chroot apt-key add - < files/raspberrypi.gpg.key
|
||||||
on_chroot sh -e - << EOF
|
on_chroot << EOF
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get dist-upgrade -y
|
apt-get dist-upgrade -y
|
||||||
EOF
|
EOF
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
deb http://archive.raspberrypi.org/debian/ stretch main ui staging
|
||||||
|
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
|
||||||
|
#deb-src http://archive.raspberrypi.org/debian/ stretch main ui
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
|
||||||
|
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
|
||||||
|
#deb-src http://archive.raspbian.org/raspbian/ stretch main contrib non-free rpi
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
deb http://archive.raspberrypi.org/debian/ jessie main ui staging
|
|
||||||
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
|
|
||||||
#deb-src http://archive.raspberrypi.org/debian/ jessie main ui
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
|
|
||||||
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
|
|
||||||
#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
locales
|
||||||
Binary file not shown.
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
if [ ! -d ${ROOTFS_DIR} ]; then
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
bootstrap jessie ${ROOTFS_DIR} http://mirrordirector.raspbian.org/raspbian/
|
bootstrap stretch ${ROOTFS_DIR} http://mirrordirector.raspbian.org/raspbian/
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ install -m 644 files/noclear.conf ${ROOTFS_DIR}/etc/systemd/system/[email protected]
|
|||||||
install -m 744 files/policy-rc.d ${ROOTFS_DIR}/usr/sbin/policy-rc.d #TODO: Necessary in systemd?
|
install -m 744 files/policy-rc.d ${ROOTFS_DIR}/usr/sbin/policy-rc.d #TODO: Necessary in systemd?
|
||||||
install -v -m 644 files/fstab ${ROOTFS_DIR}/etc/fstab
|
install -v -m 644 files/fstab ${ROOTFS_DIR}/etc/fstab
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
on_chroot << EOF
|
||||||
if ! id -u pi >/dev/null 2>&1; then
|
if ! id -u pi >/dev/null 2>&1; then
|
||||||
adduser --disabled-password --gecos "" pi
|
adduser --disabled-password --gecos "" pi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
exit 101
|
exit 101
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
Index: jessie-stage1/rootfs/lib/udev/rules.d/75-persistent-net-generator.rules
|
|
||||||
===================================================================
|
|
||||||
--- jessie-stage1.orig/rootfs/lib/udev/rules.d/75-persistent-net-generator.rules
|
|
||||||
+++ jessie-stage1/rootfs/lib/udev/rules.d/75-persistent-net-generator.rules
|
|
||||||
@@ -22,7 +22,7 @@ IMPORT{cmdline}="net.ifnames"
|
|
||||||
ENV{net.ifnames}=="1", GOTO="persistent_net_generator_end"
|
|
||||||
|
|
||||||
# device name whitelist
|
|
||||||
-KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", \
|
|
||||||
+KERNEL!="ath*|msh*|ra*|sta*|ctc*|lcs*|hsi*", \
|
|
||||||
GOTO="persistent_net_generator_end"
|
|
||||||
|
|
||||||
# ignore Xen virtual interfaces
|
|
||||||
@@ -1,2 +1 @@
|
|||||||
01-hosts.diff
|
01-hosts.diff
|
||||||
02-persistant-net.diff
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
install -m 644 files/ipv6.conf ${ROOTFS_DIR}/etc/modprobe.d/ipv6.conf
|
install -m 644 files/ipv6.conf ${ROOTFS_DIR}/etc/modprobe.d/ipv6.conf
|
||||||
install -m 644 files/interfaces ${ROOTFS_DIR}/etc/network/interfaces
|
|
||||||
install -m 644 files/hostname ${ROOTFS_DIR}/etc/hostname
|
install -m 644 files/hostname ${ROOTFS_DIR}/etc/hostname
|
||||||
|
|
||||||
on_chroot sh -e - << EOF
|
on_chroot << EOF
|
||||||
dpkg-divert --add --local /lib/udev/rules.d/75-persistent-net-generator.rules
|
dpkg-divert --add --local /lib/udev/rules.d/75-persistent-net-generator.rules
|
||||||
EOF
|
EOF
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
if [ ! -d ${ROOTFS_DIR} ]; then
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
copy_previous
|
copy_previous
|
||||||
fi
|
fi
|
||||||
|
|||||||
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 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
|
||||||
@@ -6,7 +6,7 @@ avahi-daemon
|
|||||||
lua5.1
|
lua5.1
|
||||||
luajit
|
luajit
|
||||||
hardlink ca-certificates curl
|
hardlink ca-certificates curl
|
||||||
fake-hwclock ntp nfs-common usbutils
|
fake-hwclock nfs-common usbutils
|
||||||
libraspberrypi-dev libraspberrypi-doc libfreetype6-dev
|
libraspberrypi-dev libraspberrypi-doc libfreetype6-dev
|
||||||
dosfstools
|
dosfstools
|
||||||
dphys-swapfile
|
dphys-swapfile
|
||||||
@@ -14,3 +14,9 @@ raspberrypi-sys-mods
|
|||||||
pi-bluetooth
|
pi-bluetooth
|
||||||
apt-listchanges
|
apt-listchanges
|
||||||
usb-modeswitch
|
usb-modeswitch
|
||||||
|
apt-transport-https
|
||||||
|
libpam-chksshpwd
|
||||||
|
rpi-update
|
||||||
|
libmtp-runtime
|
||||||
|
rsync
|
||||||
|
htop
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
Index: jessie-stage2/rootfs/etc/sudoers
|
|
||||||
===================================================================
|
|
||||||
--- jessie-stage2.orig/rootfs/etc/sudoers
|
|
||||||
+++ jessie-stage2/rootfs/etc/sudoers
|
|
||||||
@@ -25,3 +25,5 @@ root ALL=(ALL:ALL) ALL
|
|
||||||
# See sudoers(5) for more information on "#include" directives:
|
|
||||||
|
|
||||||
#includedir /etc/sudoers.d
|
|
||||||
+
|
|
||||||
+pi ALL=(ALL) NOPASSWD: ALL
|
|
||||||
@@ -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
|
--- 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
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
00-sudoers.diff
|
|
||||||
01-useradd.diff
|
01-useradd.diff
|
||||||
02-swap.diff
|
02-swap.diff
|
||||||
03-console-setup.diff
|
|
||||||
04-inputrc.diff
|
04-inputrc.diff
|
||||||
05-path.diff
|
05-path.diff
|
||||||
06-rc_local.diff
|
|
||||||
07-resize-init.diff
|
07-resize-init.diff
|
||||||
|
|||||||
@@ -1,27 +1,26 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
install -m 755 files/regenerate_ssh_host_keys ${ROOTFS_DIR}/etc/init.d/
|
|
||||||
install -m 755 files/apply_noobs_os_config ${ROOTFS_DIR}/etc/init.d/
|
|
||||||
install -m 755 files/resize2fs_once ${ROOTFS_DIR}/etc/init.d/
|
install -m 755 files/resize2fs_once ${ROOTFS_DIR}/etc/init.d/
|
||||||
|
|
||||||
install -d ${ROOTFS_DIR}/etc/systemd/system/rc-local.service.d
|
install -d ${ROOTFS_DIR}/etc/systemd/system/rc-local.service.d
|
||||||
install -m 644 files/ttyoutput.conf ${ROOTFS_DIR}/etc/systemd/system/rc-local.service.d/
|
install -m 644 files/ttyoutput.conf ${ROOTFS_DIR}/etc/systemd/system/rc-local.service.d/
|
||||||
|
|
||||||
install -m 644 files/50raspi ${ROOTFS_DIR}/etc/apt/apt.conf.d/
|
install -m 644 files/50raspi ${ROOTFS_DIR}/etc/apt/apt.conf.d/
|
||||||
install -m 644 files/98-rpi.conf ${ROOTFS_DIR}/etc/sysctl.d/
|
|
||||||
|
|
||||||
|
install -m 644 files/console-setup ${ROOTFS_DIR}/etc/default/
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
install -m 755 files/rc.local ${ROOTFS_DIR}/etc/
|
||||||
|
|
||||||
|
on_chroot << EOF
|
||||||
systemctl disable hwclock.sh
|
systemctl disable hwclock.sh
|
||||||
systemctl disable nfs-common
|
systemctl disable nfs-common
|
||||||
systemctl disable rpcbind
|
systemctl disable rpcbind
|
||||||
systemctl disable ssh
|
systemctl disable ssh
|
||||||
systemctl enable regenerate_ssh_host_keys
|
systemctl enable regenerate_ssh_host_keys
|
||||||
systemctl enable apply_noobs_os_config
|
|
||||||
systemctl enable resize2fs_once
|
systemctl enable resize2fs_once
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
on_chroot sh -e - << \EOF
|
on_chroot << \EOF
|
||||||
for GRP in input spi i2c gpio; do
|
for GRP in input spi i2c gpio; do
|
||||||
groupadd -f -r $GRP
|
groupadd -f -r $GRP
|
||||||
done
|
done
|
||||||
@@ -30,11 +29,11 @@ for GRP in adm dialout cdrom audio users sudo video games plugdev input gpio spi
|
|||||||
done
|
done
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
on_chroot << EOF
|
||||||
setupcon --force --save-only -v
|
setupcon --force --save-only -v
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
on_chroot << EOF
|
||||||
usermod --pass='*' root
|
usermod --pass='*' root
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
kernel.printk = 3 4 1 3
|
|
||||||
vm.swappiness=1
|
|
||||||
vm.min_free_kbytes = 8192
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: apply_noobs_os_config
|
|
||||||
# Required-Start:
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2
|
|
||||||
# Default-Stop:
|
|
||||||
# Short-Description: Apply config from /boot/os_config.json
|
|
||||||
# Description:
|
|
||||||
### END INIT INFO
|
|
||||||
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
log_daemon_msg "Applying config from /boot/os_config.json (if it exists)"
|
|
||||||
if raspi-config --apply-os-config; then
|
|
||||||
update-rc.d apply_noobs_os_config remove
|
|
||||||
rm /etc/init.d/apply_noobs_os_config
|
|
||||||
log_end_msg 0
|
|
||||||
else
|
|
||||||
log_end_msg 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: $0 start" >&2
|
|
||||||
exit 3
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -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'
|
||||||
Executable
+20
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
#
|
||||||
|
# rc.local
|
||||||
|
#
|
||||||
|
# This script is executed at the end of each multiuser runlevel.
|
||||||
|
# Make sure that the script will "exit 0" on success or any other
|
||||||
|
# value on error.
|
||||||
|
#
|
||||||
|
# In order to enable or disable this script just change the execution
|
||||||
|
# bits.
|
||||||
|
#
|
||||||
|
# By default this script does nothing.
|
||||||
|
|
||||||
|
# Print the IP address
|
||||||
|
_IP=$(hostname -I) || true
|
||||||
|
if [ "$_IP" ]; then
|
||||||
|
printf "My IP address is %s\n" "$_IP"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: regenerate_ssh_host_keys
|
|
||||||
# Required-Start:
|
|
||||||
# Required-Stop:
|
|
||||||
# Default-Start: 2
|
|
||||||
# Default-Stop:
|
|
||||||
# Short-Description: Regenerate ssh host keys
|
|
||||||
# Description:
|
|
||||||
### END INIT INFO
|
|
||||||
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
log_daemon_msg "Regenerating ssh host keys (in background)"
|
|
||||||
nohup sh -c "if [ -e /dev/hwrng ]; then
|
|
||||||
dd if=/dev/hwrng of=/dev/urandom count=1 bs=4096
|
|
||||||
fi; \
|
|
||||||
yes | ssh-keygen -q -N '' -t dsa -f /etc/ssh/ssh_host_dsa_key && \
|
|
||||||
yes | ssh-keygen -q -N '' -t rsa -f /etc/ssh/ssh_host_rsa_key && \
|
|
||||||
yes | ssh-keygen -q -N '' -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key && \
|
|
||||||
yes | ssh-keygen -q -N '' -t ed25519 -f /etc/ssh/ssh_host_ed25519_key && \
|
|
||||||
systemctl enable ssh && sync && \
|
|
||||||
rm /etc/init.d/regenerate_ssh_host_keys && \
|
|
||||||
update-rc.d regenerate_ssh_host_keys remove && \
|
|
||||||
printf '\nfinished\n' && systemctl start ssh" > /var/log/regen_ssh_keys.log 2>&1 &
|
|
||||||
log_end_msg $?
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: $0 start" >&2
|
|
||||||
exit 3
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -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,2 +1,3 @@
|
|||||||
wpasupplicant wireless-tools firmware-atheros firmware-brcm80211 firmware-libertas firmware-ralink firmware-realtek
|
wpasupplicant wireless-tools firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek
|
||||||
|
raspberrypi-net-mods
|
||||||
dhcpcd5
|
dhcpcd5
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
Index: jessie-stage2/rootfs/etc/network/interfaces
|
|
||||||
===================================================================
|
|
||||||
--- jessie-stage2.orig/rootfs/etc/network/interfaces
|
|
||||||
+++ jessie-stage2/rootfs/etc/network/interfaces
|
|
||||||
@@ -1,4 +1,20 @@
|
|
||||||
-auto lo
|
|
||||||
+# interfaces(5) file used by ifup(8) and ifdown(8)
|
|
||||||
+
|
|
||||||
+# Please note that this file is written to be used with dhcpcd
|
|
||||||
+# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
|
|
||||||
|
|
||||||
+# Include files from /etc/network/interfaces.d:
|
|
||||||
+source-directory /etc/network/interfaces.d
|
|
||||||
+
|
|
||||||
+auto lo
|
|
||||||
iface lo inet loopback
|
|
||||||
-iface eth0 inet dhcp
|
|
||||||
+
|
|
||||||
+iface eth0 inet manual
|
|
||||||
+
|
|
||||||
+allow-hotplug wlan0
|
|
||||||
+iface wlan0 inet manual
|
|
||||||
+ wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
|
|
||||||
+
|
|
||||||
+allow-hotplug wlan1
|
|
||||||
+iface wlan1 inet manual
|
|
||||||
+ wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
00-interfaces.diff
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
[Service]
|
[Service]
|
||||||
ExecStart=
|
ExecStart=
|
||||||
ExecStart=/sbin/dhcpcd -q -w
|
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
on_chroot sh -e - <<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 Stretch for the Raspberry Pi (minimal version)"
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
if [ ! -d ${ROOTFS_DIR} ]; then
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
copy_previous
|
copy_previous
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Adobe Flash Player. Copyright 1996-2015. Adobe Systems Incorporated. All Rights Reserved.
|
||||||
|
rpi-chromium-mods rpi-chromium-mods/adobe note
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
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
|
||||||
udisks
|
gvfs
|
||||||
|
rfkill
|
||||||
|
chromium-browser rpi-chromium-mods
|
||||||
|
gldriver-test
|
||||||
|
|||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
on_chroot << EOF
|
||||||
|
update-alternatives --install /usr/bin/x-www-browser \
|
||||||
|
x-www-browser /usr/bin/chromium-browser 86
|
||||||
|
update-alternatives --install /usr/bin/gnome-www-browser \
|
||||||
|
gnome-www-browser /usr/bin/chromium-browser 86
|
||||||
|
EOF
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
Index: jessie-stage3/rootfs/etc/lightdm/lightdm-gtk-greeter.conf
|
|
||||||
===================================================================
|
|
||||||
--- jessie-stage3.orig/rootfs/etc/lightdm/lightdm-gtk-greeter.conf
|
|
||||||
+++ jessie-stage3/rootfs/etc/lightdm/lightdm-gtk-greeter.conf
|
|
||||||
@@ -16,7 +16,7 @@
|
|
||||||
# screensaver-timeout = Timeout (in seconds) until the screen blanks when the greeter is called as lockscreen
|
|
||||||
#
|
|
||||||
[greeter]
|
|
||||||
-background=/usr/share/images/desktop-base/login-background.svg
|
|
||||||
+background=#ffffff
|
|
||||||
theme-name=Adwaita
|
|
||||||
#icon-theme-name=
|
|
||||||
#font-name=
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
01-lightdm.diff
|
|
||||||
@@ -1,15 +1,3 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
rm -f ${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/wait.conf
|
||||||
update-alternatives --set libgksu-gconf-defaults /usr/share/libgksu/debian/gconf-defaults.libgksu-sudo
|
|
||||||
update-gconf-defaults
|
|
||||||
EOF
|
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
|
||||||
update-alternatives --install /usr/share/images/desktop-base/desktop-background \
|
|
||||||
desktop-background /usr/share/raspberrypi-artwork/raspberry-pi-logo.png 100
|
|
||||||
EOF
|
|
||||||
|
|
||||||
rm -f ${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/wait.conf
|
|
||||||
install -m 644 files/55-storage.pkla ${ROOTFS_DIR}/etc/polkit-1/localauthority/50-local.d/
|
|
||||||
install -m 644 files/75source-profile ${ROOTFS_DIR}/etc/X11/Xsession.d/
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
[Storage Permissions]
|
|
||||||
Identity=unix-group:plugdev
|
|
||||||
Action=org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.drive-detach;org.freedesktop.udisks.luks-unlock;org.freedesktop.udisks.inhibit-polling;org.freedesktop.udisks.drive-set-spindown
|
|
||||||
ResultAny=yes
|
|
||||||
ResultActive=yes
|
|
||||||
ResultInactive=no
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[ -f /etc/profile ] && . /etc/profile
|
|
||||||
[ -f "$HOME/.profile" ] && . "$HOME/.profile"
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
if [ ! -d ${ROOTFS_DIR} ]; then
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
copy_previous
|
copy_previous
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -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,13 +7,12 @@ 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
|
fonts-liberation2
|
||||||
|
smartsim
|
||||||
python-pip python3-pip
|
python-pip python3-pip
|
||||||
python3-numpy
|
python3-numpy
|
||||||
pypy
|
pypy
|
||||||
python3-pifacecommon python3-pifacedigitalio python3-pifacedigital-scratch-handler python-pifacecommon python-pifacedigitalio
|
|
||||||
minecraft-pi python-minecraftpi
|
minecraft-pi python-minecraftpi
|
||||||
alacarte rc-gui sense-hat
|
alacarte rc-gui sense-hat
|
||||||
claws-mail
|
claws-mail
|
||||||
@@ -24,6 +23,13 @@ nodered
|
|||||||
libgl1-mesa-dri libgles1-mesa libgles2-mesa xcompmgr
|
libgl1-mesa-dri libgles1-mesa libgles2-mesa xcompmgr
|
||||||
geany
|
geany
|
||||||
piclone
|
piclone
|
||||||
pulseaudio-module-bluetooth
|
|
||||||
wiringpi pigpio python-pigpio python3-pigpio raspi-gpio python-gpiozero python3-gpiozero python3-rpi.gpio
|
wiringpi pigpio python-pigpio python3-pigpio raspi-gpio python-gpiozero python3-gpiozero python3-rpi.gpio
|
||||||
python-spidev python3-spidev
|
python-spidev python3-spidev
|
||||||
|
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
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
libreoffice libreoffice-gtk
|
libreoffice libreoffice-gtk
|
||||||
timidity
|
timidity
|
||||||
pi-package
|
pi-package
|
||||||
|
realvnc-vnc-server realvnc-vnc-viewer
|
||||||
|
|||||||
@@ -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,5 +1,3 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
ln -sf /etc/systemd/system/[email protected] ${ROOTFS_DIR}/etc/systemd/system/getty.target.wants/[email protected]
|
ln -sf /etc/systemd/system/[email protected] ${ROOTFS_DIR}/etc/systemd/system/getty.target.wants/[email protected]
|
||||||
|
|
||||||
install -v -m 644 files/40-scratch.rules ${ROOTFS_DIR}/etc/udev/rules.d/
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0003", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
Index: jessie-stage4/rootfs/etc/lightdm/lightdm.conf
|
|
||||||
===================================================================
|
|
||||||
--- jessie-stage4.orig/rootfs/etc/lightdm/lightdm.conf
|
|
||||||
+++ jessie-stage4/rootfs/etc/lightdm/lightdm.conf
|
|
||||||
@@ -114,7 +114,7 @@
|
|
||||||
#session-setup-script=
|
|
||||||
#session-cleanup-script=
|
|
||||||
#autologin-guest=false
|
|
||||||
-#autologin-user=
|
|
||||||
+autologin-user=pi
|
|
||||||
#autologin-user-timeout=0
|
|
||||||
#autologin-in-background=false
|
|
||||||
#autologin-session=UNIMPLEMENTED
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
0-autologin.diff
|
|
||||||
@@ -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"
|
||||||
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/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/.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/
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
on_chroot sh -e - <<EOF
|
|
||||||
apt-get clean
|
|
||||||
EOF
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
IMG_SUFFIX="-4GB"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
if [ ! -d ${ROOTFS_DIR} ]; then
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
copy_previous
|
copy_previous
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -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 Stretch for the Raspberry Pi (full desktop version)"
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
if [ ! -d ${ROOTFS_DIR} ]; then
|
||||||
|
copy_previous
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user