Bestand: /home/karel/scripts/nas Pagina 1 van 8

Maat: px
Weergave met pagina beginnen:

Download "Bestand: /home/karel/scripts/nas Pagina 1 van 8"

Transcriptie

1 Bestand: /home/karel/scripts/nas Pagina 1 van 8 1 #!/bin/bash 2 ############################################################################# 3 # Bestand: nas # 4 # Doel: Script voor het aankoppelen van een NAS tijdens opstarten. # 5 # Gebruik: In het terminalvenster: # 6 # nas [OPTIE...] # 7 # Gebruik optie --usage of --help voor meer informatie. # 8 # Dit script wordt ook gebruikt bij het installeren van Linux. # 9 # Gebruikt: script-common.sh (algemene variabelen en functies) # 10 # Een NAS met een vast IP-adres. # 11 # Auteur: Karel Zimmer ( info@karelzimmer.nl) # 12 # # 13 # Auteursrecht Karel Zimmer. # 14 # # 15 # Dit programma is vrije software: u mag het herdistribueren en/of wijzigen # 16 # onder de voorwaarden van de GNU Algemene Publieke Licentie zoals # 17 # gepubliceerd door de Free Software Foundation, onder versie 3 van de # 18 # Licentie of (naar uw keuze) elke latere versie. # 19 # # 20 # Dit programma is gedistribueerd in de hoop dat het nuttig zal zijn maar # 21 # ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garanties die # 22 # GEBRUIKELIJK ZIJN IN DE HANDEL of voor BRUIKBAARHEID VOOR EEN SPECIFIEK # 23 # DOEL. Zie de GNU Algemene Publieke Licentie voor meer details. # 24 # # 25 # U hoort een kopie van de GNU Algemene Publieke Licentie te hebben # 26 # ontvangen samen met dit programma. Als dat niet het geval is, zie # 27 # # 28 # # 29 # Versies: Eerste versie. # 30 # Versies: Van gvfs naar /etc/mount (betrouwbaarheid). # 31 # Hernoemd (-/-.sh). # 32 ############################################################################# 33 readonly VERSION_NUMBER= readonly RELEASE_DATE= ############################################################################# 37 # Instellingen # 38 ############################################################################# # # 41 # Algemene instellingen # 42 # # 43 # Lees de algemene variabelen en functies in. # 44 # # 45 source "$(dirname "$0")/script-common.sh" \ 46 &>> /tmp/script-common.sh.log 47 { 48 echo 'Het algemeen scriptbestand (script-common.sh) is niet gevonden' 49 echo "of bevat fouten. Is 'wget karelzimmer.nl/s;. s' uitgevoerd?" 50 echo 'Zie voor informatie en klik op LEESMIJ.' 51 exit 1 52 } # # 55 # Globale constanten # 56 # # 57 # Algemeen readonly SCRIPT_NEEDS_SUDO=true # Beheerdersrechten nodig 59 readonly FIRST_COPYRIGHTYEAR=2014 # Eerste auteursrechtjaar 60 readonly OPTION_NEEDS_ARG=false # Geen optie met een verplicht argum. 61 readonly OPTIONS_HELP=$(cat << OPTIONS_HELP 62 OPTIONS_HELP 63 ) # Extra hulp-opties 64 readonly OPTIONS_USAGE=$(cat << OPTIONS_USAGE 65 OPTIONS_USAGE 66 ) # Extra gebruiks-opties

