#!/bin/sh # Usage: add_user.sh set -e . /root/helpers/.env LOGIN="$1" [ -z "$LOGIN" ] && { echo "Użycie: $0 "; exit 1; } setup_user() { adduser -D -s /bin/sh -h "/home/$LOGIN" -H "$LOGIN" addgroup "$LOGIN" tildeusers PASS="$(openssl rand -base64 16 | sed 's/[\/\+\=\\]//g')" echo "$LOGIN":"$PASS" | chpasswd zfs create -o mountpoint="/home/$LOGIN" -o quota=200M "tank/ROOT/homes/$LOGIN" chown "$LOGIN":"$LOGIN" "/home/$LOGIN" # neomutt had issues with default vi cat "export EDITOR=nvim" >> "/home/$LOGIN/.ashrc" # set cgroup CG_ROOT=/sys/fs/cgroup/users mkdir -p "$CG_ROOT" # upewnij się, że kontrolery włączone w parent „users” echo "+cpu +memory" > "$CG_ROOT/cgroup.subtree_control" 2>/dev/null || true USER_CG="$CG_ROOT/$LOGIN" mkdir "$USER_CG" # set default folders for ssh & gnu and set them private mkdir -m 0700 "/home/$LOGIN/.ssh" mkdir -m 0700 "/home/$LOGIN/.gnupg" } setup_neomutt () { for dir in "Inbox" "Sent" "Drafts" "Trash"; do for subdir in "cur" "new" "tmp"; do mkdir -p "/home/$LOGIN/Maildir/$dir/$subdir" done done chmod -R 0700 /home/"$LOGIN"/Maildir } setup_tmux () { mkdir -p "/home/$LOGIN/.config/tmux" cat << EOF > "/home/$LOGIN/.config/tmux/tmux.conf" set -g mouse on setw -g mode-keys vi bind -n F1 select-window -t 0 bind -n F2 select-window -t 1 bind -n F3 select-window -t 2 bind -n F12 detach if-shell "tmux has-session -t main 2>/dev/null" "detach" \ "new-session -d -s main -n Mail 'neomutt'; \ new-window -t main:1 -n IRC 'weechat'; \ new-window -t main:2 -n Shell 'ash'; \ send-keys -t main:2 '/usr/local/bin/tylda-motd.sh' C-m; \ select-window -t main:0" set-hook -g client-attached "send-keys -t main:2 '/usr/local/bin/tylda-motd.sh' C-m" EOF cat << EOF > "/home/$LOGIN/.profile" if [ -z "\$TMUX" ]; then exec tmux attach -t main || exec tmux new -s main fi EOF } setup_gemini () { gmi="/home/$LOGIN/public_gemini/" mkdir -p "$gmi" ln -s "$gmi" "/srv/gemini/~$LOGIN" cat < "$gmi/index.gmi" # $LOGIN EOF } setup_html () { cp -r /root/helpers/public_html "/home/$LOGIN/" sed -i "s/<>/$LOGIN/g" "/home/$LOGIN/"public_html/index.php sed -i "s/<>/$LOGIN/g" "/home/$LOGIN/"public_html/parts/header.php sed -i "s/<>/$LOGIN/g" "/home/$LOGIN/"public_html/blog/index.php touch "/home/$LOGIN/public_html/.webring" } setup_nextcloud () { curl -X POST https://cloud.tylda.org/ocs/v1.php/cloud/users \ -d userid="$LOGIN" \ -d password="$PASS" \ -H "OCS-APIRequest: true" \ -u "$NEXTCLOUD_USER:$NEXTCLOUD_PASS" curl -X PUT "https://cloud.tylda.org/ocs/v1.php/cloud/users/$LOGIN" \ -H "OCS-APIRequest: true" \ -u "$NEXTCLOUD_USER:$NEXTCLOUD_PASS" \ -d key="quota" \ -d value="250MB" } setup_weechat () { mkdir -p "/home/$LOGIN/.config/weechat/" cp /root/helpers/irc.conf "/home/$LOGIN/.config/weechat" } send_welcome_mail () { sendmail -f v0id1st@tylda.org "$LOGIN@tylda.org" << EOF Subject: Witaj na tylda.org! From: v0id1st@tylda.org Siemano :D Witaj na tyldzie, baw się dobrze! Wpadnij się przywitać na IRCa. Twoje dane do Nextcloud to (https://cloud.tylda.org) to: Login: $LOGIN Hasło: $PASS EOF } # critical path setup_user setup_nextcloud send_welcome_mail # less important stuff # shouldn't impact user obtaining registration email setup_neomutt setup_tmux setup_gemini setup_html setup_weechat chown -R "$LOGIN":"$LOGIN" "/home/$LOGIN/" echo 524288000 > "$USER_CG/memory.max" # 500 MB RAM echo "50000 100000" > "$USER_CG/cpu.max" # 50 % CPU (quota/period μs) echo "===== NOWE KONTO =====" echo "login : $LOGIN" echo "hasło : $PASS" echo "RAM : 500 MB" echo "CPU : 50 %"