@ -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" |