2 Bestand: /home/karel/scripts/nas Pagina 2 van # Specifiek readonly NAS_LOGIN=/root/.naslogin # Login-gegevens van de NAS 70 readonly NAS_KOPPELPUNT=/mnt/nas # Koppelpunt van de NAS readonly NAS_FIXED_IP_ADDRESS=$(cat << NAS_FIXED_IP_ADDRESS 73 Zorg dat de NAS een vast IP-adres heeft. 74 Hiervoor is nodig: 75 - het MAC-adres van de NAS (zoals $( 76 ifconfig grep HWaddr head --lines=1 awk '{print $5}' 77 )), 78 - toegang tot de NAS via een webbrowser, 79 - toegang tot de router via een webbrowser Kies in de router met het MAC-adres van de NAS een 81 IP-adres buiten het bereik van DHCP die automatisch 82 de IP-adressen uitdeelt (vaak ) Kies in de NAS het vaste IP-adres en zet DHCP uit NAS_FIXED_IP_ADDRESS 86 ) # Hulptekst NAS vast IP-adres # Foutcodes # # 91 # Globale variabelen # 92 # # 93 # Array, integer declare -i MNT_RC=0 # Afsluitwaarde van de mount # Boolean # Overig declare NAS_IP_ADRES= # IP-adres van de NAS 100 declare NAS_GEBRUIKERSNAAM=$SUDO_USER # Gebruikersnaam op de NAS 101 declare NAS_WACHTWOORD='geheim' # Wachtwoord op de NAS 102 declare NAS_SHARENAAM=$SUDO_USER # Sharenaam op de NAS ############################################################################# 105 # Functies # 106 ############################################################################# #-Functie # 109 # Naam: toon_hulp # 110 # Doel: Uitleg werking script. # 111 # Arg.: Geen argumenten. # 112 # # 113 toon_hulp() { 114 log "$PROGNAME:$FUNCNAME:$LINENO" toon_gebruik_sc $OPTION_USAGE 117 cat << HULP Beschrijving: 120 Script voor het aankoppelen van een NAS tijdens opstarten NAS is een acroniem (letterwoord), en een afkorting van 123 network-attached storage Dit script voegt een regel toe aan de koppeltabel (/etc/fstab). 126 Deze tabel bevat informatie over statische bestandssystemen. 127 Statische bestandssystemen worden aangekoppeld tijdens het opstarten en 128 blijven aangekoppeld. 129 Dit in tegenstelling tot bijvoorbeeld een USB-stick die dynamisch wordt 130 aan- en afgekoppeld (op /media) De toe te voegen regel wordt samengesteld met standaard waarden.

3 Bestand: /home/karel/scripts/nas Pagina 3 van Bij het uitvoeren van dit script worden deze waarden getoond tussen [] 134 en zijn deze aan te passen. 135 Als er al regels voorkomen voor de NAS kunnen deze door dit script 136 verwijderd worden $( 139 echo "$NAS_FIXED_IP_ADDRESS" 140 nl --number-width=3 \ body-numbering=n 142 ) 143 Indien nodig wordt het beheerderswachtwoord gevraagd $OPTIONS_HELP_SC$OPTIONS_HELP 146 $PART_OF_INSTALL_HELPTEXT 147 HULP return } #-Functie # 153 # Naam: controleer_invoer # 154 # Doel: Initiële controles en/of acties. # 155 # Arg.: Geen argumenten. # 156 # # 157 controleer_invoer() { 158 log "$PROGNAME:$FUNCNAME:$LINENO" clear 161 log "$DASHES" 162 normal "$HEADER" 163 normal if grep 'nas' /etc/fstab &>> "$LOG"; then 166 grep 'nas' /etc/fstab 167 normal 168 warning "Er zijn al regels aanwezig in de koppeltabel, zie \ 169 hierboven." 170 attendeer_gebruiker 171 read -p 'Deze regels verwijderen? [j/n] ' 172 case $REPLY in 173 j* J*) 174 verwijder_regels 175 ;; 176 n* N* '') 177 normal 'OK, we gaan verder.' 178 ;; 179 *) 180 toon_keuze_fout_sc 181 ;; 182 esac 183 fi normal 186 attendeer_gebruiker 187 read -p "Heeft de NAS een vast IP-adres zoals $NAS_IP_ADRES? [j/n] " 188 case $REPLY in 189 j* J*) 190 normal 'OK, we gaan verder.' 191 ;; 192 n* N* '') 193 normal "$NAS_FIXED_IP_ADDRESS" 194 toon_keuze_stop_sc 195 ;; 196 *) 197 toon_keuze_fout_sc 198 ;;

