diff options
Diffstat (limited to 'etc/library.sh')
-rwxr-xr-x | etc/library.sh | 201 |
1 files changed, 1 insertions, 200 deletions
diff --git a/etc/library.sh b/etc/library.sh index 8846aba0..0a6ee9df 100755 --- a/etc/library.sh +++ b/etc/library.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Library to install software on Raspbian ARM through QEMU +# NextCloudPi function library # # Copyleft 2017 by Ignacio Nunez Hernanz <nacho _a_t_ ownyourbits _d_o_t_ com> # GPL licensed (see end of file) * Use at your own risk! @@ -9,123 +9,6 @@ # -IMGNAME=$( basename "$IMGFILE" .img )_$( basename "$INSTALL_SCRIPT" .sh ).img -DBG=x - -# $IMGOUT will contain the name of the last step -function launch_install_qemu() -{ - local IMG=$1 - local IP=$2 - [[ "$IP" == "" ]] && { echo "usage: launch_install_qemu <script> <img> <IP>"; return 1; } - test -f "$IMG" || { echo "input file $IMG not found"; return 1; } - - local BASE=$( sed 's=-stage[[:digit:]]==' <<< "$IMG" ) - local NUM=$( sed 's=.*-stage\([[:digit:]]\)=\1=' <<< "$IMG" ) - [[ "$BASE" == "$IMG" ]] && NUM=0 - - local NUM_REBOOTS=$( grep -c reboot "$INSTALL_SCRIPT" ) - while [[ $NUM_REBOOTS != -1 ]]; do - NUM=$(( NUM+1 )) - IMGOUT="$BASE-stage$NUM" - cp -v "$IMG" "$IMGOUT" || return 1 # take a copy of the input image for processing ( append "-stage1" ) - - pgrep qemu-system-arm &>/dev/null && { echo -e "QEMU instance already running. Abort..."; return 1; } - launch_qemu "$IMGOUT" & - sleep 10 - wait_SSH "$IP" - launch_installation_qemu "$IP" || return 1 - wait - IMG="$IMGOUT" - NUM_REBOOTS=$(( NUM_REBOOTS-1 )) - done - echo "$IMGOUT generated successfully" -} - -function launch_qemu() -{ - local IMG=$1 - test -f "$1" || { echo "Image $IMG not found"; return 1; } - test -d qemu-raspbian-network || git clone https://github.com/nachoparker/qemu-raspbian-network.git - sed -i '30s/NO_NETWORK=1/NO_NETWORK=0/' qemu-raspbian-network/qemu-pi.sh - sed -i '35s/NO_GRAPHIC=0/NO_GRAPHIC=1/' qemu-raspbian-network/qemu-pi.sh - echo "Starting QEMU image $IMG" - ( cd qemu-raspbian-network && sudo ./qemu-pi.sh ../"$IMG" 2>/dev/null ) -} - -function ssh_pi() -{ - local IP=$1 - local ARGS=${@:2} - local PIUSER=${PIUSER:-pi} - local PIPASS=${PIPASS:-raspberry} - local SSH=( ssh -q -o UserKnownHostsFile=/dev/null\ - -o StrictHostKeyChecking=no\ - -o ServerAliveInterval=20\ - -o ConnectTimeout=20\ - -o LogLevel=quiet ) - type sshpass &>/dev/null && local SSHPASS=( sshpass -p$PIPASS ) - if [[ "${SSHPASS[@]}" == "" ]]; then - ${SSH[@]} ${PIUSER}@$IP $ARGS; - else - ${SSHPASS[@]} ${SSH[@]} ${PIUSER}@$IP $ARGS - local RET=$? - [[ $RET -eq 5 ]] && { ${SSH[@]} ${PIUSER}@$IP $ARGS; return $?; } - return $RET - fi -} - -function wait_SSH() -{ - local IP=$1 - echo "Waiting for SSH to be up on $IP..." - while true; do - ssh_pi "$IP" : && break - sleep 1 - done - echo "SSH is up" -} - -function launch_installation() -{ - local IP=$1 - [[ "$INSTALLATION_CODE" == "" ]] && { echo "Need to run config first" ; return 1; } - [[ "$INSTALLATION_STEPS" == "" ]] && { echo "No installation instructions"; return 1; } - local PREINST_CODE=" -set -e$DBG -sudo su -set -e$DBG -" - echo "Launching installation" - echo -e "$PREINST_CODE\n$INSTALLATION_CODE\n$INSTALLATION_STEPS" | ssh_pi "$IP" || { echo "Installation to $IP failed" && return 1; } -} - -function launch_installation_qemu() -{ - local IP=$1 - [[ "$NO_CFG_STEP" != "1" ]] && local CFG_STEP=configure - [[ "$NO_CLEANUP" != "1" ]] && local CLEANUP_STEP=cleanup - [[ "$NO_HALT_STEP" != "1" ]] && local HALT_STEP="nohup halt &>/dev/null &" - local INSTALLATION_STEPS=" -install -$CFG_STEP -$CLEANUP_STEP -$HALT_STEP -" - launch_installation "$IP" -} - -function launch_installation_online() -{ - local IP=$1 - [[ "$NO_CFG_STEP" != "1" ]] && local CFG_STEP=configure - local INSTALLATION_STEPS=" -install -$CFG_STEP -" - launch_installation "$IP" -} - # Initializes $INSTALLATION_CODE function config() { @@ -258,88 +141,6 @@ function configure_script() ) } -function copy_to_image() -{ - local IMG=$1 - local DST=$2 - local SRC=${@: 3 } - local SECTOR - local OFFSET - SECTOR=$( fdisk -l "$IMG" | grep Linux | awk '{ print $2 }' ) - OFFSET=$(( SECTOR * 512 )) - - [ -f "$IMG" ] || { echo "no image"; return 1; } - mkdir -p tmpmnt - sudo mount "$IMG" -o offset="$OFFSET" tmpmnt || return 1 - sudo cp -v "$SRC" tmpmnt/"$DST" || return 1 - sudo umount -l tmpmnt - rmdir tmpmnt &>/dev/null -} - -function deactivate_unattended_upgrades() -{ - local IMG=$1 - local SECTOR - local OFFSET - SECTOR=$( fdisk -l "$IMG" | grep Linux | awk '{ print $2 }' ) - OFFSET=$(( SECTOR * 512 )) - - [ -f "$IMG" ] || { echo "no image"; return 1; } - mkdir -p tmpmnt - sudo mount "$IMG" -o offset="$OFFSET" tmpmnt || return 1 - rm -f tmpmnt/etc/apt/apt.conf.d/20nextcloudpi-upgrades - sudo umount -l tmpmnt - rmdir tmpmnt &>/dev/null -} - -function download_resize_raspbian_img() -{ - local SIZE=$1 - local IMGFILE=$2 - local IMG=raspbian_lite_latest - - test -f "$IMGFILE" && \ - echo -e "INFO: $IMGFILE already exists. Skipping download ..." && return 0 - - test -f $IMG.zip || \ - wget https://downloads.raspberrypi.org/$IMG -O $IMG.zip || return 1 - - unzip -o $IMG.zip && \ - mv *-raspbian-*.img "$IMGFILE" && \ - qemu-img resize -f raw "$IMGFILE" +"$SIZE" && \ - return 0 -} - -function pack_image() -{ - local IMGOUT="$1" - local IMGNAME="$2" - local TARNAME=$( basename $IMGNAME .img ).tar.bz2 - echo "copying $IMGOUT → $IMGNAME" - cp "$IMGOUT" "$IMGNAME" || return 1 - echo "packing $IMGNAME → $TARNAME" - tar -I pbzip2 -cvf "$TARNAME" "$IMGNAME" &>/dev/null && \ - echo -e "$TARNAME packed successfully" -} - -function create_torrent() -{ - [[ "$1" == "" ]] && { echo "No directory specified"; exit 1; } - test -d "$1" || { echo "$1 not found or is not a directory" ; exit 1; } - - md5sum "$1"/*.bz2 > "$1"/md5sum - - createtorrent -a udp://tracker.opentrackr.org -p 1337 -c "NextCloudPi. Nextcloud for Raspberry Pi image" "$1" "$1".torrent -} - -function generate_changelog() -{ - git log --graph --oneline --decorate \ - --pretty=format:"[%<(13)%D](https://github.com/nextcloud/nextcloudpi/commit/%h) (%ad) %s" --date=short | \ - grep 'tag: v' | \ - sed '/HEAD ->\|origin/s|\[.*\(tag: v[0-9]\+\.[0-9]\+\.[0-9]\+\).*\]|[\1]|' | \ - sed 's|* \[tag: |\n[|' > changelog.md -} # License # |