summarylogtreecommitdiffstats
path: root/bitcoin.install
diff options
context:
space:
mode:
Diffstat (limited to 'bitcoin.install')
-rw-r--r--bitcoin.install75
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'
########################################################################
########################################################################