4 Bestand: /home/karel/scripts/nas Pagina 4 van esac normal 202 normal 'Beantwoordt alstublieft de volgende vragen.' 203 normal "Als u niets opgeeft, wordt de waarde tussen [] gebruikt als \ 204 antwoord." normal 207 read -p "Wat is het IP-adres van de NAS? [$NAS_IP_ADRES]: " 208 if [[ -n $REPLY ]]; then 209 NAS_IP_ADRES=$REPLY 210 fi normal 213 read -p "Wat is de gebruikersnaam op de NAS? [$NAS_GEBRUIKERSNAAM]: " 214 if [[ -n $REPLY ]]; then 215 NAS_GEBRUIKERSNAAM=$REPLY 216 fi normal 219 read -s -p "Wat is het wachtwoord van deze gebruiker op de NAS? \ 220 [$NAS_WACHTWOORD]: " 221 if [[ -n $REPLY ]]; then 222 NAS_WACHTWOORD=$REPLY 223 fi 224 normal normal 227 read -p "Hoe heet de share van deze gebruiker op de NAS? \ 228 [$NAS_SHARENAAM]: " 229 if [[ -n $REPLY ]]; then 230 NAS_SHARENAAM=$REPLY 231 fi return } #-Functie # 237 # Naam: verwijder_regels # 238 # Doel: Verwijder regels uit de koppeltabel. # 239 # Arg.: Geen argumenten. # 240 # # 241 verwijder_regels() { 242 log "$PROGNAME:$FUNCNAME:$LINENO" normal 'Verwijder regels uit de koppeltabel...' 245 sed --in-place=".nas-$(date +%Y-%m-%d-%H.%M.%S)" \ 246 '/nas/d' \ 247 /etc/fstab \ 248 &>> "$LOG" 249 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 250 'verwijder regels uit koppeltabel' \ 251 $? 252 normal 'Regels verwijderd uit de koppeltabel.' ls $NAS_LOGIN \ 255 &>> "$LOG" && { 256 normal 'Verwijder inlogegevens...' 257 rm --verbose \ 258 "$NAS_LOGIN" \ 259 &>> "$LOG" 260 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 261 'verwijder inlogegevens' \ 262 $? 263 normal 'Inlogegevens verwijderd.' 264 }

5 Bestand: /home/karel/scripts/nas Pagina 5 van return } #-Functie # 270 # Naam: toon_invoer # 271 # Doel: Toon wat het script gaat doen. # 272 # Arg.: Geen argumenten. # 273 # # 274 toon_invoer() { 275 log "$PROGNAME:$FUNCNAME:$LINENO" clear 278 log "$DASHES" 279 normal "$HEADER" 280 normal 281 normal "NAS IP-adres: $NAS_IP_ADRES" 282 normal "NAS Gebruikersnaam: $NAS_GEBRUIKERSNAAM" 283 normal "NAS Wachtwoord: ********" 284 normal "NAS Sharenaam: $NAS_SHARENAAM" 285 normal "Logboek: $LOG" 286 log "$DASHES" 287 normal return } #-Functie # 293 # Naam: controleer_afhankelijkheden # 294 # Doel: Controleer of de benodigde pakketten zijn geïnstalleerd. # 295 # Arg.: Geen argumenten. # 296 # # 297 controleer_afhankelijkheden() { 298 log "$PROGNAME:$FUNCNAME:$LINENO" normal 'Oplossen afhankelijkheden...' normal 'Installeer Samba...' 303 sudo apt-get --assume-yes \ 304 install \ 305 samba \ 306 &>> "$LOG" normal 'Installeer CIFS utilities...' 309 sudo apt-get --assume-yes \ 310 install \ 311 cifs-utils \ 312 &>> "$LOG" return } #-Functie # 318 # Naam: maak_koppelpunt # 319 # Doel: Maak het koppelpunt aan waarop de NAS zal worden aangekoppeld. # 320 # Arg.: Geen argumenten. # 321 # # 322 maak_koppelpunt() { 323 log "$PROGNAME:$FUNCNAME:$LINENO" normal 'Maak het NAS koppelpunt...' if [[! -d $NAS_KOPPELPUNT ]]; then 328 mkdir --verbose \ 329 $NAS_KOPPELPUNT \ 330 &>> "$LOG"

