-
-
Save lauhub/fd0c857050b0f4a1c08f7d690d1cc98c to your computer and use it in GitHub Desktop.
Script for installing a Time Machine server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| #title : timemachine-install.sh | |
| #description : Script for installing a Time Machine server. | |
| #more : http://www.elomagic.de | |
| #author : Carsten Rambow | |
| #date : 2016-12-02 | |
| #usage : /bin/bash timemachine-install.sh | |
| #tested-distros : Ubuntu Server 16.10, Raspbian (Based on Debian) | |
| TIMEMACHINE_USER="timemachine" | |
| TIMEMACHINE_VOLUME_NAME_DEFAULT="TimeMachine" | |
| TIMEMACHINE_DATA_FOLDER="/data/osx/timemachine" | |
| NETWORK_INTERFACE=eth0 | |
| ECHO_COLOR_DEFAULT=\\e[0m | |
| ECHO_COLOR_TITLE=\\033[33m | |
| ECHO_COLOR_ERROR=\\033[31m | |
| ECHO_COLOR_DONE=\\033[32m | |
| if [[ $EUID -ne 0 ]]; then | |
| echo -e "${ECHO_COLOR_ERROR}This script must be run as root.${ECHO_COLOR_DEFAULT}" | |
| exit 1 | |
| fi | |
| read -e -p "Time Machine Volume Name: " -i "$TIMEMACHINE_VOLUME_NAME_DEFAULT" TIMEMACHINE_VOLUME_NAME | |
| # TODO Check if "/etc/avahi/services/afpd.service" already exists then abort | |
| # TODO Check if "/etc/avahi/services/deviceinfo.service" already exists then abort | |
| echo -e "${ECHO_COLOR_TITLE}Installing uuid-runtime package...${ECHO_COLOR_DEFAULT}" | |
| sudo apt-get install uuid-runtime | |
| echo -e "${ECHO_COLOR_TITLE}Installing required dependencies netatalk and avahi-daemon...${ECHO_COLOR_DEFAULT}" | |
| apt-get install netatalk avahi-daemon | |
| echo -e "${ECHO_COLOR_TITLE}Creating afpd.service file...${ECHO_COLOR_DEFAULT}" | |
| cat > /etc/avahi/services/afpd.service << EOF | |
| <?xml version="1.0" standalone="no"?> | |
| <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> | |
| <!-- Created by timemachine-install.sh --> | |
| <service-group> | |
| <name replace-wildcards="yes">%h</name> | |
| <service> | |
| <type>_afpovertcp._tcp</type> | |
| <port>548</port> | |
| </service> | |
| <service> | |
| <type>_device-info._tcp</type> | |
| <port>0</port> | |
| <txt-record>model=TimeCapsule</txt-record> | |
| </service> | |
| </service-group> | |
| EOF | |
| echo -e "${ECHO_COLOR_TITLE}Creating deviceinfo.service file...${ECHO_COLOR_DEFAULT}" | |
| cat > /etc/avahi/services/deviceinfo.service << EOF | |
| <?xml version="1.0" standalone="no"?> | |
| <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> | |
| <!-- Created by timemachine-install.sh --> | |
| <service-group> | |
| <name replace-wildcards="yes">%h</name> | |
| <service> | |
| <type>_device-info._tcp</type> | |
| <port>548</port> | |
| <txt-record>model=Xserve</txt-record> | |
| </service> | |
| </service-group> | |
| EOF | |
| echo -e "${ECHO_COLOR_TITLE}Restarting service netatalk...${ECHO_COLOR_DEFAULT}" | |
| /etc/init.d/netatalk restart | |
| echo -e "${ECHO_COLOR_TITLE}Restarting service avahi-daemon...${ECHO_COLOR_DEFAULT}" | |
| /etc/init.d/avahi-daemon restart | |
| echo -e "${ECHO_COLOR_TITLE}Creating time machine data folder $TIMEMACHINE_DATA_FOLDER...${ECHO_COLOR_DEFAULT}" | |
| mkdir -p $TIMEMACHINE_DATA_FOLDER | |
| # TODO Check if user timemachine already exists | |
| echo -e "${ECHO_COLOR_TITLE}Creating user $TIMEMACHINE_USER...${ECHO_COLOR_DEFAULT}" | |
| useradd -c "Time Machine User" -d $TIMEMACHINE_DATA_FOLDER -s /bin/false -g 10 $TIMEMACHINE_USER | |
| # Password für time machine account must be entered by user | |
| passwd $TIMEMACHINE_USER | |
| # Mark volume as a supporting time machine drive | |
| touch $TIMEMACHINE_DATA_FOLDER/.com.apple.timemachine.supported | |
| # Some permissions stuff I do on most volumes to keep ACLs sane | |
| chown -R $TIMEMACHINE_USER:users $TIMEMACHINE_DATA_FOLDER | |
| # Configure netatalk for time machine and a couple other volumes | |
| cat >> /etc/netatalk/AppleVolumes.default << EOF | |
| $TIMEMACHINE_DATA_FOLDER $TIMEMACHINE_VOLUME_NAME allow:$TIMEMACHINE_USER options:tm | |
| EOF | |
| echo -e "${ECHO_COLOR_TITLE}Turning off default home shares...${ECHO_COLOR_DEFAULT}" | |
| sed -i 's/^~/#~/' /etc/netatalk/AppleVolumes.default | |
| # Change service | |
| TM_MAC_ADDRESS="$(ifconfig $NETWORK_INTERFACE | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' -1)" | |
| TM_UUID1=$(uuidgen) | |
| TM_UUID2=$(uuidgen) | |
| TM_UUID3=$(uuidgen) | |
| cat > /etc/avahi/services/adisk.service << EOF | |
| <?xml version="1.0" standalone="no"?> | |
| <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> | |
| <!-- Created by timemachine-install.sh --> | |
| <service-group> | |
| <name replace-wildcards="yes">%h</name> | |
| <service> | |
| <type>_adisk._tcp</type> | |
| <port>9</port> | |
| <txt-record>sys=waMA=$TM_MAC_ADDRESS,adVF=0×100</txt-record> | |
| <txt-record>dk0=adVF=0xa1,adVN=$TIMEMACHINE_VOLUME_NAME,adVU=$TM_UUID1</txt-record> | |
| <txt-record>dk1=adVN=media,adVU=$TM_UUID2</txt-record> | |
| <txt-record>dk2=adVN=software,adVU=$TM_UUID3</txt-record> | |
| </service> | |
| </service-group> | |
| EOF | |
| echo -e "${ECHO_COLOR_TITLE}Restarting service netatalk...${ECHO_COLOR_DEFAULT}" | |
| /etc/init.d/netatalk restart | |
| echo -e "${ECHO_COLOR_TITLE}Restarting service avahi-daemon...${ECHO_COLOR_DEFAULT}" | |
| /etc/init.d/avahi-daemon restart | |
| echo -e "${ECHO_COLOR_DONE}Done${ECHO_COLOR_DEFAULT}." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment