From: Christian Heller Date: Mon, 19 Nov 2018 15:39:52 +0000 (+0100) Subject: Use hard links instead of symbolic links for /etc/. X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/%7B%7B%20web_path%20%7D%7D/static/%7B%7Bdb.prefix%7D%7D/blog?a=commitdiff_plain;h=02bb39d5f8618919f7503bc001c10502cb574c72;p=config Use hard links instead of symbolic links for /etc/. --- diff --git a/all_new_2018/hardlink_etc.sh b/all_new_2018/hardlink_etc.sh new file mode 100755 index 0000000..a6f3b68 --- /dev/null +++ b/all_new_2018/hardlink_etc.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# Hard link files to those in argument-selected subdirectories of +# linkable_etc_files//, e.g. link /etc/foo/bar to +# linkable_etc_files/$1/etc/foo/bar and so on. Create directories as +# necessary. We do the hard linking so files that should be readable to +# non-root in /etc/ remain so despite having a path below /root/, as +# symbolic links point into /root/ without making the targets readable +# to non-root. +# CAUTION: This removes original files at the affected paths. +set -e + +config_tree_prefix="${HOME}/config/all_new_2018/linkable_etc_files/" + +for target in "$@"; do + cd "${config_tree_prefix}${target}" + for path in $(find . -type f); do + linking=$(echo "${path}" | cut -c2-) + linked=$(realpath "${path}") + dir=$(dirname "${linking}") + mkdir -p "${dir}" + ln -f "${linked}" "${linking}" + done +done diff --git a/all_new_2018/setup_server.sh b/all_new_2018/setup_server.sh index 55650aa..a4f8599 100755 --- a/all_new_2018/setup_server.sh +++ b/all_new_2018/setup_server.sh @@ -4,7 +4,7 @@ set -e # Provide maximum input for set_hostname_and_fqdn.sh. -if "$#" -ne 2 ]; then +if [ "$#" -ne 2 ]; then echo "Need exactly two arguments (hostname, FQDN)." false fi @@ -14,7 +14,7 @@ fqdn="$2" # Adapt /etc/ to our needs by symlinking into ./linkable_etc_files. This # will set basic configurations affecting following steps, such as setup # of APT and the locale selection, so needs to be right at the beginning. -./symlink_etc.sh all server +./hardlink_etc.sh all server # Set hostname and FQDN. ./set_hostname_and_fqdn.sh "${hostname}" "${fqdn}" diff --git a/all_new_2018/symlink_etc.sh b/all_new_2018/symlink_etc.sh deleted file mode 100755 index 90cb20a..0000000 --- a/all_new_2018/symlink_etc.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# Symbolically link files to those in argument-selected subdirectories -# of linkable_etc_files//, e.g. link /etc/foo/bar to -# linkable_etc_files/$1/etc/foo/bar and so on. Create directories as -# necessary. -# CAUTION: This removes original files at the affected paths. -set -e - -config_tree_prefix="${HOME}/config/all_new_2018/linkable_etc_files/" - -for target in "$@"; do - cd "${config_tree_prefix}${target}" - for path in $(find . -type f); do - linking=$(echo "${path}" | cut -c2-) - linked=$(realpath "${path}") - dir=$(dirname "${linking}") - mkdir -p "${dir}" - ln -fs "${linked}" "${linking}" - done -done