diff options
47 files changed, 121 insertions, 14 deletions
@@ -57,7 +57,7 @@ $(OUTPUT)/build-build/.lh_done: $(OUTPUT)/build-build/.lh_skarnet_installed $(OU # The filesystems -$(OUTPUT)/tmp/.lh_rootfs_installed: $(OUTPUT)/tmp/.lh_layout_installed $(OUTPUT)/build-host/.lh_skarnet_installed $(OUTPUT)/build-host/.lh_bb_installed $(OUTPUT)/build-host/.lh_dropbear_installed +$(OUTPUT)/tmp/.lh_rootfs_installed: $(OUTPUT)/tmp/.lh_layout_installed $(OUTPUT)/build-host/.lh_skarnet_installed $(OUTPUT)/build-host/.lh_socklog_installed $(OUTPUT)/build-host/.lh_bb_installed $(OUTPUT)/build-host/.lh_dropbear_installed exec setuidgid $(NORMALUSER) touch $@ $(OUTPUT)/tmp/.lh_rwfs_installed: $(OUTPUT)/tmp/.lh_layout_installed @@ -94,5 +94,6 @@ include sub/kmod/Makefile include sub/layout/Makefile include sub/bearssl/Makefile include sub/skarnet.org/Makefile +include sub/socklog/Makefile include sub/busybox/Makefile include sub/dropbear/Makefile diff --git a/layout/rootfs/bin/pps b/layout/rootfs/bin/pps new file mode 100755 index 0000000..3fdf991 --- /dev/null +++ b/layout/rootfs/bin/pps @@ -0,0 +1,6 @@ +#!/command/execlineb -P +pipeline +{ + s6-ps -H -o user,pid,vsize,rss,tty,s,start,cttime,args +} +less diff --git a/layout/rootfs/etc/group b/layout/rootfs/etc/group index fe84981..680b61b 100644 --- a/layout/rootfs/etc/group +++ b/layout/rootfs/etc/group @@ -2,5 +2,4 @@ root:x:0: catchlog:x:98: nogroup:x:65534: log:x:61: -ntp:x:62: fdh:x:76: diff --git a/layout/rootfs/etc/passwd b/layout/rootfs/etc/passwd index 0e6110c..a7755cf 100644 --- a/layout/rootfs/etc/passwd +++ b/layout/rootfs/etc/passwd @@ -4,7 +4,7 @@ alias:x:999:100:alias:/home/alias:/nonexistent nobody:x:65534:65534:nobody:/:/nonexistent klog:x:101:61:klog:/:/nonexistent kllog:x:102:61:kllog:/:/nonexistent -ntp:x:105:62:ntp:/:/nonexistent -ntplog:x:106:62:ntplog:/:/nonexistent -sshlog:x:138:61:sshlog:/var/log/sshd-4:/nonexistent +syslog:x:103:61:syslog:/:/nonexistent +sysllog:x:104:61:sysllog:/:/nonexistent sysfdh:x:137:76:sysfdh:/:/nonexistent +sshlog:x:138:61:sshlog:/var/log/sshd-4:/nonexistent diff --git a/layout/rootfs/etc/resolv.conf b/layout/rootfs/etc/resolv.conf new file mode 100644 index 0000000..a30c407 --- /dev/null +++ b/layout/rootfs/etc/resolv.conf @@ -0,0 +1 @@ +nameserver 10.0.0.3 diff --git a/layout/rootfs/etc/s6-rc/source-base/default/contents b/layout/rootfs/etc/s6-rc/source-base/default/contents index 0882c2e..359e9bc 100644 --- a/layout/rootfs/etc/s6-rc/source-base/default/contents +++ b/layout/rootfs/etc/s6-rc/source-base/default/contents @@ -1,5 +1,2 @@ -mdevd -klogd-pipeline -mount-disks -mount-virtual -fifodir-cleanup +ok-local +ok-lan diff --git a/layout/rootfs/etc/s6-rc/source-base/init-eth0/dependencies b/layout/rootfs/etc/s6-rc/source-base/init-eth0/dependencies new file mode 100644 index 0000000..5e57eb3 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-eth0/dependencies @@ -0,0 +1,2 @@ +init-sysctl +mdevd diff --git a/layout/rootfs/etc/s6-rc/source-base/init-eth0/down b/layout/rootfs/etc/s6-rc/source-base/init-eth0/down new file mode 100644 index 0000000..5404b98 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-eth0/down @@ -0,0 +1,2 @@ +foreground { ip link set dev eth0 down } +exit 0 diff --git a/layout/rootfs/etc/s6-rc/source-base/init-eth0/type b/layout/rootfs/etc/s6-rc/source-base/init-eth0/type new file mode 100644 index 0000000..bdd22a1 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-eth0/type @@ -0,0 +1 @@ +oneshot diff --git a/layout/rootfs/etc/s6-rc/source-base/init-eth0/up b/layout/rootfs/etc/s6-rc/source-base/init-eth0/up new file mode 100644 index 0000000..a89a990 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-eth0/up @@ -0,0 +1,2 @@ +if { ip addr add 10.0.0.1/24 dev eth0 } +ip link set dev eth0 up diff --git a/layout/rootfs/etc/s6-rc/source-base/init-lo/down b/layout/rootfs/etc/s6-rc/source-base/init-lo/down new file mode 100644 index 0000000..06de595 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-lo/down @@ -0,0 +1,2 @@ +foreground { ip link set dev lo down } +exit 0 diff --git a/layout/rootfs/etc/s6-rc/source-base/init-route/dependencies b/layout/rootfs/etc/s6-rc/source-base/init-route/dependencies new file mode 100644 index 0000000..9280d84 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-route/dependencies @@ -0,0 +1,2 @@ +init-eth0 +mdevd diff --git a/layout/rootfs/etc/s6-rc/source-base/init-route/down b/layout/rootfs/etc/s6-rc/source-base/init-route/down new file mode 100644 index 0000000..a498b23 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-route/down @@ -0,0 +1,2 @@ +foreground { ip route del default } +exit 0 diff --git a/layout/rootfs/etc/s6-rc/source-base/init-route/type b/layout/rootfs/etc/s6-rc/source-base/init-route/type new file mode 100644 index 0000000..bdd22a1 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-route/type @@ -0,0 +1 @@ +oneshot diff --git a/layout/rootfs/etc/s6-rc/source-base/init-route/up b/layout/rootfs/etc/s6-rc/source-base/init-route/up new file mode 100644 index 0000000..62a704d --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/init-route/up @@ -0,0 +1 @@ +route add default gw 10.0.0.2 diff --git a/layout/rootfs/etc/s6-rc/source-base/ok-lan/contents b/layout/rootfs/etc/s6-rc/source-base/ok-lan/contents new file mode 100644 index 0000000..11e9fd9 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/ok-lan/contents @@ -0,0 +1,4 @@ +init-lo +init-eth0 +init-route +sshd-4 diff --git a/layout/rootfs/etc/s6-rc/source-base/ok-lan/type b/layout/rootfs/etc/s6-rc/source-base/ok-lan/type new file mode 100644 index 0000000..757b422 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/ok-lan/type @@ -0,0 +1 @@ +bundle diff --git a/layout/rootfs/etc/s6-rc/source-base/ok-local/contents b/layout/rootfs/etc/s6-rc/source-base/ok-local/contents new file mode 100644 index 0000000..2d907c7 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/ok-local/contents @@ -0,0 +1,6 @@ +mdevd +syslogd-pipeline +klogd-pipeline +mount-disks +mount-virtual +fifodir-cleanup diff --git a/layout/rootfs/etc/s6-rc/source-base/ok-local/type b/layout/rootfs/etc/s6-rc/source-base/ok-local/type new file mode 100644 index 0000000..757b422 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/ok-local/type @@ -0,0 +1 @@ +bundle diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/consumer-for b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/consumer-for new file mode 100644 index 0000000..7d1730e --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/consumer-for @@ -0,0 +1 @@ +sshd-4 diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/dependencies b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/dependencies new file mode 100644 index 0000000..7c63988 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/dependencies @@ -0,0 +1 @@ +mount-rwfs diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/pipeline-name b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/pipeline-name new file mode 100644 index 0000000..d46bed2 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/pipeline-name @@ -0,0 +1 @@ +sshd-4-pipeline diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/run b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/run new file mode 100755 index 0000000..e40c2af --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/run @@ -0,0 +1,4 @@ +#!/command/execlineb -P +s6-setuidgid sshlog +exec -c +s6-log t s1000000 n20 /var/log/sshd-4 diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/type b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4-log/type @@ -0,0 +1 @@ +longrun diff --git a/layout/rootfs/bin/.empty b/layout/rootfs/etc/s6-rc/source-base/sshd-4/data/rules/ip4/10.0.0.2_32/allow index e69de29..e69de29 100644 --- a/layout/rootfs/bin/.empty +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4/data/rules/ip4/10.0.0.2_32/allow diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4/dependencies b/layout/rootfs/etc/s6-rc/source-base/sshd-4/dependencies new file mode 100644 index 0000000..8aee9b6 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4/dependencies @@ -0,0 +1,2 @@ +init-sysctl +init-eth0 diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4/notification-fd b/layout/rootfs/etc/s6-rc/source-base/sshd-4/notification-fd new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4/notification-fd @@ -0,0 +1 @@ +3 diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4/producer-for b/layout/rootfs/etc/s6-rc/source-base/sshd-4/producer-for new file mode 100644 index 0000000..f103f82 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4/producer-for @@ -0,0 +1 @@ +sshd-4-log diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4/run b/layout/rootfs/etc/s6-rc/source-base/sshd-4/run new file mode 100755 index 0000000..7d8da1b --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4/run @@ -0,0 +1,6 @@ +#!/command/execlineb -P +fdmove -c 2 1 +fdmove 1 3 +s6-tcpserver4 -v 2 -1 -- 10.0.0.1 22 +s6-tcpserver-access -v 2 -DRHl0 -t 5000 -i data/rules -- +dropbear -i -K 60 diff --git a/layout/rootfs/etc/s6-rc/source-base/sshd-4/type b/layout/rootfs/etc/s6-rc/source-base/sshd-4/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/sshd-4/type @@ -0,0 +1 @@ +longrun diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd-log/consumer-for b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/consumer-for new file mode 100644 index 0000000..96c5cc7 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/consumer-for @@ -0,0 +1 @@ +syslogd diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd-log/dependencies b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/dependencies new file mode 100644 index 0000000..7c63988 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/dependencies @@ -0,0 +1 @@ +mount-rwfs diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd-log/pipeline-name b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/pipeline-name new file mode 100644 index 0000000..c8a925a --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/pipeline-name @@ -0,0 +1 @@ +syslogd-pipeline diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd-log/run b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/run new file mode 100755 index 0000000..b04f309 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/run @@ -0,0 +1,4 @@ +#!/command/execlineb -P +s6-setuidgid sysllog +exec -c +s6-log t s1000000 n20 /var/log/syslogd diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd-log/type b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd-log/type @@ -0,0 +1 @@ +longrun diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd/dependencies b/layout/rootfs/etc/s6-rc/source-base/syslogd/dependencies new file mode 100644 index 0000000..c1ee812 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd/dependencies @@ -0,0 +1 @@ +init-dev diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd/producer-for b/layout/rootfs/etc/s6-rc/source-base/syslogd/producer-for new file mode 100644 index 0000000..75d14f5 --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd/producer-for @@ -0,0 +1 @@ +syslogd-log diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd/run b/layout/rootfs/etc/s6-rc/source-base/syslogd/run new file mode 100755 index 0000000..1036f5e --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd/run @@ -0,0 +1,4 @@ +#!/command/execlineb -P +fdclose 0 +exec -c +socklog diff --git a/layout/rootfs/etc/s6-rc/source-base/syslogd/type b/layout/rootfs/etc/s6-rc/source-base/syslogd/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/layout/rootfs/etc/s6-rc/source-base/syslogd/type @@ -0,0 +1 @@ +longrun diff --git a/layout/rootfs/etc/shadow b/layout/rootfs/etc/shadow index b6abce1..8059a6c 100644 --- a/layout/rootfs/etc/shadow +++ b/layout/rootfs/etc/shadow @@ -4,6 +4,7 @@ alias:!:14761:0:99999:7::: nobody:!:14314:0:99999:7::: klog:!:14793:::::: kllog:!:14793:::::: -ntp:!:14849:::::: -ntplog:!:14849:::::: +syslog:!:14793:::::: +sysllog:!:14793:::::: +sysfdh:!:15041:::::: sshlog:!:14849:::::: diff --git a/layout/rwfs/var/log/sshd-4/.empty b/layout/rwfs/var/log/sshd-4/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/layout/rwfs/var/log/sshd-4/.empty diff --git a/layout/rwfs/var/log/syslogd/.empty b/layout/rwfs/var/log/syslogd/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/layout/rwfs/var/log/syslogd/.empty diff --git a/lh-config.dist b/lh-config.dist index 1972a88..b320a02 100644 --- a/lh-config.dist +++ b/lh-config.dist @@ -29,7 +29,7 @@ NORMALUSER=nobody # Filesystems size, as understood by libguestfs's virt-make-fs ROOTFS_SIZE=1024M RWFS_SIZE=512M -USERFS_SIZE=512M +USERFS_SIZE=128M # The device on which to spawn an early getty. # Leave empty for no early getty. diff --git a/sub/dropbear/Makefile b/sub/dropbear/Makefile index b3b791a..823cb28 100644 --- a/sub/dropbear/Makefile +++ b/sub/dropbear/Makefile @@ -15,7 +15,7 @@ $(OUTPUT)/build-host/.lh_dropbear_dled: $(OUTPUT)/sources/dropbear-$(DROPBEAR_VE $(OUTPUT)/build-host/.lh_dropbear_copied: $(OUTPUT)/build-host/.lh_dropbear_dled | $(OUTPUT)/build-build/.lh_skarnet_installed exec setuidgid $(NORMALUSER) s6-rmrf $(OUTPUT)/build-host/dropbear-$(DROPBEAR_VERSION) - exec setuidgid $(NORMALUSER) cd $(OUTPUT)/build-host tar jxpvf $(OUTPUT)/sources/dropbear-$(DROPBEAR_VERSION).tar.bz2 + exec setuidgid $(NORMALUSER) cd $(OUTPUT)/build-host tar -jxpvf $(OUTPUT)/sources/dropbear-$(DROPBEAR_VERSION).tar.bz2 exec setuidgid $(NORMALUSER) s6-touch $@ $(OUTPUT)/build-host/.lh_dropbear_patched: $(OUTPUT)/build-host/.lh_dropbear_copied sub/dropbear/localoptions.h diff --git a/sub/layout/permissions b/sub/layout/permissions index 7f3102f..74469ba 100644 --- a/sub/layout/permissions +++ b/sub/layout/permissions @@ -2,6 +2,8 @@ rootfs/etc/shadow 0 0 0600 rwfs/var/tmp 0 0 1777 rwfs/var/log/klogd 102 61 2700 +rwfs/var/log/syslogd 104 61 2700 +rwfs/var/log/sshd-4 138 61 2700 userfs/home/guest 1000 100 2755 userfs/home/guest/.execline-shell 1000 100 0755 diff --git a/sub/socklog/Makefile b/sub/socklog/Makefile new file mode 100644 index 0000000..003d613 --- /dev/null +++ b/sub/socklog/Makefile @@ -0,0 +1,34 @@ + +SOCKLOG_STATIC := $(if $(filter true,$(BUILD_HOST_STATIC)),-static,) + +$(OUTPUT)/sources/socklog-2.1.0.tar.gz: | $(OUTPUT)/tmp/.lh_prepared $(OUTPUT)/build-build/.lh_skarnet_installed + exec setuidgid $(NORMALUSER) cd $(OUTPUT)/sources wget http://smarden.org/socklog/socklog-2.1.0.tar.gz + +$(OUTPUT)/sources/.lh_socklog_dled: $(OUTPUT)/sources/socklog-2.1.0.tar.gz | $(OUTPUT)/build-build/.lh_skarnet_installed + exec setuidgid $(NORMALUSER) s6-touch $@ + +$(OUTPUT)/build-host/.lh_socklog_copied: $(OUTPUT)/sources/.lh_socklog_dled | $(OUTPUT)/build-build/.lh_skarnet_installed + exec setuidgid $(NORMALUSER) s6-rmrf $(OUTPUT)/build-host/package/admin/socklog-2.1.0 + exec setuidgid $(NORMALUSER) s6-mkdir -p -- $(OUTPUT)/build-host/package + exec setuidgid $(NORMALUSER) cd $(OUTPUT)/build-host/package tar -zxpvf $(OUTPUT)/sources/socklog-2.1.0.tar.gz + exec setuidgid $(NORMALUSER) s6-touch $@ + +$(OUTPUT)/build-host/.lh_socklog_patched: $(OUTPUT)/build-host/.lh_socklog_copied sub/socklog/patch.sed | $(OUTPUT)/build-build/.lh_skarnet_installed + exec setuidgid $(NORMALUSER) redirfd -w 1 $(OUTPUT)/build-host/package/admin/socklog-2.1.0/src/Makefile.patched sed -f sub/socklog/patch.sed $(OUTPUT)/build-host/package/admin/socklog-2.1.0/src/Makefile + exec setuidgid $(NORMALUSER) s6-touch $@ + +$(OUTPUT)/build-host/.lh_socklog_configured: $(OUTPUT)/build-host/.lh_socklog_copied | $(OUTPUT)/build-build/.lh_skarnet_installed + exec setuidgid $(NORMALUSER) redirfd -w 1 $(OUTPUT)/build-host/package/admin/socklog-2.1.0/src/conf-cc s6-echo "$(BUILD_HOST_CC) -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -include errno.h" + exec setuidgid $(NORMALUSER) redirfd -w 1 $(OUTPUT)/build-host/package/admin/socklog-2.1.0/src/conf-ld s6-echo "$(BUILD_HOST_CC) $(SOCKLOG_STATIC)" + exec setuidgid $(NORMALUSER) s6-touch $@ + +$(OUTPUT)/build-host/.lh_socklog_built: $(OUTPUT)/build-host/.lh_socklog_configured $(OUTPUT)/build-host/.lh_socklog_patched | $(OUTPUT)/build-build/.lh_skarnet_installed + exec setuidgid $(NORMALUSER) cd $(OUTPUT)/build-host/package/admin/socklog-2.1.0/src $(MAKE) -f Makefile.patched socklog + exec setuidgid $(NORMALUSER) s6-touch $@ + +$(OUTPUT)/build-host/.lh_socklog_installed: $(OUTPUT)/build-host/.lh_socklog_built | $(OUTPUT)/tmp/.lh_prepared $(OUTPUT)/build-build/.lh_skarnet_installed + exec s6-mkdir -p -m 0755 $(OUTPUT)/rootfs/package/admin/socklog-2.1.0/command + exec makenamelink $(OUTPUT)/rootfs/package/admin socklog socklog-2.1.0 $(OUTPUT)/tmp + exec cp -f $(OUTPUT)/build-host/package/admin/socklog-2.1.0/src/socklog $(OUTPUT)/rootfs/package/admin/socklog-2.1.0/command/socklog + exec makelinks $(OUTPUT)/rootfs /command /package/admin/socklog/command + exec setuidgid $(NORMALUSER) s6-touch $@ diff --git a/sub/socklog/patch.sed b/sub/socklog/patch.sed new file mode 100644 index 0000000..0540d27 --- /dev/null +++ b/sub/socklog/patch.sed @@ -0,0 +1,5 @@ +s/choose compile load tryshsgr\.c hasshsgr\.h1 hasshsgr\.h2 chkshsgr /choose compile load tryshsgr.c hasshsgr.h1 hasshsgr.h2 / +s/ar cr /$(TRIPLE)-ar cr / +s/ranlib /$(TRIPLE)-ranlib / +s%\./chkshsgr ||%true ||% +s%\./choose clr tryshsgr hasshsgr\.h1 hasshsgr\.h2 > hasshsgr\.h%cat hasshsgr.h1 > hasshsgr.h% |