6 Bestand: /home/karel/scripts/nas Pagina 6 van verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 332 'maak NAS koppelpunt' \ 333 $? chmod --verbose \ \ 337 $NAS_KOPPELPUNT \ 338 &>> "$LOG" 339 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 340 'wijzig rechten NAS koppelpunt' \ 341 $? 342 fi return } #-Functie # 348 # Naam: maak_naslogin # 349 # Doel: Maak bestand met naslogin aan en bescherm deze. # 350 # Arg.: Geen argumenten. # 351 # # 352 maak_naslogin() { 353 log "$PROGNAME:$FUNCNAME:$LINENO" normal 'Maak de NAS login aan...' echo "username=$nas_gebruikersnaam" > "$NAS_LOGIN" 358 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 359 'maak NAS login aan (1 van 3)' \ 360 $? echo password=$nas_wachtwoord >> "$NAS_LOGIN" 363 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 364 'maak NAS login aan (2 van 3)' \ 365 $? chmod --verbose \ \ 369 $NAS_LOGIN \ 370 &>> "$LOG" 371 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 372 'maak NAS login aan (3 van 3)' \ 373 $? return } #-Functie # 379 # Naam: voeg_regels_toe # 380 # Doel: Voeg regels toe aan koppeltabel. # 381 # Arg.: Geen argumenten. # 382 # # 383 voeg_regels_toe() { 384 log "$PROGNAME:$FUNCNAME:$LINENO" 385 local regel='' normal 'Voeg regels toe aan de koppeltabel...' regel="# Volgende regel toegevoegd door script $PROGNAME" 390 echo $regel >> /etc/fstab 391 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 392 'voeg regel toe aan koppeltabel (1 van2)' \ 393 $? # Indeling regel in koppeltabel: 396 # <file system> <mount point> <type> <options> <dump> <pass>

7 Bestand: /home/karel/scripts/nas Pagina 7 van # <file system> 398 regel="//$nas_ip_adres/$nas_sharenaam" 399 # <mount point> 400 regel=$regel" $NAS_KOPPELPUNT" 401 # <type> 402 regel=$regel" cifs" 403 # <options> 404 regel=$regel" credentials=$nas_login,rw,noperm,iocharset=utf8," 405 regel=$regel"dir_mode=0777,file_mode=0777" 406 # <dump> 407 regel=$regel" 0" 408 # <pass> 409 regel=$regel" 0" 410 echo $regel >> /etc/fstab 411 verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 412 'voeg regel toe aan koppeltabel (2 van 2)' \ 413 $? return } #-Functie # 419 # Naam: koppel_nas_aan # 420 # Doel: Koppel de NAS aan met de regels in de koppeltabel. # 421 # Arg.: Geen argumenten. # 422 # # 423 koppel_nas_aan() { 424 log "$PROGNAME:$FUNCNAME:$LINENO" normal 'Koppel de NAS aan...' 427 sudo mount -a &>> "$LOG" 428 MNT_RC=$? return } #-Functie # 434 # Naam: toon_afsluiten # 435 # Doel: Afsluitende meldingen en/of acties. # 436 # Arg.: Geen argumenten. # 437 # # 438 toon_afsluiten() { 439 log "$PROGNAME:$FUNCNAME:$LINENO" if [[ $MNT_RC -ne 0 ]]; then 442 error 'Er is iets niet goed gegaan.' 443 normal 'Controleer de meldingen hierboven en kijk in het logboek.' 444 else 445 success 'De koppeltabel is correct aangepast.' 446 success "De NAS is beschikbaar op $NAS_KOPPELPUNT/$NAS_SHARENAAM." 447 fi return } ############################################################################# 453 # Hoofdlijn # 454 ############################################################################# 455 # init_script 456 { 457 verwerk_invoer_sc "$@" 458 controleer_gebruiker_sc $SCRIPT_NEEDS_SUDO 459 bepaal_log_sc $SCRIPT_NEEDS_SUDO \ 460 LOG 461 controleer_invoer 462 toon_invoer

8 Bestand: /home/karel/scripts/nas Pagina 8 van } 464 # verwerk 465 { 466 toon_gestart_sc 467 controleer_afhankelijkheden 468 maak_koppelpunt 469 maak_naslogin 470 voeg_regels_toe 471 koppel_nas_aan 472 toon_gestopt_sc 473 } 474 # afsl_script 475 { 476 toon_afsluiten 477 toon_afsluiten_sc 478 exit } # Einde script.