#!/bin/bash # shellcheck source=kz-common.sh ############################################################################### # Pakket kz installeren. # # Geschreven door Karel Zimmer . ############################################################################### PROGRAM_PATH=$(realpath "$(dirname "$0")") readonly PROGRAM_PATH if ! source "$PROGRAM_PATH"/kz-common.sh 2> /dev/null; then if ! wget --no-verbose \ --output-document=/tmp/kz-common.sh \ 'https://karelzimmer.nl/data/linux/scripts/kz-common.sh'; then printf '%s\n' 'Downloaden kz-common.sh is mislukt.' exit 1 fi if ! source /tmp/kz-common.sh; then printf '%s\n' 'Inlezen kz-common.sh is mislukt.' exit 1 fi fi readonly PROGRAM_NAME='kz-getdeb' readonly DISPLAY_NAME=${PROGRAM_NAME/kz-/kz } readonly RELEASE_YEAR=2016 ############################################################################### # Global constants ############################################################################### readonly OPTIONS_SHORT=$OPTIONS_SHORT_COMMON readonly OPTIONS_LONG=$OPTIONS_LONG_COMMON readonly USAGE="Gebruik: $DISPLAY_NAME $OPTIONS_USAGE_COMMON of: wget karelzimmer.nl/kz bash kz of: wget karelzimmer.nl/kz; bash kz of: wget -O- karelzimmer.nl/kz | bash of: curl -L karelzimmer.nl/kz | bash of: zoek naar get en klik op Scripts installeren" readonly HELP="Gebruik: $DISPLAY_NAME [OPTIE...] of: wget karelzimmer.nl/kz bash kz of: wget karelzimmer.nl/kz; bash kz of: wget -O- karelzimmer.nl/kz | bash of: curl -L karelzimmer.nl/kz | bash of: zoek naar get en klik op Scripts installeren Pakket kz installeren. Opties: $OPTIONS_HELP_COMMON" readonly UPLOADS_DISTDIR=$HOME/kz-uploads/dist ############################################################################### # Global variables ############################################################################### ############################################################################### # Functions ############################################################################### function check_input { local -i getopt_rc=0 local parsed='' parsed=$( getopt --alternative \ --options "$OPTIONS_SHORT" \ --longoptions "$OPTIONS_LONG" \ --name "$DISPLAY_NAME" \ -- "$@" ) || getopt_rc=$? if [[ $getopt_rc -ne $SUCCESS ]]; then process_usage NOERROR=true exit $ERROR fi eval set -- "$parsed" process_common_options "$@" while true; do case $1 in --) shift break ;; *) shift ;; esac done if [[ "$*" ]]; then info 'Geen argumenten toegestaan.' process_usage NOERROR=true exit $ERROR fi clear -x check_user_root if ! check_user_sudo; then term_script fi check_on_ac_power } function check_on_ac_power { local -i on_battery=0 on_ac_power &> /dev/null || on_battery=$? if [[ $on_battery -eq 1 ]]; then TEXT='De computer gebruikt nu alleen de accu voor de stroomvoorziening. Geadviseerd wordt om de computer aan te sluiten op het stopcontact.' whiptail --backtitle "$DISPLAY_NAME" \ --title 'Waarschuwing' \ --msgbox "$TEXT" \ 10 71 fi } function check_sudo_and_dpkg { check_sudo check_dpkg } function check_sudo { if ! sudo -n true 2> /dev/null; then while true; do TEXT=' Authenticatie is vereist om pakket kz met scripts en documenten van Karel Zimmer te installeren. Voer uw wachtwoord in:' # Constructie '3>&1 1>&2 2>&3' om stdout en stderr te wisselen. if printf '%s\n' "$( whiptail --backtitle "$DISPLAY_NAME" \ --title 'Authenticatie nodig' \ --ok-button 'Verifiëren' \ --cancel-button 'Annuleren' \ --passwordbox "$TEXT" \ 13 38 \ 3>&1 1>&2 2>&3 )" | sudo --stdin true 2> /dev/null; then break else clear -x TEXT='Er is een fout opgetreden. Mogelijke oorzaak: 1. Geen of verkeerd wachtwoord ingevoerd 2. Op vorig scherm is gekozen' if ! whiptail --backtitle "$DISPLAY_NAME" \ --title 'Fout' \ --yes-button 'Opnieuw' \ --no-button 'Stoppen' \ --yesno "$TEXT" \ 11 45; then TEXT='Programma is gestopt door de gebruiker' TERM=ansi whiptail --backtitle "$DISPLAY_NAME" \ --title 'Gestopt' \ --infobox "$TEXT" \ 7 42 NOERROR=true exit $ERROR fi fi done fi } function check_dpkg { local -i wait_for_aptd=5 if ls /snap/core/*/var/cache/debconf/config.dat &> /dev/null; then while sudo fuser \ /var/{lib/{dpkg,apt/lists},cache/apt/archives}/lock* \ /var/cache/debconf/config.dat \ /snap/core/*/var/cache/debconf/config.dat \ &> /dev/null; do TEXT="Wacht tot andere pakketbeheerder klaar is (kan even \ duren)..." TERM=ansi whiptail --backtitle "$DISPLAY_NAME" \ --title 'Voortgang' \ --infobox "$TEXT" \ 7 65 sleep $wait_for_aptd done else while sudo fuser \ /var/{lib/{dpkg,apt/lists},cache/apt/archives}/lock* \ /var/cache/debconf/config.dat \ &> /dev/null; do TEXT="Wacht tot andere pakketbeheerder klaar is (kan even \ duren)..." TERM=ansi whiptail --backtitle "$DISPLAY_NAME" \ --title 'Voortgang' \ --infobox "$TEXT" \ 7 65 sleep $wait_for_aptd done fi } function process_input { install_scriptspackage } function install_scriptspackage { local site_deb='https://karelzimmer.nl/downloads/kz/kz_365_all.deb' local temp_deb='' check_sudo_and_dpkg TEXT='Installeer pakket kz (kan even duren)...' TERM=ansi whiptail --backtitle "$DISPLAY_NAME" \ --title 'Voortgang' \ --infobox "$TEXT" \ 7 44 # Bij Live-sessie de universe repo aanzetten. if [[ $HOSTNAME = 'ubuntu' && $USER = 'ubuntu' ]]; then sudo add-apt-repository --yes universe |& $LOGCMD sudo apt-get update |& $LOGCMD fi # Installeer pakket kz. temp_deb=$(mktemp -t "$PROGRAM_NAME-XXXXXXXXXX.deb") wget --no-verbose --output-document="$temp_deb" $site_deb |& $LOGCMD sudo DEBIAN_FRONTEND=noninteractive \ apt-get \ reinstall \ --yes \ "$temp_deb" |& $LOGCMD rm "$temp_deb" |& $LOGCMD } function term_script { local srcdir=/usr/share/doc/kz local tgtdir=$HOME/kz-data mkdir --parents "$tgtdir" |& $LOGCMD # Populate with checklist. # Also 'kz-install --list' and 'kz-setup --list' will use this location. cp $srcdir/Checklist*"$(lsb_release --id --short)"* \ "$tgtdir" |& $LOGCMD || true TEXT="Pakket kz is succesvol geïnstalleerd. Volg nu de stappen zoals beschreven in de Checklist installatie. Checklist installatie is te vinden: - in de Persoonlijke map / kz-data - in de map $srcdir - op de site https://karelzimmer.nl, onder Linux Typ 'exit' om dit venster te sluiten." TERM=ansi whiptail --backtitle "$DISPLAY_NAME" \ --title 'Gereed' \ --infobox "$TEXT" \ 18 41 if developer; then check_dependencies pull_repos download_website info 'Status repos (gitstat)...' /home/karel/bin/gitstat fi exit $SUCCESS } function developer { local full_name='' # Aangemeld als ontwikkelaar? full_name=$( getent passwd karel | cut --delimiter=':' --fields=5 | cut --delimiter=',' --fields=1 || true ) if [[ $HOSTNAME == pc?? && ($USER = karel && $full_name = 'Karel Zimmer') ]]; then return $SUCCESS else return $ERROR fi } function check_dependencies { if ! command -v fakeroot 1> /dev/null; then # Voor lz-build .deb. info 'Installeer fakeroot...' sudo apt-get install --yes fakeroot |& $LOGCMD fi if ! command -v ghostscript 1> /dev/null; then # Voor kz-build .pdf (ps2pdf). info 'Installeer ghostscript...' sudo apt-get install --yes ghostscript |& $LOGCMD fi if ! command -v git 1> /dev/null; then # Voor kz-getdeb eigen repo's. info 'Installeer git...' sudo apt-get install --yes git |& $LOGCMD fi if ! command -v lftp 1> /dev/null; then # Voor kz-getdeb/kz-deploy download/upload website. info 'Installeer lftp...' sudo apt-get install --yes lftp |& $LOGCMD fi if ! command -v pycodestyle 1> /dev/null; then # Voor kz-ivp check Python scripts. info 'Installeer pycodestyle...' sudo apt-get install --yes pycodestyle |& $LOGCMD fi if ! command -v shellcheck &> /dev/null; then info 'Installeer shellcheck...' # Debian's pakket is oud, snap is nieuwer. sudo snap install shellcheck |& $LOGCMD fi } function pull_repos { local bin_repo=/home/karel/bin info 'Pull repos (gitpull)...' git config --global pull.ff only |& $LOGCMD git config --global credential.helper store |& $LOGCMD if ! git clone \ https://github.com/karelzimmer/bin.git \ "$bin_repo" |& $LOGCMD; then cd "$bin_repo" git pull |& $LOGCMD fi /home/karel/bin/gitpull |& $LOGCMD } function download_website { local ftp_set='set ssl:verify-certificate no' local ftp_from=/httpdocs local ftp_to=$UPLOADS_DISTDIR local ftp_opts='--delete --verbose' local ftp_cmd="mirror $ftp_opts $ftp_from $ftp_to; exit" local ftp_host=server106.hosting2go.nl local ftp_user=kzimmer local ftp_login=$HOME/.kz-$ftp_host info 'Download website (lftp)...' if ! command -v lftp 1> /dev/null; then sudo apt-get install --yes lftp |& $LOGCMD fi if ! [[ -f $ftp_login ]]; then # < /dev/tty want FD 1 al in gebruik bij 'wget -O- karelzim... | bash'. read -rsp "Wachtwoord voor 'ftp://$ftp_host': " < /dev/tty printf '%s\n' "$REPLY" > "$ftp_login" printf '\n' chmod 'u=rw,g=,o=' "$ftp_login" |& $LOGCMD fi if ! lftp --user "$ftp_user" \ --password "$(cat "$ftp_login")" \ -e "$ftp_set; $ftp_cmd" \ "$ftp_host" |& $LOGCMD; then rm "$ftp_login" info 'Downloaden website is mislukt.' info 'Controleer de log...!' return $ERROR fi } ############################################################################### # Script ############################################################################### function main { init_script "$@" check_input "$@" process_input term_script } main "$@"