|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +IRODS_HOME=/var/lib/irods |
| 4 | +DEV_HOME="$HOME" |
| 5 | +: ${DEV_REPOS:="$DEV_HOME/github"} |
| 6 | + |
| 7 | +add_package_repo() |
| 8 | +{ |
| 9 | + local R="/etc/apt/sources.list.d/renci-irods.list" |
| 10 | + echo >&2 "... installing package repo" |
| 11 | + sudo apt update |
| 12 | + sudo apt install -y lsb-release apt-transport-https |
| 13 | + wget -qO - https://packages.irods.org/irods-signing-key.asc | sudo apt-key add - && \ |
| 14 | + echo "deb [arch=amd64] https://packages.irods.org/apt/ $(lsb_release -sc) main" |\ |
| 15 | + sudo tee "$R" |
| 16 | + sudo apt update |
| 17 | +} |
| 18 | + |
| 19 | +DIST_NAME=$(lsb_release -sc) |
| 20 | + |
| 21 | +: ${IRODS_VSN:=4.3.1-0~$DIST_NAME} |
| 22 | + |
| 23 | +while [[ "$1" = -* ]]; do |
| 24 | + ARG="$1" |
| 25 | + shift |
| 26 | + case $ARG in |
| 27 | + --i=* | --irods=* |\ |
| 28 | + --irods-version=*) IRODS_PACKAGE_VERSION=${ARG#*=};; |
| 29 | + --w=* | --with=* | --with-options=* ) withopts=${ARG#*=} ;; |
| 30 | + -v) VERBOSE=1;; |
| 31 | + esac |
| 32 | +done |
| 33 | + |
| 34 | + |
| 35 | +run_phase() { |
| 36 | + |
| 37 | + local PHASE=$1 |
| 38 | + local with_opts=" $2 " |
| 39 | + |
| 40 | + case "$PHASE" in |
| 41 | + |
| 42 | + 0) |
| 43 | + |
| 44 | + if [[ $with_opts = *\ initialize\ * ]]; then |
| 45 | + apt-get -y update |
| 46 | + apt-get install -y apt-transport-https wget lsb-release sudo jq |
| 47 | + fi |
| 48 | + |
| 49 | + if [[ $with_opts = *\ sudo-without-pw\ * ]]; then |
| 50 | + if [ `id -u` = 0 -a "${USER:-root}" = root ] ; then |
| 51 | + echo >&2 "root authorization for 'sudo' is automatic - no /etc/sudoers modification needed" |
| 52 | + else |
| 53 | + if [ -f "/etc/sudoers" ]; then |
| 54 | + if [ -n "$USER" ] ; then |
| 55 | + # add a line with our USER name to /etc/sudoers if not already there |
| 56 | + sudo su -c "sed -n '/^\s*[^#]/p' /etc/sudoers | grep '^$USER\s*ALL=(ALL)\s*NOPASSWD:\s*ALL\s*$' >/dev/null" || \ |
| 57 | + sudo su -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >>/etc/sudoers" |
| 58 | + else |
| 59 | + echo >&2 "user login is '$USER' - can this be right?" |
| 60 | + fi |
| 61 | + else |
| 62 | + echo >&2 "WARNING - Could not modify sudoers files" |
| 63 | + echo -n >&2 " (hit 'Enter' to continue)" |
| 64 | + read key |
| 65 | + fi |
| 66 | + fi # not root |
| 67 | + fi # with-opts |
| 68 | + |
| 69 | + #------ (needed for both package install and build from source) |
| 70 | + |
| 71 | + if [[ $with_opts = *\ install-essential-packages\ * ]]; then |
| 72 | + |
| 73 | + if ! dpkg -l tzdata >/dev/null 2>&1 ; then |
| 74 | + sudo su - root -c \ |
| 75 | + "env DEBIAN_FRONTEND=noninteractive bash -c 'apt-get install -y tzdata'" |
| 76 | + fi |
| 77 | + sudo apt-get update |
| 78 | + sudo apt-get install -y software-properties-common postgresql |
| 79 | + sudo apt-get update && \ |
| 80 | + sudo apt-get install -y libfuse2 unixodbc rsyslog ################### less python-pip |
| 81 | + fi |
| 82 | + |
| 83 | + |
| 84 | + if [[ $with_opts = *\ add-package-repo\ * ]]; then |
| 85 | + add_package_repo -f |
| 86 | + fi |
| 87 | + |
| 88 | + |
| 89 | + if [[ $with_opts = *\ create-db\ * ]]; then |
| 90 | + sudo su - postgres -c " |
| 91 | + { dropdb --if-exists ICAT |
| 92 | + dropuser --if-exists irods ; } >/dev/null 2>&1" |
| 93 | + sudo su - postgres -c "psql <<\\ |
| 94 | +________ |
| 95 | + CREATE DATABASE \"ICAT\"; |
| 96 | + CREATE USER irods WITH PASSWORD 'testpassword'; |
| 97 | + GRANT ALL PRIVILEGES ON DATABASE \"ICAT\" to irods; |
| 98 | +________" |
| 99 | + echo >&2 "-- status of create-db = $? -- " |
| 100 | + fi |
| 101 | + ;; |
| 102 | + |
| 103 | + 4) |
| 104 | + sudo apt install -y irods-{dev,runtime}${IRODS_PACKAGE_VERSION:+"=$IRODS_PACKAGE_VERSION"} |
| 105 | + if [[ $with_opts != *\ basic\ * ]]; then |
| 106 | + sudo apt install -y irods-{icommands,server,database-plugin-postgres}${IRODS_PACKAGE_VERSION:+"=$IRODS_PACKAGE_VERSION"} |
| 107 | + fi |
| 108 | + ;; |
| 109 | + |
| 110 | + 5) |
| 111 | + if [ ! "$IRODS_VSN" '<' "4.3" ]; then |
| 112 | + PYTHON=python3 |
| 113 | + else |
| 114 | + PYTHON=python2 |
| 115 | + fi |
| 116 | + sudo $PYTHON /var/lib/irods/scripts/setup_irods.py < /var/lib/irods/packaging/localhost_setup_postgres.input |
| 117 | + ;; |
| 118 | + |
| 119 | + *) echo >&2 "unrecognized phase: '$PHASE'." ; QUIT=1 ;; |
| 120 | + esac |
| 121 | + return $? |
| 122 | +} |
| 123 | + |
| 124 | +#-------------------------- main |
| 125 | + |
| 126 | +QUIT=0 |
| 127 | +while [ $# -gt 0 ] ; do |
| 128 | + ARG=$1 ; shift |
| 129 | + NOP="" ; run_phase $ARG " $withopts "; sts=$? |
| 130 | + [ $QUIT != 0 ] && break |
| 131 | + [ -n "$NOP" ] && continue |
| 132 | + echo -n "== $ARG == " |
| 133 | + if [ $sts -eq 0 ]; then |
| 134 | + echo Y >&2 |
| 135 | + else |
| 136 | + [ $quit_on_phase_err ] && { echo >&2 "N - quitting"; exit 1; } |
| 137 | + echo N >&2 |
| 138 | + fi |
| 139 | +done |
0 commit comments