-sys_root_stretch/
-sys_root_buster/
-rpi_root_stretch/
-rpi_root_buster/
+sys_root_stretch_*/
+sys_root_buster_*/
cfg_root/
img_mount/
iso_root/
-part_boot.img
-part_root.img
-rpi_boot.img
-rpi_root.img
config.mk
+*.img
+*.iso
+*.squash
+*.squashfs
.*.swp
.*.swo
+*~
BOOT_MB := 62
ROOT_MB := 959
+fstype := ext4
+
config.mk:
cp "config.example" "$@"
endef
endif
-fstype := ext4
-
ifdef disk
VOLUME := ${disk}
PBOOT := ${disk}1
VOLUME := ${image}
PBOOT := part_boot.img
PROOT := part_root.img
- SYSROOT := sys_root_${release}/
+ SYSROOT := sys_root_${release}_${ARCH}/
CFGROOT := img_mount/
_target: _mbr _umount _config _install
_umount: _img_mount _config _bootloader_pc
_mbr: _partcopy _bootloader_pc
+else ifdef subvol
+ SYSROOT := sys_root_${release}_${ARCH}/
+ CFGROOT := cfg_root/
+
+ _target: _install _config ${subvol}
+
+ _bootstrap:
+ _install: _bootstrap
+ _copy: _install
+ _config: _copy
+
+ ${subvol}: _config
+ btrfs sub snap "${CFGROOT}" "$@"
+
else ifdef squash
SQUASH := ${squash}
- SYSROOT := sys_root_${release}/
+ SYSROOT := sys_root_${release}_${ARCH}/
CFGROOT := cfg_root/
PACKAGES += squashfs-tools nbd-client
else ifdef iso
ISO := ${iso}
ISOROOT := iso_root/
- SYSROOT := sys_root_${release}/
+ SYSROOT := sys_root_${release}_${ARCH}/
CFGROOT := cfg_root/
BOOT_MB := 2
PBOOT := ${ISOROOT}/efi.img
_copy: _install
_config: _copy _squash_modules
_isosquash: _config
-# ${PBOOT}: ${ISOROOT}
-# _format_boot: ${PBOOT}
-# _efi_mount: ${PBOOT} _format_boot
-# _efi_umount: _config
_bootloader_iso: _config
_iso_image: _bootloader_iso _isosquash # _efi_umount
else ifdef raspi
+ ARCH := armhf
+
VOLUME := ${raspi}
PBOOT := rpi_boot.img
PROOT := rpi_root.img
- SYSROOT := rpi_root_${release}/
+ SYSROOT := sys_root_${release}_${ARCH}/
CFGROOT := img_mount/
- ARCH := armhf
KEYRING := keys/raspbian-archive-keyring.gpg
BOOTSTRAP := http://raspbian.raspberrypi.org/raspbian
deb http://archive.raspberrypi.org/debian ${release} main
endef
- PACKAGES += firmware-brcm80211 libraspberrypi-bin libraspberrypi0 pi-bluetooth raspberrypi-bootloader raspberrypi-kernel initramfs-tools nilfs-tools
- fstype := nilfs2
+ PACKAGES += firmware-brcm80211 libraspberrypi-bin libraspberrypi0 pi-bluetooth raspberrypi-bootloader raspberrypi-kernel initramfs-tools
_target: _umount _config
_copy: _install _img_mount
_config: _copy _img_mount
_bootloader_raspi: _img_mount
- _umount: _img_mount _config _bootloader_raspi
+ _umount: _copy _config _bootloader_raspi
else
_target:
include $(addsuffix .mk, $(addprefix modules/, $(subst ${comma_},${space_},${modules})))
endif
-ifeq "${ARCH}" "amd64"
+ifeq "$(findstring linux-image, ${PACKAGES})" "linux-image"
+else ifeq "${ARCH}" "amd64"
PACKAGES += linux-image-amd64
else ifeq "${ARCH}" "i386"
PACKAGES += linux-image-686
export SOURCES SYSROOT CFGROOT VOLUME PBOOT PROOT SQUASH ARCH KEYRING BOOTSTRAP ISOROOT ISO
-sys_root_${release}/:
+sys_root_${release}_${ARCH}/:
btrfs subvol create "$@" || mkdir "$@"
chmod 755 "$@"
-rpi_root_${release}/:
- btrfs subvol create "$@" || mkdir "$@"
- chmod 755 "$@"
-
-cfg_root/: sys_root_${release}/ _install
+cfg_root/: sys_root_${release}_${ARCH}/ _install
-btrfs sub del "$@" || rm -r "$@"
btrfs sub snap "$<" "$@" || mkdir "$@"
chmod 755 "$@"
${SYSROOT}/etc/apt/trusted.gpg.d/: ${SYSROOT} _bootstrap
mkdir -p -m 755 "$@"
cp keys/*.gpg "$@"
+ chmod 644 "$@"/*.gpg
_install: ${SYSROOT} _aptkeys _norecommends
printf '%s\n' "$${SOURCES}" |sort -u >"$${SYSROOT}/etc/apt/sources.list"
chroot "$${SYSROOT}" rm /usr/sbin/udevadm
_copy: ${SYSROOT} ${CFGROOT}
+ sync
cp -au "$${SYSROOT}/." "$${CFGROOT}/"
_config: ${CFGROOT}
_sparse: ${PBOOT} ${PROOT}
-ifdef raspi
-_format_root: ${PROOT}
- -umount "$${CFGROOT}/boot" "$${CFGROOT}" "${PROOT}"
- mkfs.nilfs2 -f -L FSROOT "$${PROOT}"
+ifeq "${fstype}" "ext4"
+ fsflag:=-F
else
+ fsflag:=-f
+endif
+
_format_root: ${PROOT}
-umount "$${CFGROOT}/boot" "$${CFGROOT}" "${PROOT}"
- mkfs.ext4 -F -L FSROOT "$${PROOT}"
-endif
+ mkfs.${fstype} ${fsflag} -L FSROOT "$${PROOT}"
_format_boot: ${PBOOT}
-umount "$${CFGROOT}/boot" "${PBOOT}"
_bootloader_iso: ${CFGROOT} ${ISOROOT}
mkdir -p "$${ISOROOT}/boot/grub/"
cp -L "$${CFGROOT}/vmlinuz" "$${CFGROOT}/initrd.img" "$${ISOROOT}"
+ printf '%s\n' "insmod all_video" "set gfxmode=auto" "load_video" "insmod gfxterm" \
+ >"$${ISOROOT}/boot/grub/grub.cfg"
printf '%s\n' "set timeout=10" "default=buster" \
"menuentry 'Debian Buster' --id 'buster' {" \
"linux '/vmlinuz' boot=live" "initrd '/initrd.img'" "}" \
- >"$${ISOROOT}/boot/grub/grub.cfg"
+ >>"$${ISOROOT}/boot/grub/grub.cfg"
-[ -f "$${ISOROOT}/install/initrd.gz" -a -f "$${ISOROOT}/install/linux" ] && \
printf '%s\n' "menuentry 'Install Debian' --id 'install' {" \
"linux '/install/linux'" "initrd '/install/initrd.gz'" "}" \
mount -t vfat -o loop "$${PBOOT}" "efi/"
_efi_umount: _efi_mount
+ sync
umount efi/ && rmdir efi/
.PHONY: _syslinux_mbr _grub_mbr
|| mount -o loop,offset=2M,sizelimit=${BOOT_MB}M \
-t vfat "$${VOLUME}" "$${CFGROOT}/boot"
-_umount_boot: ${CFGROOT}
+_umount_boot: ${CFGROOT} _config
+ sync
-umount "$${CFGROOT}/boot"
-_umount_root: _umount_boot
+_umount_root: _umount_boot _config
+ sync
umount "$${CFGROOT}" && rmdir "$${CFGROOT}"
_umount: _umount_boot _umount_root
-rmdir hdd_mount
if [ -d "cfg_root/" ]; then btrfs sub del "cfg_root/" || rm -r "cfg_root/"; fi
if [ -d "iso_root/" ]; then btrfs sub del "iso_root/" || rm -r "iso_root/"; fi
- if [ -d "sys_root_${release}/" ]; then btrfs sub del "sys_root_${release}/" || rm -r "sys_root_${release}/"; fi
- if [ -d "rpi_root_${release}/" ]; then btrfs sub del "rpi_root_${release}/" || rm -r "rpi_root_${release}/"; fi
+ if [ -d "sys_root_${release}_${ARCH}/" ]; then btrfs sub del "sys_root_${release}_${ARCH}/" || rm -r "sys_root_${release}_${ARCH}/"; fi
-rm part_boot.img
-rm part_root.img
-rm rpi_boot.img
approxhost := localhost
endif
+approxrepos := main
+approxrepos += $(findstring contrib, ${SOURCES})
+approxrepos += $(findstring non-free, ${SOURCES})
+
ifdef approx
BOOTSTRAP := ${approx}
define SOURCES =
- deb ${approx} ${release} main
+ deb ${approx} ${release} ${approxrepos}
endef
else ifdef raspi
BOOTSTRAP := http://localhost/raspbian
else
BOOTSTRAP := http://localhost/debian
define SOURCES :=
- deb http://${approxhost}/debian ${release} main
+ deb http://${approxhost}/debian ${release} ${approxrepos}
endef
endif
keyboard-configuration keyboard-configuration/model select Generic 105-key (Intl) PC
keyboard-configuration keyboard-configuration/variant select English (US) - English (Macintosh)
+
+console-setup console-setup/charmap47 select UTF-8
+console-setup console-setup/codeset47 select # Latin1 and Latin5 - western Europe and Turkic languages
endef
+ifndef rpivmem
+ rpivmem := 128
+endif
+
define RPICONFIG :=
${RPICONFIG}
-dtoverlay=vc4-fkms-v3d,cma-256
+dtoverlay=vc4-fkms-v3d,cma-${rpivmem}
endef
.PHONY: _debconf_selections _raspberry_config _keyboard
printf '%s\n' "$${RPICONFIG}" >>"$${CFGROOT}/boot/config.txt"
_raspberry_initrd: ${CFGROOT}
- printf 'nilfs2\n' >>"$${CFGROOT}/etc/initramfs-tools/modules"
- k="$$(echo "$${CFGROOT}"/lib/modules/*-v7+)"; \
+ printf '${fstype}\n' >>"$${CFGROOT}/etc/initramfs-tools/modules"
+ k="$$(printf '%s\n' "$${CFGROOT}"/lib/modules/* |sed 's;^.*/;;; /-/d')"; \
+ [ "${kernel}" ] && k="${kernel}"; \
chroot $${CFGROOT} update-initramfs -c -k "$${k##*/}"; \
printf 'initramfs initrd.img-%s\n' "$${k##*/}" >>"$${CFGROOT}/boot/config.txt"
printf '%s\n' "$${hostname}" >"$${CFGROOT}/etc/hostname"
sed -Ei "s;^127\.0\.0\.1.*$$;& $${hostname};" "$${CFGROOT}/etc/hosts"
+.PHONY: _systemd_timeout
+_config: _systemd_timeout
+_systemd_timeout: ${CFGROOT}
+ mkdir -p "$${CFGROOT}/etc/systemd"
+ printf 'DefaultTimeout%sSec=%s\n' Start 10s Stop 10s >>"$${CFGROOT}/etc/systemd/system.conf"
+
ifdef wifi
_config: ${CFGROOT}/etc/network/interfaces.d/wifi
ifdef wifipass
export wifi
${CFGROOT}/etc/network/interfaces.d/wifi: ${CFGROOT}
printf 'auto wlan0\nallow-hotplug wlan0\n\niface wlan0 inet dhcp\n' >$@
- printf ' wireless-essid %s\n' "$$wifi" >>$@
+ printf ' wireless-essid "%s"\n' "$$wifi" >>$@
endif
endif
--- /dev/null
+PACKAGES += xserver-xorg-input-evdev xinput xinput-calibrator
+
+define RPICONFIG +=
+
+### Waveshare 4 Inch Display ###
+hdmi_force_hotplug=1
+dtparam=i2c_arm=on
+dtparam=spi=on
+enable_uart=1
+dtoverlay=waveshare35a
+# dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
+hdmi_group=2
+hdmi_mode=1
+hdmi_mode=87
+hdmi_cvt 430 320 60 6 0 0 0
+hdmi_drive=2
+display_rotate=0
+endef
+
+export display_wsLCD4_cfg display_wsLCD4_rotation
+
+define display_wsLCD4_cfg :=
+Section "InputClass"
+ Identifier "calibration"
+ MatchProduct "ADS7846 Touchscreen"
+ Option "Calibration" "3950 172 3871 194"
+ Option "SwapAxes" "1"
+ Option "EmulateThirdButton" "1"
+ Option "EmulateThirdButtonTimeout" "1000"
+ Option "EmulateThirdButtonMoveThreshold" "300"
+
+ # Identifier "evdev touchscreen catchall"
+ # MatchIsTouchscreen "on"
+ # Option "Calibration" "200 3950 250 4000"
+ # MatchDevicePath "/dev/input/event*"
+ # Driver "evdev"
+EndSection
+endef
+
+define display_wsLCD4_rotation :=
+# Keep touch matrix rotated in accordance with screen rotation
+while sleep 3; do
+ oldrotate="$${rotate}"
+ rotate="$$(xrandr |grep primary)"
+ rotate="$${rotate#*+0+0 }"
+ rotate="$${rotate% (*}"
+
+ [ "$${oldrotate}" = "$${rotate}" ] || case $$rotate in
+ left) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1;;
+ right) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1;;
+ inverted) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1;;
+ *) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1;;
+ esac
+done &
+endef
+
+.PHONY: _display_wsLCD4
+_config: _display_wsLCD5 ${CFGROOT}/boot/waveshare35a.dtbo
+_display_wsLCD4: ${CFGROOT} _copy _mount
+ # Rough touch calibration
+ mkdir -p "$${CFGROOT}/usr/share/X11/xorg.conf.d/"
+ printf '%s\n' "$${display_wsLCD4_cfg}" >"$${CFGROOT}/usr/share/X11/xorg.conf.d/45-evdev.conf"
+ # Resolution / Rotation stuff
+ mkdir -p "$${CFGROOT}/etc/X11/Xsession.d/"
+ printf 'xrandr --size 480x320\n' >"$${CFGROOT}/etc/X11/Xsession.d/10display_resolution"
+ printf '%s\n' "$$display_wsLCD4_rotation" >"$${CFGROOT}/etc/X11/Xsession.d/20touch_rotation"
+ # Correct DPI scaling, although application support is mediocre
+ mkdir -p "$${CFGROOT}/etc/X11/Xresources/"
+ printf 'Xft.dpi: 144\n' >"$${CFGROOT}/etc/X11/Xresources/dpi_resolution"
+ # Workaround for applications that do not handle DPI scaling correctly
+ -sed -i 's;^Exec=;Exec=env GDK_DPI_SCALE=.5 ;' \
+ $${CFGROOT}/usr/share/applications/chromium*.desktop \
+ $${CFGROOT}/usr/share/applications/firefox*.desktop \
+ $${CFGROOT}/usr/share/applications/exo-web-browser.desktop
+
+${CFGROOT}/boot/waveshare35a.dtbo: modules/waveshare35a-overlay.dtb
+ cp "$<" "$@"
${CFGROOT}/opt/pam_script/pam_script_passwd: ${CFGROOT} .FORCE
mkdir -p "$(dir $@)"
printf '%s' "$${smb_nis_pamscript}" >"$@"
+ chmod a+x "$@"
${CFGROOT}/etc/security/pam_mount.conf.xml: ${CFGROOT} .FORCE
mkdir -p "$(dir $@)"
-PACKAGES += xfce4 xauth x11-xserver-utils x2x xvkbd blueman xfce4-terminal xfce4-clipman-plugin xfce4-whiskermenu-plugin thunar gvfs gvfs-backends gvfs-fuse xscreensaver policykit-1
+PACKAGES += blueman gvfs gvfs-backends gvfs-fuse policykit-1 thunar x11-xserver-utils x2x xauth xfce4 xfce4-clipman-plugin xfce4-terminal xfce4-whiskermenu-plugin xscreensaver xvkbd
+
.PHONY: _xfce
_config: _xfce
-[settings]
+[Settings]
gtk-print-preview-command = okular %f
--- /dev/null
+[Desktop Entry]
+Name=Virtual Keyboard
+Exec=onboard -l Small -t ModelM
-favorites=libreoffice-startcenter.desktop,firefox-esr.desktop,clementine.desktop,marble.desktop,audacity.desktop,org.kde.kdenlive.desktop,blender.desktop,inkscape.desktop,org.kde.krita.desktop,xfce4-terminal.desktop
+favorites=libreoffice-startcenter.desktop,firefox-esr.desktop,clementine.desktop,org.kde.marble.desktop,org.kde.marble.desktop,audacity.desktop,org.kde.kdenlive.desktop,blender.desktop,inkscape.desktop,org.kde.krita.desktop,xfce4-terminal.desktop