@ -0,0 +1,6 @@ |
|||
deploy/* |
|||
work/* |
|||
postrun.sh |
|||
.pc |
|||
*-pc |
|||
apt-cacher-ng/ |
@ -0,0 +1,262 @@ |
|||
#!/bin/bash -e |
|||
# shellcheck disable=SC2119 |
|||
run_sub_stage() |
|||
{ |
|||
log "Begin ${SUB_STAGE_DIR}" |
|||
pushd "${SUB_STAGE_DIR}" > /dev/null |
|||
for i in {00..99}; do |
|||
if [ -f "${i}-debconf" ]; then |
|||
log "Begin ${SUB_STAGE_DIR}/${i}-debconf" |
|||
on_chroot << EOF |
|||
debconf-set-selections <<SELEOF |
|||
$(cat "${i}-debconf") |
|||
SELEOF |
|||
EOF |
|||
|
|||
log "End ${SUB_STAGE_DIR}/${i}-debconf" |
|||
fi |
|||
if [ -f "${i}-packages-nr" ]; then |
|||
log "Begin ${SUB_STAGE_DIR}/${i}-packages-nr" |
|||
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < "${i}-packages-nr")" |
|||
if [ -n "$PACKAGES" ]; then |
|||
on_chroot << EOF |
|||
apt-get install --no-install-recommends -y $PACKAGES |
|||
EOF |
|||
fi |
|||
log "End ${SUB_STAGE_DIR}/${i}-packages-nr" |
|||
fi |
|||
if [ -f "${i}-packages" ]; then |
|||
log "Begin ${SUB_STAGE_DIR}/${i}-packages" |
|||
PACKAGES="$(sed -f "${SCRIPT_DIR}/remove-comments.sed" < "${i}-packages")" |
|||
if [ -n "$PACKAGES" ]; then |
|||
on_chroot << EOF |
|||
apt-get install -y $PACKAGES |
|||
EOF |
|||
fi |
|||
log "End ${SUB_STAGE_DIR}/${i}-packages" |
|||
fi |
|||
if [ -d "${i}-patches" ]; then |
|||
log "Begin ${SUB_STAGE_DIR}/${i}-patches" |
|||
pushd "${STAGE_WORK_DIR}" > /dev/null |
|||
if [ "${CLEAN}" = "1" ]; then |
|||
rm -rf .pc |
|||
rm -rf ./*-pc |
|||
fi |
|||
QUILT_PATCHES="${SUB_STAGE_DIR}/${i}-patches" |
|||
SUB_STAGE_QUILT_PATCH_DIR="$(basename "$SUB_STAGE_DIR")-pc" |
|||
mkdir -p "$SUB_STAGE_QUILT_PATCH_DIR" |
|||
ln -snf "$SUB_STAGE_QUILT_PATCH_DIR" .pc |
|||
quilt upgrade |
|||
if [ -e "${SUB_STAGE_DIR}/${i}-patches/EDIT" ]; then |
|||
echo "Dropping into bash to edit patches..." |
|||
bash |
|||
fi |
|||
RC=0 |
|||
quilt push -a || RC=$? |
|||
case "$RC" in |
|||
0|2) |
|||
;; |
|||
*) |
|||
false |
|||
;; |
|||
esac |
|||
popd > /dev/null |
|||
log "End ${SUB_STAGE_DIR}/${i}-patches" |
|||
fi |
|||
if [ -x ${i}-run.sh ]; then |
|||
log "Begin ${SUB_STAGE_DIR}/${i}-run.sh" |
|||
./${i}-run.sh |
|||
log "End ${SUB_STAGE_DIR}/${i}-run.sh" |
|||
fi |
|||
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 |
|||
log "End ${SUB_STAGE_DIR}" |
|||
} |
|||
|
|||
|
|||
run_stage(){ |
|||
log "Begin ${STAGE_DIR}" |
|||
STAGE="$(basename "${STAGE_DIR}")" |
|||
pushd "${STAGE_DIR}" > /dev/null |
|||
unmount "${WORK_DIR}/${STAGE}" |
|||
STAGE_WORK_DIR="${WORK_DIR}/${STAGE}" |
|||
ROOTFS_DIR="${STAGE_WORK_DIR}"/rootfs |
|||
if [ ! -f SKIP_IMAGES ]; then |
|||
if [ -f "${STAGE_DIR}/EXPORT_IMAGE" ]; then |
|||
EXPORT_DIRS="${EXPORT_DIRS} ${STAGE_DIR}" |
|||
fi |
|||
fi |
|||
if [ ! -f SKIP ]; then |
|||
if [ "${CLEAN}" = "1" ]; then |
|||
if [ -d "${ROOTFS_DIR}" ]; then |
|||
rm -rf "${ROOTFS_DIR}" |
|||
fi |
|||
fi |
|||
if [ -x prerun.sh ]; then |
|||
log "Begin ${STAGE_DIR}/prerun.sh" |
|||
./prerun.sh |
|||
log "End ${STAGE_DIR}/prerun.sh" |
|||
fi |
|||
for SUB_STAGE_DIR in "${STAGE_DIR}"/*; do |
|||
if [ -d "${SUB_STAGE_DIR}" ] && |
|||
[ ! -f "${SUB_STAGE_DIR}/SKIP" ]; then |
|||
run_sub_stage |
|||
fi |
|||
done |
|||
fi |
|||
unmount "${WORK_DIR}/${STAGE}" |
|||
PREV_STAGE="${STAGE}" |
|||
PREV_STAGE_DIR="${STAGE_DIR}" |
|||
PREV_ROOTFS_DIR="${ROOTFS_DIR}" |
|||
popd > /dev/null |
|||
log "End ${STAGE_DIR}" |
|||
} |
|||
|
|||
if [ "$(id -u)" != "0" ]; then |
|||
echo "Please run as root" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|||
export BASE_DIR |
|||
|
|||
if [ -f config ]; then |
|||
# shellcheck disable=SC1091 |
|||
source config |
|||
fi |
|||
|
|||
while getopts "c:" flag |
|||
do |
|||
case "$flag" in |
|||
c) |
|||
EXTRA_CONFIG="$OPTARG" |
|||
# shellcheck disable=SC1090 |
|||
source "$EXTRA_CONFIG" |
|||
;; |
|||
*) |
|||
;; |
|||
esac |
|||
done |
|||
|
|||
export PI_GEN=${PI_GEN:-pi-gen} |
|||
export PI_GEN_REPO=${PI_GEN_REPO:-https://github.com/RPi-Distro/pi-gen} |
|||
|
|||
if [ -z "${IMG_NAME}" ]; then |
|||
echo "IMG_NAME not set" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
export USE_QEMU="${USE_QEMU:-0}" |
|||
export IMG_DATE="${IMG_DATE:-"$(date +%Y-%m-%d)"}" |
|||
export IMG_FILENAME="${IMG_FILENAME:-"${IMG_DATE}-${IMG_NAME}"}" |
|||
export ZIP_FILENAME="${ZIP_FILENAME:-"image_${IMG_DATE}-${IMG_NAME}"}" |
|||
|
|||
export SCRIPT_DIR="${BASE_DIR}/scripts" |
|||
export WORK_DIR="${WORK_DIR:-"${BASE_DIR}/work/${IMG_DATE}-${IMG_NAME}"}" |
|||
export DEPLOY_DIR=${DEPLOY_DIR:-"${BASE_DIR}/deploy"} |
|||
export DEPLOY_ZIP="${DEPLOY_ZIP:-1}" |
|||
export LOG_FILE="${WORK_DIR}/build.log" |
|||
|
|||
export TARGET_HOSTNAME=${TARGET_HOSTNAME:-raspberrypi} |
|||
|
|||
export FIRST_USER_NAME=${FIRST_USER_NAME:-pi} |
|||
export FIRST_USER_PASS=${FIRST_USER_PASS:-raspberry} |
|||
export WPA_ESSID |
|||
export WPA_PASSWORD |
|||
export WPA_COUNTRY |
|||
export ENABLE_SSH="${ENABLE_SSH:-0}" |
|||
|
|||
export LOCALE_DEFAULT="${LOCALE_DEFAULT:-en_GB.UTF-8}" |
|||
|
|||
export KEYBOARD_KEYMAP="${KEYBOARD_KEYMAP:-gb}" |
|||
export KEYBOARD_LAYOUT="${KEYBOARD_LAYOUT:-English (UK)}" |
|||
|
|||
export TIMEZONE_DEFAULT="${TIMEZONE_DEFAULT:-Europe/London}" |
|||
|
|||
export GIT_HASH=${GIT_HASH:-"$(git rev-parse HEAD)"} |
|||
|
|||
export CLEAN |
|||
export IMG_NAME |
|||
export APT_PROXY |
|||
|
|||
export STAGE |
|||
export STAGE_DIR |
|||
export STAGE_WORK_DIR |
|||
export PREV_STAGE |
|||
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 |
|||
|
|||
export QUILT_PATCHES |
|||
export QUILT_NO_DIFF_INDEX=1 |
|||
export QUILT_NO_DIFF_TIMESTAMPS=1 |
|||
export QUILT_REFRESH_ARGS="-p ab" |
|||
|
|||
# shellcheck source=scripts/common |
|||
source "${SCRIPT_DIR}/common" |
|||
# shellcheck source=scripts/dependencies_check |
|||
source "${SCRIPT_DIR}/dependencies_check" |
|||
|
|||
dependencies_check "${BASE_DIR}/depends" |
|||
|
|||
#check username is valid |
|||
if [[ ! "$FIRST_USER_NAME" =~ ^[a-z][-a-z0-9_]*$ ]]; then |
|||
echo "Invalid FIRST_USER_NAME: $FIRST_USER_NAME" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [[ -n "${APT_PROXY}" ]] && ! curl --silent "${APT_PROXY}" >/dev/null ; then |
|||
echo "Could not reach APT_PROXY server: ${APT_PROXY}" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [[ -n "${WPA_PASSWORD}" && ${#WPA_PASSWORD} -lt 8 || ${#WPA_PASSWORD} -gt 63 ]] ; then |
|||
echo "WPA_PASSWORD" must be between 8 and 63 characters |
|||
exit 1 |
|||
fi |
|||
|
|||
mkdir -p "${WORK_DIR}" |
|||
log "Begin ${BASE_DIR}" |
|||
|
|||
STAGE_LIST=${STAGE_LIST:-${BASE_DIR}/stage*} |
|||
|
|||
for STAGE_DIR in $STAGE_LIST; do |
|||
STAGE_DIR=$(realpath "${STAGE_DIR}") |
|||
run_stage |
|||
done |
|||
|
|||
CLEAN=1 |
|||
for EXPORT_DIR in ${EXPORT_DIRS}; do |
|||
STAGE_DIR=${BASE_DIR}/export-image |
|||
# shellcheck source=/dev/null |
|||
source "${EXPORT_DIR}/EXPORT_IMAGE" |
|||
EXPORT_ROOTFS_DIR=${WORK_DIR}/$(basename "${EXPORT_DIR}")/rootfs |
|||
run_stage |
|||
if [ "${USE_QEMU}" != "1" ]; then |
|||
if [ -e "${EXPORT_DIR}/EXPORT_NOOBS" ]; then |
|||
# shellcheck source=/dev/null |
|||
source "${EXPORT_DIR}/EXPORT_NOOBS" |
|||
STAGE_DIR="${BASE_DIR}/export-noobs" |
|||
run_stage |
|||
fi |
|||
fi |
|||
done |
|||
|
|||
if [ -x ${BASE_DIR}/postrun.sh ]; then |
|||
log "Begin postrun.sh" |
|||
cd "${BASE_DIR}" |
|||
./postrun.sh |
|||
log "End postrun.sh" |
|||
fi |
|||
|
|||
log "End ${BASE_DIR}" |
@ -0,0 +1,6 @@ |
|||
IMG_NAME=umbral |
|||
TARGET_HOSTNAME=umbral |
|||
TIMEZONE_DEFAULT="Etc/UTC" |
|||
FIRST_USER_NAME=umbral |
|||
FIRST_USER_PASS=umbralbox |
|||
ENABLE_SSH=1 |
@ -0,0 +1,19 @@ |
|||
quilt |
|||
parted |
|||
realpath:coreutils |
|||
qemu-arm-static:qemu-user-static |
|||
debootstrap |
|||
zerofree |
|||
zip |
|||
mkdosfs:dosfstools |
|||
capsh:libcap2-bin |
|||
bsdtar |
|||
grep |
|||
rsync |
|||
xz:xz-utils |
|||
curl |
|||
xxd |
|||
file |
|||
git |
|||
lsmod:kmod |
|||
bc |
@ -0,0 +1,9 @@ |
|||
#!/bin/bash -e |
|||
|
|||
if [ ! -x "${ROOTFS_DIR}/usr/bin/qemu-arm-static" ]; then |
|||
cp /usr/bin/qemu-arm-static "${ROOTFS_DIR}/usr/bin/" |
|||
fi |
|||
|
|||
if [ -e "${ROOTFS_DIR}/etc/ld.so.preload" ]; then |
|||
mv "${ROOTFS_DIR}/etc/ld.so.preload" "${ROOTFS_DIR}/etc/ld.so.preload.disabled" |
|||
fi |
@ -0,0 +1,7 @@ |
|||
#!/bin/bash -e |
|||
|
|||
on_chroot << EOF |
|||
apt-get update |
|||
apt-get -y dist-upgrade |
|||
apt-get clean |
|||
EOF |
@ -0,0 +1,3 @@ |
|||
#!/bin/bash -e |
|||
|
|||
install -m 644 files/resolv.conf "${ROOTFS_DIR}/etc/" |
@ -0,0 +1 @@ |
|||
nameserver 8.8.8.8 |
@ -0,0 +1,13 @@ |
|||
#!/bin/bash -e |
|||
|
|||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" |
|||
|
|||
IMGID="$(dd if="${IMG_FILE}" skip=440 bs=1 count=4 2>/dev/null | xxd -e | cut -f 2 -d' ')" |
|||
|
|||
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" |
@ -0,0 +1,101 @@ |
|||
#!/bin/bash -e |
|||
|
|||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" |
|||
INFO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.info" |
|||
|
|||
on_chroot << EOF |
|||
if [ -x /etc/init.d/fake-hwclock ]; then |
|||
/etc/init.d/fake-hwclock stop |
|||
fi |
|||
if hash hardlink 2>/dev/null; then |
|||
hardlink -t /usr/share/doc |
|||
fi |
|||
EOF |
|||
|
|||
if [ -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config" ]; then |
|||
chmod 700 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config" |
|||
fi |
|||
|
|||
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" |
|||
rm -f "${ROOTFS_DIR}/usr/bin/qemu-arm-static" |
|||
|
|||
if [ "${USE_QEMU}" != "1" ]; then |
|||
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 |
|||
fi |
|||
|
|||
rm -f "${ROOTFS_DIR}/etc/network/interfaces.dpkg-old" |
|||
|
|||
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}/etc/subuid-" |
|||
rm -f "${ROOTFS_DIR}/etc/subgid-" |
|||
|
|||
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" |
|||
|
|||
find "${ROOTFS_DIR}/var/log/" -type f -exec cp /dev/null {} \; |
|||
|
|||
rm -f "${ROOTFS_DIR}/root/.vnc/private.key" |
|||
rm -f "${ROOTFS_DIR}/etc/vnc/updateid" |
|||
|
|||
update_issue "$(basename "${EXPORT_DIR}")" |
|||
install -m 644 "${ROOTFS_DIR}/etc/rpi-issue" "${ROOTFS_DIR}/boot/issue.txt" |
|||
|
|||
cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE" |
|||
|
|||
|
|||
{ |
|||
if [ -f "$ROOTFS_DIR/usr/share/doc/raspberrypi-kernel/changelog.Debian.gz" ]; then |
|||
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" |
|||
|
|||
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" |
|||
|
|||
uname="$(curl -s -L "https://github.com/raspberrypi/firmware/raw/$firmware/extra/uname_string7")" |
|||
printf "Uname string: %s\n" "$uname" |
|||
fi |
|||
|
|||
printf "\nPackages:\n" |
|||
dpkg -l --root "$ROOTFS_DIR" |
|||
} >> "$INFO_FILE" |
|||
|
|||
ROOT_DEV="$(mount | grep "${ROOTFS_DIR} " | cut -f1 -d' ')" |
|||
|
|||
unmount "${ROOTFS_DIR}" |
|||
zerofree "${ROOT_DEV}" |
|||
|
|||
unmount_image "${IMG_FILE}" |
|||
|
|||
mkdir -p "${DEPLOY_DIR}" |
|||
|
|||
rm -f "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip" |
|||
rm -f "${DEPLOY_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" |
|||
|
|||
if [ "${DEPLOY_ZIP}" == "1" ]; then |
|||
pushd "${STAGE_WORK_DIR}" > /dev/null |
|||
zip "${DEPLOY_DIR}/${ZIP_FILENAME}${IMG_SUFFIX}.zip" \ |
|||
"$(basename "${IMG_FILE}")" |
|||
popd > /dev/null |
|||
else |
|||
cp "$IMG_FILE" "$DEPLOY_DIR" |
|||
fi |
|||
|
|||
cp "$INFO_FILE" "$DEPLOY_DIR" |
@ -0,0 +1,61 @@ |
|||
#!/bin/bash -e |
|||
|
|||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" |
|||
|
|||
unmount_image "${IMG_FILE}" |
|||
|
|||
rm -f "${IMG_FILE}" |
|||
|
|||
rm -rf "${ROOTFS_DIR}" |
|||
mkdir -p "${ROOTFS_DIR}" |
|||
|
|||
BOOT_SIZE="$((256 * 1024 * 1024))" |
|||
ROOT_SIZE=$(du --apparent-size -s "${EXPORT_ROOTFS_DIR}" --exclude var/cache/apt/archives --exclude boot --block-size=1 | cut -f 1) |
|||
|
|||
# All partition sizes and starts will be aligned to this size |
|||
ALIGN="$((4 * 1024 * 1024))" |
|||
# Add this much space to the calculated file size. This allows for |
|||
# some overhead (since actual space usage is usually rounded up to the |
|||
# filesystem block size) and gives some free space on the resulting |
|||
# image. |
|||
ROOT_MARGIN="$(echo "($ROOT_SIZE * 0.2 + 200 * 1024 * 1024) / 1" | bc)" |
|||
|
|||
BOOT_PART_START=$((ALIGN)) |
|||
BOOT_PART_SIZE=$(((BOOT_SIZE + ALIGN - 1) / ALIGN * ALIGN)) |
|||
ROOT_PART_START=$((BOOT_PART_START + BOOT_PART_SIZE)) |
|||
ROOT_PART_SIZE=$(((ROOT_SIZE + ROOT_MARGIN + ALIGN - 1) / ALIGN * ALIGN)) |
|||
IMG_SIZE=$((BOOT_PART_START + BOOT_PART_SIZE + ROOT_PART_SIZE)) |
|||
|
|||
truncate -s "${IMG_SIZE}" "${IMG_FILE}" |
|||
|
|||
parted --script "${IMG_FILE}" mklabel msdos |
|||
parted --script "${IMG_FILE}" unit B mkpart primary fat32 "${BOOT_PART_START}" "$((BOOT_PART_START + BOOT_PART_SIZE - 1))" |
|||
parted --script "${IMG_FILE}" unit B mkpart primary ext4 "${ROOT_PART_START}" "$((ROOT_PART_START + ROOT_PART_SIZE - 1))" |
|||
|
|||
PARTED_OUT=$(parted -sm "${IMG_FILE}" unit b print) |
|||
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 2 | tr -d B) |
|||
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 4 | tr -d B) |
|||
|
|||
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 2 | tr -d B) |
|||
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 4 | tr -d B) |
|||
|
|||
BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}") |
|||
ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}") |
|||
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 -L rootfs -O "$ROOT_FEATURES" "$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 --exclude /var/cache/apt/archives --exclude /boot "${EXPORT_ROOTFS_DIR}/" "${ROOTFS_DIR}/" |
|||
rsync -rtx "${EXPORT_ROOTFS_DIR}/boot/" "${ROOTFS_DIR}/boot/" |
@ -0,0 +1,42 @@ |
|||
#!/bin/bash -e |
|||
|
|||
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/OS.png "${NOOBS_DIR}/" |
|||
install -v files/release_notes.txt "${NOOBS_DIR}/" |
|||
|
|||
tar -v -c -C files/marketing -f "${NOOBS_DIR}/marketing.tar" . |
|||
|
|||
BOOT_SHASUM="$(sha256sum "${NOOBS_DIR}/boot.tar.xz" | cut -f1 -d' ')" |
|||
ROOT_SHASUM="$(sha256sum "${NOOBS_DIR}/root.tar.xz" | cut -f1 -d' ')" |
|||
|
|||
BOOT_SIZE="$(xz --robot -l "${NOOBS_DIR}/boot.tar.xz" | grep totals | cut -f 5)" |
|||
ROOT_SIZE="$(xz --robot -l "${NOOBS_DIR}/root.tar.xz" | grep totals | cut -f 5)" |
|||
|
|||
BOOT_SIZE="$(( BOOT_SIZE / 1024 / 1024 + 1))" |
|||
ROOT_SIZE="$(( ROOT_SIZE / 1024 / 1024 + 1))" |
|||
|
|||
BOOT_NOM="256" |
|||
ROOT_NOM="$(( ROOT_SIZE + 400 ))" |
|||
|
|||
mv "${NOOBS_DIR}/OS.png" "${NOOBS_DIR}/${NOOBS_NAME// /_}.png" |
|||
|
|||
sed "${NOOBS_DIR}/partitions.json" -i -e "s|BOOT_SHASUM|${BOOT_SHASUM}|" |
|||
sed "${NOOBS_DIR}/partitions.json" -i -e "s|ROOT_SHASUM|${ROOT_SHASUM}|" |
|||
|
|||
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}/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}/" |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 104 KiB |
@ -0,0 +1,20 @@ |
|||
{ |
|||
"description": "NOOBS_DESCRIPTION", |
|||
"feature_level": 35120124, |
|||
"kernel": "4.19", |
|||
"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", |
|||
"supported_models": [ |
|||
"Pi Model", |
|||
"Pi 2", |
|||
"Pi Zero", |
|||
"Pi 3", |
|||
"Pi Compute Module 3", |
|||
"Pi 4" |
|||
], |
|||
"url": "http://www.raspbian.org/", |
|||
"username": "pi", |
|||
"version": "buster" |
|||
} |
@ -0,0 +1,46 @@ |
|||
#!/bin/sh |
|||
#supports_backup in PINN |
|||
|
|||
set -ex |
|||
|
|||
# shellcheck disable=SC2154 |
|||
if [ -z "$part1" ] || [ -z "$part2" ]; then |
|||
printf "Error: missing environment variable part1 or part2\n" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
mkdir -p /tmp/1 /tmp/2 |
|||
|
|||
mount "$part1" /tmp/1 |
|||
mount "$part2" /tmp/2 |
|||
|
|||
sed /tmp/1/cmdline.txt -i -e "s|root=[^ ]*|root=${part2}|" |
|||
sed /tmp/2/etc/fstab -i -e "s|^[^#].* / |${part2} / |" |
|||
sed /tmp/2/etc/fstab -i -e "s|^[^#].* /boot |${part1} /boot |" |
|||
|
|||
# shellcheck disable=SC2154 |
|||
if [ -z "$restore" ]; then |
|||
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 splash /tmp/1/cmdline.txt; then |
|||
sed -i "s| quiet||g" /tmp/1/cmdline.txt |
|||
fi |
|||
sed -i 's| init=/usr/lib/raspi-config/init_resize.sh||' /tmp/1/cmdline.txt |
|||
else |
|||
sed -i '1 s|.*|& sdhci.debug_quirks2=4|' /tmp/1/cmdline.txt |
|||
fi |
|||
fi |
|||
|
|||
umount /tmp/1 |
|||
umount /tmp/2 |
@ -0,0 +1,22 @@ |
|||
{ |
|||
"partitions": [ |
|||
{ |
|||
"filesystem_type": "FAT", |
|||
"label": "boot", |
|||
"mkfs_options": "-F 32", |
|||
"partition_size_nominal": BOOT_NOM, |
|||
"uncompressed_tarball_size": BOOT_SIZE, |
|||
"want_maximised": false, |
|||
"sha256sum": "BOOT_SHASUM" |
|||
}, |
|||
{ |
|||
"filesystem_type": "ext4", |
|||
"label": "root", |
|||
"mkfs_options": "-O ^huge_file", |
|||
"partition_size_nominal": ROOT_NOM, |
|||
"uncompressed_tarball_size": ROOT_SIZE, |
|||
"want_maximised": true, |
|||
"sha256sum": "ROOT_SHASUM" |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,456 @@ |
|||
UNRELEASED: |
|||
* |
|||
2019-09-26: |
|||
* rpi-eeprom included |
|||
- This will automatically update the SPI EEPROM on the Raspberry Pi 4 to the latest stable version. |
|||
See https://rpf.io/eeprom for more information. |
|||
* New icon theme for file manager icons |
|||
* Appearance Settings - option for identical desktop on both monitors |
|||
* Appearance Settings - option to show different desktop icons on both monitors |
|||
* Taskbar automatically moved to monitor 0 if monitor 1 not found at boot |
|||
* Switching of audio output between two HDMI devices added to volume plugin |
|||
* Switching of audio input devices added to volume plugin |
|||
* .asoundrc (ALSA config file) now uses 'plug' values to support more devices |
|||
* Audio Settings tool modified to integrate more closely with volume plugin to reduce duplicated code |
|||
* Screen Configuration tool now shows separate menus for resolution and refresh rate |
|||
* Primary and active monitor settings removed from Screen Configuration tool |
|||
* Overscan support added for FKMS driver |
|||
* New keyboard shortcuts added - Ctrl-Alt-End brings up shutdown menu; Ctrl-Alt-M moves taskbar between monitors |
|||
* Latest changes to Bluez ALSA interface integrated to improve connection to Bluetooth audio devices |
|||
* Mousepad used as simple text editor instead of leafpad |
|||
* Version 3.2 of Thonny added |
|||
* Version 74 of Chromium added |
|||
* Version 3.0.8 of VLC added |
|||
* Version 32.0.0.255 of Flash player added |
|||
* Version 6.5.0 of RealVNC Server added |
|||
* Version 6.19.715 of RealVNC Viewer added (full image only) |
|||
* Version 12.0.1 of Mathematica added (full image only) |
|||
* Version 0.20.8 of NodeRED added (full image only) |
|||
* Version 3.1.0 of Sonic Pi added (full image only) |
|||
* Scratch 3 added (full image only) |
|||
* Bug fix - URL handling in Terminal |
|||
* Bug fix - octal values in SSIDs in network plugin |
|||
* Bug fix - remaining value in progress bar when transferring files |
|||
* Bug fix - integration of xarchiver tool with file manager |
|||
* Bug fix - start menu opening on incorrect monitor |
|||
* Bug fix - minimised applications wrongly displayed on taskbar on second monitor |
|||
* Bug fix - Bluetooth icon disappearing on x86 platforms when Bluetooth turned off |
|||
* Bug fix - Screen Configuration tool not shown on x86 platforms and settings not being saved |
|||
* Various translation updates |
|||
* Various minor bug fixes |
|||
* Epiphany/Web removed |
|||
* ntfs-3g included |
|||
* pciutils added |
|||
* Linux kernel 4.19.75 |
|||
* Raspberry Pi firmware 01508e81ec1e918448227ca864616d56c430b46d |
|||
2019-07-10: |
|||
* Clearer options for switching of Pi 4 video output in Raspberry Pi Configuration |
|||
* Option added to Appearance Settings to move taskbar to second monitor |
|||
* Option added to Recommended Software to restrict package installs by architecture |
|||
* New version of Adobe Flash player (32.0.0.223) |
|||
* Selection of screen refresh rates added to Screen Configuration |
|||
* Fix for missing text insertion cursor in LibreOffice on Pi 4 |
|||
* Fix for Wi-fi interruption when Wi-fi icon on taskbar is clicked |
|||
* FIx for incorrect desktop background behind desktop login prompt |
|||
* Fix for segmentation faults when launching obconf and lxapperarance |
|||
* Fix for unclosed file pointer in Screen Configuration |
|||
* Fix for Bluetooth plugin freeze when large numbers of devices detected |
|||
* Fix for opening URLs not working in lxterminal |
|||
* Fix for start menu opening on incorrect monitor when launched from keyboard |
|||
* Fix for taskbar item not having [] removed when un-minimising on second monitor |
|||
* Fix for Chromium video playback and WebGL performance on Pi 4 |
|||
* Remove 4kp60 option from Raspberry Pi Configuration |
|||
* Rename hdmi_enable_4k to hdmi_enable_4kp60 in /boot/config.txt and raspi-config |
|||
* Linux kernel 4.19.57 |
|||
* Raspberry Pi firmware 356f5c2880a3c7e8774025aa6fc934a617553e7b |
|||
2019-06-20: |
|||
* Based on Debian Buster |
|||
* Support for Raspberry Pi 4 hardware |
|||
* FKMS OpenGL desktop graphics driver and xcompmgr compositing window manager used when running on Raspberry Pi 4 |
|||
* Screen Configuration application added for use with FKMS driver |
|||
* Raspberry Pi 4 video output options added to Raspberry Pi Configuration |
|||
* Uses new PiXflat UI theme for GTK and Openbox |
|||
* CPU activity gauge plugin no longer shown on taskbar by default |
|||
* CPU temperature gauge plugin added (not shown by default) |
|||
* USB ejecter and Bluetooth taskbar icons hidden when not appropriate |
|||
* Version 74.0.3729.157 of Chromium web browser included |
|||
* Version 32.0.0.207 of Flash player included |
|||
* IDLE Python IDE removed |
|||
* Wolfram Mathematica removed temporarily due to incompatibility with Buster |
|||
* Display of package sizes removed from Recommended Software |
|||
* Appearance Settings modified to support independent settings for two monitors |
|||
* Oracle Java 7 and 8 replaced with OpenJDK 11 |
|||
* Miscellaneous small bug fixes |
|||
* On-board 5GHz WiFi blocked by rfkill by default |
|||
The block is removed when taking one of the following actions: |
|||
- Selecting a locale in the first run wizard |
|||
- Setting the WiFi country in the Raspberry Pi Configuration tool or the Network Settings applet |
|||
- Setting the WiFi country in raspi-config |
|||
- Providing a wpa_supplicant.conf file through the boot partition |
|||
- Running 'rfkill unblock wifi' |
|||
* Boot partition size set to 256M |
|||
* Linux kernel 4.19.50 |
|||
* Raspberry Pi firmware 88ca9081f5e51cdedd16d5dbc85ed12a25123201 |
|||
2019-04-08: |
|||
* Chromium browser updated to version 72 |
|||
* VLC media player updated to version 3.0.6 |
|||
* RealVNC Server updated to version 6.4.0 |
|||
* Flash player updated to version 32.0.0.156 |
|||
* Performance improvements to SDL library |
|||
* Performance improvements to pixman library |
|||
* Option to set display underscan added to startup wizard |
|||
* Mounted external drives now displayed on desktop by default |
|||
* Network plugin modified for improved compatibility with wpa_passphrase |
|||
* SD Card Copier tweaks to reduce copy failures |
|||
* Various minor bug fixes and appearance tweaks |
|||
* Added ethtool |
|||
* Added rng-tools |
|||
* Add PINN restore support |
|||
* Linux kernel 4.14.98 |
|||
* Raspberry Pi firmware f8939644f7bd3065068787f1f92b3f3c79cf3de9 |
|||
2018-11-13: |
|||
* Two versions of image created - "base" image has no optional software packages included; "full" image has all optional packages |
|||
- Removed from "base" image - LibreOffice, Thonny, Scratch, Scratch 2, Sonic Pi, Minecraft, Python Games, SmartSim, SenseHAT Emulator |
|||
- Added to "full" image - Mathematica, BlueJ, Greenfoot, Node-RED, Claws Mail, VNC Viewer |
|||
* Python Games and SmartSim added to Recommended Software |
|||
* VLC media player with VideoCore hardware acceleration included in image |
|||
* Version 3.0.5 of Thonny included |
|||
* Modifications to LXDE components to enable local configuration to override global configuration correctly |
|||
* Modifications to Appearance Settings to support above configuration changes |
|||
* Modifications to various initial config defaults and relevant package to support above configuration changes |
|||
* Selecting default option in Appearance Settings now deletes relevant local configuration files |
|||
* PiX theme modified so that all changes made in Appearance Settings are in override files rather than in theme files |
|||
* Design of scrollbar buttons changed |
|||
* Image Viewer moved into Graphics category on main menu |
|||
* Recommended Software now installs LibreOffice language support files if needed, and suggests reboot if needed |
|||
* Latest version of Pepper Flash plugin included |
|||
* Chromium h264ify plugin permissions set correctly by default |
|||
* Corrections to various MIME types so that files open in sensible default applications |
|||
* Set default timezone to 'Europe/London' |
|||
* Linux kernel 4.14.79 |
|||
* Raspberry Pi firmware 12e0bf86e08d6067372bc0a45d7e8a10d3113210 |
|||
2018-10-09: |
|||
* Raspberry Pi 3A+ support |
|||
* In startup wizard, assign keyboard to country as per Debian installer recommendations |
|||
* In startup wizard, add option to use US keyboard in preference to country-specific option |
|||
* In startup wizard, show IP address on first page |
|||
* In startup wizard, check for existing wifi network connection and show it if there is one |
|||
* In startup wizard, install language support packages for LibreOffice and other applications |
|||
* In startup wizard, improve operation with keyboard only and no mouse |
|||
* Password change in Raspberry Pi Configuration and startup wizard now works properly if passwords contain shell characters |
|||
* Battery indicator plugin modified to cope with Pi-top hardware monitor crashing |
|||
* Networking plugin hides wifi password characters by default |
|||
* In Scratch 2 GPIO plugin, set pin from dropdown list rather than free text |
|||
* In Scratch 2 SenseHAT plugin, swap x and y axis values for LED array |
|||
* Include latest Adobe Flash player (31.0.0.108) |
|||
* Include latest RealVNC Server (6.3.1) |
|||
* Include libav-tools |
|||
* Include ssh-import-id |
|||
* Removed Mathematica |
|||
* Merge in latest third-party code for Bluetooth ALSA interface |
|||
* Add ability to prevent software update changing configuration files, by creating ~/.config/.lock file |
|||
* Various other small bug fixes, tweaks and changes to text |
|||
* Make dhcpcd work with 3G devices |
|||
* Add hw acceleration to ffmpeg |
|||
* Improved WiFi-BT coexistence parameters |
|||
* Run fake-hwclock before systemd-fsck-root |
|||
* Raspberry Pi PoE HAT support |
|||
* Linux kernel 4.14.71 |
|||
* Raspberry Pi firmware 5b49caa17e91d0e64024380119ad739bb201c674 |
|||
2018-06-27: |
|||
* New first-boot configuration wizard added |
|||
* Recommended Software installer added |
|||
* Bluej, Greenfoot, NodeRED, Claws Mail, VNC Viewer removed from image - can now be installed from Recommended Applications |
|||
* Qpdfview PDF viewer installed instead of Xpdf |
|||
* Version 65.0 of Chromium browser included, with latest Flash player |
|||
* Volume up / down keys now change by 5% increments and affect currently-selected output device rather than internal device only |
|||
* Network plugin now remembers previously-entered WiFi network passwords when prompting for reconnection |
|||
* Serial port and serial console can now be switched separately in Raspberry Pi Configuration |
|||
* Lxkeymap keyboard language setting application removed - replaced with dialog within Raspberry Pi Configuration |
|||
* Wifi country and keyboard language setting dialogs in Raspberry Pi Configuration now callable from other applications |
|||
* New version of Piboto font included to render with correct weight under some rogue applications |
|||
* Reconnection to Bluetooth audio devices on reboot improved |
|||
* Disable click-to-rename behaviour in file manager if single-click selection enabled |
|||
* Appearance Settings dialog makes config changes to some Qt files to match selected theme |
|||
* MIME file type associations improved |
|||
* Multiple desktop management options removed from mouse middle-click menu |
|||
* Menu shortcuts to Raspberry Pi website amended |
|||
* Python 2 IDLE menu link removed |
|||
* Sample Magpi PDF installed in /home/pi/MagPi |
|||
* Various minor tweaks, bug fixes and appearance changes |
|||
* Bluetooth updates |
|||
- Firmware with Bluetooth 4.2 features |
|||
- SCO profile suppot added via bthelper.service |
|||
* Linux kernel 4.14.50+ |
|||
* Raspberry Pi firmware 748fb17992426bb29d99224b93cb962fefbdc833 |
|||
2018-04-18: |
|||
* Fixed race between wifi-country.service and raspberrypi-net-mods.service |
|||
* Linux kernel 4.14.34+ |
|||
* Raspberry Pi firmware 5db8e4e1c63178e200d6fbea23ed4a9bf4656658 |
|||
2018-03-13: |
|||
* Raspberry Pi 3 B+ support |
|||
* WiFi is disabled until wireless regulatory domain is set (Pi 3 B+ only) |
|||
- The domain can be done through 'Raspberry Pi Configuration' (rc_gui), |
|||
'raspi-config' or by setting 'country=' to an appropriate ISO 3166 |
|||
alpha2 country code in /etc/wpa_supplicant/wpa_supplicant.conf. |
|||
* Default wireless regulatory domain is now unset |
|||
* Added support to desktop for different screen sizes and resolutions, |
|||
including multiple preset options in Appearance Settings and pixel doubling |
|||
option in Raspberry Pi Configuration |
|||
* Version 2.1.16 of Thonny included |
|||
* Version 29.0.0.113 of Adobe PepperFlash player included |
|||
* Version 1.2.post1 of Pygame Zero included |
|||
* Bluetooth plugin now supports connection to Bluetooth LE HID devices |
|||
* Network plugin now indicates 5G-compatible APs |
|||
* Latest changes to Bluez ALSA service merged |
|||
- service now started on CLI boot as well as GUI boot |
|||
* Latest changes to dhcpcd networking plugin merged |
|||
* Improved support for running on pi-top devices |
|||
* Small design changes to PiX theme and icons |
|||
* Bug fix - hide spurious window resize handles |
|||
* Bug fix - Scratch 2 remote GPIO state block now works correctly |
|||
* Updated WiFi Firmware |
|||
- brcmfmac43455-sdio 7.45.154 |
|||
- brcmfmac43430-sdio 7.45.98.38 |
|||
* New packages: |
|||
- policykit-1 |
|||
- obconf |
|||
- python-buttonshim python3-buttonshim |
|||
- python-unicornhathd python3-unicornhathd |
|||
- python-pantilthat python3-pantilthat |
|||
* Linux kernel 4.9.80+ |
|||
* Raspberry Pi firmware 3347884c7df574bbabeff6dca63caf686e629699 |
|||
2017-11-29: |
|||
* Added battery monitor plugin for taskbar - works on x86 images or first-generation Pi-Top |
|||
* Added cutdown mode to PCManFM file manager to reduce complexity |
|||
* Added ability to rename files in PCManFM by clicking name when selected |
|||
* Bug fix in Bluetooth ALSA module to reduce truncation of audio at end of playback |
|||
* Various small tweaks, bug fixes and theme modifications |
|||
* New kernel and firmware |
|||
2017-09-07: |
|||
* Disable predictable network interface names for Ethernet devices |
|||
* Bug fix for keyboard settings dialog in Raspberry Pi Configuration |
|||
* Bug fix for crash on some videos and animations in Chromium |
|||
* Bug fix for taskbar crash when running RealVNC server |
|||
* Bug fix for reloading projects with extensions in Scratch 2 |
|||
* Bug fix for MAC address problem in Bluetooth |
|||
* Simple mode and new icons in Thonny |
|||
* New Japanese translations in Raspberry Pi Configuration |
|||
* Install fonts-droid-fallback for international fonts |
|||
2017-08-16: |
|||
* 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 |
|||
* Wireless firmware for Pi 3 and Pi 0W modified to address Broadpwn exploit |
|||
* 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 permissions for D-bus Bluetooth access |
|||
* Removed sudo from shutdown options |
|||
* Appearance of tooltips updated in theme |
|||
* Fixed ejecter plugin grabbing focus |
|||
* raspi-config command line and GUI apps tidied; unnecessary reboots removed |
|||
* More error detection in piclone; copying of volume names and IDs added |
|||
* Updated translation files |
|||
2016-05-10: |
|||
* New version of Scratch, which no longer requires sudo |
|||
* New version of BlueJ |
|||
* New version of NodeRED |
|||
* New version of pypy |
|||
* pigpio included |
|||
* geany editor included |
|||
* SD Card Copier added (can be used to duplicate or back up the Pi) |
|||
* Bluetooth plugin added to taskbar |
|||
* Volume control on taskbar now compatible with Bluetooth devices |
|||
* New shutdown helper application |
|||
* Mouse double-click speed setting added to mouse and keyboard preference application |
|||
* Option to enable / disable 1-wire interface and remote access to pigpio added to Raspberry Pi config application |
|||
* File system automatically expanded on first boot |
|||
* Empty Wastebasket option added to right-click menu |
|||
* Ctrl-Alt-T can be used to open a terminal window |
|||
* Various small bug fixes and appearance tweaks |
|||
* Updated firmware and kernel (https://github.com/raspberrypi/firmware/commit/cc6d7bf8b4c03a2a660ff9fdf4083fc165620866) |
|||
2016-03-18: |
|||
* updated firmware and kernel (https://github.com/raspberrypi/firmware/commit/951799bbcd795ddf27769d14acf4813fdcbe53dc) |
|||
* use serial0 in cmdline.txt |
|||
* wpa_supplicant.conf country default to GB (allows use of channels 12 and 13) |
|||
2016-02-26: |
|||
* Support added for Pi 3, including Wifi and Bluetooth |
|||
* Option to set wifi country code added to raspi-config |
|||
2016-02-09: |
|||
* dtb that uses mmc sdcard driver (fixes problems experienced with certain SD cards) |
|||
2016-02-03: |
|||
* new version of Sonic Pi (2.9) |
|||
* new version of Scratch (15/1/16) |
|||
* new version of Node-Red (2.5) |
|||
* new version of Wolfram (10.3) |
|||
* optional experimental GL desktop driver (can be enabled using advanced options in command-line raspi-config) |
|||
* new version of Java (1.8.0_65) |
|||
* new version of WiringPi |
|||
* raspi-gpio included |
|||
* ping no longer requires sudo (except NOOBS installs) |
|||
* support for more USB audio devices in lxpanel |
|||
* bug fix for creation of new menus in Alacarte |
|||
* various changes to raspi-config and GUI to tidy up board support and fix bugs, and updated translations |
|||
* small tweaks to theme to support GL driver |
|||
2015-11-21: |
|||
* Included IBM Node-RED IoT application |
|||
* Included graphical package manager |
|||
* Included accelerated pixman library |
|||
* Updated Epiphany browser to improve video compatibility |
|||
* Updated Scratch with performance improvements and bug fixes |
|||
* Updated Raspberry Pi configuration to allow boot to pause while |
|||
network is established |
|||
* Various minor bug fixes |
|||
2015-09-25: |
|||
* Based on Debian Jessie |
|||
* Upgraded applications - Epiphany browser, Scratch and Sonic Pi |
|||
* Included applications - LibreOffice, Claws Mail, Greenfoot, BlueJ |
|||
* Included utilities - Alacarte menu editor, Lxkeymap, scrot, tree, pip |
|||
* New GUI-based Raspberry Pi Configuration application |
|||
* GPIO control now possible without need for sudo |
|||
* Web link to Magpi magazine included |
|||
* New taskbar plugin to eject mounted USB drives |
|||
* Default boot is now to GUI not desktop |
|||
* Look and feel now based on GTK+3 default theme |
|||
* Print screen key launches scrot to produce screenshot |
|||
* Common keyboards autodetected by GUI and drivers loaded accordingly |
|||
* Numerous small tweaks and bugfixes |
|||
2015-05-05: |
|||
* Updated UI changes |
|||
* Updated firmware |
|||
* Install raspberrypi-net-mods |
|||
* Install avahi-daemon |
|||
* Add user pi to new i2c and spi groups |
|||
* Modified udev rules for i2c and spi devices |
|||
2015-02-16: |
|||
* Newer firmware with various fixes |
|||
* New Sonic Pi release |
|||
* Pi2 compatible RPi.GPIO |
|||
* Updated Wolfram Mathematica |
|||
2015-01-31: |
|||
* Support for Pi2 |
|||
* Newer firmware |
|||
* New Sonic Pi release |
|||
* Updated Scratch |
|||
* New Wolfram Mathematica release |
|||
* Updated Epiphany |
|||
2014-12-24: |
|||
* Fix regression with omission of python-pygame |
|||
2014-12-22: |
|||
* New firmware with variosu fixes and improvements |
|||
* New UI configuration for lxde |
|||
* Various package updates |
|||
* python3-pygame preinstalled |
|||
* 'nuscratch', scratch running on the Cog StackVM |
|||
* Misc other changes |
|||
2014-09-09: |
|||
* New firmware with various fixes and improvements |
|||
* Minecraft Pi pre-installed |
|||
* Sonic Pi upgraded to 2.0 |
|||
* Include Epiphany browser work from Collabora |
|||
* Switch to Java 8 from Java 7 |
|||
* Updated Mathematica |
|||
* Misc minor configuration changes |
|||
2014-06-20: |
|||
* New firmware with various fixes, and kernel bugfix |
|||
2014-06-02: |
|||
* Many, many firmware updates with major USB improvements |
|||
* pyserial installed by default |
|||
* picamera installed by default |
|||
2014-01-07: |
|||
* Firmware updated |
|||
* Some space saved on the root filesystem |
|||
2013-12-20: |
|||
* Firmware updated, includes V4L2 fixes |
|||
* Update omxplayer |
|||
2013-12-18: |
|||
* Firmware updated and now using kernel 3.10. Many, many improvements |
|||
* fbturbo XOrg driver is now included and enabled by default. Thanks to |
|||
ssvb https://github.com/ssvb/xf86-video-fbturbo |
|||
* Update Scratch image with further bug fixes |
|||
* Include Wolfram Mathematica |
|||
* Update to PyPy 2.2 |
|||
* Update omxplayer |
|||
* Include v4l-utils for use with experimental V4L2 Raspberry Pi camera driver |
|||
* Update squeak-vm to fix issues with loading JPEGs |
|||
2013-09-25: |
|||
* Update Scratch image for further performance improvements |
|||
* Include Oracle JDK |
|||
* At least a 4GiB SD card is now required (see above) |
|||
* Include PyPy 2.1 |
|||
* Include base piface packages |
|||
* Update raspi-config to include bugfix for inheriting language settings |
|||
from NOOBS |
|||
2013-09-10: |
|||
* Updated to current top of tree firmware |
|||
* Update squeak-vm, including fastblit optimised for the Raspbery Pi |
|||
* Include Sonic Pi and a fixed jackd2 package |
|||
* Support boot to Scratch |
|||
* Inherit keyboard and language settings from NOOBS |
@ -0,0 +1,36 @@ |
|||
#!/bin/bash -e |
|||
|
|||
IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" |
|||
NOOBS_DIR="${STAGE_WORK_DIR}/${IMG_DATE}-${IMG_NAME}${IMG_SUFFIX}" |
|||
unmount_image "${IMG_FILE}" |
|||
|
|||
mkdir -p "${STAGE_WORK_DIR}" |
|||
cp "${WORK_DIR}/export-image/${IMG_FILENAME}${IMG_SUFFIX}.img" "${STAGE_WORK_DIR}/" |
|||
|
|||
rm -rf "${NOOBS_DIR}" |
|||
|
|||
PARTED_OUT=$(parted -sm "${IMG_FILE}" unit b print) |
|||
BOOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 2 | tr -d B) |
|||
BOOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^1:' | cut -d':' -f 4 | tr -d B) |
|||
|
|||
ROOT_OFFSET=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 2 | tr -d B) |
|||
ROOT_LENGTH=$(echo "$PARTED_OUT" | grep -e '^2:' | cut -d':' -f 4 | tr -d B) |
|||
|
|||
BOOT_DEV=$(losetup --show -f -o "${BOOT_OFFSET}" --sizelimit "${BOOT_LENGTH}" "${IMG_FILE}") |
|||
ROOT_DEV=$(losetup --show -f -o "${ROOT_OFFSET}" --sizelimit "${ROOT_LENGTH}" "${IMG_FILE}") |
|||
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}" |
|||
|
|||
mount "$ROOT_DEV" "${STAGE_WORK_DIR}/rootfs" |
|||
mount "$BOOT_DEV" "${STAGE_WORK_DIR}/rootfs/boot" |
|||
|
|||
ln -sv "/lib/systemd/system/apply_noobs_os_config.service" "$ROOTFS_DIR/etc/systemd/system/multi-user.target.wants/apply_noobs_os_config.service" |
|||
|
|||
bsdtar --numeric-owner --format gnutar -C "${STAGE_WORK_DIR}/rootfs/boot" -cpf - . | xz -T0 > "${NOOBS_DIR}/boot.tar.xz" |
|||
umount "${STAGE_WORK_DIR}/rootfs/boot" |
|||
bsdtar --numeric-owner --format gnutar -C "${STAGE_WORK_DIR}/rootfs" --one-file-system -cpf - . | xz -T0 > "${NOOBS_DIR}/root.tar.xz" |
|||
|
|||
unmount_image "${IMG_FILE}" |
@ -0,0 +1,100 @@ |
|||
log (){ |
|||
date +"[%T] $*" | tee -a "${LOG_FILE}" |
|||
} |
|||
export -f log |
|||
|
|||
bootstrap(){ |
|||
local BOOTSTRAP_CMD=debootstrap |
|||
local BOOTSTRAP_ARGS=() |
|||
|
|||
export http_proxy=${APT_PROXY} |
|||
|
|||
if [ "$(dpkg --print-architecture)" != "armhf" ] && [ "$(dpkg --print-architecture)" != "aarch64" ]; then |
|||
BOOTSTRAP_CMD=qemu-debootstrap |
|||
fi |
|||
|
|||
BOOTSTRAP_ARGS+=(--arch armhf) |
|||
BOOTSTRAP_ARGS+=(--components "main,contrib,non-free") |
|||
BOOTSTRAP_ARGS+=(--keyring "${STAGE_DIR}/files/raspberrypi.gpg") |
|||
BOOTSTRAP_ARGS+=("$@") |
|||
printf -v BOOTSTRAP_STR '%q ' "${BOOTSTRAP_ARGS[@]}" |
|||
|
|||
setarch linux32 capsh --drop=cap_setfcap -- -c "'${BOOTSTRAP_CMD}' $BOOTSTRAP_STR" || true |
|||
|
|||
if [ -d "$2/debootstrap" ]; then |
|||
rmdir "$2/debootstrap" |
|||
fi |
|||
} |
|||
export -f bootstrap |
|||
|
|||
copy_previous(){ |
|||
if [ ! -d "${PREV_ROOTFS_DIR}" ]; then |
|||
echo "Previous stage rootfs not found" |
|||
false |
|||
fi |
|||
mkdir -p "${ROOTFS_DIR}" |
|||
rsync -aHAXx --exclude var/cache/apt/archives "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/" |
|||
} |
|||
export -f copy_previous |
|||
|
|||
unmount(){ |
|||
if [ -z "$1" ]; then |
|||
DIR=$PWD |
|||
else |
|||
DIR=$1 |
|||
fi |
|||
|
|||
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" |
|||
done |
|||
done |
|||
} |
|||
export -f unmount |
|||
|
|||
unmount_image(){ |
|||
sync |
|||
sleep 1 |
|||
local LOOP_DEVICES |
|||
LOOP_DEVICES=$(losetup --list | grep "$(basename "${1}")" | cut -f1 -d' ') |
|||
for LOOP_DEV in ${LOOP_DEVICES}; do |
|||
if [ -n "${LOOP_DEV}" ]; then |
|||
local MOUNTED_DIR |
|||
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 |
|||
done |
|||
} |
|||
export -f unmount_image |
|||
|
|||
on_chroot() { |
|||
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" |
|||
fi |
|||
|
|||
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" |
|||
fi |
|||
|
|||
setarch linux32 capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- -e "$@" |
|||
} |
|||
export -f on_chroot |
|||
|
|||
update_issue() { |
|||
echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue" |
|||
} |
|||
export -f update_issue |
@ -0,0 +1,38 @@ |
|||
# 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 |
|||
|
|||
|
|||
if ! grep -q "/proc/sys/fs/binfmt_misc" /proc/mounts; then |
|||
echo "Module binfmt_misc not loaded in host" |
|||
echo "Please run:" |
|||
echo " sudo modprobe binfmt_misc" |
|||
exit 1 |
|||
fi |
|||
} |
@ -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 |
@ -0,0 +1,17 @@ |
|||
#!/bin/bash -e |
|||
|
|||
install -m 644 files/sources.list "${ROOTFS_DIR}/etc/apt/" |
|||
install -m 644 files/raspi.list "${ROOTFS_DIR}/etc/apt/sources.list.d/" |
|||
|
|||
if [ -n "$APT_PROXY" ]; then |
|||
install -m 644 files/51cache "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" |
|||
sed "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" -i -e "s|APT_PROXY|${APT_PROXY}|" |
|||
else |
|||
rm -f "${ROOTFS_DIR}/etc/apt/apt.conf.d/51cache" |
|||
fi |
|||
|
|||
on_chroot apt-key add - < files/raspberrypi.gpg.key |
|||
on_chroot << EOF |
|||
apt-get update |
|||
apt-get dist-upgrade -y |
|||
EOF |
@ -0,0 +1 @@ |
|||
Acquire::http { Proxy "APT_PROXY"; }; |
@ -0,0 +1,30 @@ |
|||
-----BEGIN PGP PUBLIC KEY BLOCK----- |
|||
Version: GnuPG v1.4.12 (GNU/Linux) |
|||
|
|||
mQENBE/d7o8BCACrwqQacGJfn3tnMzGui6mv2lLxYbsOuy/+U4rqMmGEuo3h9m92 |
|||
30E2EtypsoWczkBretzLUCFv+VUOxaA6sV9+puTqYGhhQZFuKUWcG7orf7QbZRuu |
|||
TxsEUepW5lg7MExmAu1JJzqM0kMQX8fVyWVDkjchZ/is4q3BPOUCJbUJOsE+kK/6 |
|||
8kW6nWdhwSAjfDh06bA5wvoXNjYoDdnSZyVdcYCPEJXEg5jfF/+nmiFKMZBraHwn |
|||
eQsepr7rBXxNcEvDlSOPal11fg90KXpy7Umre1UcAZYJdQeWcHu7X5uoJx/MG5J8 |
|||
ic6CwYmDaShIFa92f8qmFcna05+lppk76fsnABEBAAG0IFJhc3BiZXJyeSBQaSBB |
|||
cmNoaXZlIFNpZ25pbmcgS2V5iQE4BBMBAgAiBQJP3e6PAhsDBgsJCAcDAgYVCAIJ |
|||
CgsEFgIDAQIeAQIXgAAKCRCCsSmSf6MwPk6vB/9pePB3IukU9WC9Bammh3mpQTvL |
|||
OifbkzHkmAYxzjfK6D2I8pT0xMxy949+ThzJ7uL60p6T/32ED9DR3LHIMXZvKtuc |
|||
mQnSiNDX03E2p7lIP/htoxW2hDP2n8cdlNdt0M9IjaWBppsbO7IrDppG2B1aRLni |
|||
uD7v8bHRL2mKTtIDLX42Enl8aLAkJYgNWpZyPkDyOqamjijarIWjGEPCkaURF7g4 |
|||
d44HvYhpbLMOrz1m6N5Bzoa5+nq3lmifeiWKxioFXU+Hy5bhtAM6ljVb59hbD2ra |
|||
X4+3LXC9oox2flmQnyqwoyfZqVgSQa0B41qEQo8t1bz6Q1Ti7fbMLThmbRHiuQEN |
|||
BE/d7o8BCADNlVtBZU63fm79SjHh5AEKFs0C3kwa0mOhp9oas/haDggmhiXdzeD3 |
|||
49JWz9ZTx+vlTq0s+I+nIR1a+q+GL+hxYt4HhxoA6vlDMegVfvZKzqTX9Nr2VqQa |
|||
S4Kz3W5ULv81tw3WowK6i0L7pqDmvDqgm73mMbbxfHD0SyTt8+fk7qX6Ag2pZ4a9 |
|||
ZdJGxvASkh0McGpbYJhk1WYD+eh4fqH3IaeJi6xtNoRdc5YXuzILnp+KaJyPE5CR |
|||
qUY5JibOD3qR7zDjP0ueP93jLqmoKltCdN5+yYEExtSwz5lXniiYOJp8LWFCgv5h |
|||
m8aYXkcJS1xVV9Ltno23YvX5edw9QY4hABEBAAGJAR8EGAECAAkFAk/d7o8CGwwA |
|||
CgkQgrEpkn+jMD5Figf/dIC1qtDMTbu5IsI5uZPX63xydaExQNYf98cq5H2fWF6O |
|||
yVR7ERzA2w33hI0yZQrqO6pU9SRnHRxCFvGv6y+mXXXMRcmjZG7GiD6tQWeN/3wb |
|||
EbAn5cg6CJ/Lk/BI4iRRfBX07LbYULCohlGkwBOkRo10T+Ld4vCCnBftCh5x2OtZ |
|||
TOWRULxP36y2PLGVNF+q9pho98qx+RIxvpofQM/842ZycjPJvzgVQsW4LT91KYAE |
|||
4TVf6JjwUM6HZDoiNcX6d7zOhNfQihXTsniZZ6rky287htsWVDNkqOi5T3oTxWUo |
|||
m++/7s3K3L0zWopdhMVcgg6Nt9gcjzqN1c0gy55L/g== |
|||
=mNSj |
|||
-----END PGP PUBLIC KEY BLOCK----- |
@ -0,0 +1,3 @@ |
|||
deb http://archive.raspberrypi.org/debian/ buster main |
|||
# Uncomment line below then 'apt-get update' to enable 'apt-get source' |
|||
#deb-src http://archive.raspberrypi.org/debian/ buster main |
@ -0,0 +1,3 @@ |
|||
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi |
|||
# Uncomment line below then 'apt-get update' to enable 'apt-get source' |
|||
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi |
@ -0,0 +1 @@ |
|||
locales |
@ -0,0 +1,2 @@ |
|||
raspberrypi-bootloader |
|||
raspberrypi-kernel |
@ -0,0 +1,5 @@ |
|||
#!/bin/bash -e |
|||
|
|||
if [ ! -d "${ROOTFS_DIR}" ]; then |
|||
bootstrap buster "${ROOTFS_DIR}" http://raspbian.raspberrypi.org/raspbian/ |
|||
fi |
@ -0,0 +1,4 @@ |
|||
#!/bin/bash -e |
|||
|
|||
install -m 644 files/cmdline.txt "${ROOTFS_DIR}/boot/" |
|||
install -m 644 files/config.txt "${ROOTFS_DIR}/boot/" |
@ -0,0 +1 @@ |
|||
console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait |
@ -0,0 +1,65 @@ |
|||
# For more options and information see |
|||
# http://rpf.io/configtxt |
|||
# Some settings may impact device functionality. See link above for details |
|||
|
|||
# uncomment if you get no picture on HDMI for a default "safe" mode |
|||
#hdmi_safe=1 |
|||
|
|||
# uncomment this if your display has a black border of unused pixels visible |
|||
# and your display can output without overscan |
|||
#disable_overscan=1 |
|||
|
|||
# uncomment the following to adjust overscan. Use positive numbers if console |
|||
# goes off screen, and negative if there is too much border |
|||
#overscan_left=16 |
|||
#overscan_right=16 |
|||
#overscan_top=16 |
|||
#overscan_bottom=16 |
|||
|
|||
# uncomment to force a console size. By default it will be display's size minus |
|||
# overscan. |
|||
#framebuffer_width=1280 |
|||
#framebuffer_height=720 |
|||
|
|||
# uncomment if hdmi display is not detected and composite is being output |
|||
#hdmi_force_hotplug=1 |
|||
|
|||
# uncomment to force a specific HDMI mode (this will force VGA) |
|||
#hdmi_group=1 |
|||
#hdmi_mode=1 |
|||
|
|||
# uncomment to force a HDMI mode rather than DVI. This can make audio work in |
|||
# DMT (computer monitor) modes |
|||
#hdmi_drive=2 |
|||
|
|||
# uncomment to increase signal to HDMI, if you have interference, blanking, or |
|||
# no display |
|||
#config_hdmi_boost=4 |
|||
|
|||
# uncomment for composite PAL |
|||
#sdtv_mode=2 |
|||
|
|||
#uncomment to overclock the arm. 700 MHz is the default. |
|||
#arm_freq=800 |
|||
|
|||
# Uncomment some or all of these to enable the optional hardware interfaces |
|||
#dtparam=i2c_arm=on |
|||
#dtparam=i2s=on |
|||
#dtparam=spi=on |
|||
|
|||
# Uncomment this to enable infrared communication. |
|||
#dtoverlay=gpio-ir,gpio_pin=17 |
|||
#dtoverlay=gpio-ir-tx,gpio_pin=18 |
|||
|
|||
# Additional overlays and parameters are documented /boot/overlays/README |
|||
|
|||
# Enable audio (loads snd_bcm2835) |
|||
dtparam=audio=on |
|||
|
|||
[pi4] |
|||
# Enable DRM VC4 V3D driver on top of the dispmanx display stack |
|||
dtoverlay=vc4-fkms-v3d |
|||
max_framebuffers=2 |
|||
|
|||
[all] |
|||
#dtoverlay=vc4-fkms-v3d |
@ -0,0 +1,33 @@ |
|||
--- a/rootfs/etc/skel/.bashrc
|
|||
+++ b/rootfs/etc/skel/.bashrc
|
|||
@@ -43,7 +43,7 @@
|
|||
# uncomment for a colored prompt, if the terminal has the capability; turned |
|||
# off by default to not distract the user: the focus in a terminal window |
|||
# should be on the output of commands, not on the prompt |
|||
-#force_color_prompt=yes
|
|||
+force_color_prompt=yes
|
|||
|
|||
if [ -n "$force_color_prompt" ]; then |
|||
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then |
|||
@@ -57,7 +57,7 @@
|
|||
fi |
|||
|
|||
if [ "$color_prompt" = yes ]; then |
|||
- PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
|
|||
+ PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
|
|||
else |
|||
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
|||
fi |
|||
@@ -79,9 +79,9 @@
|
|||
#alias dir='dir --color=auto' |
|||
#alias vdir='vdir --color=auto' |
|||
|
|||
- #alias grep='grep --color=auto'
|
|||
- #alias fgrep='fgrep --color=auto'
|
|||
- #alias egrep='egrep --color=auto'
|
|||
+ alias grep='grep --color=auto'
|
|||
+ alias fgrep='fgrep --color=auto'
|
|||
+ alias egrep='egrep --color=auto'
|
|||
fi |
|||
|
|||
# colored GCC warnings and errors |
@ -0,0 +1 @@ |
|||
01-bashrc.diff |
@ -0,0 +1,15 @@ |
|||
#!/bin/bash -e |
|||
|
|||
install -d "${ROOTFS_DIR}/etc/systemd/system/getty@tty1.service.d" |
|||
install -m 644 files/noclear.conf "${ROOTFS_DIR}/etc/systemd/system/getty@tty1.service.d/noclear.conf" |
|||
install -v -m 644 files/fstab "${ROOTFS_DIR}/etc/fstab" |
|||
|
|||
on_chroot << EOF |
|||
if ! id -u ${FIRST_USER_NAME} >/dev/null 2>&1; then |
|||
adduser --disabled-password --gecos "" ${FIRST_USER_NAME} |
|||
fi |
|||
echo "${FIRST_USER_NAME}:${FIRST_USER_PASS}" | chpasswd |
|||
echo "root:root" | chpasswd |
|||
EOF |
|||
|
|||
|
@ -0,0 +1,3 @@ |
|||
proc /proc proc defaults 0 0 |
|||
BOOTDEV /boot vfat defaults 0 2 |
|||
ROOTDEV / ext4 defaults,noatime 0 1 |
@ -0,0 +1,2 @@ |
|||
[Service] |
|||
TTYVTDisallocate=no |
@ -0,0 +1 @@ |
|||
netbase |
@ -0,0 +1,6 @@ |
|||
#!/bin/bash -e |
|||
|
|||
echo "${TARGET_HOSTNAME}" > "${ROOTFS_DIR}/etc/hostname" |
|||
echo "127.0.1.1 ${TARGET_HOSTNAME}" >> "${ROOTFS_DIR}/etc/hosts" |
|||
|
|||
ln -sf /dev/null "${ROOTFS_DIR}/etc/systemd/network/99-default.link" |
@ -0,0 +1 @@ |
|||
libraspberrypi-bin libraspberrypi0 raspi-config |
@ -0,0 +1,5 @@ |
|||
#!/bin/bash -e |
|||
|
|||
if [ ! -d "${ROOTFS_DIR}" ]; then |
|||
copy_previous |
|||
fi |
@ -0,0 +1 @@ |
|||
raspi-copies-and-fills |
@ -0,0 +1,6 @@ |
|||
#!/bin/bash -e |
|||
|
|||
if [ -f "${ROOTFS_DIR}/etc/ld.so.preload" ]; then |
|||
mv "${ROOTFS_DIR}/etc/ld.so.preload" "${ROOTFS_DIR}/etc/ld.so.preload.disabled" |
|||
fi |
|||
|
@ -0,0 +1,31 @@ |
|||
ssh less fbset sudo psmisc strace ed ncdu crda |
|||
console-setup keyboard-configuration debconf-utils parted unzip |
|||
build-essential manpages-dev python bash-completion gdb pkg-config |
|||
python-rpi.gpio v4l-utils |
|||
avahi-daemon |
|||
lua5.1 |
|||
luajit |
|||
hardlink ca-certificates curl |
|||
fake-hwclock nfs-common usbutils |
|||
libraspberrypi-dev libraspberrypi-doc libfreetype6-dev |
|||
dosfstools |
|||
dphys-swapfile |
|||
raspberrypi-sys-mods |
|||
pi-bluetooth |
|||
apt-listchanges |
|||
usb-modeswitch |
|||
libpam-chksshpwd |
|||
rpi-update |
|||
libmtp-runtime |
|||
rsync |
|||
htop |
|||
man-db |
|||
policykit-1 |
|||
ssh-import-id |
|||
rng-tools |
|||
ethtool |
|||
vl805fw |
|||
ntfs-3g |
|||
pciutils |
|||
rpi-eeprom |
|||
vim |
@ -0,0 +1 @@ |
|||
cifs-utils |
@ -0,0 +1,22 @@ |
|||
Index: jessie-stage2/rootfs/etc/default/useradd
|
|||
===================================================================
|
|||
--- jessie-stage2.orig/rootfs/etc/default/useradd
|
|||
+++ jessie-stage2/rootfs/etc/default/useradd
|
|||
@@ -5,7 +5,7 @@
|
|||
# Similar to DHSELL in adduser. However, we use "sh" here because |
|||
# useradd is a low level utility and should be as general |
|||
# as possible |
|||
-SHELL=/bin/sh
|
|||
+SHELL=/bin/bash
|
|||
# |
|||
# The default group for users |
|||
# 100=users on Debian systems |
|||
@@ -29,7 +29,7 @@ SHELL=/bin/sh
|
|||
# The SKEL variable specifies the directory containing "skeletal" user |
|||
# files; in other words, files such as a sample .profile that will be |
|||
# copied to the new user's home directory when it is created. |
|||
-# SKEL=/etc/skel
|
|||
+SKEL=/etc/skel
|
|||
# |
|||
# Defines whether the mail spool should be created while |
|||
# creating the account |
@ -0,0 +1,13 @@ |
|||
Index: jessie-stage2/rootfs/etc/dphys-swapfile
|
|||
===================================================================
|
|||
--- jessie-stage2.orig/rootfs/etc/dphys-swapfile
|
|||
+++ jessie-stage2/rootfs/etc/dphys-swapfile
|
|||
@@ -13,7 +13,7 @@
|
|||
|
|||
# set size to absolute value, leaving empty (default) then uses computed value |
|||
# you most likely don't want this, unless you have an special disk situation |
|||
-#CONF_SWAPSIZE=
|
|||
+CONF_SWAPSIZE=100
|
|||
|
|||
# set size to computed value, this times RAM size, dynamically adapts, |
|||
# guarantees that there is enough swap without wasting disk space on excess |
@ -0,0 +1,12 @@ |
|||
Index: jessie-stage2/rootfs/etc/inputrc
|
|||
===================================================================
|
|||
--- jessie-stage2.orig/rootfs/etc/inputrc
|
|||
+++ jessie-stage2/rootfs/etc/inputrc
|
|||
@@ -65,3 +65,7 @@ $endif
|
|||
# "\e[F": end-of-line |
|||
|
|||
$endif |
|||
+
|
|||
+# mappings for up and down arrows search history
|
|||
+# "\e[B": history-search-forward
|
|||
+# "\e[A": history-search-backward
|
@ -0,0 +1,26 @@ |
|||
Index: jessie-stage2/rootfs/etc/login.defs
|
|||
===================================================================
|
|||
--- jessie-stage2.orig/rootfs/etc/login.defs
|
|||
+++ jessie-stage2/rootfs/etc/login.defs
|
|||
@@ -100,7 +100,7 @@ HUSHLOGIN_FILE .hushlogin
|
|||
# |
|||
# (they are minimal, add the rest in the shell startup files) |
|||
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
|||
-ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
|||
+ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
|
|||
|
|||
# |
|||
# Terminal permissions |
|||
Index: jessie-stage2/rootfs/etc/profile
|
|||
===================================================================
|
|||
--- jessie-stage2.orig/rootfs/etc/profile
|
|||
+++ jessie-stage2/rootfs/etc/profile
|
|||
@@ -4,7 +4,7 @@
|
|||
if [ "`id -u`" -eq 0 ]; then |
|||
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" |
|||
else |
|||
- PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
|
|||
+ PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
|
|||
fi |
|||
export PATH |
|||
|
@ -0,0 +1,5 @@ |
|||
--- stage2.orig/rootfs/boot/cmdline.txt
|
|||
+++ stage2/rootfs/boot/cmdline.txt
|
|||
@@ -1 +1 @@
|
|||
-console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
|||
+console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
|
@ -0,0 +1,5 @@ |
|||
01-useradd.diff |
|||
02-swap.diff |
|||
04-inputrc.diff |
|||
05-path.diff |
|||
07-resize-init.diff |
@ -0,0 +1,58 @@ |
|||
#!/bin/bash -e |
|||
|
|||
apt-get update |
|||
|
|||
install -m 755 files/resize2fs_once "${ROOTFS_DIR}/etc/init.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/50raspi "${ROOTFS_DIR}/etc/apt/apt.conf.d/" |
|||
|
|||
install -m 644 files/console-setup "${ROOTFS_DIR}/etc/default/" |
|||
|
|||
install -m 755 files/rc.local "${ROOTFS_DIR}/etc/" |
|||
|
|||
on_chroot << EOF |
|||
systemctl disable hwclock.sh |
|||
systemctl disable nfs-common |
|||
systemctl disable rpcbind |
|||
if [ "${ENABLE_SSH}" == "1" ]; then |
|||
systemctl enable ssh |
|||
else |
|||
systemctl disable ssh |
|||
fi |
|||
systemctl enable regenerate_ssh_host_keys |
|||
EOF |
|||
|
|||
if [ "${USE_QEMU}" = "1" ]; then |
|||
echo "enter QEMU mode" |
|||
install -m 644 files/90-qemu.rules "${ROOTFS_DIR}/etc/udev/rules.d/" |
|||
on_chroot << EOF |
|||
systemctl disable resize2fs_once |
|||
EOF |
|||
echo "leaving QEMU mode" |
|||
else |
|||
on_chroot << EOF |
|||
systemctl enable resize2fs_once |
|||
EOF |
|||
fi |
|||
|
|||
on_chroot <<EOF |
|||
for GRP in input spi i2c gpio; do |
|||
groupadd -f -r "\$GRP" |
|||
done |
|||
for GRP in adm dialout cdrom audio users sudo video games plugdev input gpio spi i2c netdev; do |
|||
adduser $FIRST_USER_NAME \$GRP |
|||
done |
|||
EOF |
|||
|
|||
on_chroot << EOF |
|||
setupcon --force --save-only -v |
|||
EOF |
|||
|
|||
on_chroot << EOF |
|||
usermod --pass='*' root |
|||
EOF |
|||
|
|||
rm -f "${ROOTFS_DIR}/etc/ssh/"ssh_host_*_key* |
@ -0,0 +1,5 @@ |
|||
# never use pdiffs. Current implementation is very slow on low-powered devices |
|||
Acquire::PDiffs "0"; |
|||
|
|||
# download up to 5 pdiffs: |
|||
#Acquire::PDiffs::FileLimit "5"; |
@ -0,0 +1,3 @@ |
|||
KERNEL=="sda", SYMLINK+="mmcblk0" |
|||
KERNEL=="sda?", SYMLINK+="mmcblk0p%n" |
|||
KERNEL=="sda2", SYMLINK+="root" |
@ -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' |
@ -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 |
@ -0,0 +1,25 @@ |
|||
#!/bin/sh |
|||
### BEGIN INIT INFO |
|||
# Provides: resize2fs_once |
|||
# Required-Start: |
|||
# Required-Stop: |
|||
# Default-Start: 3 |
|||
# Default-Stop: |
|||
# Short-Description: Resize the root filesystem to fill partition |
|||
# Description: |
|||
### END INIT INFO |
|||
. /lib/lsb/init-functions |
|||
case "$1" in |
|||
start) |
|||
log_daemon_msg "Starting resize2fs_once" |
|||
ROOT_DEV=$(findmnt / -o source -n) && |
|||
resize2fs $ROOT_DEV && |
|||
update-rc.d resize2fs_once remove && |
|||
rm /etc/init.d/resize2fs_once && |
|||
log_end_msg $? |
|||
;; |
|||
*) |
|||
echo "Usage: $0 start" >&2 |
|||
exit 3 |
|||
;; |
|||
esac |
@ -0,0 +1,2 @@ |
|||
[Service] |
|||
StandardOutput=tty |
@ -0,0 +1,8 @@ |
|||
wpasupplicant wireless-tools firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek |
|||
raspberrypi-net-mods |
|||
dhcpcd5 |
|||
net-tools |
|||
tor |
|||
libzbar-dev |
|||
libzbar0 |
|||
python3-pip |
@ -0,0 +1,33 @@ |
|||
#!/bin/bash -e |
|||
|
|||
apt-get update |
|||
|
|||
install -v -d "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d" |
|||
install -v -m 644 files/wait.conf "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/" |
|||
|
|||
install -v -d "${ROOTFS_DIR}/etc/wpa_supplicant" |
|||
install -v -m 600 files/wpa_supplicant.conf "${ROOTFS_DIR}/etc/wpa_supplicant/" |
|||
|
|||
if [ -v WPA_COUNTRY ]; then |
|||
echo "country=${WPA_COUNTRY}" >> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf" |
|||
fi |
|||
|
|||
if [ -v WPA_ESSID ] && [ -v WPA_PASSWORD ]; then |
|||
on_chroot <<EOF |
|||
set -o pipefail |
|||
wpa_passphrase "${WPA_ESSID}" "${WPA_PASSWORD}" | tee -a "/etc/wpa_supplicant/wpa_supplicant.conf" |
|||
EOF |
|||
elif [ -v WPA_ESSID ]; then |
|||
cat >> "${ROOTFS_DIR}/etc/wpa_supplicant/wpa_supplicant.conf" << EOL |
|||
|
|||
network={ |
|||
ssid="${WPA_ESSID}" |
|||
key_mgmt=NONE |
|||
} |
|||
EOL |
|||
fi |
|||
|
|||
# Disable wifi on 5GHz models |
|||
mkdir -p "${ROOTFS_DIR}/var/lib/systemd/rfkill/" |
|||
echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-3f300000.mmc:wlan" |
|||
echo 1 > "${ROOTFS_DIR}/var/lib/systemd/rfkill/platform-fe300000.mmc:wlan" |
@ -0,0 +1,3 @@ |
|||
[Service] |
|||
ExecStart= |
|||
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w |
@ -0,0 +1,2 @@ |
|||
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev |
|||
update_config=1 |
@ -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,8 @@ |
|||
#!/bin/bash -e |
|||
|
|||
echo "${TIMEZONE_DEFAULT}" > "${ROOTFS_DIR}/etc/timezone" |
|||
rm "${ROOTFS_DIR}/etc/localtime" |
|||
|
|||
on_chroot << EOF |
|||
dpkg-reconfigure -f noninteractive tzdata |
|||
EOF |
@ -0,0 +1 @@ |
|||
docker.io |
@ -0,0 +1,10 @@ |
|||
# Install docker via pip3 (within chroot) |
|||
|
|||
on_chroot << EOF |
|||
pip3 install docker-compose |
|||
EOF |
|||
|
|||
# Maybe generate a compose file to use |
|||
echo "Docker stuff installed" >> $ROOTFS_DIR/home/$FIRST_USER_NAME/docker-compose.txt |
|||
|
|||
|
@ -0,0 +1,4 @@ |
|||
# Test out image |
|||
echo "Hello World" >> $ROOTFS_DIR/home/$FIRST_USER_NAME/hello.txt |
|||
|
|||
|
@ -0,0 +1,5 @@ |
|||
echo "Adding lncm to DOCKER group" |
|||
on_chroot << EOF |
|||
usermod -a -G docker $FIRST_USER_NAME |
|||
EOF |
|||
|
@ -0,0 +1,8 @@ |
|||
echo "Install Python dependencies" |
|||
|
|||
## Add in any python dependencies within the chroot |
|||
on_chroot << EOF |
|||
pip3 install noma |
|||
EOF |
|||
|
|||
|
@ -0,0 +1,4 @@ |
|||
IMG_SUFFIX="-lite" |
|||
if [ "${USE_QEMU}" = "1" ]; then |
|||
export IMG_SUFFIX="${IMG_SUFFIX}-qemu" |
|||
fi |
@ -0,0 +1,7 @@ |
|||
#!/bin/bash -e |
|||
|
|||
apt-get update |
|||
|
|||
if [ ! -d "${ROOTFS_DIR}" ]; then |
|||
copy_previous |
|||
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 |
@ -0,0 +1,15 @@ |
|||
gstreamer1.0-x gstreamer1.0-omx gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-libav |
|||
qpdfview gtk2-engines alsa-utils |
|||
desktop-base |
|||
git |
|||
omxplayer |
|||
raspberrypi-artwork |
|||
policykit-1 |
|||
gvfs |
|||
rfkill |
|||
chromium-browser rpi-chromium-mods |
|||
gldriver-test |
|||
fonts-droid-fallback |
|||
fonts-liberation2 |
|||
obconf |
|||
arandr |
@ -0,0 +1,6 @@ |
|||
xserver-xorg-video-fbdev xserver-xorg xinit xserver-xorg-video-fbturbo |
|||
mousepad |
|||
lxde lxtask menu-xdg |
|||
zenity xdg-utils |
|||
gvfs-backends gvfs-fuse |
|||
lightdm gnome-themes-standard-data gnome-icon-theme |
@ -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 |
@ -0,0 +1,3 @@ |
|||
#!/bin/bash -e |
|||
|
|||
rm -f "${ROOTFS_DIR}/etc/systemd/system/dhcpcd.service.d/wait.conf" |
@ -0,0 +1,5 @@ |
|||
#!/bin/bash -e |
|||
|
|||
if [ ! -d "${ROOTFS_DIR}" ]; then |
|||
copy_previous |
|||
fi |
@ -0,0 +1,2 @@ |
|||
# Enable realtime process priority? |
|||
jackd2 jackd/tweak_rt_limits boolean true |
@ -0,0 +1,25 @@ |
|||
python python3-pygame python-pygame python-tk |
|||
python3 python3-tk thonny |
|||
python3-pgzero |
|||
python-serial python3-serial |
|||
python-picamera python3-picamera |
|||
debian-reference-en dillo |
|||
raspberrypi-net-mods raspberrypi-ui-mods |
|||
python-pip python3-pip |
|||
python3-numpy |
|||
pypy |
|||
alacarte rc-gui sense-hat |
|||
tree |
|||
libgl1-mesa-dri libgles1 libgles2-mesa xcompmgr |
|||
geany |
|||
piclone |
|||
wiringpi pigpio python-pigpio python3-pigpio raspi-gpio python-gpiozero python3-gpiozero python3-rpi.gpio |
|||
python-spidev python3-spidev |
|||
python-twython python3-twython |
|||
python-smbus python3-smbus |
|||
python-flask python3-flask |
|||
pprompt |
|||
piwiz |
|||
rp-prefapps |
|||
ffmpeg |
|||
vlc |
@ -0,0 +1,2 @@ |
|||
pi-package |
|||
realvnc-vnc-server |
@ -0,0 +1,22 @@ |
|||
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 |
|||
python-buttonshim python3-buttonshim |
|||
python-unicornhathd python3-unicornhathd |
|||
python-pantilthat python3-pantilthat |
@ -0,0 +1,4 @@ |
|||
hunspell-en-gb |
|||
hyphen-en-gb |
|||
wamerican |
|||
wbritish |
@ -0,0 +1,5 @@ |
|||
#!/bin/bash -e |
|||
|
|||
on_chroot << EOF |
|||
SUDO_USER="${FIRST_USER_NAME}" raspi-config nonint do_boot_behaviour B4 |
|||
EOF |
@ -0,0 +1,7 @@ |
|||
#!/bin/bash -e |
|||
|
|||
#Alacarte fixes |
|||
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local" |
|||
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share" |
|||
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share/applications" |
|||
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.local/share/desktop-directories" |
@ -0,0 +1,15 @@ |
|||
#!/bin/sh -e |
|||
|
|||
magpi_regex="MagPi[[:digit:]]*.pdf" |
|||
magpi_loc="https://www.raspberrypi.org/magpi-issues" |
|||
magpi_latest="$(curl "$magpi_loc/?C=M;O=D" -s | grep "$magpi_regex" -m 1 -o | head -n 1)" |
|||
|
|||
if [ ! -f "files/$magpi_latest" ]; then |
|||
find files/ -regextype grep -regex "files/$magpi_regex" -delete |
|||
wget "$magpi_loc/$magpi_latest" -O "files/$magpi_latest" |
|||
fi |
|||
|
|||
file "files/$magpi_latest" | grep -q "PDF document" |
|||
|
|||
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/MagPi" |
|||
install -v -o 1000 -g 1000 -m 644 "files/$magpi_latest" "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/MagPi/" |
@ -0,0 +1 @@ |
|||
*.pdf |
@ -0,0 +1,5 @@ |
|||
#!/bin/bash -e |
|||
|
|||
on_chroot << EOF |
|||
raspi-config nonint do_xcompmgr 0 |
|||
EOF |
@ -0,0 +1,4 @@ |
|||
IMG_SUFFIX="" |
|||
if [ "${USE_QEMU}" = "1" ]; then |
|||
export IMG_SUFFIX="${IMG_SUFFIX}-qemu" |
|||
fi |
@ -0,0 +1,2 @@ |
|||
NOOBS_NAME="Raspbian" |
|||
NOOBS_DESCRIPTION="A port of Debian with the Raspberry Pi Desktop" |