чување d7eca5ee8225198ca853ea0bb762c247dcd5e065
родитељ 088433df6a144bf4b414e8f92bbeda4a16575479
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Wed, 27 Jul 2022 19:46:21 +0200
Add smdev, gpm; new msg option: servnl; add rc.inet
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 31, додавања: 831(+), брисања: 108(-)
diff --git a/03-packages.sh b/03-packages.sh
@@ -78,6 +78,8 @@ cron:x:33:
mail:x:34:
nogroup:x:99:
metalog:x:983:
+rfkill:x:984:
+uucp:x:987:
wheel:x:998:
users:x:999:
!
@@ -4494,6 +4496,66 @@ mkpk_install()
fi
end_substep
+begin_substep gpm-1.20.7
+if [ -x /bin/gpm ]; then
+ msg info "%s exists, skipping %s" /bin/gpm ${pkg}
+elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
+ unpack_pkg ${pkg} /
+else
+ extract_pkg ${G_SRC} ${pkg} ${pkg}.tar.bz2
+ (
+ cd_or_fail ${G_SRC}/${pkg}
+
+ for p in musl-fcntl.patch musl-gpm_h.patch \
+ musl-linux_major_h.patch musl-select.patch \
+ musl-sigaction.patch
+ do
+ apply_patch packages -Np0 -i ${G_PAT}/gpm-void/$p
+ done
+ cp ${G_PAT}/gpm-mlfs/fix-doc.patch .
+
+ cat <<! >MKPK
+mkpk_name()
+{
+ printf "%s" "${pkg}"
+}
+
+mkpk_install()
+{
+ CFLAGS='-Os -pipe -fcommon'
+ LDFLAGS='-s -fcommon'
+ DESTDIR=/build
+ export CFLAGS LDFLAGS DESTDIR
+
+
+ ./autogen.sh
+
+ ./configure --prefix=/sucks --sysconfdir=/etc || exit 1
+
+ patch -Np1 -i fix-doc.patch || exit 1
+
+ make ${JN} || exit 1
+ make install-strip || exit 1
+
+ #install-info --dir-file=../build/sucks/share/info/dir \\
+ # ../build/sucks/share/info/gpm.info
+
+ mkdir -p ../build/sucks/lib
+ ln -sf libgpm.so.2.1.0 ../build/sucks/lib/libgpm.so
+ install -dm755 ../build/sucks/share/doc/${pkg}/support
+ install -m644 doc/support/* ../build/sucks/share/doc/${pkg}/support
+ install -m644 doc/FAQ ../build/sucks/share/doc/${pkg}
+ install -m644 doc/HACK_GPM ../build/sucks/share/doc/${pkg}
+ install -m644 doc/README* ../build/sucks/share/doc/${pkg}
+}
+!
+ mkpk ${pkg}
+ remove_dir ${G_SRC}/${pkg}
+ unpack_pkg ${pkg} /
+ ) || exit 1
+fi
+end_substep
+
begin_substep elinks-0.15.0
if [ -e /bin/elinks ]; then
msg info "%s exists, skipping %s" /bin/nasm ${pkg}
@@ -4534,6 +4596,7 @@ mkpk_install()
--without-perl \\
--without-lua \\
--without-tre \\
+ --with-gpm \\
--with-openssl \\
--with-zlib \\
--with-bzlib \\
diff --git a/04-finale.sh b/04-finale.sh
@@ -68,6 +68,7 @@ mkpk_install()
fi
end_substep
+# Based on improvements by Platon Ryzhikov (phkr on AUR)
begin_substep smdev-20220715
if [ -x /bin/smdev ]; then
msg info "%s exists, skipping %s" /bin/smdev ${pkg}
@@ -77,6 +78,20 @@ else
(
cd_or_fail ${G_SRC}/${pkg}
+ for p in config_mk util_h
+ do
+ apply_patch final -Np0 -i \
+ ${G_PAT}/smdev-galeb/smdev-$p.patch
+ done
+
+ apply_patch final -Np0 -i \
+ ${G_PAT}/smdev-phkr/smdev-config_h.patch
+ for p in scan_all usb_nodes
+ do
+ apply_patch final -Np1 -i \
+ ${G_PAT}/smdev-phkr/$p.patch
+ done
+
cat <<! >MKPK
mkpk_name()
{
@@ -91,23 +106,12 @@ mkpk_install()
DESTDIR=/build
export AR CC CFLAGS LDFLAGS DESTDIR
- if [ ! -e util.h.orig ]; then
- cp util.h util.h.orig
- /${TLD}/bin/sed -i -z 's,"arg.h"\\n,&#include '\\
-'<sys/sysmacros.h>\\n,' util.h
- fi
-
- if [ ! -e config.mk.orig ]; then
- cp config.mk config.mk.orig
- /${TLD}/bin/sed -i -e "s,/usr/local,,g;s, \\<cc\\>, "\\
-"\${CC},g" \\
- -e "s,^CFLAGS\\s\\+= ,& \${CFLAGS} ,g" \\
- -e "s,^LDFLAGS\\s\\+= ,& \${LDFLAGS} ,g" config.mk
- fi
-
make clean
make ${JN} || exit 1
- make install
+ make install || exit 1
+
+ cp -R ../fil/smdev-phkr/etc ../build/ || exit 1
+ chmod 755 ../build/etc/smdev/processdev
}
!
mkpk ${pkg}
diff --git a/TODO b/TODO
@@ -16,8 +16,9 @@ Low priority
< > Wireless support - needs testing!
[ ] git://r-36.net/conn
[ ] git://r-36.net/rfkilld
- [ ] git://r-36.net/nldev - requires busybox mdev?
- [ ] git://r-36.net/nlmon - requires busybox mdev?
+ [ ] git://r-36.net/nldev - requires busybox mdev? - replaced by smdev
+ (still needs testing)
+ [ ] git://r-36.net/nlmon - requires busybox mdev? - ditto
[ ] Add wpa_supplicant (DBus stripped - untested! Commented out by
default)
@@ -25,6 +26,8 @@ Done
----
[x] Add packages
+ [x] Add gpm
+ [x] Add smdev
[x] Add elinks
[/] Add X - better handled from within the installed system
[x] Add ~ssh(d)~ dropbear
diff --git a/fil/rc.d/g_fun.sh b/fil/rc.d/g_fun.sh
@@ -31,20 +31,23 @@ msg()
log=1
newline=1
case ${kind} in
- err) icon_plain="=E="
- icon="${bold}${white}${bgred}${icon_plain}";;
- info) icon_plain="=I="
- icon="${green}${icon_plain}";;
- serv) icon_plain="=S="
- icon="${green}${icon_plain}"
- newline=0;;
- query) icon_plain="=Q="
- icon="${bold}${yellow}${icon_plain}"
- log=0
- newline=0;;
- warn) icon_plain="=W="
- icon="${bgyellow}${bold}${black}${icon_plain}";;
- *) ;;
+ err) icon_plain="=E="
+ icon="${bold}${white}${bgred}${icon_plain}";;
+ info) icon_plain="=I="
+ icon="${green}${icon_plain}";;
+ servnl) icon_plain="=S="
+ icon="${green}${icon_plain}"
+ newline=1;;
+ serv) icon_plain="=S="
+ icon="${green}${icon_plain}"
+ newline=0;;
+ query) icon_plain="=Q="
+ icon="${bold}${yellow}${icon_plain}"
+ log=0
+ newline=0;;
+ warn) icon_plain="=W="
+ icon="${bgyellow}${bold}${black}${icon_plain}";;
+ *) ;;
esac
printf "%s %s " "${icon}" ${tstamp}
if [ -n "${G_LOGFILE}" ]; then
diff --git a/fil/rc.d/logout b/fil/rc.d/logout
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-clear
diff --git a/fil/rc.d/rc.conf b/fil/rc.d/rc.conf
@@ -3,7 +3,7 @@ FONT_MAP=
FONT_UNIMAP=
KEYMAP=us
INTERFACE=eth0
-KILLDELAY=3 # Delay before sending TERM and KILL on shutdown
+KILLDELAY=1 # Delay before sending TERM and KILL on shutdown
LANG=en_US.UTF-8
HOSTNAME=galeb
TIMEZONE=Europe/Belgrade
diff --git a/fil/rc.d/rc.inet b/fil/rc.d/rc.inet
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+. /etc/rc.conf
+. /lib/g_fun.sh
+
+msg info "Bringing up lo interface"
+ip addr add 127.0.0.1/8 dev lo broadcast + scope host 2>>${G_LOGFILE}
+ip link set lo up 2>>${G_LOGFILE}
+
+if [ -n "${INTERFACE}" ]; then
+ msg info "Bringing up %s" ${INTERFACE}
+ ip link set "${INTERFACE}" up 2>>${G_LOGFILE}
+fi
diff --git a/fil/rc.d/rc.init b/fil/rc.d/rc.init
@@ -34,13 +34,11 @@ else
dmesg -n 3 2>>${G_LOGFILE}
fi
-mount -o ro,remount / 2>>${G_LOGFILE}
-
msg info "Running smdev"
smdev -s 2>>${G_LOGFILE}
-
-# Doesn't work (because of newer Linux?)
-#echo /bin/smdev >/proc/sys/kernel/hotplug
+if [ -e /proc/sys/kernel/hotplug ]; then
+ echo /bin/smdev >/proc/sys/kernel/hotplug
+fi
cd /dev
ln -sf /proc/self/fd/0 stdin 2>>${G_LOGFILE}
@@ -50,48 +48,36 @@ ln -sf /proc/self/fd fd 2>>${G_LOGFILE}
cd - >/dev/null
if echo ${LANG} | grep -i utf >/dev/null 2>>${G_LOGFILE}; then
- msg info "Setting kbd_mode -u and font"
- kbd_mode -u >/dev/null 2>>${G_LOGFILE}
- if [ -n "${KEYMAP}" ]; then
- loadkeys -q ${KEYMAP} 2>>${G_LOGFILE}
- fi
- for tty in /dev/tty[0-9]*; do
- kbd_mode -u -C ${tty} >/dev/null 2>>${G_LOGFILE}
- printf "\e%%G" >${tty} >/dev/null 2>>${G_LOGFILE}
- if [ -n "${FONT}" ]; then
- SETFONT_ARGS=
- if [ -n "${FONT_MAP}" ]; then
- SETFONT_ARGS+=" -m${FONT_MAP}"
- fi
- if [ -n "${FONT_UNIMAP}" ]; then
- SETFONT_ARGS+=" -u${FONT_UNIMAP}"
- fi
- setfont ${FONT} ${SETFONT_ARGS} -C ${tty} 2>>${G_LOGFILE}
- fi
- done
- echo 1 >| /sys/module/vt/parameters/default_utf8 2>>${G_LOGFILE}
+ kbd_mode=-u
+ loadkeys=''
+ act_string=%%G
+ def_utf=1
else
- msg info "Setting kbd_mode -a and font"
- kbd_mode -a >/dev/null 2>>${G_LOGFILE}
- if [ -n "${KEYMAP}" ]; then
- loadkeys -q -a ${KEYMAP} 2>>${G_LOGFILE}
- fi
- for tty in /dev/tty[0-9]*; do
- kbd_mode -a -C ${tty} >/dev/null 2>>${G_LOGFILE}
- printf "\e%%@" >${tty} >/dev/null 2>>${G_LOGFILE}
- if [ -n "${FONT}" ]; then
- SETFONT_ARGS=
- if [ -n "${FONT_MAP}" ]; then
- SETFONT_ARGS+=" -m${FONT_MAP}"
- fi
- if [ -n "${FONT_UNIMAP}" ]; then
- SETFONT_ARGS+=" -u${FONT_UNIMAP}"
- fi
- setfont ${FONT} ${SETFONT_ARGS} -C ${tty} 2>>${G_LOGFILE}
- fi
- done
- echo 0 >| /sys/module/vt/parameters/default_utf8 2>>${G_LOGFILE}
+ kbd_mode=-a
+ loadkeys=-a
+ act_string=%%@
+ def_utf=0
fi
+msg info "Setting kbd_mode %s and font" "${kbd_mode}"
+kbd_mode ${kbd_mode} >/dev/null 2>>${G_LOGFILE}
+if [ -n "${KEYMAP}" ]; then
+ loadkeys -q ${loadkeys} ${KEYMAP} 2>>${G_LOGFILE}
+fi
+for tty in /dev/tty[0-9]*; do
+ kbd_mode ${kbd_mode} -C ${tty} >/dev/null 2>>${G_LOGFILE}
+ printf "\e${act_string}" >${tty} >/dev/null 2>>${G_LOGFILE}
+ if [ -n "${FONT}" ]; then
+ SETFONT_ARGS=
+ if [ -n "${FONT_MAP}" ]; then
+ SETFONT_ARGS+=" -m${FONT_MAP}"
+ fi
+ if [ -n "${FONT_UNIMAP}" ]; then
+ SETFONT_ARGS+=" -u${FONT_UNIMAP}"
+ fi
+ setfont ${FONT} ${SETFONT_ARGS} -C ${tty} 2>>${G_LOGFILE}
+ fi
+done
+echo ${def_utf} >| /sys/module/vt/parameters/default_utf8 2>>${G_LOGFILE}
msg info "Setting hostname"
if [ -n "${HOSTNAME}" ]; then
@@ -164,13 +150,9 @@ if [ -x /bin/rc.modules ]; then
/bin/rc.modules
fi
-msg info "Bringing up lo interface"
-ip addr add 127.0.0.1/8 dev lo broadcast + scope host 2>>${G_LOGFILE}
-ip link set lo up 2>>${G_LOGFILE}
-
-if [ -n "${INTERFACE}" ]; then
- msg info "Bringing up %s" ${INTERFACE}
- ip link set "${INTERFACE}" up 2>>${G_LOGFILE}
+if [ -x /bin/rc.inet ]; then
+ msg info "Starting /bin/rc.inet"
+ /bin/rc.inet
fi
service start all
diff --git a/fil/rc.d/rc.shutdown b/fil/rc.d/rc.shutdown
@@ -50,7 +50,7 @@ msg info "Shutting down"
msg info "Storing random seed"
dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2>/dev/null
-svc -k
+service stop all
KILLDELAY=${KILLDELAY:-3}
diff --git a/fil/rc.d/rc.svc b/fil/rc.d/rc.svc
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-umask 022
-
-. /etc/rc.conf
-. /lib/g_fun.sh
-
-for service in $(find /bin/svc.d/run -type l)
-do
- msg serv "Starting %s\t\t\t" ${service##*/}
- svc -s "${service##*/}" >/dev/null 2>&1
- case $? in
- 0) printf "${green}( ${white}OK${norm} ${green})${norm}\n";;
- 1) printf "${green}(RNNG)${norm}\n";;
- 2) printf "${green}(${lred}FAIL${norm}${green})${norm}\n";;
- *) printf "${green}(${yellow} ?? ${norm}${green})${norm}\n";;
- esac
-done
diff --git a/fil/smdev-phkr/etc/smdev/add/01-lvm b/fil/smdev-phkr/etc/smdev/add/01-lvm
@@ -0,0 +1,9 @@
+[ $(echo $DEVNAME | grep 'dm-[0-9]') ] && /bin/sh -c '
+ NAME=$(cat /sys$DEVPATH/dm/name)
+ GROUPNAME=$(echo $NAME | awk -F - '\''{print $1}'\'')
+ VOLUMENAME=$(echo $NAME | awk -F - '\''{print $2}'\'')
+ test -d /dev/mapper || mkdir -p /dev/mapper
+ ln -sf /dev/$DEVNAME /dev/mapper/$NAME
+ test -d /dev/$GROUPNAME || mkdir -p /dev/$GROUPNAME
+ ln -sf /dev/$DEVNAME /dev/$GROUPNAME/$VOLUMENAME
+'
diff --git a/fil/smdev-phkr/etc/smdev/add/01-uuid b/fil/smdev-phkr/etc/smdev/add/01-uuid
@@ -0,0 +1,12 @@
+[ "$DEVNAME" ] && [ "$DEVTYPE" = "disk" -o "$DEVTYPE" = "partition" ] && /bin/sh -c '
+ test -d /dev/disk || mkdir -p /dev/disk
+ export $(/sucks/bin/blkid --info -p -o udev /dev/$DEVNAME | grep UUID)
+ [ $ID_FS_UUID ] && {
+ test -d /dev/disk/by-uuid || mkdir -p /dev/disk/by-uuid
+ ln -sf /dev/$DEVNAME /dev/disk/by-uuid/$ID_FS_UUID
+ }
+ [ $ID_PART_ENTRY_UUID ] && {
+ test -d /dev/disk/by-partuuid || mkdir -p /dev/disk/by-partuuid
+ ln -sf /dev/$DEVNAME /dev/disk/by-partuuid/$ID_PART_ENTRY_UUID
+ }
+'
diff --git a/fil/smdev-phkr/etc/smdev/add/10-cdrom b/fil/smdev-phkr/etc/smdev/add/10-cdrom
@@ -0,0 +1 @@
+[ $(echo $DEVNAME | grep 'sr[0-9]') ] && ln -sf /dev/$DEVNAME /dev/cdrom
diff --git a/fil/smdev-phkr/etc/smdev/add/20-pci b/fil/smdev-phkr/etc/smdev/add/20-pci
@@ -0,0 +1,9 @@
+[ "$DEVNAME" -a "$(echo $DEVPATH | grep '/pci[0-9]')" ] && /bin/sh -c '# add links for pci devices
+ test -d $(dirname /dev/$DEVNAME)/by-path || mkdir -p $(dirname /dev/$DEVNAME)/by-path
+ if [ $(echo "$DEVNAME" | grep dri) ]; then # for dri create -card and -render links
+ ln -sf /dev/$DEVNAME /dev/$(dirname "$DEVNAME")/by-path/pci-$(echo $DEVPATH | sed -e "s/\//\n/g" | grep "[0-9]:[0-9]" | sed -n "2p")-$(echo $DEVNAME | awk -F / "{print $2}" | sed -e "s/[A-Z]//g" -e "s/[0-9]//g")
+ else # generic
+ ln -sf /dev/$DEVNAME /dev/$(dirname $DEVNAME)/by-path/pci-$(echo $DEVPATH | sed -e "s/\//\n/g" | grep "[0-9]:[0-9]" | sed -n "2p")
+ fi
+'
+#fi
diff --git a/fil/smdev-phkr/etc/smdev/add/20-platform b/fil/smdev-phkr/etc/smdev/add/20-platform
@@ -0,0 +1,9 @@
+[ "$DEVNAME" -a "$(echo $DEVPATH | grep /platform)" ] && /bin/sh -c '# add links for platform devices
+ test -d $(dirname /dev/$DEVNAME)/by-path || mkdir -p $(dirname /dev/$DEVNAME)/by-path
+ if [ $(echo $DEVNAME | grep dri) ]; then # for dri create -card and -render links
+ ln -sf /dev/$DEVNAME /dev/$(dirname $DEVNAME)/by-path/platform-$(echo $DEVPATH | sed -e "s/\//\n/g" | grep "[0-9]:[0-9]" | sed -n "2p")-$(echo $DEVNAME | awk -F / "{print $2}" | sed -e "s/[A-Z]//g" -e "s/[0-9]//g")
+ else # generic
+ ln -sf /dev/$DEVNAME /dev/$(dirname $DEVNAME)/by-path/platform-$(echo $DEVPATH | sed -e "s/\//\n/g" | grep "[0-9]:[0-9]" | sed -n "2p")
+ fi
+'
+#fi
diff --git a/fil/smdev-phkr/etc/smdev/processdev b/fil/smdev-phkr/etc/smdev/processdev
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+find /etc/smdev/${ACTION} -type f -exec sh {} \; &
diff --git a/fil/smdev-phkr/etc/smdev/remove/99-remove_links b/fil/smdev-phkr/etc/smdev/remove/99-remove_links
@@ -0,0 +1 @@
+[ "$DEVNAME" ] && find /dev -type l -exec sh -c 'for i in "$@"; do [ "$0" = "$(realpath -- "$i")" ] && rm -f -- "$i"; done' "/dev/$DEVNAME" {} +
diff --git a/lib/pkgs.tsv b/lib/pkgs.tsv
@@ -89,6 +89,7 @@ https://github.com/pullmoll/musl-fts/archive/v1.2.7.tar.gz musl-fts-1.2.7.tar.gz
https://github.com/pullmoll/musl-obstack/archive/v1.1.tar.gz musl-obstack-1.1.tar.gz 185975cc117dba8e6158cce847ba44d5
https://github.com/rhboot/efibootmgr/archive/17.tar.gz efibootmgr-17.tar.gz 6ae315936d9bc8613b3a4cb8a4064128
https://github.com/rhboot/efivar/releases/download/37/efivar-37.tar.bz2 9f067275c5f7aafdd75bfb364280ac9c
+https://github.com/rkd77/elinks/releases/download/v0.15.0/elinks-0.15.0.tar.xz 8fe2e81d2cea75f57cd3cf9bdda6821b
https://github.com/rpm-software-management/popt/archive/refs/tags/popt-1.18-release.tar.gz popt-1.18.tar.gz 154ca2966af91352d2129b33d855a91e
https://github.com/shadow-maint/shadow/releases/download/v4.11.1/shadow-4.11.1.tar.xz 5a95ec069aa91508167d02fecafaa912
https://github.com/strace/strace/releases/download/v5.18/strace-5.18.tar.xz a563875472463638c19d6639e1c14875
@@ -109,6 +110,7 @@ https://invisible-island.net/archives/reflex/reflex-20210808.tgz 31ed4340e8b636
https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz 12e517cac2b57a0121cda351570f1e63
https://libisl.sourceforge.io/isl-0.24.tar.xz libisl-0.24.tar.xz fae030f604a9537adc2502990a8ab4d1
https://mandoc.bsd.lv/snapshots/mandoc-1.14.6.tar.gz f0adf24e8fdef5f3e332191f653e422a
+https://matt.ucc.asn.au/dropbear/releases/dropbear-2022.82.tar.bz2 7a4a5f2c6d23ff2e6627c97d7c1aeceb
https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/man-pages-5.13.tar.xz 3ac24e8c6fae26b801cb87ceb63c0a30
https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.37.1.tar.xz 8201241ee1eca83a9f72f4505350f6bc
https://musl.libc.org/releases/musl-1.2.3.tar.gz a507ae4f7f20bcfe566d8eb65c1af73e
@@ -132,6 +134,5 @@ https://www.kernel.org/pub/linux/utils/kbd/kbd-2.4.0.tar.xz 3cac5be0096fcf7b32d
https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-29.tar.xz e81e63acd80697d001c8d85c1acb38a0
https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-5.17.0.tar.xz 8ade96ee93f37fba7e1beec89f1a54bf
https://www.leonerd.org.uk/code/libtermkey/libtermkey-0.22.tar.gz 08bf514d59660391c3a21b3977a16c8c
+https://www.nico.schottelius.org/software/gpm/archives/gpm-1.20.7.tar.bz2 bf84143905a6a903dbd4d4b911a2a2b8
https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz 11d12076311563252a995201248d17e5
-https://matt.ucc.asn.au/dropbear/releases/dropbear-2022.82.tar.bz2 7a4a5f2c6d23ff2e6627c97d7c1aeceb
-https://github.com/rkd77/elinks/releases/download/v0.15.0/elinks-0.15.0.tar.xz 8fe2e81d2cea75f57cd3cf9bdda6821b
diff --git a/pat/gpm-mlfs/fix-doc.patch b/pat/gpm-mlfs/fix-doc.patch
@@ -0,0 +1,19 @@
+--- gpm-1.20.7.orig/doc/doc.gpm 2022-03-11 10:22:59.083347473 -0600
++++ gpm-1.20.7/doc/doc.gpm 2022-03-11 10:20:13.778352203 -0600
+@@ -29,7 +29,7 @@
+
+ @comment %**start of header
+ @setfilename gpm.info
+-@settitle gpm @value{version}
++@settitle gpm 1.20.7
+ @iftex
+ @afourpaper
+ @end iftex
+@@ -92,7 +92,6 @@
+
+ @end titlepage
+ @setchapternewpage off
+-@headings single
+
+ @ifinfo
+ This file documents the @value{version} release of the "General Purpose
diff --git a/pat/gpm-mlfs/utmpx-support.patch b/pat/gpm-mlfs/utmpx-support.patch
@@ -0,0 +1,23 @@
+diff -uNr gpm-1.20.7.orig/src/prog/gpm-root.y gpm-1.20.7/src/prog/gpm-root.y
+--- gpm-1.20.7.orig/src/prog/gpm-root.y 2012-10-26 21:21:38.000000000 +0000
++++ gpm-1.20.7/src/prog/gpm-root.y 2021-01-18 13:32:35.862805598 +0000
+@@ -46,7 +46,7 @@
+ #include <termios.h> /* winsize */
+ #include <linux/vt.h> /* VT_ACTIVATE */
+ #include <linux/keyboard.h> /* K_SHIFT */
+-#include <utmp.h>
++#include <utmpx.h>
+ #include <endian.h>
+
+ #ifdef HAVE_SYS_SYSMACROS_H
+@@ -1264,8 +1264,8 @@
+
+ if (disallocFlag)
+ {
+- struct utmp *uu;
+- struct utmp u;
++ struct utmpx *uu;
++ struct utmpx u;
+ char s[8];
+ int i=0;
+
diff --git a/pat/gpm-void/musl-fcntl.patch b/pat/gpm-void/musl-fcntl.patch
@@ -0,0 +1,24 @@
+The location <sys/fcntl.h> is wrong, it is just <fcntl.h>
+
+--- src/lib/liblow.c 2012-10-26 23:21:38.000000000 +0200
++++ src/lib/liblow.c 2015-06-22 15:36:38.956046661 +0200
+@@ -33,7 +33,7 @@
+ #include <sys/types.h> /* socket() */
+ #include <sys/socket.h> /* socket() */
+ #include <sys/un.h> /* struct sockaddr_un */
+-#include <sys/fcntl.h> /* O_RDONLY */
++#include <fcntl.h> /* O_RDONLY */
+ #include <sys/stat.h> /* stat() */
+
+ #ifdef SIGTSTP /* true if BSD system */
+--- src/daemon/gpm.c 2012-10-26 23:21:38.000000000 +0200
++++ src/daemon/gpm.c 2015-06-22 15:44:46.825020280 +0200
+@@ -29,7 +29,7 @@
+ #include <signal.h> /* SIGPIPE */
+ #include <time.h> /* time() */
+ #include <sys/param.h>
+-#include <sys/fcntl.h> /* O_RDONLY */
++#include <fcntl.h> /* O_RDONLY */
+ #include <sys/wait.h> /* wait() */
+ #include <sys/stat.h> /* mkdir() */
+ #include <sys/time.h> /* timeval */
diff --git a/pat/gpm-void/musl-gpm_h.patch b/pat/gpm-void/musl-gpm_h.patch
@@ -0,0 +1,13 @@
+There is no -Isrc/headers, thus specify gpm.h relative location
+
+--- src/prog/get-versions.c 2012-10-26 23:21:38.000000000 +0200
++++ src/prog/get-versions.c 2015-06-22 15:49:30.536004939 +0200
+@@ -22,7 +22,7 @@
+ ********/
+
+ #include <stdio.h> /* printf() */
+-#include <gpm.h> /* gpm information */
++#include "headers/gpm.h" /* gpm information */
+
+ int main()
+ {
diff --git a/pat/gpm-void/musl-linux_major_h.patch b/pat/gpm-void/musl-linux_major_h.patch
@@ -0,0 +1,12 @@
+The macro major() is defined in sys/sysmacros.h
+
+--- src/daemon/open_console.c 2012-10-26 23:21:38.000000000 +0200
++++ src/daemon/open_console.c 2015-06-22 16:13:14.921927918 +0200
+@@ -25,6 +25,7 @@
+
+ /* Linux specific (to be outsourced in gpm2 */
+ #include <linux/serial.h> /* for serial console check */
++#include <sys/sysmacros.h> /* for major() */
+ #include <asm/ioctls.h> /* for serial console check */
+
+
diff --git a/pat/gpm-void/musl-select.patch b/pat/gpm-void/musl-select.patch
@@ -0,0 +1,36 @@
+The FD_ISSET macro and fd_set are defined in sys/select.h
+
+--- src/prog/display-buttons.c 2012-10-26 23:21:38.000000000 +0200
++++ src/prog/display-buttons.c 2015-06-22 15:40:19.594034730 +0200
+@@ -36,7 +36,8 @@
+ #include <stdio.h> /* printf() */
+ #include <time.h> /* time() */
+ #include <errno.h> /* errno */
+-#include <gpm.h> /* gpm information */
++#include <sys/select.h> /* FD_ISSET */
++#include "headers/gpm.h" /* gpm information */
+
+ /* display resulting data */
+ int display_data(Gpm_Event *event, void *data)
+--- src/prog/display-coords.c 2012-10-26 23:21:38.000000000 +0200
++++ src/prog/display-coords.c 2015-06-22 15:41:05.433032252 +0200
+@@ -37,7 +37,8 @@
+ #include <stdio.h> /* printf() */
+ #include <time.h> /* time() */
+ #include <errno.h> /* errno */
+-#include <gpm.h> /* gpm information */
++#include <sys/select.h> /* FD_ISSET */
++#include "headers/gpm.h" /* gpm information */
+
+ /* display resulting data */
+ int display_data(Gpm_Event *event, void *data)
+--- src/prog/open_console.c 2012-10-26 23:21:38.000000000 +0200
++++ src/prog/open_console.c 2015-06-22 15:40:35.002033897 +0200
+@@ -22,6 +22,7 @@
+ #include "headers/message.h" /* messaging in gpm */
+ #include "headers/daemon.h" /* daemon internals */
+ #include <fcntl.h>
++#include <sys/select.h>
+
+ int open_console(const int mode)
+ {
diff --git a/pat/gpm-void/musl-sigaction.patch b/pat/gpm-void/musl-sigaction.patch
@@ -0,0 +1,29 @@
+Use the generic sigemptyset() available on both, glibc and musl libc
+The SA_INTERRUPT is not defined in musl libc. Copy the (unused?)
+definition from glibc's header bits/sigaction.h
+
+--- src/prog/gpm-root.y 2012-10-26 23:21:38.000000000 +0200
++++ src/prog/gpm-root.y 2015-06-22 15:56:19.167982843 +0200
+@@ -56,6 +56,9 @@
+ #define minor(dev) ((dev)&0xff)
+ #endif
+
++#if !defined(SA_INTERRUPT)
++# define SA_INTERRUPT 0x20000000 /* Historical no-op. */
++#endif
+
+ #define GPM_NULL_DEV "/dev/null"
+
+@@ -1196,11 +1199,7 @@
+ LOG_DAEMON : LOG_USER);
+ /* reap your zombies */
+ childaction.sa_handler=reap_children;
+-#if defined(__GLIBC__)
+- __sigemptyset(&childaction.sa_mask);
+-#else /* __GLIBC__ */
+- childaction.sa_mask=0;
+-#endif /* __GLIBC__ */
++ sigemptyset(&childaction.sa_mask);
+ childaction.sa_flags=SA_INTERRUPT; /* need to break the select() call */
+ sigaction(SIGCHLD,&childaction,NULL);
+
diff --git a/pat/smdev-galeb/smdev-config_h.patch b/pat/smdev-galeb/smdev-config_h.patch
@@ -0,0 +1,46 @@
+--- config.h 2022-07-15 14:49:48.705546454 +0200
++++ config.h 2022-07-27 10:35:36.386667814 +0200
+@@ -10,31 +10,31 @@
+ { "null", "root", "root", 0666, NULL, NULL },
+ { "zero", "root", "root", 0666, NULL, NULL },
+ { "full", "root", "root", 0666, NULL, NULL },
+- { "random", "root", "root", 0666, NULL, NULL },
+- { "urandom", "root", "root", 0444, NULL, NULL },
++ { "random", "root", "root", 0444, NULL, NULL },
++ { "urandom", "root", "root", 0666, NULL, NULL },
+ { "hwrandom", "root", "root", 0660, NULL, NULL },
+- { "mem", "root", "root", 0640, NULL, NULL },
+- { "kmem", "root", "root", 0640, NULL, NULL },
++ { "mem", "root", "kmem", 0640, NULL, NULL },
++ //{ "kmem", "root", "root", 0640, NULL, NULL },
+ { "port", "root", "root", 0640, NULL, NULL },
+- { "console", "root", "tty", 0600, NULL, NULL },
++ { "console", "root", "root", 0600, NULL, NULL },
+ { "ptmx", "root", "tty", 0666, NULL, NULL },
+ { "tty", "root", "tty", 0666, NULL, NULL },
+- { "tty[0-9]", "root", "root", 0600, NULL, NULL },
+- { "tty[0-9][0-9]","root", "tty", 0660, NULL, NULL },
+- { "ttyS[0-9]*", "root", "tty", 0660, NULL, NULL, },
++ { "tty[0-9]", "root", "tty", 0640, NULL, NULL },
++ { "tty[0-9][0-9]","root", "tty", 0640, NULL, NULL },
++ { "ttyS[0-9]*", "root", "tty", 0640, NULL, NULL, },
+ { "pty.*", "root", "tty", 0660, NULL, NULL },
+ { "vcs[0-9]*", "root", "tty", 0660, NULL, NULL },
+ { "vcsa*[0-9]*", "root", "tty", 0660, NULL, NULL },
+ { "sd[a-z].*", "root", "disk", 0660, NULL, NULL },
+ { "sr[0-9]*", "root", "cdrom", 0660, NULL, "@ln -sf $DEVNAME /dev/cdrom" },
+ { "ts[0-9]+", "root", "root", 0640, "=input/", NULL },
+- { "input/.*", "root", "root", 0640, "=input/", NULL },
++ { "input/.*", "root", "input", 0660, "=input/", NULL },
+ { "dri/.*", "root", "video", 0660, "=dri/", NULL },
+ { "snd/.*", "root", "audio", 0660, "=snd/", NULL },
+ { "midi.*", "root", "audio", 0660, "=snd/", NULL },
+- { "seq", "root", "audio", 0660, "=snd/", NULL },
+- { "timer", "root", "audio", 0660, "=snd/", NULL },
+- { "rtc[0-9]*", "root", "root", 0664, NULL, NULL },
++ { "snd/seq", "root", "audio", 0660, "=snd/", NULL },
++ { "snd/timer", "root", "audio", 0660, "=snd/", NULL },
++ { "rtc[0-9]*", "root", "root", 0600, NULL, NULL },
+ { "vbi[0-9]", "root", "video", 0660, NULL, NULL },
+ { "video[0-9]", "root", "video", 0660, NULL, NULL },
+ { "fuse", "root", "root", 0666, NULL, NULL },
diff --git a/pat/smdev-galeb/smdev-config_mk.patch b/pat/smdev-galeb/smdev-config_mk.patch
@@ -0,0 +1,17 @@
+--- config.mk 2022-07-15 14:53:16.796468861 +0200
++++ config.mk 2022-07-15 14:53:16.796468861 +0200
+@@ -2,10 +2,10 @@
+ VERSION = 0.2.3
+
+ # paths
+-PREFIX = /usr/local
++PREFIX =
+
+-CC = cc
++CC = tcc
+ LD = $(CC)
+ CPPFLAGS = -D_BSD_SOURCE -D_GNU_SOURCE
+-CFLAGS = -std=c99 -Wall -pedantic $(CPPFLAGS)
+-LDFLAGS = -s
++CFLAGS = -Os -static -fcommon -std=c99 -Wall -pedantic $(CPPFLAGS)
++LDFLAGS = -static -fcommon -s
diff --git a/pat/smdev-galeb/smdev-util_h.patch b/pat/smdev-galeb/smdev-util_h.patch
@@ -0,0 +1,9 @@
+--- util.h 2022-07-15 14:56:02.610537220 +0200
++++ util.h 2022-07-15 14:56:02.610537220 +0200
+@@ -1,5 +1,6 @@
+ /* See LICENSE file for copyright and license details. */
+ #include "arg.h"
++#include <sys/sysmacros.h>
+
+ #define LEN(x) (sizeof (x) / sizeof *(x))
+
diff --git a/pat/smdev-phkr/scan_all.patch b/pat/smdev-phkr/scan_all.patch
@@ -0,0 +1,189 @@
+From 6d5a094b85a1a148647744eb327593d6aef9a822 Mon Sep 17 00:00:00 2001
+From: Platon Ryzhikov <ihummer63@yandex.ru>
+Date: Mon, 18 May 2020 16:58:10 +0300
+Subject: [PATCH] Scan all /sys to find uevents, they may contain info about
+ modules even if they don't describe devices
+
+---
+ smdev.c | 127 ++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 64 insertions(+), 63 deletions(-)
+
+diff --git a/smdev.c b/smdev.c
+index b774908..ff35df2 100644
+--- a/smdev.c
++++ b/smdev.c
+@@ -85,7 +85,7 @@ main(int argc, char *argv[])
+
+ umask(0);
+ if (sflag) {
+- recurse("/sys/devices", populatedev);
++ recurse("/sys", populatedev);
+ } else {
+ if (dohotplug() < 0)
+ eprintf("Environment not set up correctly for hotplugging\n");
+@@ -126,14 +126,14 @@ dohotplug(void)
+ action = getenv("ACTION");
+ devpath = getenv("DEVPATH");
+ devname = getenv("DEVNAME");
+- if (!minor || !major || !action || !devpath || !devname)
++ if (!action || !devpath)
+ return -1;
+
+- ev.minor = estrtol(minor, 10);
+- ev.major = estrtol(major, 10);
++ ev.minor = minor?estrtol(minor, 10):-1;
++ ev.major = major?estrtol(major, 10):-1;
+ ev.action = mapaction(action);
+ ev.devpath = devpath;
+- ev.devname = devname;
++ ev.devname = devname?devname:".";
+ return doevent(&ev);
+ }
+
+@@ -249,12 +249,14 @@ removedev(struct event *ev)
+ if (rule->path && rule->path[0] == '!')
+ return 0;
+
+- /* Delete device node */
+- unlink(rpath.path);
+- /* Delete symlink */
+- if (rule->path && rule->path[0] == '>') {
+- snprintf(buf, sizeof(buf), "/dev/%s", ev->devname);
+- unlink(buf);
++ if (ev->major >= 0 && ev->minor >= 0 && ev->devname) {
++ /* Delete device node */
++ unlink(rpath.path);
++ /* Delete symlink */
++ if (rule->path && rule->path[0] == '>') {
++ snprintf(buf, sizeof(buf), "/dev/%s", ev->devname);
++ unlink(buf);
++ }
+ }
+ return 0;
+ }
+@@ -276,58 +278,59 @@ createdev(struct event *ev)
+ if (rule->path && rule->path[0] == '!')
+ goto runrule;
+
+- snprintf(buf, sizeof(buf), "%d:%d", ev->major, ev->minor);
+- if ((type = devtype(buf)) < 0)
+- return -1;
+-
+- /* Parse path and create the directory tree */
+- parsepath(rule, &rpath, ev->devname);
+- if (!(dirc = strdup(rpath.path)))
+- eprintf("strdup:");
+- strlcpy(buf, dirname(dirc), sizeof(buf));
+- free(dirc);
+- umask(022);
+- if (mkpath(buf, 0755) < 0)
+- eprintf("mkdir %s:", buf);
+- umask(0);
++ if (ev->major >= 0 && ev->minor >= 0 && ev->devname) {
++ snprintf(buf, sizeof(buf), "%d:%d", ev->major, ev->minor);
++ if ((type = devtype(buf)) < 0)
++ return -1;
+
+- if (mknod(rpath.path, rule->mode | type,
+- makedev(ev->major, ev->minor)) < 0 &&
+- errno != EEXIST)
+- eprintf("mknod %s:", rpath.path);
+-
+- errno = 0;
+- pw = getpwnam(rule->user);
+- if (!pw) {
+- if (errno)
+- eprintf("getpwnam %s:", rule->user);
+- else
+- eprintf("getpwnam %s: no such user\n",
+- rule->user);
+- }
++ /* Parse path and create the directory tree */
++ parsepath(rule, &rpath, ev->devname);
++ if (!(dirc = strdup(rpath.path)))
++ eprintf("strdup:");
++ strlcpy(buf, dirname(dirc), sizeof(buf));
++ free(dirc);
++ umask(022);
++ if (mkpath(buf, 0755) < 0)
++ eprintf("mkdir %s:", buf);
++ umask(0);
++
++ if (mknod(rpath.path, rule->mode | type,
++ makedev(ev->major, ev->minor)) < 0 &&
++ errno != EEXIST)
++ eprintf("mknod %s:", rpath.path);
++
++ errno = 0;
++ pw = getpwnam(rule->user);
++ if (!pw) {
++ if (errno)
++ eprintf("getpwnam %s:", rule->user);
++ else
++ eprintf("getpwnam %s: no such user\n",
++ rule->user);
++ }
+
+- errno = 0;
+- gr = getgrnam(rule->group);
+- if (!gr) {
+- if (errno)
+- eprintf("getgrnam %s:", rule->group);
+- else
+- eprintf("getgrnam %s: no such group\n",
+- rule->group);
+- }
++ errno = 0;
++ gr = getgrnam(rule->group);
++ if (!gr) {
++ if (errno)
++ eprintf("getgrnam %s:", rule->group);
++ else
++ eprintf("getgrnam %s: no such group\n",
++ rule->group);
++ }
+
+- if (chown(rpath.path, pw->pw_uid, gr->gr_gid) < 0)
+- eprintf("chown %s:", rpath.path);
++ if (chown(rpath.path, pw->pw_uid, gr->gr_gid) < 0)
++ eprintf("chown %s:", rpath.path);
+
+- if (chmod(rpath.path, rule->mode) < 0)
+- eprintf("chmod %s:", rpath.path);
++ if (chmod(rpath.path, rule->mode) < 0)
++ eprintf("chmod %s:", rpath.path);
+
+- if (rule->path && rule->path[0] == '>') {
+- /* ev->devname is the original device name */
+- snprintf(buf, sizeof(buf), "/dev/%s", ev->devname);
+- symlink(rpath.path, buf);
++ if (rule->path && rule->path[0] == '>') {
++ /* ev->devname is the original device name */
++ snprintf(buf, sizeof(buf), "/dev/%s", ev->devname);
++ symlink(rpath.path, buf);
++ }
+ }
+-
+ runrule:
+ if(rule->cmd) {
+ if (chdir("/dev") < 0)
+@@ -389,12 +392,10 @@ populatedev(const char *path)
+ char *cwd;
+
+ recurse(path, populatedev);
+- if (strcmp(path, "dev") == 0) {
+- cwd = agetcwd();
+- if (!craftev(cwd))
+- dohotplug();
+- free(cwd);
+- }
++ cwd = agetcwd();
++ if (!craftev(cwd))
++ dohotplug();
++ free(cwd);
+ }
+
+ static int
+--
+2.26.2
+
diff --git a/pat/smdev-phkr/smdev-config_h.patch b/pat/smdev-phkr/smdev-config_h.patch
@@ -0,0 +1,188 @@
+--- config.h 2022-07-27 15:20:15.426380006 +0200
++++ config.h 2022-07-27 15:18:41.069286446 +0200
+@@ -7,38 +7,153 @@
+ const char *path;
+ const char *cmd;
+ } rules[] = {
+- { "null", "root", "root", 0666, NULL, NULL },
+- { "zero", "root", "root", 0666, NULL, NULL },
+- { "full", "root", "root", 0666, NULL, NULL },
+- { "random", "root", "root", 0666, NULL, NULL },
+- { "urandom", "root", "root", 0444, NULL, NULL },
+- { "hwrandom", "root", "root", 0660, NULL, NULL },
+- { "mem", "root", "root", 0640, NULL, NULL },
+- { "kmem", "root", "root", 0640, NULL, NULL },
+- { "port", "root", "root", 0640, NULL, NULL },
+- { "console", "root", "tty", 0600, NULL, NULL },
+- { "ptmx", "root", "tty", 0666, NULL, NULL },
+- { "tty", "root", "tty", 0666, NULL, NULL },
+- { "tty[0-9]", "root", "root", 0600, NULL, NULL },
+- { "tty[0-9][0-9]","root", "tty", 0660, NULL, NULL },
+- { "ttyS[0-9]*", "root", "tty", 0660, NULL, NULL, },
+- { "pty.*", "root", "tty", 0660, NULL, NULL },
+- { "vcs[0-9]*", "root", "tty", 0660, NULL, NULL },
+- { "vcsa*[0-9]*", "root", "tty", 0660, NULL, NULL },
+- { "sd[a-z].*", "root", "disk", 0660, NULL, NULL },
+- { "sr[0-9]*", "root", "cdrom", 0660, NULL, "@ln -sf $DEVNAME /dev/cdrom" },
+- { "ts[0-9]+", "root", "root", 0640, "=input/", NULL },
+- { "input/.*", "root", "root", 0640, "=input/", NULL },
+- { "dri/.*", "root", "video", 0660, "=dri/", NULL },
+- { "snd/.*", "root", "audio", 0660, "=snd/", NULL },
+- { "midi.*", "root", "audio", 0660, "=snd/", NULL },
+- { "seq", "root", "audio", 0660, "=snd/", NULL },
+- { "timer", "root", "audio", 0660, "=snd/", NULL },
+- { "rtc[0-9]*", "root", "root", 0664, NULL, NULL },
+- { "vbi[0-9]", "root", "video", 0660, NULL, NULL },
+- { "video[0-9]", "root", "video", 0660, NULL, NULL },
+- { "fuse", "root", "root", 0666, NULL, NULL },
+- { ".*", "root", "root", 0660, NULL, NULL },
++ //tty
++ { "console", "root", "tty", 0600, NULL, NULL },
++ { "pty.*", "root", "tty", 0660, NULL, NULL },
++ { "ptmx", "root", "tty", 0666, NULL, NULL },
++ { "tty", "root", "tty", 0666, NULL, NULL },
++ { "tty[0-9]", "root", "tty", 0600, NULL, NULL },
++ { "tty[0-9][0-9]", "root", "tty", 0660, NULL, NULL },
++ { "vcs*[0-9].*", "root", "tty", 0660, NULL, NULL },
++ // serial
++ { "tty.*", "root", "uucp", 0660, NULL, NULL },
++ { "slamr", "root", "tty", 0660, NULL, NULL },
++ { "slusb", "root", "tty", 0660, NULL, NULL },
++ { "vport.*", "root", "root", 0660, NULL, NULL },
++ { "ircomm[0-9].*", "root", "uucp", 0660, NULL, NULL },
++ { "noz[0-9].*", "root", "uucp", 0660, NULL, NULL },
++ { "rfcomm[0-9].*", "root", "uucp", 0660, NULL, NULL },
++ { "mwave", "root", "uucp", 0660, NULL, NULL },
++ { "hvc.*", "root", "uucp", 0660, NULL, NULL },
++ { "hvi.*", "root", "uucp", 0660, NULL, NULL },
++ { "ppox[0-9].*", "root", "uucp", 0660, NULL, NULL },
++ // mem
++ { "null", "root", "root", 0666, NULL, NULL },
++ { "zero", "root", "root", 0666, NULL, NULL },
++ { "full", "root", "root", 0666, NULL, NULL },
++ { "random", "root", "root", 0444, NULL, "@/etc/smdev/processdev" },
++ { "urandom", "root", "root", 0666, NULL, "@/etc/smdev/processdev" },
++ { "hwrandom", "root", "root", 0660, NULL, "@/etc/smdev/processdev" },
++ { "hw_random", "root", "root", 0660, "=hwrng", "@/etc/smdev/processdev" },
++ { "mem", "root", "kmem", 0640, NULL, "@/etc/smdev/processdev" },
++ //{ "kmem", "root", "kmem", 0640, NULL, "@/etc/smdev/processdev" },
++ { "port", "root", "kmem", 0640, NULL, "@/etc/smdev/processdev" },
++ { "nvram", "root", "kmem", 0640, NULL, "@/etc/smdev/processdev" },
++ // input
++ { "input/.*", "root", "input", 0660, "=input/", "@/etc/smdev/processdev" },
++ { "ts[0-9].+", "root", "root", 0640, "=input/", "@/etc/smdev/processdev" },
++ // graphics
++ { "video.*", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "vchiq", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "vbi[0-9]", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "cec[0-9]", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "agpgart", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "pmu", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "fb[0-9].*", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nvidia", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nvidiactl", "root", "video", 0660, NULL, "@/etc/smdev/processdev" },
++ // dri
++ { "dri/.*", "root", "video", 0660, "=dri/", "@/etc/smdev/processdev" },
++ { "card[0-9].*", "root", "video", 0660, "=dri/", "@/etc/smdev/processdev" },
++ // usb
++ { "bus/usb/.*", "root", "usb", 0664, NULL, "@/etc/smdev/processdev" },
++ // printer
++ { "partport[0-9].*","root", "lp", 0660, NULL, "@/etc/smdev/processdev" },
++ { "partport_pc", "root", "lp", 0660, NULL, "@/etc/smdev/processdev" },
++ { "usb/lp[0-9].*", "root", "lp", 0660, "=usb/", "@/etc/smdev/processdev" },
++ { "lp[0-9]*", "root", "lp", 0660, NULL, "@/etc/smdev/processdev" },
++ { "irlpt[0-9].*", "root"," lp", 0660, NULL, "@/etc/smdev/processdev" },
++ // block
++ { "sd[a-z].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "hd[a-z].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "ram[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "loop[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "control", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "mmcblk[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "md.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "mtd.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "ndb.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "gnbd.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "btibm.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "dm-.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "vd.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "sg.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "sr[0-9].*", "root", "cdrom", 0660, NULL, "@/etc/smdev/processdev" },//"@ln -sf $DEVNAME /dev/cdrom"
++ { "fd[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ // tape
++ { "ht[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nht[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ { "pt[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ { "npt[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ { "pht[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ { "st*[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nst*[0-9].*", "root", "tape", 0660, NULL, "@/etc/smdev/processdev" },
++ //block-related
++ { "btrfs-control", "root", "root", 0600, NULL, "@/etc/smdev/processdev" },
++ { "loop-control", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "mapper/.*", "root", "root", 0600, "=mapper/","@/etc/smdev/processdev" },
++ { "scsi.*/.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "bdi.*/.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "sch[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "pg[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "qft[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nqft[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "zqft[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nzqft[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "rawqft[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "nrawqft[0-9].*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "raw[0-9].*", "root", "disk", 0660, "=raw/", "@/etc/smdev/processdev" },
++ { "rawctl", "root", "disk", 0660, "=raw/", "@/etc/smdev/processdev" },
++ { "aoe.*", "root", "disk", 0660, "=etherd/","@/etc/smdev/processdev" },
++ { "bsg/.*", "root", "disk", 0660, "=bsg/", "@/etc/smdev/processdev" },
++ // audio
++ { "snd/.*", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "midi.*", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "snd/seq", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "snd/timer", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "hpet", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "adsp", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "audio", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "dsp", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "mixer", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "sequencer.*", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ { "pcm.*", "root", "audio", 0660, "=snd/", "@/etc/smdev/processdev" },
++ // network
++ { "-net/.*", "root", "network", 0660, NULL, NULL }, //"@nameif"
++ { "tun", "root", "network", 0666, "=net/", "@/etc/smdev/processdev" },
++ { "tun[0-9].*", "root", "network", 0660, "=net/", "@/etc/smdev/processdev" },
++ { "tap[0-9].*", "root", "network", 0660, "=net/", "@/etc/smdev/processdev" },
++ { "rfkill", "root", "rfkill", 0640, NULL, "@/etc/smdev/processdev" },
++ // cpu
++ { "cpu([0-9].+)", "root", "root", 0444, "=cpu/%1/cpuid", "@/etc/smdev/processdev" },
++ { "msr([0-9].+)", "root", "root", 0600, "=cpu/%1/msr", "@/etc/smdev/processdev" },
++ { "microcode", "root", "root", 0600, "=cpu/microcode","@/etc/smdev/processdev" },
++ // fuse
++ { "fuse", "root", "root", 0666, NULL, "@mount -t fusectl fusectl /sys/fs/fuse/connections"},
++ // raid controllers
++ { "cciss.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "ida.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "rd.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ // misc
++ { "ppp", "root", "root", 0000, NULL, "@/etc/smdev/processdev" },
++ { "kvm", "root", "kvm", 0660, NULL, "@/etc/smdev/processdev" },
++ { "vhost-net", "root", "kvm", 0666, NULL, "@/etc/smdev/processdev" },
++ { "vhost-vsock", "root", "kvm", 0666, NULL, "@/etc/smdev/processdev" },
++ { "rtc", "root", "root", 0660, NULL, "@/etc/smdev/processdev" },
++ { "rtc[0-9]*", "root", "root", 0664, NULL, "@/etc/smdev/processdev" },
++ { "mmtimer", "root", "root", 0644, NULL, "@/etc/smdev/processdev" },
++ { "rflash[0-9]*", "root", "root", 0400, NULL, "@/etc/smdev/processdev" },
++ { "rrom[0-9]*", "root", "root", 0400, NULL, "@/etc/smdev/processdev" },
++ { "auer[0-9]*", "root", "root", 0660, "=usb/", "@/etc/smdev/processdev" },
++ { "sxctl", "root", "root", 0660, "=specialix_sxctl/", "@/etc/smdev/processdev" },
++ { "rioctl", "root", "root", 0660, "=specialix_rioctl/", "@/etc/smdev/processdev" },
++ //arch
++ { "sgi_.*", "root", "root", 0666, NULL, "@/etc/smdev/processdev" },
++ { "iseries/ibmsis.*","root","disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "iseries/nvt.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "iseries/vt.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { "iseries/vtty.*", "root", "disk", 0660, NULL, "@/etc/smdev/processdev" },
++ { ".*", "root", "root", 0660, NULL, "@/etc/smdev/processdev" },
+ };
+
+ /* Fill into this table if you want to rename the network interface
diff --git a/pat/smdev-phkr/usb_nodes.patch b/pat/smdev-phkr/usb_nodes.patch
@@ -0,0 +1,26 @@
+From 4c7b9620a746c35bb943cc40b27d729e714884d1 Mon Sep 17 00:00:00 2001
+From: Platon Ryzhikov <ihummer63@yandex.ru>
+Date: Thu, 3 Jun 2021 10:26:35 +0300
+Subject: [PATCH] Create USB nodes correctly
+
+Linux kernel creates USB devices with nodes like bus/usb/002/007
+---
+ smdev.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/smdev.c b/smdev.c
+index b774908..b9321df 100644
+--- a/smdev.c
++++ b/smdev.c
+@@ -185,7 +185,7 @@ parsepath(struct rule *rule, struct rulepath *rpath,
+ if (!rule->path) {
+ strlcpy(rpath->name, basedevname, sizeof(rpath->name));
+ snprintf(rpath->path, sizeof(rpath->path), "/dev/%s",
+- rpath->name);
++ devname);
+ return;
+ }
+
+--
+2.31.1
+