aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md59
-rwxr-xr-xscripts/01-build-rw-lightx.sh5
-rwxr-xr-xscripts/skip_all_stages.sh3
-rwxr-xr-xscripts/unskip_all_stages.sh3
-rw-r--r--stage3a_dev/00-install-packages/00-packages18
-rw-r--r--stage3a_dev/EXPORT_IMAGE4
-rwxr-xr-xstage3a_dev/prerun.sh5
7 files changed, 64 insertions, 33 deletions
diff --git a/README.md b/README.md
index f883383..5d1ea25 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
# pi-gen
-Tool used to create Raspberry Pi OS images. (Previously known as Raspbian).
+Tool used to create a Debian and Raspberry Pi derived OS images.
## Dependencies
pi-gen runs on Debian-based operating systems. Currently it is only supported on
-either Debian Buster or Ubuntu Xenial and is known to have issues building on
+either Debian Buster or Debian Bullseye and is known to have issues building on
earlier releases of these systems. On other Linux distributions it may be possible
to use the Docker build described below.
@@ -15,7 +15,7 @@ To install the required dependencies for `pi-gen` you should run:
```bash
apt-get install coreutils quilt parted qemu-user-static debootstrap zerofree zip \
dosfstools libarchive-tools libcap2-bin grep rsync xz-utils file git curl bc \
-qemu-utils kpartx
+qemu-utils kpartx squashfs-tools fatattr
```
The file `depends` contains a list of tools needed. The format of this
@@ -53,6 +53,15 @@ The following environment variables are supported:
but you should use something else for a customized version. Export files
in stages may add suffixes to `IMG_NAME`.
+* `INSTALL_RECOMMENDS` (Default: unset)
+
+ If set to one, i.e. `INSTALL_RECOMMENDS=1`,
+ installation process will install recommended packages.
+ Otherwise (default):
+ * apt selection without recommended and suggested
+
+ Note: `apt cache` is disabled for all target configurations.
+
* `ROOTFS_RO` (Default: unset)
If set to one, i.e. `ROOTFS_RO=1`, the root filesystem will be set read-only,
@@ -69,15 +78,6 @@ The following environment variables are supported:
the ssh host keys are retained while `regenerate_ssh_host_keys` is disabled
and the final `/boot/config.txt` has `splash` disabled (no rainbow).
-* `INSTALL_RECOMMENDS` (Default: unset)
-
- If set to one, i.e. `INSTALL_RECOMMENDS=1`,
- installation process will install recommended packages.
- Otherwise (default):
- * apt selection without recommended and suggested
-
- Note: `apt cache` is disabled for all target configurations.
-
* `REDUCED_FOOTPRINT` (Default: unset)
If set to one, i.e. `REDUCED_FOOTPRINT=1`,
@@ -103,10 +103,7 @@ The following environment variables are supported:
It is also **recommended** to not include *stage3b* *stage4* and *stage5* for a small embedded system,
as they contain heavy window-manager and broader desktop applications, etc.
- *stage3a* contains a minimal *xserver-xorg* subset and *dwm* with *stterm*,
- suitable for embedded systems using graphics.
-
- *stage3b* contains a full *lightdm*, *lxde* and *desktop-base*
+ See detailed notes on stages below.
Note: `apt cache` is disabled for all target configurations.
@@ -131,8 +128,8 @@ The following environment variables are supported:
* `RELEASE` (Default: buster)
- The release version to build images against. Valid values are jessie, stretch
- buster, bullseye, and testing.
+ The release version to build images against. Valid values are jessie, stretch,
+ buster and bullseye
* `APT_PROXY` (Default: unset)
@@ -354,7 +351,7 @@ The build of Raspbian is divided up into several stages for logical clarity
and modularity. This causes some initial complexity, but it simplifies
maintenance and allows for more easy customization.
- - **Stage 0** - bootstrap. The primary purpose of this stage is to create a
+ - **stage0** - bootstrap. The primary purpose of this stage is to create a
usable filesystem. This is accomplished largely through the use of
`debootstrap`, which creates a minimal filesystem suitable for use as a
base.tgz on Debian systems. This stage also configures apt settings and
@@ -362,7 +359,7 @@ maintenance and allows for more easy customization.
minimal core is installed but not configured, and the system will not quite
boot yet.
- - **Stage 1** - truly minimal system. This stage makes the system bootable by
+ - **stage1** - truly minimal system. This stage makes the system bootable by
installing system files like `/etc/fstab`, configures the bootloader, makes
the network operable, and installs packages like raspi-config. At this
stage the system should boot to a local console from which you have the
@@ -371,31 +368,31 @@ maintenance and allows for more easy customization.
really usable yet in a traditional sense yet. Still, if you want minimal,
this is minimal and the rest you could reasonably do yourself as sysadmin.
- - **Stage 2** - lite system. This stage produces the Raspbian-Lite image. It
+ - **stage2** - lite system. This stage produces the Raspbian-Lite image. It
installs some optimized memory functions, sets timezone and charmap
defaults, installs fake-hwclock and ntp, wireless LAN and bluetooth support,
dphys-swapfile, and other basics for managing the hardware. It also
creates necessary groups and gives the pi user access to sudo and the
standard console hardware permission groups.
- There are a few tools that may not make a whole lot of sense here for
- development purposes on a minimal system such as basic Python and Lua
- packages as well as the `build-essential` package. They are lumped right
- in with more essential packages presently, though they need not be with
- pi-gen. These are understandable for Raspbian's target audience, but if
- you were looking for something between truly minimal and Raspbian-Lite,
- here's where you start trimming.
+ Python and Lua are included here, as they are often required by certain setup scripts.
+
+ - **stage3a** - litex system. Contains a minimal *xserver-xorg* subset and *dwm* with *stterm*,
+ suitable for embedded systems using graphics.
+
+ - **stage3a_dev** - litexdev system. Contains full commandline development tools
+ and developer library packages based on *stage3a* inclusive *build-essential*, gcc, clang, OpenJDK 11, etc.
- - **Stage 3** - desktop system. Here's where you get the full desktop system
+ - **stage3b** - desktop system. Contains a complete desktop system
with X11 and LXDE, web browsers, git for development, Raspbian custom UI
enhancements, etc. This is a base desktop system, with some development
tools installed.
- - **Stage 4** - Normal Raspbian image. System meant to fit on a 4GB card. This is the
+ - **stage4** - Normal Raspbian image. System meant to fit on a 4GB card. This is the
stage that installs most things that make Raspbian friendly to new
users like system documentation.
- - **Stage 5** - The Raspbian Full image. More development
+ - **stage5** - The Raspbian Full image. More development
tools, an email client, learning tools like Scratch, specialized packages
like sonic-pi, office productivity, etc.
diff --git a/scripts/01-build-rw-lightx.sh b/scripts/01-build-rw-lightx.sh
index 6abfe23..161d267 100755
--- a/scripts/01-build-rw-lightx.sh
+++ b/scripts/01-build-rw-lightx.sh
@@ -42,10 +42,11 @@ export ENABLE_SSH=1
# export PUBKEY_ONLY_SSH=1
# export STAGE_LIST="stage0 stage1 stage2 stage3a stage3b stage4 stage5"
-export STAGE_LIST="stage0 stage1 stage2 stage3a"
+export STAGE_LIST="stage0 stage1 stage2 stage3a stage3a_dev"
touch ${rootdir}/stage2/SKIP_IMAGES
-# touch ${rootdir}/stage3a/SKIP_IMAGES
+touch ${rootdir}/stage3a/SKIP_IMAGES
+# touch ${rootdir}/stage3a_dev/SKIP_IMAGES
# touch ${rootdir}/stage3b/SKIP_IMAGES
# touch ${rootdir}/stage4/SKIP_IMAGES
diff --git a/scripts/skip_all_stages.sh b/scripts/skip_all_stages.sh
index fd5ad1c..7fa2b73 100755
--- a/scripts/skip_all_stages.sh
+++ b/scripts/skip_all_stages.sh
@@ -7,6 +7,7 @@ touch ${rootdir}/stage0/SKIP
touch ${rootdir}/stage1/SKIP
touch ${rootdir}/stage2/SKIP
touch ${rootdir}/stage3a/SKIP
+touch ${rootdir}/stage3a_dev/SKIP
touch ${rootdir}/stage3b/SKIP
touch ${rootdir}/stage4/SKIP
touch ${rootdir}/stage5/SKIP
@@ -14,8 +15,10 @@ touch ${rootdir}/stage_zaf/SKIP
touch ${rootdir}/stage2/SKIP_IMAGES
touch ${rootdir}/stage3a/SKIP_IMAGES
+touch ${rootdir}/stage3a_dev/SKIP_IMAGES
touch ${rootdir}/stage3b/SKIP_IMAGES
touch ${rootdir}/stage4/SKIP_IMAGES
+touch ${rootdir}/stage_zaf/SKIP_IMAGES
echo SKIP Entries:
find ${rootdir} -name SKIP
diff --git a/scripts/unskip_all_stages.sh b/scripts/unskip_all_stages.sh
index af255b3..1e0437a 100755
--- a/scripts/unskip_all_stages.sh
+++ b/scripts/unskip_all_stages.sh
@@ -7,6 +7,7 @@ rm -f ${rootdir}/stage0/SKIP
rm -f ${rootdir}/stage1/SKIP
rm -f ${rootdir}/stage2/SKIP
rm -f ${rootdir}/stage3a/SKIP
+rm -f ${rootdir}/stage3a_dev/SKIP
rm -f ${rootdir}/stage3b/SKIP
rm -f ${rootdir}/stage4/SKIP
rm -f ${rootdir}/stage5/SKIP
@@ -14,8 +15,10 @@ rm -f ${rootdir}/stage_zaf/SKIP
rm -f ${rootdir}/stage2/SKIP_IMAGES
rm -f ${rootdir}/stage3a/SKIP_IMAGES
+rm -f ${rootdir}/stage3a_dev/SKIP_IMAGES
rm -f ${rootdir}/stage3b/SKIP_IMAGES
rm -f ${rootdir}/stage4/SKIP_IMAGES
+rm -f ${rootdir}/stage_zaf/SKIP_IMAGES
echo SKIP Entries:
find ${rootdir} -name SKIP
diff --git a/stage3a_dev/00-install-packages/00-packages b/stage3a_dev/00-install-packages/00-packages
new file mode 100644
index 0000000..0a4b100
--- /dev/null
+++ b/stage3a_dev/00-install-packages/00-packages
@@ -0,0 +1,18 @@
+git git-all
+build-essential autoconf automake libtool gawk alien fakeroot raspberrypi-kernel-headers
+python3 python3-dev python3-setuptools
+g++ gcc libc-dev libpthread-stubs0-dev g++
+clang clang-tools
+nasm yasm
+libunwind8 libunwind-dev
+libglib2.0 libglib2.0-0 libglib2.0-dev
+openjdk-11-jdk openjdk-11-jre junit4 openjfx ant
+cmake cmake-extras extra-cmake-modules pkg-config
+ninja-build meson python3-mako flex bison zypper
+libcurl4 libcurl4-gnutls-dev mini-httpd curl wget ksh
+p7zip-full gawk
+libdrm-dev libgbm-dev libgles2-mesa-dev libegl1-mesa-dev libgl1-mesa-dev libglu1-mesa-dev
+xorg-dev libice-dev libsm-dev libx11-dev libxext-dev libxxf86vm-dev libxinerama-dev
+libxrandr-dev libxrender-dev libxcursor-dev libxi-dev libudev-dev libc6-dev
+libpulse-dev pulseaudio libasound2-dev libasound2
+parted libudev-dev libblkid-dev libattr1-dev uuid-dev
diff --git a/stage3a_dev/EXPORT_IMAGE b/stage3a_dev/EXPORT_IMAGE
new file mode 100644
index 0000000..cc47652
--- /dev/null
+++ b/stage3a_dev/EXPORT_IMAGE
@@ -0,0 +1,4 @@
+IMG_SUFFIX="-litexdev"
+if [ "${USE_QEMU}" = "1" ]; then
+ export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
+fi
diff --git a/stage3a_dev/prerun.sh b/stage3a_dev/prerun.sh
new file mode 100755
index 0000000..9acd13c
--- /dev/null
+++ b/stage3a_dev/prerun.sh
@@ -0,0 +1,5 @@
+#!/bin/bash -e
+
+if [ ! -d "${ROOTFS_DIR}" ]; then
+ copy_previous
+fi