diff options
Diffstat (limited to 'bitcoin.install')
-rw-r--r-- | bitcoin.install | 75 |
1 files changed, 70 insertions, 5 deletions
diff --git a/bitcoin.install b/bitcoin.install index c064b3b61e5e..6a2bc513d67b 100644 --- a/bitcoin.install +++ b/bitcoin.install @@ -1,13 +1,20 @@ +_xt_user=bitcoin +_xt_group=bitcoin + post_install() { _mkuser _mkssl - chown -R bitcoin:bitcoin /etc/bitcoin /srv/bitcoin + # disable Copy-On-Write (btrfs directories only) + for _dir in /srv/bitcoin; do + _is_btrfs "$_dir" && _disable_cow "$_dir" + done + chown -R $_xt_user:$_xt_group /etc/bitcoin /srv/bitcoin printf "%b\n" "$bitcoin" } post_upgrade() { _mkuser - chown -R bitcoin:bitcoin /etc/bitcoin /srv/bitcoin + chown -R $_xt_user:$_xt_group /etc/bitcoin /srv/bitcoin printf "%b\n" "$bitcoin" } @@ -16,21 +23,31 @@ post_remove() { rm -rf /srv/bitcoin } + +# ------------------------------------------------------------------------------ +# helper functions for creating bitcoinxt user / group +# ------------------------------------------------------------------------------ + _mkuser() { getent passwd bitcoin &>/dev/null || { echo -n "Creating bitcoin user... " - grep -E "^bitcoin:" /etc/group >/dev/null || groupadd bitcoin - useradd -m -d /etc/bitcoin -g bitcoin -s /usr/bin/nologin bitcoin 2>/dev/null + grep -E "^$_xt_group:" /etc/group >/dev/null || groupadd $_xt_group + useradd -m -d /etc/bitcoin -g $_xt_group -s /usr/bin/nologin $_xt_user 2>/dev/null echo "done" } } _rmuser() { echo -n "Removing bitcoin user... " - userdel -rf bitcoin 2>/dev/null + userdel -rf $_xt_user 2>/dev/null echo "done" } + +# ------------------------------------------------------------------------------ +# helper function for enabling SSL in bitcoinxt +# ------------------------------------------------------------------------------ + _mkssl() { echo -n "Enabling SSL..." # https://en.bitcoin.it/wiki/Enabling_SSL_on_original_client_daemon mkdir -p /{etc,srv}/bitcoin @@ -63,6 +80,54 @@ EOF echo "done" } + +# ------------------------------------------------------------------------------ +# helper functions for disabling btrfs Copy-On-Write (CoW) +# https://wiki.archlinux.org/index.php/Btrfs#Copy-On-Write_.28CoW.29 +# ------------------------------------------------------------------------------ + +# check if dir is btrfs +_is_btrfs() { + if [[ $(df -TP "$1" | tail -n 1 | awk '{print $2}') == 'btrfs' ]]; then + return 0 + else + return 1 + fi +} + +# disable btrfs CoW +_chattrify() { + # original dir, with trailing slash stripped if it exists + _orig_dir=$( echo "$1" | sed 's@/$@@' ) + + # if original dir exists, back it up + [[ -d "$1" ]] && mv "$1" "${_orig_dir}"_old + + # re-make original dir + mkdir -p "$1" + + # set permissions on re-made dir + chmod "$2" "$1" + + # disable btrfs CoW on re-made dir + chattr +C "$1" + + # recursive copy to restore backed up dir while maintaining disabled CoW + [[ -d "${_orig_dir}"_old ]] \ + && find "${_orig_dir}"_old -mindepth 1 -maxdepth 1 -exec cp -R '{}' "$1" \; + + # set ownership on re-made dir + chown -R $3:$4 "$1" + + # purge backed up dir + [[ -d "${_orig_dir}"_old ]] && rm -rf "${_orig_dir}"_old +} + +_disable_cow() { + _chattrify "$1" "700" "$_xt_user" "$_xt_group" +} + + read -d '' bitcoin <<'EOF' ######################################################################## ######################################################################## |