Bestand: /home/karel/scripts/mkusb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Pagina 1 van 6
#!/bin/bash ############################################################################# # Bestand: mkusb # # Doel: Script voor het maken van opstartbare USB-sticks. # # Gebruik: In het terminalvenster: # # mkusb [OPTIE...] # # Gebruik optie --usage of --help voor meer informatie. # # Gebruikt: script-common.sh (algemene variabelen en functies) # # Auteur: Karel Zimmer (http://karelzimmer.nl,
[email protected]) # # ------------------------------------------------------------------------- # # Auteursrecht © 2014-2015 Karel Zimmer. # # # # Dit programma is vrije software: u mag het herdistribueren en/of wijzigen # # onder de voorwaarden van de GNU Algemene Publieke Licentie zoals # # gepubliceerd door de Free Software Foundation, onder versie 3 van de # # Licentie of (naar uw keuze) elke latere versie. # # # # Dit programma is gedistribueerd in de hoop dat het nuttig zal zijn maar # # ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garanties die # # GEBRUIKELIJK ZIJN IN DE HANDEL of voor BRUIKBAARHEID VOOR EEN SPECIFIEK # # DOEL. Zie de GNU Algemene Publieke Licentie voor meer details. # # # # U hoort een kopie van de GNU Algemene Publieke Licentie te hebben # # ontvangen samen met dit programma. Als dat niet het geval is, zie # # http://www.gnu.org/licenses/. # # ------------------------------------------------------------------------- # # Versies: 1.0.0 2014-06-01 Eerste versie. # # 2.0.0 2014-09-17 Optie dev toegevoegd. # # 3.0.0 2014-12-03 USB-stick schonen met sgdisk en argument # # DEVICE toegevoegd. # # 4.0.0 2015-06-05 Optie bronmap toegevoegd. # # 5.0.0 2015-06-05 Voortaan uitvoeren als beheerder. # # 6.0.0 2015-07-08 Hernoemd (-/- .sh). # # 7.0.0 2015-08-08 Optie bronmap en argument device aangepast. # ############################################################################# readonly VERSION_NUMBER=7.10.0 readonly RELEASE_DATE=2015-11-07 ############################################################################# # Instellingen # ############################################################################# #---------------------------------------------------------------------------# # Algemene instellingen # # ------------------------------------------------------------------------- # # Lees de algemene variabelen en functies in. # #---------------------------------------------------------------------------# source "$(dirname "$0")/script-common.sh" \ 2> /dev/null || { echo 'Het algemeen scriptbestand (script-common.sh) is niet gevonden' echo "of bevat fouten. Is 'wget karelzimmer.nl/s;. s' uitgevoerd?" echo 'Zie voor informatie http://karelzimmer.nl en klik op LEESMIJ.' exit 1 } #---------------------------------------------------------------------------# # Globale constanten # #---------------------------------------------------------------------------# # Algemeen -----------------------------------------------------------------readonly SCRIPT_NEEDS_SUDO=true # Beheerdersrechten nodig readonly FIRST_COPYRIGHTYEAR=2014 # Eerste auteursrechtjaar readonly OPTION_NEEDS_ARG=true # Optie met een verplicht argument readonly OPTIONS_HELP=$(cat << OPTIONS_HELP -s, --source MAP
gebruik beelbestanden (.iso) in map MAP
Bestand: /home/karel/scripts/mkusb 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
Pagina 2 van 6
DEVICE gebruik USB-stick-device DEVICE OPTIONS_HELP ) # Extra hulp-opties readonly OPTIONS_USAGE=$(cat << OPTIONS_USAGE [-s|--source MAP] [DEVICE] OPTIONS_USAGE )
# Extra gebruiks-opties
# Specifiek ----------------------------------------------------------------readonly SOURCE_DFLT=$HOME/Downloads # Standaard bronmap m/beeldbestanden readonly DEVICE_DFLT=/dev/sdb # standaard device-naam # Foutcodes ----------------------------------------------------------------readonly E_DIR_NOT_FOUND=64 #---------------------------------------------------------------------------# # Globale variabelen # #---------------------------------------------------------------------------# # Array, integer -----------------------------------------------------------# Boolean ------------------------------------------------------------------declare ARG_DEVICE=false # Argument device opgegeven declare OPTION_SOURCE=false # Optie source opgegeven declare NO_FILES_FOUND=true # Geen bestanden gevonden # Overig -------------------------------------------------------------------declare ARG_DEVICE_ARGVAL='' # Argument device argumentwaarde declare OPTION_SOURCE_ARGVAL='' # Optie source argumentwaarde declare SOURCEDIR='' # Bronmap met beeldbestanden (.iso) declare DEVICE='' # Device-naam ############################################################################# # Functies # ############################################################################# #-Functie-------------------------------------------------------------------# # Naam: toon_hulp # # Doel: Uitleg werking script. # # Arg.: Geen argumenten. # #---------------------------------------------------------------------------# toon_hulp() { log "$PROGNAME:$FUNCNAME:$LINENO" toon_gebruik_sc $OPTION_USAGE cat << HULP Beschrijving: Script voor het maken van opstartbare USB-sticks. Dit script leest alle beeldbestanden (.iso) uit een map, en maakt per beeldbestand een opstartbare USB-stick aan (met dd). Als er geen MAP is opgegeven wordt $SOURCE_DFLT gebruikt. Als er geen DEVICE is opgegeven wordt $DEVICE_DFLT gebruikt. Indien nodig wordt het beheerderswachtwoord gevraagd. $OPTIONS_HELP_SC$OPTIONS_HELP HULP return 0 } #-Functie-------------------------------------------------------------------# # Naam: controleer_invoer #
Bestand: /home/karel/scripts/mkusb 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
Pagina 3 van 6
# Doel: Initiële controles en/of acties. # # Arg.: Geen argumenten. # #---------------------------------------------------------------------------# controleer_invoer() { log "$PROGNAME:$FUNCNAME:$LINENO" local dir='' #-----------------------------------------------------------------------# # Verwerk en controleer optie en argument source. # #-----------------------------------------------------------------------# if $OPTION_SOURCE; then SOURCEDIR=$OPTION_SOURCE_ARGVAL else SOURCEDIR=$SOURCE_DFLT fi if [[ ! -d $SOURCEDIR ]]; then error "$PROGNAME: map $SOURCEDIR bestaat niet" exit $E_DIR_NOT_FOUND fi #-----------------------------------------------------------------------# # Verwerk argument device. # #-----------------------------------------------------------------------# if $ARG_DEVICE; then DEVICE=$ARG_DEVICE_ARGVAL else DEVICE=$DEVICE_DFLT fi #-----------------------------------------------------------------------# # Vraag voor de zekerheid; opdracht 'dd' is zeer krachtig. # #-----------------------------------------------------------------------# normal warning "$PROGNAME: de volgende schijven en partities zijn aanwezig:" sudo fdisk -l normal warning "$DEVICE wordt gebruikt als doel en overschreven!" read -p 'Is dit OK? (j/N): ' case $REPLY in j*|J*) log 'Gebruiker kiest doorgaan met USB-stick maken.' ;; n*|N*|'') toon_keuze_stop_sc ;; *) toon_keuze_fout_sc ;; esac return 0 } #-Functie-------------------------------------------------------------------# # Naam: toon_invoer # # Doel: Toon wat het script gaat doen. # # Arg.: Geen argumenten. # #---------------------------------------------------------------------------# toon_invoer() { log "$PROGNAME:$FUNCNAME:$LINENO" clear log normal normal normal
"$DASHES" "$HEADER" "ISO-map: $SOURCEDIR"
Bestand: /home/karel/scripts/mkusb 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
normal normal log normal
Pagina 4 van 6
"USB-map: $DEVICE" "Logboek: $LOG" "$DASHES"
return 0 } #-Functie-------------------------------------------------------------------# # Naam: verwerk_beeldbestanden # # Doel: Lees de beeldbestanden en kopieer deze met opdracht 'dd' naar de # # USB-stick. # # Arg.: Geen argumenten. # #---------------------------------------------------------------------------# verwerk_beeldbestanden() { log "$PROGNAME:$FUNCNAME:$LINENO" local usbname='' local file='' normal normal 'Lees beeldbestanden (.iso)...' NO_FILES_FOUND=true for file in "$SOURCEDIR"/*.iso; do [ -f "$file" ] || continue NO_FILES_FOUND=false usbname=$(basename "$file" .iso | tr '-' ' ') accent "$usbname" read -p "Maken/Overslaan/Stoppen? (m/O/s): "
Bestand: /home/karel/scripts/mkusb 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
Pagina 5 van 6
spinner aan #-------------------------------------------------------------------# # Kopieer het hybride beeldbestand (.iso). # # ----------------------------------------------------------------- # # De opdracht dd "convert and copy a file". # #-------------------------------------------------------------------# sudo dd if=$dd_from \ of=$DEVICE \ bs=4M \ &>> "$LOG" verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 'kopieer het beeldbstand (.iso)' \ $? sudo sync &>> "$LOG" verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO" \ 'flush bestandssysteem buffers' \ $? spinner uit #-------------------------------------------------------------------# # Deze umount hoeft niet persé goed te gaan. Met opdracht 'dd' # # aangemaakte USB-sticks koppelen vaak niet aan /media. # #-------------------------------------------------------------------# log 'Koppel af van /media indien mogelijk...' umount -l $DEVICE \ &>> "$LOG" #-------------------------------------------------------------------# # Breng de gebruiker op de hoogte dat de USB-stick klaar is. # #-------------------------------------------------------------------# notify-send --urgency=normal \ --icon=utilities-terminal \ "USB-stick '$usbname' is gemaakt" \ "Zie terminalvenster voor meer informatie" \ &>> "$LOG" canberra-gtk-play --id=complete \ &>> "$LOG" & success "USB-stick '$usbname' is gemaakt." read -p "Verwijder USB-stick '$usbname', gevolgd door [Enter]: " else warning "USB-stick '$usbname' is niet aanwezig op $DEVICE - \ overslaan." fi return 0 } #-Functie-------------------------------------------------------------------# # Naam: toon_afsluiten # # Doel: Afsluitende meldingen en/of acties. # # Arg.: Geen argumenten. # #---------------------------------------------------------------------------# toon_afsluiten() { log "$PROGNAME:$FUNCNAME:$LINENO" :
# no-op
return 0 } ############################################################################# # Hoofdlijn #
Bestand: /home/karel/scripts/mkusb 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
Pagina 6 van 6
############################################################################# # init_script { verwerk_invoer_sc "$@" controleer_gebruiker_sc $SCRIPT_NEEDS_SUDO bepaal_log_sc $SCRIPT_NEEDS_SUDO \ LOG controleer_invoer toon_invoer } # verwerk { toon_gestart_sc verwerk_beeldbestanden toon_gestopt_sc } # afsl_script { toon_afsluiten toon_afsluiten_sc exit 0 } # Einde script.