URI: 
       tgitzone-install - gitzone - git-based zone management tool for static and dynamic domains
  HTML git clone https://git.parazyd.org/gitzone
   DIR Log
   DIR Files
   DIR Refs
       ---
       tgitzone-install (3035B)
       ---
            1 #!/bin/sh
            2 #
            3 # gitzone - git-based zone file management tool for BIND
            4 #
            5 # Copyright (C) 2013 - 2019 Dyne.org Foundation
            6 #
            7 # This program is free software: you can redistribute it and/or modify
            8 # it under the terms of the GNU Affero General Public License as published by
            9 # the Free Software Foundation, either version 3 of the License, or
           10 # (at your option) any later version.
           11 #
           12 # This program is distributed in the hope that it will be useful,
           13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
           14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
           15 # GNU Affero General Public License for more details.
           16 #
           17 # You should have received a copy of the GNU Affero General Public License
           18 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
           19 
           20 # quick script to install a new gitzone user / zones repository
           21 
           22 # first arg: username
           23 # secondo (optional) arg: ssh public key
           24 
           25 if [ -z "$1" ]; then
           26         echo "usage: gitzone-install username [ id_rsa.pub ]";
           27         exit 1
           28 fi
           29 
           30 if ! [ "$(id -u)" = 0 ]; then
           31         echo "this script needs to be run as root."
           32         exit 1
           33 fi
           34 
           35 user="$1"
           36 
           37 # check user argument
           38 if ! grep -q "^$user" /etc/passwd; then
           39         echo "error: user not found: $user"
           40         exit 1
           41 fi
           42 if ! [ -r "/home/$user" ]; then
           43         echo "error: user home not found: /home/$user"
           44         exit 1
           45 fi
           46 if [ -r "/home/$user/zones/$user/.git" ]; then
           47         echo "error: gitzone already installed for user $user";
           48 else # create gitzone directory in user home
           49         mkdir -p "/home/$user/zones/$user"
           50         cd "/home/$user/zones/$user" || {
           51                 echo "error: could not cd to /home/$user/zones/$user"
           52                 exit 1
           53         }
           54         git init .
           55         git config receive.denyCurrentBranch ignore
           56         git config user.name "$user"
           57         git config user.email "$user@$(hostname -f)"
           58         ln -s /usr/libexec/gitzone/*receive* .git/hooks/
           59         cd - >/dev/null
           60         chown -R "$user:bind" "/home/$user/zones"
           61         chmod -R o-rwx "/home/$user/zones"
           62 
           63         # add user to bind group
           64         usermod -aG bind "$user"
           65 
           66         # add gitzone cache dir
           67         mkdir -p "/var/cache/bind/$user"
           68         chown "$user:bind" "/var/cache/bind/$user"
           69         chmod o-rwx "/var/cache/bind/$user"
           70 
           71         touch /etc/bind/named.conf.local
           72         if ! grep -q "${user}.conf" /etc/bind/named.conf.local; then
           73                 cat <<EOF >> /etc/bind/named.conf.local
           74 include "/etc/bind/repos/${user}.conf";
           75 EOF
           76         fi
           77 
           78 # success
           79         cat <<EOF
           80 
           81 ### Gitzone installed for user $user
           82 ## git repository url (via ssh):
           83 
           84         $user@$(hostname -f):zones/$user
           85 
           86 EOF
           87 
           88 fi # gitzone created
           89 
           90 cat <<EOF
           91 Don't forget to add configurations to bind!
           92 
           93 In /etc/bind/repos create ${user}.conf and put inside:
           94 
           95 zone "domain.com" {
           96         type master;
           97         notify yes;
           98         file "/var/cache/bind/$user/domain.com";
           99         allow-transfer { transfer; };
          100 };
          101 
          102 Then restart the bind9 daemon.
          103 EOF
          104 
          105 
          106 key="$2" # add ssh key
          107 if [ -z "$key" ]; then
          108         exit 1
          109 fi
          110 if ! [ -r "$key" ]; then
          111         echo "error: key not found $key"
          112         exit 1
          113 fi
          114 mkdir -p "/home/$user/.ssh"
          115 touch "/home/$user/.ssh/authorized_keys"
          116 cat "$key" >> "/home/$user/.ssh/authorized_keys"
          117 chmod -R go-rwx "/home/$user/.ssh"
          118 chown -R "$user:$user" "/home/$user/.ssh"
          119 echo "ssh public key $key added for $user"