From b696aff9ab0c66bd1d1e80871671c21c541e3c65 Mon Sep 17 00:00:00 2001 From: pepe Date: Sat, 29 Jul 2023 13:45:27 +0000 Subject: [PATCH] :( --- hosts.in | 3 + init.d/dmcrypt | 368 +++++++++++++++++++++++++++++++++++++++ inputrc | 5 + network/interfaces | 1 + rc.conf | 6 + sysconfig/rc.site | 13 ++ sysctl.conf | 16 ++ xbps.d/ignore.conf | 37 ++++ xbps.d/keep.conf | 1 + xbps.d/noextract.conf | 25 +++ xbps.d/preserve.conf | 1 + xbps.d/repositories.conf | 1 + 12 files changed, 477 insertions(+) create mode 100644 hosts.in create mode 100644 init.d/dmcrypt create mode 100644 inputrc create mode 100644 network/interfaces create mode 100644 rc.conf create mode 100644 sysconfig/rc.site create mode 100644 sysctl.conf create mode 100644 xbps.d/ignore.conf create mode 100644 xbps.d/keep.conf create mode 100644 xbps.d/noextract.conf create mode 100644 xbps.d/preserve.conf create mode 100644 xbps.d/repositories.conf diff --git a/hosts.in b/hosts.in new file mode 100644 index 0000000..3020656 --- /dev/null +++ b/hosts.in @@ -0,0 +1,3 @@ +127.0.0.1 localhost.localdomain localhost +127.0.1.1 HOSTNAME.DOMAIN HOSTNAME +::1 localhost.localdomain localhost ip6-localhost diff --git a/init.d/dmcrypt b/init.d/dmcrypt new file mode 100644 index 0000000..ea9a5ca --- /dev/null +++ b/init.d/dmcrypt @@ -0,0 +1,368 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + use modules + before checkfs fsck + after dev-settle + + if grep -qs ^swap= "${conf_file}" ; then + before swap + fi +} + +# We support multiple dmcrypt instances based on $SVCNAME +conf_file="/etc/conf.d/${SVCNAME}" + +# Get splash helpers if available. +if [ -e /sbin/splash-functions.sh ] ; then + . /sbin/splash-functions.sh +fi + +# Setup mappings for an individual target/swap +# Note: This relies on variables localized in the main body below. +dm_crypt_execute() { + local dev ret mode foo source_dev + + if [ -z "${target}" -a -z "${swap}" ] ; then + return + fi + + # Set up default values. + : ${dmcrypt_key_timeout:=1} + : ${dmcrypt_max_timeout:=300} + : ${dmcrypt_retries:=5} + : ${wait:=5} + + # Handle automatic look up of the source path. + if [ -z "${source}" -a -n "${loop_file}" ] ; then + source=$(losetup --show -f "${loop_file}") + fi + case ${source} in + *=*) + i=0 + while [ ${i} -lt ${wait} ]; do + if source_dev="$(blkid -l -t "${source}" -o device)"; then + source="${source_dev}" + break + fi + : $((i += 1)) + einfo "waiting for source \"${source}\" for ${target}..." + sleep 1 + done + ;; + esac + if [ -z "${source}" ] || [ ! -e "${source}" ] ; then + ewarn "source \"${source}\" for ${target} missing, skipping..." + return + fi + + if [ -n "${header}" ] ; then + header_opt="--header=${header}" + + i=0 + while [ ! -e "${header}" ] && [ ${i} -lt ${wait} ] ; do + : $((i += 1)) + einfo "Waiting for header ${header} to appear for ${target} ${i}/${dmcrypt_max_timeout} ..." + sleep 1 + done + if [ ${i} -gt ${wait} ] || [ ${i} -eq ${wait} ] ; then + ewarn "Waited ${i} times for header file ${header}. Aborting ${target}." + return + fi + else + header_opt="" + fi + + if [ -n "${target}" ] ; then + # let user set options, otherwise leave empty + : ${options:=' '} + elif [ -n "${swap}" ] ; then + if cryptsetup ${header_opt} isLuks ${source} 2>/dev/null ; then + ewarn "The swap you have defined is a LUKS partition. Aborting crypt-swap setup." + return + fi + target=${swap} + # swap contents do not need to be preserved between boots, luks not required. + # suspend2 users should have initramfs's init handling their swap partition either way. + : ${options:='-c aes -h sha1 -d /dev/urandom'} + : ${pre_mount:='mkswap ${dev}'} + fi + + if [ -n "${loop_file}" ] ; then + dev="/dev/mapper/${target}" + ebegin " Setting up loop device ${source}" + losetup ${source} ${loop_file} + fi + + # cryptsetup: + # open # is $source + # create # is $target + local arg1="create" arg2="${target}" arg3="${source}" + if cryptsetup ${header_opt} isLuks ${source} 2>/dev/null ; then + arg1="open" + arg2="${source}" + arg3="${target}" + fi + + # Older versions reported: + # ${target} is active: + # Newer versions report: + # ${target} is active[ and is in use.] + if cryptsetup ${header_opt} status ${target} | grep -E -q ' is active' ; then + einfo "dm-crypt mapping ${target} is already configured" + return + fi + splash svc_input_begin ${SVCNAME} >/dev/null 2>&1 + + # Handle keys + if [ -n "${key}" ] ; then + read_abort() { + # some colors + local ans savetty resettty + [ -z "${NORMAL}" ] && eval $(eval_ecolors) + einfon " $1? (${WARN}yes${NORMAL}/${GOOD}No${NORMAL}) " + shift + # This is ugly as s**t. But POSIX doesn't provide `read -t`, so + # we end up having to implement our own crap with stty/etc... + savetty=$(stty -g) + resettty='stty ${savetty}; trap - EXIT HUP INT TERM' + trap 'eval "${resettty}"' EXIT HUP INT TERM + stty -icanon + stty min 0 time "$(( $2 * 10 ))" + ans=$(dd count=1 bs=1 2>/dev/null) || ans='' + eval "${resettty}" + if [ -z "${ans}" ] ; then + printf '\r' + else + echo + fi + case ${ans} in + [yY]) return 0;; + *) return 1;; + esac + } + + # Notes: sed not used to avoid case where /usr partition is encrypted. + mode=${key##*:} && ( [ "${mode}" = "${key}" ] || [ -z "${mode}" ] ) && mode=reg + key=${key%:*} + case "${mode}" in + gpg|reg) + # handle key on removable device + if [ -n "${remdev}" ] ; then + # temp directory to mount removable device + local mntrem="${RC_SVCDIR}/dm-crypt-remdev.$$" + if [ ! -d "${mntrem}" ] ; then + if ! mkdir -p "${mntrem}" ; then + ewarn "${source} will not be decrypted ..." + einfo "Reason: Unable to create temporary mount point '${mntrem}'" + return + fi + fi + i=0 + einfo "Please insert removable device for ${target}" + while [ ${i} -lt ${dmcrypt_max_timeout} ] ; do + foo="" + if mount -n -o ro "${remdev}" "${mntrem}" 2>/dev/null >/dev/null ; then + # keyfile exists? + if [ ! -e "${mntrem}${key}" ] ; then + umount -n "${mntrem}" + rmdir "${mntrem}" + einfo "Cannot find ${key} on removable media." + read_abort "Abort" ${dmcrypt_key_timeout} && return + else + key="${mntrem}${key}" + break + fi + else + [ -e "${remdev}" ] \ + && foo="mount failed" \ + || foo="mount source not found" + fi + : $((i += 1)) + read_abort "Stop waiting after $i attempts (${foo})" -t 1 && return + done + else # keyfile ! on removable device + if [ ! -e "${key}" ] ; then + ewarn "${source} will not be decrypted ..." + einfo "Reason: keyfile ${key} does not exist." + return + fi + fi + ;; + *) + ewarn "${source} will not be decrypted ..." + einfo "Reason: mode ${mode} is invalid." + return + ;; + esac + else + mode=none + fi + ebegin " ${target} using: ${header_opt} ${options} ${arg1} ${arg2} ${arg3}" + if [ "${mode}" = "gpg" ] ; then + : ${gpg_options:='-q -d'} + # gpg available ? + if command -v gpg >/dev/null ; then + i=0 + while [ ${i} -lt ${dmcrypt_retries} ] ; do + # paranoid, don't store key in a variable, pipe it so it stays very little in ram unprotected. + # save stdin stdout stderr "values" + timeout ${dmcrypt_max_timeout} gpg ${gpg_options} ${key} 2>/dev/null | \ + cryptsetup ${header_opt} --key-file - ${options} ${arg1} ${arg2} ${arg3} + ret=$? + # The timeout command exits 124 when it times out. + [ ${ret} -eq 0 -o ${ret} -eq 124 ] && break + : $(( i += 1 )) + done + eend ${ret} "failure running cryptsetup" + else + ewarn "${source} will not be decrypted ..." + einfo "Reason: cannot find gpg application." + einfo "You have to install app-crypt/gnupg first." + einfo "If you have /usr on its own partition, try copying gpg to /bin ." + fi + else + if [ "${mode}" = "reg" ] ; then + cryptsetup ${header_opt} ${options} -d ${key} ${arg1} ${arg2} ${arg3} + ret=$? + eend ${ret} "failure running cryptsetup" + else + cryptsetup ${header_opt} ${options} ${arg1} ${arg2} ${arg3} + ret=$? + eend ${ret} "failure running cryptsetup" + fi + fi + if [ -d "${mntrem}" ] ; then + umount -n ${mntrem} 2>/dev/null >/dev/null + rmdir ${mntrem} 2>/dev/null >/dev/null + fi + splash svc_input_end ${SVCNAME} >/dev/null 2>&1 + + if [ ${ret} -ne 0 ] ; then + cryptfs_status=1 + else + if [ -n "${pre_mount}" ] ; then + dev="/dev/mapper/${target}" + eval ebegin \"" pre_mount: ${pre_mount}"\" + eval "${pre_mount}" > /dev/null + ewend $? || cryptfs_status=1 + fi + fi +} + +# Lookup optional bootparams +get_bootparam_val() { + # We're given something like: + # foo=bar=cow + # Return the "bar=cow" part. + case $1 in + *=*) + echo "${1#*=}" + ;; + esac +} + +start() { + local print_header=true cryptfs_status=0 + local gpg_options key loop_file target targetline options pre_mount post_mount source swap remdev + + local x + for x in $(cat /proc/cmdline) ; do + case "${x}" in + key_timeout=*) + dmcrypt_key_timeout=$(get_bootparam_val "${x}") + ;; + esac + done + + while read targetline <&3 ; do + case ${targetline} in + # skip comments and blank lines + ""|"#"*) continue ;; + # skip service-specific openrc configs #377927 + rc_*) continue ;; + esac + + ${print_header} && ebegin "Setting up dm-crypt mappings" + print_header=false + + # check for the start of a new target/swap + case ${targetline} in + target=*|swap=*) + # If we have a target queued up, then execute it + dm_crypt_execute + + # Prepare for the next target/swap by resetting variables + unset gpg_options key loop_file target options pre_mount post_mount source swap remdev wait header header_opt + ;; + + gpg_options=*|remdev=*|key=*|loop_file=*|options=*|pre_mount=*|post_mount=*|wait=*|source=*|header=*) + if [ -z "${target}${swap}" ] ; then + ewarn "Ignoring setting outside target/swap section: ${targetline}" + continue + fi + ;; + + dmcrypt_*=*) + # ignore global options + continue + ;; + + *) + ewarn "Skipping invalid line in ${conf_file}: ${targetline}" + ;; + esac + + # Queue this setting for the next call to dm_crypt_execute + eval "${targetline}" + done 3< ${conf_file} + + # If we have a target queued up, then execute it + dm_crypt_execute + + ewend ${cryptfs_status} "Failed to setup dm-crypt devices" +} + +stop() { + local line print_header + + # Break down all mappings + print_header=true + grep -E "^(target|swap)=" ${conf_file} | \ + while read line ; do + ${print_header} && einfo "Removing dm-crypt mappings" + print_header=false + + target= swap= + eval ${line} + + [ -n "${swap}" ] && target=${swap} + if [ -z "${target}" ] ; then + ewarn "invalid line in ${conf_file}: ${line}" + continue + fi + + ebegin " ${target}" + cryptsetup ${header_opt} remove ${target} + eend $? + done + + # Break down loop devices + print_header=true + grep '^source=./dev/loop' ${conf_file} | \ + while read line ; do + ${print_header} && einfo "Detaching dm-crypt loop devices" + print_header=false + + source= + eval ${line} + + ebegin " ${source}" + losetup -d "${source}" + eend $? + done + + return 0 +} diff --git a/inputrc b/inputrc new file mode 100644 index 0000000..70f88dc --- /dev/null +++ b/inputrc @@ -0,0 +1,5 @@ +set horizontal-scroll-mode Off +set meta-flag On +set input-meta On +set convert-meta Off +set output-meta On diff --git a/network/interfaces b/network/interfaces new file mode 100644 index 0000000..1d04d3b --- /dev/null +++ b/network/interfaces @@ -0,0 +1 @@ +source interfaces.d/* diff --git a/rc.conf b/rc.conf new file mode 100644 index 0000000..048ab81 --- /dev/null +++ b/rc.conf @@ -0,0 +1,6 @@ +rc_depend_strict="NO" +rc_nocolor=YES +rc_need="!clock !modules" +rc_tty_number=0 +rc_cgroup_mode=off +rc_controller_cgroups="NO" diff --git a/sysconfig/rc.site b/sysconfig/rc.site new file mode 100644 index 0000000..72e58a0 --- /dev/null +++ b/sysconfig/rc.site @@ -0,0 +1,13 @@ +log_action_begin_msg() +{ + echo -n "$@..." || true +} + +log_action_end_msg() +{ + if [ $1 -eq 0 ]; then + echo "done." || true + else + echo "failed." || true + fi +} diff --git a/sysctl.conf b/sysctl.conf new file mode 100644 index 0000000..8fe14fc --- /dev/null +++ b/sysctl.conf @@ -0,0 +1,16 @@ +fs.protected_fifos=2 +fs.protected_hardlinks=1 +fs.protected_regular=2 +fs.protected_symlinks=1 +kernel.perf_event_paranoid=2 +kernel.kptr_restrict=2 +kernel.oops_limit=100 +kernel.panic=-1 +kernel.pid_max=1048576 +kernel.yama.ptrace_scope=1 +vm.admin_reserve_kbytes=131072 +vm.max_map_count = 1048576 +vm.overcommit_memory=2 +vm.overcommit_ratio=100 +vm.swappiness=9 +vm.user_reserve_kbytes=65536 diff --git a/xbps.d/ignore.conf b/xbps.d/ignore.conf new file mode 100644 index 0000000..00df717 --- /dev/null +++ b/xbps.d/ignore.conf @@ -0,0 +1,37 @@ +ignorepkg=acme-client +ignorepkg=base-files +ignorepkg=ca-certificates +ignorepkg=coreutils +ignorepkg=cpio +ignorepkg=cryptsetup +ignorepkg=device-mapper +ignorepkg=e2fsprogs +ignorepkg=e2fsprogs-libs +ignorepkg=fuse2fs +ignorepkg=ifupdown +ignorepkg=kernel-libc-headers +ignorepkg=libblkid +ignorepkg=libcryptsetup +ignorepkg=libfdisk +ignorepkg=libmount +ignorepkg=libsmartcols +ignorepkg=libuuid +ignorepkg=libxbps +ignorepkg=lvm2 +ignorepkg=openresolv +ignorepkg=openssh +ignorepkg=pam-base +ignorepkg=procps-ng +ignorepkg=removed-packages +ignorepkg=run-parts +ignorepkg=runit +ignorepkg=runit-void +ignorepkg=shadow +ignorekpg=tar +ignorepkg=thin-provisioning-tools +ignorepkg=tzdata +ignorepkg=util-linux +ignorepkg=util-linux-common +ignorepkg=util-linux-libs +ignorepkg=which +ignorepkg=xbps diff --git a/xbps.d/keep.conf b/xbps.d/keep.conf new file mode 100644 index 0000000..900db2f --- /dev/null +++ b/xbps.d/keep.conf @@ -0,0 +1 @@ +keepconf=true diff --git a/xbps.d/noextract.conf b/xbps.d/noextract.conf new file mode 100644 index 0000000..4c6ef74 --- /dev/null +++ b/xbps.d/noextract.conf @@ -0,0 +1,25 @@ +noextract=/etc/sv/* +noextract=/usr/bin/ldd +noextract=/usr/bin/lddtree +noextract=/usr/bin/symtree +noextract=/usr/bin/wg-quick +noextract=/usr/lib/dracut/dracut.conf.d/* +noextract=/usr/lib/libcurl.so.4.8.0 +noextract=/usr/lib/systemd/* +noextract=/usr/lib/udev/rules.d/* +noextract=/usr/share/applications/*desktop +noextract=/usr/share/bash-completion/* +noextract=/usr/share/calendar/*-8/calendar* +noextract=/usr/share/info/* +noextract=/usr/share/licenses/* +noextract=/usr/share/locale/* +noextract=!/usr/share/locale/locale.alias +noextract=!/usr/share/locale/nl/* +noextract=!/usr/share/locale/nl_NL/* +noextract=/usr/share/man/??.*-?/* +noextract=/usr/share/man/??/* +noextract=/usr/share/man/??@*/* +noextract=/usr/share/man/??_??/* +noextract=/usr/share/wireguard-tools/* +noextract=/usr/share/zsh/site-functions/_* +noextract=/usr/share/zsh/vendor-completions/_* diff --git a/xbps.d/preserve.conf b/xbps.d/preserve.conf new file mode 100644 index 0000000..b2f1c6d --- /dev/null +++ b/xbps.d/preserve.conf @@ -0,0 +1 @@ +preserve=/usr/libexec/xbps-triggers/pycompile diff --git a/xbps.d/repositories.conf b/xbps.d/repositories.conf new file mode 100644 index 0000000..8af26c8 --- /dev/null +++ b/xbps.d/repositories.conf @@ -0,0 +1 @@ +repository=https://alpha.de.repo.voidlinux.org/current