From 455e274fa6578e4dcf1273c471956cb6969d0210 Mon Sep 17 00:00:00 2001 From: Alexander Lutay Date: Tue, 20 Mar 2018 16:52:21 +0100 Subject: [PATCH] TT#34318 Discontinue repository 'netscript.git' The content has been moved to deployment-iso.git for mr6.2+ Change-Id: I29df2d55786b80f985919d5b5b3367db5fbb03ce --- Makefile | 23 - README | 6 + debian/.gitignore | 7 - debian/changelog | 310 ----- debian/compat | 1 - debian/control | 17 - debian/copyright | 10 - debian/dirs | 1 - debian/install | 1 - debian/rules | 19 - debian/source/format | 1 - debian/source/options | 1 - deployment.sh | 2575 ----------------------------------------- t/Dockerfile | 33 - t/testrunner | 21 - 15 files changed, 6 insertions(+), 3020 deletions(-) delete mode 100644 Makefile create mode 100644 README delete mode 100644 debian/.gitignore delete mode 100644 debian/changelog delete mode 100644 debian/compat delete mode 100644 debian/control delete mode 100644 debian/copyright delete mode 100644 debian/dirs delete mode 100644 debian/install delete mode 100755 debian/rules delete mode 100644 debian/source/format delete mode 100644 debian/source/options delete mode 100644 deployment.sh delete mode 100644 t/Dockerfile delete mode 100755 t/testrunner diff --git a/Makefile b/Makefile deleted file mode 100644 index 65aa509..0000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# for syntax checks -BASH_SCRIPTS = deployment.sh -NGCP_VERSION ?= $(shell git log --pretty=format:"%h" -1) -NGCP_VERSION := $(strip $(NGCP_VERSION)) - -syntaxcheck: shellcheck - -shellcheck: - @echo -n "Checking for shell syntax errors"; \ - for SCRIPT in $(BASH_SCRIPTS); do \ - test -r $${SCRIPT} || continue ; \ - bash -n $${SCRIPT} || exit ; \ - echo -n "."; \ - done; \ - echo " done."; \ - -script_version: - echo "Adjust version information string in deployment.sh to ${NGCP_VERSION}" - sed -i "s/SCRIPT_VERSION=\"%SCRIPT_VERSION%\"/SCRIPT_VERSION=${NGCP_VERSION}/" deployment.sh - - -.PHONY: clean install build syntaxcheck shellcheck script_version -# EOF diff --git a/README b/README new file mode 100644 index 0000000..c8cea7c --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +repository discontinued +----------------------- + +This script deployment.sh has been moved to +Git repository 'deployment-iso' to be builtin +into Install CD image. diff --git a/debian/.gitignore b/debian/.gitignore deleted file mode 100644 index 6d97e09..0000000 --- a/debian/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.debhelper -*.log -*.substvars -/.debhelper/ -/debhelper-build-stamp -/files -/ngcp-netscript/ diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 6d5d234..0000000 --- a/debian/changelog +++ /dev/null @@ -1,310 +0,0 @@ -ngcp-netscript (6.2.0.0+0~mr6.2.0.0) unstable; urgency=medium - - [ Manuel Montecelo ] - * [3a7fe2d] TT#25551 Improve the way to detect installed packages - * [4844134] TT#28474 usage of "sed -ie": /etc/default/grube [sic] present in VMs - - [ Alexander Lutay ] - * [16e31e8] TT#29056 Add NGCP/GRML boot option ngcpinitsystem to choose the init system - - [ Sergii Kipot ] - * [84ddabd] TT#29456 Add netscript-jessie Dockerfile - * [56db1a5] TT#29456 Add netscript Dockerfile for stretch - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 29 Jan 2018 21:54:17 +0100 - -ngcp-netscript (6.1.0.0+0~mr6.1.0.0) unstable; urgency=medium - - [ Sergii Kipot ] - * [803ad45] TT#23052 Use puppetlabs puppet repo instead of PC1 - - [ Guillem Jover ] - * [291de5e] TT#22072 Update packaging - - [ Alexander Lutay ] - * [984feb5] TT#26109 Switch deployment.sh to 'stretch' by default - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Wed, 06 Dec 2017 00:06:57 +0100 - -ngcp-netscript (6.0.0.0+0~mr6.0.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [4580172] TT#17961 Use jessie puppetlabs packages for stretch puppet installations - * [d70725a] TT#18174 Fix silent ngcp-installer errors due to forgotten descriptors into chroot - * [843fb05] TT#19158 Fix a85768bc86: debianrepo/sipwiserepo options has '=' at the end - * [cc97907] TT#17961 Installing puppet-agent independently from debootstrap. - * [ade16ba] TT#17961 Unify GPG key fetching code - * [b7802b5] TT#17961 Install dirmngr on Debian Stretch for 'apt-key adv --recv-keys' - * [6d47ca2] TT#20300 Discontinue GRML boot option 'ngcptrunk' (use common 'ngcpvers=trunk') - * [92b0a2d] TT#21004 Update VBoxGuestAdditions from 5.1.14 to 5.1.26 - * [0b32246] TT#21805 Trigger next puppet section only if previous one has no errors - * [d58deef] TT#21890 Upgrade debootstrap to 1.0.89 from Stretch (to use sysv in NGCP) - * [4318d13] TT#22415 Retry connect to public GPG keyserver in case of random failures - * [c1aaca9] TT#22650 Fix Carrier installation type debug output - * [7791340] TT#22435 Bypass MANAGEMENT_IP to PRO ngcp-installer (use IP_HA_SHARED IP address here) - * [aefb806] TT#22435 Fix 7791340: do not redefine $MANAGEMENT_IP on Carrier (it is defined already) - - [ Michael Prokop ] - * [a85768b] TT#19158 Make check on debianrepo + sipwiserepo boot options more explicit - * [c519bfa] TT#22411 Fix spelling mistakes/typos - - [ Sergii Kipot ] - * [3f95ce0] TT#20663 Fix Facter error while running in chroot - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 02 Oct 2017 23:40:50 +0200 - -ngcp-netscript (5.5.0.0+0~mr5.5.0.0) unstable; urgency=medium - - [ Michael Prokop ] - * [7ab7651] TT#16679 Enable stretch-security mirror in sources.list, now being available - * [7c8b874] TT#16679 Enable debian-debug repository for Debian/stretch - - [ Sergii Kipot ] - * [447f7f6] TT#5851 Use authentication for gerrit access - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 17 Jul 2017 22:44:29 +0200 - -ngcp-netscript (5.4.0.0+0~mr5.4.0.0) unstable; urgency=medium - - [ Sergii Kipot ] - * [b3ad534] TT#14583 Do not remove puppet code after installation - * [dce4d36] TT#4916 Check time sync between installed server and puppet - - [ Alexander Lutay ] - * [459cef9] TT#14516 Add more debug for ngcp-installer execution section from grml-chroot - - [ Michael Prokop ] - * [c02a3ab] TT#15829 Wipe any possibly existing LVM/PV label from target disk - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Tue, 16 May 2017 21:38:33 +0200 - -ngcp-netscript (5.3.0.0+0~mr5.3.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [34b219a] TT#9718 Decrease amount of shellcheck warnings, part 2 - * [6aa501a] TT#9718 Fix shellcheck v.0.3.4-3 warning - * [bb5afae] TT#8883 Add puppet repeat dialog for recovering from Git - - [ Michael Prokop ] - * [df1e2e0] TT#11028 Use virtualbox-guest-additions-iso from VirtualBox upstream - * [d539011] TT#12206 Set custom boot option "net.ifnames=0" in GRUB in Vagrant boxes - * [8b8a339] TT#5444 Revert "TT#5444 Debian stretch doesn't have security support (yet)" - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Wed, 22 Mar 2017 10:56:32 +0100 - -ngcp-netscript (5.2.0.0+0~mr5.2.0.0) unstable; urgency=medium - - [ Sergii Kipot ] - * [40345a6] TT#8883 Add puppet repeat dialog - - [ Alexander Lutay ] - * [d960d6b] TT#8883 Fix 40345a: fix while condition exit cause - * [ba7c8ff] TT#7473 Ask user confirmation to use 'unsupported' disk - * [3221d72] TT#9718 Decrease amount of shellcheck warnings, part 1 - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Fri, 03 Feb 2017 00:36:31 +0100 - -ngcp-netscript (5.1.0.0+0~mr5.1.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [e7fac3a] TT#3961 Switch deployment.sh to new puppetlabs mirror - * [92db066] TT#4166 Fail deployment.sh if ngcp-dumps-upload-to-sipwise has failed - * [6a04bd7] TT#3961 Switch deployment.sh to puppet2.mgm - * [d8b5094] TT#5444 Support http-only Debian mirrors via debianrepotransport boot option - * [24852d0] TT#5444 Debian stretch doesn't have security support (yet) - * [f10ee99] TT#5444 Ensure ca-certificates is available for TLS support - * [9cd97db] TT#5444 Enable support for bootstrapping stretch with older debootstrap versions - * [7518fc8] TT#5444 Add boot option debootstrapkey to fetch remote GPG key - * [cee7feb] TT#5851 Stops using git deamon on git.mgm (wget it from builder.mgm) - - [ Sergii Kipot ] - * [ba06d2b] TT#4166 Add step to prepare translations - - [ Michael Prokop ] - * [af44f36] TT#5444 hostname.sh init script no longer exists with stretch, adjust - * [efe1466] TT#5444 Fix another instance of /etc/init.d/hostname.sh for stretch - * [ba081be] TT#5444 Debian stretch doesn't have security support (yet) - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Thu, 17 Nov 2016 23:16:19 +0100 - -ngcp-netscript (5.0.0.0+0~mr5.0.0.0) unstable; urgency=medium - - [ Kirill Solomko ] - * [42447d5] MT#21439 remove sipwise.cnf retreival and ngcp-sync-constants invoke - - [ Alexander Lutay ] - * [360825c] MT#22131 Do not call 'apt-get update' inside chroot on virtualbox installation stage - - -- Alexander Lutay Tue, 27 Sep 2016 15:38:58 +0200 - -ngcp-netscript (4.6.0.0+0~mr5.0.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [acbafb4] MT#18723 Fix shared IP parsing logic for carrier - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 01 Aug 2016 16:28:59 +0200 - -ngcp-netscript (4.5.0.0+0~mr4.5.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [b1d8d52] MT#17213 Switch GRML disaster recovery to new puppet-agent - * [07895a9] MT#18723 Add ha_int shared IP to PRO - * [7ed4e3b] MT#18723 Add ability to redefine HA shared IP using GRML boot option - * [41b6375] MT#19613 Add grml boot option targetdisk to perform disaster recovery on non-RAID drives - * [2492773] MT#17213 Discontinue puppetinithiera GRML boot option - * [2983472] MT#17213 Discontinue puppetrescuedrive GRML boot option - - [ Sergii Kipot ] - * [8e0371f] MT#17213 Add lsb-release package - * [92ba870] MT#17213 Add 'apt' to --tags - * [dd18013] MT#17213 Put puppet code into /etc/puppetlabs/code/environments - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 23 May 2016 18:50:10 +0200 - -ngcp-netscript (4.4.0.0+0~mr4.4.0.0) unstable; urgency=medium - - [ Guillem Jover ] - * [a2a3847] MT#17077 Install ifenslave instead of ifenslave-2.6 on jessie+ systems - * [1c2e851] MT#16473 Convert debian/copyright to machine-readable format - - [ Michael Prokop ] - * [78eae68] MT#17215 Skip LVM workaround if FAI's setup-storage >=5.0 is present - * [c17dfa6] MT#17529 Create partitions using optimal partition table alignment - * [8647e35] MT#16911 Depend on grml-debootstrap >=0.74, providing grub-pc/install_devices support - * [430f2a3] MT#17699 Bump Standards-Version to 3.9.7 - - [ Sergii Kipot ] - * [0eb92e5] MT#17213 Add puppet status for debug output - * [097a4de] MT#17213 Add two-staged puppet run - - [ Alexander Lutay ] - * [0b32e55] MT#17213 Add GRML boot option 'puppetserver' - * [aa73619] MT#17213 Force deploy_status 'error' in case of non-success Puppet exit code - * [f4cc0e8] MT#17213 Do not overwrite 'error' deploy status + fix factpath value - * [4040bfe] MT#17213 Add Puppet install from Git repo and support of hiera rescue drive - * [44cda64] MT#17213 Add support of Sipwise Hiera Rescue drive on USB or CDROM - * [a9f3788] MT#17213 Rename default Sipwise Hiera rescue drive to 'SIPWRESCUE*' - * [f96b830] MT#17673 Set DEBIAN_RELEASE=jessie for deployment.sh (NGCP mr4.2+ is jessie based) - * [9835b80] MT#17673 Switch deployment.sh self-updates to available repositories - * [ec8d6ea] MT#17673 Fix 9835b80: augeas-tools installation from ${DEBIAN_RELEASE} - * [e4100cd] MT#17849 Remove PXE handling from deployment.sh, ngcp-installer cares about iPXE - * [766b8d7] MT#17673 Stops mixing installer.log and deploymen debug log as it consuses often - * [fa36ee8] MT#17673 Bypass deployment.sh debug mode to ngcp-installer (if enabled) - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 21 Mar 2016 22:21:45 +0100 - -ngcp-netscript (4.3.0.0+0~mr4.3.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [b557563] MT#16489 Switch Vagrant VMs from .ssh/authorized_keys to .ssh/sipwise_vagrant_key - * [35df7a5] MT#16489 Fix typo and default permissions for .ssh/sipwise_vagrant_key - * [034b6d3] MT#16489 Fix plain vagrant VMs (enable ssh key /root/.ssh/sipwise_vagrant_key) - * [828b767] MT#16489 Fix plain squeeze plain vagrant VM - * [da4b25d] MT#16683 Enable repository jessie-security for upcoming mr4.2 - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Wed, 16 Dec 2015 09:20:37 +0100 - -ngcp-netscript (4.2.0.0+0~mr4.2.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 12 Oct 2015 15:36:25 +0200 - -ngcp-netscript (4.1.0.0+0~mr4.1.0.0) unstable; urgency=low - - * New release. - - -- Sipwise Jenkins Builder Mon, 13 Jul 2015 15:20:08 +0200 - -ngcp-netscript (4.0.0.0+0~mr4.0.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [d689c13] MT#6557 Move sipwise user creation to ngcp-installer - * [5d64bd1] MT#12195 Add support for NGCP PPA repos to deployment.sh (testing installer) - * [87927cf] MT#10697 Add ngcpppainstaller boot option - * [419689d] MT#10697 Add PPA debug details to 'green hat' - * [64dc77b] MT#8883 Update md5sum of md5sum_sipwise_key_expected - * [e5664d5] MT#8883 Fix 43c9f159: CE Install CD missed pre-scripts/install-sipwise-key.sh - * [364a434] MT#13637 Install apt-transport-https in GRML if not available (using http) - - [ Victor Seva ] - * [2a9cf92] MT#10697 fix 87927cf1fcb45. Don't set ngcpppainstaller from ngcpppa - - [ Michael Prokop ] - * [7340bf2] MT#12537 Workaround for GRUB installations to virtio disks with lvm >=v2.02.106 - * [adcb72d] MT#12713 Support jessie deployments using puppet - * [4daf950] MT#12713 jessie support: do not fail under needrestart - * [81900e0] MT#13637 Install apt-transport-https, switch to HTTPS + provide sipwiserepotransport boot option - * [c938cea] MT#13711 Set up /etc/apt/apt.conf.d/42_ngcp_aptproxy on fresh lenny/squeeze installs - - -- Alexander Lutay Mon, 13 Jul 2015 11:46:46 +0200 - -ngcp-netscript (3.9.0.0+0~mr4.0.0.0) unstable; urgency=low - - [ Alexander Lutay ] - * [b4bb192] MT#9695 Add boot options ngcpnomysqlrepl for PRO reinstall - * [d65a545] MT#11263 Remove adjust_for_low_performance compatibility code - * [21bf493] MT#11263 Remove enable_vm_services compatibility code - * [772c0ea] MT#11263 Small restyling for better code readability (ngcp-installer-cmdline.log) - * [d1321a1] MT#11263 Remove compatibility code for ngcp-mediaproxy-ng - * [11458cf] MT#11263 Remove compatibility code (function adjust_hb_device) - * [094a34d] MT#11263 Introduce CARRIER_EDITION to simplify carrier detection in code - * [cd161f7] MT#11263 Fixed definition of CARRIER_EDITION variable - * [3b73ba8] MT#11263 Small layout changes for logo header - * [8ea34f8] MT#11263 Remove boot option ngcpsystemd (replaced by Jessie VMs) - * [68673df] MT#10093 Bypass ngcp-installer PXE specific resources for Carrier 3.x - * [b54a156] MT#10093 Fix PXE_IMAGES_PATH handling (create folder + read-only) - * [daf8a3c] MT#11263 Remove old code 'dkms install ngcp-rtpengine' - * [cbdb868] MT#11263 Remove old code: boot option 'ngcpmaster' - * [e75b014] MT#11263 Switch hardcoded list of service to system-tools/ngcp.inc - * [f919236] MT#11263 Move db/cfg upload to separate script ngcp-dumps-upload-to-sipwise - * [bfd912d] MT#11263 Typo fix for previous commit - * [3935632] MT#11263 Start/stop glusterfs-server manually for manipulations with network.yml - * [710440b] MT#11493 Updated IBM chassis slot detection - * [f08477d] MT#11455 Use install_sipwise_key for grml_debootstrap_upgrade - * [43c9f15] MT#11455 Clean up keyring usage flow - * [bbb0367] MT#11947 Do NOT force PRO_EDITION if blade chassis detected - * [e51ca3f] MT#11947 Re-download sipwise.gpg if file is corrupted - * [9112067] MT#9223 Commit /etc/* changes using etckeeper for Vagrant/VirtualBox - * [a0c272a] MT#9249 Move network.yml commands from deployment.sh to installer.git - * [fbfcb7f] MT#9249 Add boot option ngcpfillcache & stop changing hosts/interfaces on Carrier - * [354bd2c] MT#9249 Add more defaults and boot options for network.yml on Carrier - - [ Michael Prokop ] - * [cfd2239] MT#11393 Install vlan and related network tools on all systems - * [05c83c8] MT#7335 Use our own Debian/jessie mirror - * [f40a15b] MT#7335 Disable security mirror when installing jessie - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Wed, 18 Mar 2015 14:06:11 +0100 - -ngcp-netscript (3.8.0.0+0~mr3.8.0.0) unstable; urgency=medium - - * Initial release - - -- Victor Seva Thu, 22 Jan 2015 16:58:59 +0100 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index f599e28..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/debian/control b/debian/control deleted file mode 100644 index e395701..0000000 --- a/debian/control +++ /dev/null @@ -1,17 +0,0 @@ -Source: ngcp-netscript -Section: admin -Priority: optional -Maintainer: Sipwise Development Team -Homepage: https://www.sipwise.com/ -Standards-Version: 3.9.8 -Build-Depends: - debhelper (>= 10), - git, - -Package: ngcp-netscript -Architecture: any -Depends: - ${misc:Depends}, - ${shlibs:Depends}, -Description: NGCP deployment scripts - scripts needed to install Sipwise NGCP system. diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 3b13a8d..0000000 --- a/debian/copyright +++ /dev/null @@ -1,10 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Source: https://www.sipwise.com/ -Upstream-Contact: Sipwise Development Team - -Files: * -Copyright: - Copyright © 2015 Sipwise GmbH, Austria -License: Sipwise-proprietary - All rights reserved. You may NOT copy, distribute or modify without - prior written permission from Sipwise GmbH, Austria. diff --git a/debian/dirs b/debian/dirs deleted file mode 100644 index 7b62f8b..0000000 --- a/debian/dirs +++ /dev/null @@ -1 +0,0 @@ -/usr/share/ngcp-netscript diff --git a/debian/install b/debian/install deleted file mode 100644 index 3873687..0000000 --- a/debian/install +++ /dev/null @@ -1 +0,0 @@ -deployment.sh usr/share/ngcp-netscript/ diff --git a/debian/rules b/debian/rules deleted file mode 100755 index d67e9bb..0000000 --- a/debian/rules +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/make -f -# Uncomment this to turn on verbose mode. -# export DH_VERBOSE=1 - -DEBVERSION:=$(shell head -n 1 debian/changelog \ - | sed -e 's/^[^(]*(\([^)]*\)).*/\1/') - -ifneq ($(GIT_COMMIT),) -export NGCP_VERSION := $(GIT_COMMIT) -else -export NGCP_VERSION:=$(DEBVERSION) -endif - -%: - dh $@ - -override_dh_auto_configure: - echo "NGCP_VERSION=$(NGCP_VERSION)" - make script_version diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 89ae9db..0000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (native) diff --git a/debian/source/options b/debian/source/options deleted file mode 100644 index bcdff00..0000000 --- a/debian/source/options +++ /dev/null @@ -1 +0,0 @@ -extend-diff-ignore=.gitreview diff --git a/deployment.sh b/deployment.sh deleted file mode 100644 index a147195..0000000 --- a/deployment.sh +++ /dev/null @@ -1,2575 +0,0 @@ -#!/bin/bash -# Purpose: automatically install Debian + sip:provider platform -################################################################################ - -INSTALL_LOG='/tmp/deployment-installer-debug.log' -exec > >(tee -a $INSTALL_LOG ) -exec 2> >(tee -a $INSTALL_LOG >&2) - -# set version to git commit ID -SCRIPT_VERSION="%SCRIPT_VERSION%" - -# not set? then fall back to timestamp of execution -if [ -z "$SCRIPT_VERSION" ] || [ "$SCRIPT_VERSION" = '%SCRIPT_VERSION%' ] ; then - SCRIPT_VERSION=$(date +%s) # seconds since 1970-01-01 00:00:00 UTC -fi - -# Never ever execute the script outside of a -# running Grml live system because partitioning -# disks might destroy data. Seriously. -if ! [ -r /etc/grml_cd ] ; then - echo "Not running inside Grml, better safe than sorry. Sorry." >&2 - exit 1 -fi - -# better safe than sorry -export LC_ALL=C -export LANG=C - -# avoid SHELL being set but not available, causing needrestart failure, see #788819 -unset SHELL - -# defaults -DEBUG_MODE=false -DEFAULT_INSTALL_DEV=eth0 -DEFAULT_IP1=192.168.255.251 -DEFAULT_IP2=192.168.255.252 -DEFAULT_IP_HA_SHARED=192.168.255.250 -DEFAULT_INTERNAL_NETMASK=255.255.255.248 -DEFAULT_MCASTADDR=226.94.1.1 -DEFAULT_EXT_IP=192.168.52.114 -DEFAULT_EXT_NETMASK=255.255.255.0 -DEFAULT_EXT_GW=192.168.52.1 -TARGET=/mnt -PRO_EDITION=false -CE_EDITION=false -CARRIER_EDITION=false -NGCP_INSTALLER=false -PUPPET='' -PUPPET_SERVER=puppet2.mgm.sipwise.com -PUPPET_GIT_REPO='' -PUPPET_GIT_BRANCH=master -PUPPET_LOCAL_GIT="${TARGET}/tmp/puppet.git" -PUPPET_RESCUE_PATH="/mnt/rescue_drive" -PUPPET_RESCUE_LABEL="SIPWRESCUE*" -RESTART_NETWORK=true -INTERACTIVE=false -DHCP=false -LOGO=true -BONDING=false -VLAN=false -VLANID='' -VLANIF='' -RETRIEVE_MGMT_CONFIG=false -TRUNK_VERSION=false -DEBIAN_RELEASE=stretch -HALT=false -REBOOT=false -STATUS_DIRECTORY=/srv/deployment/ -STATUS_WAIT=0 -LVM=true -VAGRANT=false -ADJUST_FOR_LOW_PERFORMANCE=false -ENABLE_VM_SERVICES=false -FILESYSTEM="ext4" -GPG_KEY_SERVER="pool.sks-keyservers.net" -DEBIAN_REPO_HOST="debian.sipwise.com" -DEBIAN_REPO_TRANSPORT="https" -SIPWISE_REPO_HOST="deb.sipwise.com" -SIPWISE_REPO_TRANSPORT="https" -DPL_MYSQL_REPLICATION=true -FILL_APPROX_CACHE=false -VLAN_BOOT_INT=2 -VLAN_SSH_EXT=300 -VLAN_WEB_EXT=1718 -VLAN_SIP_EXT=1719 -VLAN_SIP_INT=1720 -VLAN_HA_INT=1721 -VLAN_RTP_EXT=1722 -NGCP_INIT_SYSTEM="systemd" - -### helper functions {{{ -get_deploy_status() { - if [ -r "${STATUS_DIRECTORY}/status" ] ; then - cat "${STATUS_DIRECTORY}/status" - else - echo 'error' - fi -} - -set_deploy_status() { - [ -n "$1" ] || return 1 - echo "$*" > "${STATUS_DIRECTORY}"/status -} - -enable_deploy_status_server() { - mkdir -p "${STATUS_DIRECTORY}" - - # get rid of already running process - PID=$(pgrep -f 'python.*SimpleHTTPServer') || true - [ -n "$PID" ] && kill "$PID" - - ( - cd "${STATUS_DIRECTORY}" - python -m SimpleHTTPServer 4242 >/tmp/status_server.log 2>&1 & - ) -} - -CMD_LINE=$(cat /proc/cmdline) -stringInString() { - local to_test_="$1" # matching pattern - local source_="$2" # string to search in - case "$source_" in *$to_test_*) return 0;; esac - return 1 -} - -checkBootParam() { - stringInString " $1" "$CMD_LINE" - return "$?" -} - -getBootParam() { - local param_to_search="$1" - local result='' - - stringInString " $param_to_search=" "$CMD_LINE" || return 1 - result="${CMD_LINE##*$param_to_search=}" - result="${result%%[ ]*}" - echo "$result" - return 0 -} - -# load ":"-separated nfs ip into array BP[client-ip], BP[server-ip], ... -# ip=:::::: -# $1: Array name (needs "declare -A BP" before call), $2: ip=... string -loadNfsIpArray() { - [ -n "$1" ] && [ -n "$2" ] || return 0 - local IFS=":" - local ind=(client-ip server-ip gw-ip netmask hostname device autoconf) - local i - for i in $2 ; do - eval "$1[${ind[n++]}]=$i" - done - [ "$n" == "7" ] && return 0 || return 1 -} - -debootstrap_sipwise_key() { - mkdir -p /etc/debootstrap/pre-scripts/ - cat > /etc/debootstrap/pre-scripts/install-sipwise-key.sh << EOF -#!/bin/bash -# installed via deployment.sh -cp /etc/apt/trusted.gpg.d/sipwise.gpg "\${MNTPOINT}"/etc/apt/trusted.gpg.d/ -EOF - chmod 775 /etc/debootstrap/pre-scripts/install-sipwise-key.sh -} - -install_sipwise_key() { - if [ -f "/etc/apt/trusted.gpg.d/sipwise.gpg" ]; then - md5sum_sipwise_key=$(md5sum /etc/apt/trusted.gpg.d/sipwise.gpg | awk '{print $1}') - echo "Sipwise keyring already installed (MD5: [${md5sum_sipwise_key}]), debootstrap sipwise key" - debootstrap_sipwise_key - return - else - echo "Sipwise keyring not found, downloading." - fi - - for x in 1 2 3; do - - if "$PRO_EDITION" ; then - wget -O /etc/apt/trusted.gpg.d/sipwise.gpg ${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/sppro/sipwise.gpg - else - wget -O /etc/apt/trusted.gpg.d/sipwise.gpg ${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/spce/sipwise.gpg - fi - - md5sum_sipwise_key_expected=bcd09c9ad563b2d380152a97d5a0ea83 - md5sum_sipwise_key_calculated=$(md5sum /etc/apt/trusted.gpg.d/sipwise.gpg | awk '{print $1}') - - if [ "$md5sum_sipwise_key_calculated" != "$md5sum_sipwise_key_expected" ] ; then - echo "Sipwise keyring has wrong checksum (expected: [$md5sum_sipwise_key_expected] - got: [$md5sum_sipwise_key_calculated]), retry $x" - else - break - fi - done - - if [ "$md5sum_sipwise_key_calculated" != "$md5sum_sipwise_key_expected" ] ; then - die "Error validating sipwise keyring for apt usage, aborting installation." - fi - - debootstrap_sipwise_key -} - -install_apt_transport_https () { - echo "Installing apt-transport-https" - - if [ "$(dpkg-query -f "\${db:Status-Status} \${db:Status-Eflag}" -W apt-transport-https 2>/dev/null)" = 'installed ok' ]; then - echo "apt-transport-https is already installed, nothing to do about it." - return 0 - fi - - # use temporary apt database for speed reasons - local TMPDIR - TMPDIR=$(mktemp -d) - mkdir -p "${TMPDIR}/etc/preferences.d" "${TMPDIR}/statedir/lists/partial" \ - "${TMPDIR}/cachedir/archives/partial" - echo "deb http://${DEBIAN_REPO_HOST}/debian/ ${DEBIAN_RELEASE} main contrib non-free" > \ - "${TMPDIR}/etc/sources.list" - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::state="${TMPDIR}/statedir" -o dir::etc="${TMPDIR}/etc" \ - -o dir::etc::trustedparts="/etc/apt/trusted.gpg.d/" update - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::etc="${TMPDIR}/etc" -o dir::state="${TMPDIR}/statedir" \ - -o dir::etc::trustedparts="/etc/apt/trusted.gpg.d/" \ - -y --no-install-recommends install apt-transport-https -} - -# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776917 -debootstrap_upgrade() { - local required_version=1.0.87 - local present_version - - present_version=$(dpkg-query --show --showformat="\${Version}" debootstrap) - - if dpkg --compare-versions "${present_version}" lt "${required_version}" ; then - echo "deboostrap version $present_version is older than minimum required version $required_version - upgrading." - - # use temporary apt database for speed reasons - local TMPDIR - TMPDIR=$(mktemp -d) - mkdir -p "${TMPDIR}/statedir/lists/partial" "${TMPDIR}/cachedir/archives/partial" - local debsrcfile - debsrcfile=$(mktemp) - echo "deb ${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/debian stretch main" >> "$debsrcfile" - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::state="${TMPDIR}/statedir" -o dir::etc::sourcelist="$debsrcfile" \ - -o Dir::Etc::sourceparts=/dev/null update - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::state="${TMPDIR}/statedir" -o dir::etc::sourcelist="$debsrcfile" \ - -o Dir::Etc::sourceparts=/dev/null -y install debootstrap - fi -} - -grml_debootstrap_upgrade() { - local required_version=0.74 - local present_version - - present_version=$(dpkg-query --show --showformat="\${Version}" grml-debootstrap) - - if dpkg --compare-versions "${present_version}" lt "${required_version}" ; then - echo "grml-deboostrap version $present_version is older than minimum required version $required_version - upgrading." - - # use temporary apt database for speed reasons - local TMPDIR - TMPDIR=$(mktemp -d) - mkdir -p "${TMPDIR}/statedir/lists/partial" "${TMPDIR}/cachedir/archives/partial" - local debsrcfile - debsrcfile=$(mktemp) - echo "deb ${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/grml.org grml-testing main" >> "$debsrcfile" - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::state="${TMPDIR}/statedir" -o dir::etc::sourcelist="$debsrcfile" \ - -o Dir::Etc::sourceparts=/dev/null update - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::state="${TMPDIR}/statedir" -o dir::etc::sourcelist="$debsrcfile" \ - -o Dir::Etc::sourceparts=/dev/null -y install grml-debootstrap - fi -} - -install_vbox_iso() { - echo "Downloading virtualbox-guest-additions ISO" - - local vbox_checksum="6df8c8ab6e7ac3a70a5e29116f8a5dcdb7dfbd0b226ef849a5cd9502e956b06f" # sha256 - local vbox_iso="VBoxGuestAdditions_5.1.26.iso" - - mkdir -p "/usr/share/virtualbox/" - vbox_isofile="/usr/share/virtualbox/${vbox_iso}" - wget -c -O "$vbox_isofile" "https://deb.sipwise.com/files/${vbox_iso}" - - echo "${vbox_checksum} ${vbox_isofile}" | sha256sum --check || die "Error: failed to compute checksum for Virtualbox ISO. Exiting." -} - -set_custom_grub_boot_options() { - echo "Adjusting default GRUB boot options (enabling net.ifnames=0)" - sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 net.ifnames=0"/' "${TARGET}/etc/default/grub" - - echo "Invoking update-grub" - grml-chroot $TARGET update-grub - - if [ -d "${TARGET}/etc/.git" ]; then - echo "Commit /etc/default/grub changes using etckeeper" - chroot "$TARGET" etckeeper commit "/etc/default/grub changes" - fi -} - -ensure_augtool_present() { - if [ -x /usr/bin/augtool ] ; then - echo "/usr/bin/augtool is present, nothing to do" - return 0 - fi - - echo "augtool isn't present, installing augeas-tools package:" - - # use temporary apt database for speed reasons - local TMPDIR - TMPDIR=$(mktemp -d) - mkdir -p "${TMPDIR}/etc/preferences.d" "${TMPDIR}/statedir/lists/partial" \ - "${TMPDIR}/cachedir/archives/partial" - echo "deb http://${DEBIAN_REPO_HOST}/debian/ ${DEBIAN_RELEASE} main contrib non-free" > \ - "${TMPDIR}/etc/sources.list" - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::state="${TMPDIR}/statedir" -o dir::etc="${TMPDIR}/etc" \ - -o dir::etc::trustedparts="/etc/apt/trusted.gpg.d/" update - - DEBIAN_FRONTEND='noninteractive' apt-get -o dir::cache="${TMPDIR}/cachedir" \ - -o dir::etc="${TMPDIR}/etc" -o dir::state="${TMPDIR}/statedir" \ - -o dir::etc::trustedparts="/etc/apt/trusted.gpg.d/" \ - -y --no-install-recommends install augeas-tools -} -### }}} - -# logging {{{ -#cat > /etc/rsyslog.d/logsend.conf << EOF -#*.* @@192.168.51.28 -#EOF -#/etc/init.d/rsyslog restart - -logit() { - logger -t grml-deployment "$@" -} - -die() { - logger -t grml-deployment "$@" - echo "$@" >&2 - set_deploy_status "error" - exit 1 -} - -enable_trace() { - if "${DEBUG_MODE}" ; then - set -x - PS4='+\t ' - fi -} - -disable_trace() { - if "${DEBUG_MODE}" ; then - set +x - PS4='' - fi -} - - -logit "host-IP: $(ip-screen)" -logit "deployment-version: $SCRIPT_VERSION" -# }}} - -enable_deploy_status_server - -set_deploy_status "checkBootParam" - -if checkBootParam debugmode ; then - DEBUG_MODE=true - enable_trace -fi - -if checkBootParam targetdisk ; then - TARGET_DISK=$(getBootParam targetdisk) -fi - -# if TARGET_DISK environment variable is set accept it -if [ -n "$TARGET_DISK" ] ; then - export DISK="${TARGET_DISK}" -else # otherwise try to find sane default - if [ -L /sys/block/vda ] ; then - export DISK=vda # will be configured as /dev/vda - else - # in some cases, sda is not the HDD, but the CDROM, - # so better walk through all devices. - for i in /sys/block/sd*; do - if grep -q 0 "${i}/removable"; then - DISK=$(basename "$i") - export DISK - break - fi - done - fi -fi - -[ -z "${DISK}" ] && die "Error: No non-removable disk suitable for installation found" - -if checkBootParam ngcpstatus ; then - STATUS_WAIT=$(getBootParam ngcpstatus || true) - [ -n "$STATUS_WAIT" ] || STATUS_WAIT=30 -fi - -if checkBootParam noinstall ; then - echo "Exiting as requested via bootoption noinstall." - exit 0 -fi - -if checkBootParam nocolorlogo ; then - LOGO=false -fi - -if checkBootParam ngcpnobonding ; then - BONDING=false -fi - -if checkBootParam ngcpbonding ; then - BONDING=true -fi - -if checkBootParam vlan ; then - VLANPARAMS=($(getBootParam vlan | tr ":" "\n")) - if [ ${#VLANPARAMS[@]} -eq 2 ] ; then - VLAN=true - VLANID=${VLANPARAMS[0]} - VLANIF=${VLANPARAMS[1]} - fi -fi - -if checkBootParam ngcpmgmt ; then - MANAGEMENT_IP=$(getBootParam ngcpmgmt) - RETRIEVE_MGMT_CONFIG=true -fi - -## detect environment {{{ -CHASSIS="No physical chassis found" -if dmidecode| grep -q 'Rack Mount Chassis' ; then - CHASSIS="Running in Rack Mounted Chassis." -elif dmidecode| grep -q 'Location In Chassis: Not Specified'; then - : -elif dmidecode| grep -q 'Location In Chassis'; then - CHASSIS="Running in blade chassis $(dmidecode| awk '/Location In Chassis: Slot/ {print $4}')" -fi - -if checkBootParam ngcpinst || checkBootParam ngcpsp1 || checkBootParam ngcpsp2 || \ - checkBootParam ngcppro || checkBootParam ngcpce ; then - NGCP_INSTALLER=true -fi - -if checkBootParam ngcpce ; then - CE_EDITION=true -fi - -if checkBootParam ngcppro || checkBootParam ngcpsp1 || checkBootParam ngcpsp2 ; then - PRO_EDITION=true -fi - -if "$PRO_EDITION" ; then - ROLE=sp1 - - if checkBootParam ngcpsp2 ; then - ROLE=sp2 - fi -fi - -if checkBootParam "puppetenv" ; then - # we expected to get the environment for puppet - PUPPET=$(getBootParam puppetenv) -fi - -if checkBootParam "puppetserver" ; then - PUPPET_SERVER=$(getBootParam puppetserver) -fi - -if checkBootParam "puppetgitrepo" ; then - PUPPET_GIT_REPO=$(getBootParam puppetgitrepo) -fi - -if checkBootParam "puppetgitbranch" ; then - PUPPET_GIT_BRANCH=$(getBootParam puppetgitbranch) -fi - -if checkBootParam "debianrelease" ; then - DEBIAN_RELEASE=$(getBootParam debianrelease) -fi - -ARCH=$(dpkg --print-architecture) -if checkBootParam "arch" ; then - ARCH=$(getBootParam arch) -fi - -# test unfinished releases against -# "https://deb.sipwise.com/autobuild/ release-$AUTOBUILD_RELEASE" -if checkBootParam ngcpautobuildrelease ; then - AUTOBUILD_RELEASE=$(getBootParam ngcpautobuildrelease) - export SKIP_SOURCES_LIST=true # make sure it's available within grml-chroot subshell -fi - -# existing ngcp releases (like 2.2) with according repository and installer -if checkBootParam ngcpvers ; then - SP_VERSION=$(getBootParam ngcpvers) - if [ "${SP_VERSION:-}" = "trunk" ] ; then - TRUNK_VERSION=true - fi - export TRUNK_VERSION # make sure it's available within grml-chroot subshell -fi - -if checkBootParam nongcp ; then - echo "Will not execute ngcp-installer as requested via bootoption nongcp." - NGCP_INSTALLER=false -fi - -# configure static network in installed system? -if checkBootParam ngcpnw.dhcp ; then - DHCP=true -fi - -if checkBootParam ngcphostname ; then - TARGET_HOSTNAME="$(getBootParam ngcphostname)" || true -fi - -if [ -n "$TARGET_HOSTNAME" ] ; then - export HOSTNAME="$TARGET_HOSTNAME" -else - [ -n "$HOSTNAME" ] || HOSTNAME="nohostname" - export HOSTNAME -fi - -if checkBootParam ngcpip1 ; then - IP1=$(getBootParam ngcpip1) -fi - -if checkBootParam ngcpip2 ; then - IP2=$(getBootParam ngcpip2) -fi - -if checkBootParam ngcpipshared ; then - IP_HA_SHARED=$(getBootParam ngcpipshared) -fi - -if checkBootParam ngcpnetmask ; then - INTERNAL_NETMASK=$(getBootParam ngcpnetmask) -fi - -if checkBootParam ngcpextnetmask ; then - EXTERNAL_NETMASK=$(getBootParam ngcpextnetmask) -fi - -if checkBootParam ngcpeaddr ; then - EADDR=$(getBootParam ngcpeaddr) -fi - -if checkBootParam ngcpeiface ; then - EIFACE=$(getBootParam ngcpeiface) -fi - -if checkBootParam ngcpmcast ; then - MCASTADDR=$(getBootParam ngcpmcast) -fi - -if checkBootParam ngcpcrole ; then - CROLE=$(getBootParam ngcpcrole) - CARRIER_EDITION=true -fi - -if checkBootParam ngcpnolvm ; then - logit "Disabling LVM due to ngcpnolvm boot option" - LVM=false -fi - -case "$SP_VERSION" in - 2.*) - logit "Disabling LVM due to SP_VERSION [$SP_VERSION] matching 2.*" - LVM=false - ;; -esac - -case "$SP_VERSION" in - 2.*|3.0|3.1|mr3.2*) - FILESYSTEM="ext3" - logit "Using filesystem $FILESYSTEM for sip:provider release ${SP_VERSION}" - ;; -esac - -# allow forcing LVM mode -if checkBootParam ngcplvm ; then - logit "Enabling LVM due to ngcplvm boot option" - LVM=true -fi - -if checkBootParam ngcphalt ; then - HALT=true -fi - -if checkBootParam ngcpreboot ; then - REBOOT=true -fi - -if checkBootParam vagrant ; then - VAGRANT=true -fi - -if checkBootParam lowperformance ; then - ADJUST_FOR_LOW_PERFORMANCE=true -fi - -if checkBootParam enablevmservices ; then - ENABLE_VM_SERVICES=true -fi - -if checkBootParam ngcpnonwrecfg ; then - logit "Disabling reconfig network as requested via boot option ngcpnonwrecfg" - RESTART_NETWORK=false -fi - -if checkBootParam "debianrepo=" ; then - DEBIAN_REPO_HOST=$(getBootParam debianrepo) -fi - -if checkBootParam "sipwiserepo=" ; then - SIPWISE_REPO_HOST=$(getBootParam sipwiserepo) -fi - -if checkBootParam ngcpnomysqlrepl ; then - DPL_MYSQL_REPLICATION=false -fi - -if checkBootParam ngcpfillcache ; then - FILL_APPROX_CACHE=true -fi - -if checkBootParam ngcpvlanbootint ; then - VLAN_BOOT_INT=$(getBootParam ngcpvlanbootint) -fi - -if checkBootParam ngcpvlansshext ; then - VLAN_SSH_EXT=$(getBootParam ngcpvlansshext) -fi - -if checkBootParam ngcpvlanwebext ; then - VLAN_WEB_EXT=$(getBootParam ngcpvlanwebext) -fi - -if checkBootParam ngcpvlansipext ; then - VLAN_SIP_EXT=$(getBootParam ngcpvlansipext) -fi - -if checkBootParam ngcpvlansipint ; then - VLAN_SIP_INT=$(getBootParam ngcpvlansipint) -fi - -if checkBootParam ngcpvlanhaint ; then - VLAN_HA_INT=$(getBootParam ngcpvlanhaint) -fi - -if checkBootParam ngcpvlanrtpext ; then - VLAN_RTP_EXT=$(getBootParam ngcpvlanrtpext) -fi - -if checkBootParam ngcpppa ; then - NGCP_PPA=$(getBootParam ngcpppa) -fi - -if checkBootParam ngcpppainstaller ; then - NGCP_PPA_INSTALLER=$(getBootParam ngcpppainstaller) -fi - -if checkBootParam debianrepotransport ; then - DEBIAN_REPO_TRANSPORT=$(getBootParam debianrepotransport) -fi - -if checkBootParam sipwiserepotransport ; then - SIPWISE_REPO_TRANSPORT=$(getBootParam sipwiserepotransport) -fi - -if checkBootParam debootstrapkey ; then - GPG_KEY=$(getBootParam debootstrapkey) -fi - -if checkBootParam ngcpinitsystem ; then - NGCP_INIT_SYSTEM=$(getBootParam ngcpinitsystem) - logit "Using init system '${NGCP_INIT_SYSTEM}' as requested via boot option ngcpinitsystem" -fi -## }}} - -## interactive mode {{{ -# support command line options, overriding autodetected defaults -INTERACTIVE=true - -if [ -n "$NETSCRIPT" ] ; then - echo "Automatic deployment via bootoption netscript detected." - INTERACTIVE=false -fi - -usage() { - echo "$0 - automatically deploy Debian ${DEBIAN_RELEASE} and (optionally) ngcp ce/pro. - -Control installation parameters: - - ngcppro - install Pro Edition - ngcpsp1 - install first node (Pro Edition only) - ngcpsp2 - install second node (Pro Edition only) - ngcpce - install CE Edition - ngcpcrole=... - server role (Carrier) - ngcpvers=... - install specific SP/CE version - nongcp - do not install NGCP but install plain Debian only - noinstall - do not install neither Debian nor NGCP - ngcpinst - force usage of NGCP installer - ngcpinstvers=... - use specific NGCP installer version - debianrepo=... - hostname of Debian APT repository mirror - sipwiserepo=... - hostname of Sipwise APT repository mirror - ngcpnomysqlrepl - skip MySQL sp1<->sp2 replication configuration/check - ngcpppa=... - use NGCP PPA Debian repository - -Control target system: - - ngcpnw.dhcp - use DHCP as network configuration in installed system - ngcphostname=... - hostname of installed system (defaults to ngcp/sp[1,2]) - NOTE: do NOT use when installing Pro Edition! - ngcpeiface=... - external interface device (defaults to eth0) - ngcpip1=... - IP address of first node - ngcpip2=... - IP address of second node - ngcpipshared=... - HA shared IP address - ngcpnetmask=... - netmask of ha_int interface - ngcpeaddr=... - Cluster IP address - -The command line options correspond with the available bootoptions. -Command line overrides any present bootoption. - -Usage examples: - - # ngcp-deployment ngcpce ngcpnw.dhcp - - # netcardconfig # configure eth0 with static configuration - # ngcp-deployment ngcppro ngcpsp1 - - # netcardconfig # configure eth0 with static configuration - # ngcp-deployment ngcppro ngcpsp2 -" -} - -for param in "$@" ; do - case $param in - *-h*|*--help*|*help*) usage ; exit 0;; - *ngcpsp1*) ROLE=sp1 ; TARGET_HOSTNAME=sp1; PRO_EDITION=true; CE_EDITION=false ; NGCP_INSTALLER=true ;; - *ngcpsp2*) ROLE=sp2 ; TARGET_HOSTNAME=sp2; PRO_EDITION=true; CE_EDITION=false ; NGCP_INSTALLER=true ;; - *ngcppro*) PRO_EDITION=true; CE_EDITION=false ; NGCP_INSTALLER=true ;; - *ngcpce*) PRO_EDITION=false; CE_EDITION=true ; TARGET_HOSTNAME=spce ; ROLE='' ; NGCP_INSTALLER=true ;; - *ngcpvers=*) SP_VERSION="${param//ngcpvers=/}";; - *nongcp*) NGCP_INSTALLER=false;; - *noinstall*) NGCP_INSTALLER=false;; - *ngcpinst*) NGCP_INSTALLER=true;; - *ngcphostname=*) TARGET_HOSTNAME="${param//ngcphostname=/}";; - *ngcpeiface=*) EIFACE="${param//ngcpeiface=/}";; - *ngcpeaddr=*) EADDR="${param//ngcpeaddr=/}";; - *ngcpip1=*) IP1="${param//ngcpip1=/}";; - *ngcpip2=*) IP2="${param//ngcpip2=/}";; - *ngcpipshared=*) IP_HA_SHARED="${param//ngcpipshared=/}";; - *ngcpnetmask=*) INTERNAL_NETMASK="${param//ngcpnetmask=/}";; - *ngcpextnetmask=*) EXTERNAL_NETMASK="${param//ngcpextnetmask=/}";; - *ngcpmcast=*) MCASTADDR="${param//ngcpmcast=/}";; - *ngcpcrole=*) CARRIER_EDITION=true; CROLE="${param//ngcpcrole=/}";; - *ngcpnw.dhcp*) DHCP=true;; - *ngcpnobonding*) BONDING=false;; - *ngcpbonding*) BONDING=true;; - *ngcphalt*) HALT=true;; - *ngcpreboot*) REBOOT=true;; - *vagrant*) VAGRANT=true;; - *lowperformance*) ADJUST_FOR_LOW_PERFORMANCE=true;; - *enablevmservices*) ENABLE_VM_SERVICES=true;; - *ngcpfillcache*) FILL_APPROX_CACHE=true;; - *ngcpvlanbootint*) VLAN_BOOT_INT="${param//ngcpvlanbootint=/}";; - *ngcpvlansshext*) VLAN_SSH_EXT="${param//ngcpvlansshext=/}";; - *ngcpvlanwebext*) VLAN_WEB_EXT="${param//ngcpvlanwebext=/}";; - *ngcpvlansipext*) VLAN_SIP_EXT="${param//ngcpvlansipext=/}";; - *ngcpvlansipint*) VLAN_SIP_INT="${param//ngcpvlansipint=/}";; - *ngcpvlanhaint*) VLAN_HA_INT="${param//ngcpvlanhaint=/}";; - *ngcpvlanrtpext*) VLAN_RTP_EXT="${param//ngcpvlanrtpext=/}";; - *ngcpppainstaller*) NGCP_PPA_INSTALLER="${param//ngcpppainstaller=/}";; - *ngcpppa*) NGCP_PPA="${param//ngcpppa=/}";; - *ngcpinitsystem*) NGCP_INIT_SYSTEM="${param//ngcpinitsystem=/}";; - esac - shift -done - -if ! "$NGCP_INSTALLER" ; then - CARRIER_EDITION=false - PRO_EDITION=false - CE_EDITION=false - unset ROLE -fi - -set_deploy_status "installing_sipwise_keys" -install_sipwise_key - -set_deploy_status "installing_apt_transport_https" -install_apt_transport_https - -set_deploy_status "debootstrap_upgrade" -debootstrap_upgrade - -set_deploy_status "grml_debootstrap_upgrade" -grml_debootstrap_upgrade - -if "$NGCP_INSTALLER" ; then - set_deploy_status "ensure_augtool_present" - ensure_augtool_present -fi - -set_deploy_status "getconfig" - -# when using ip=....:$HOSTNAME:eth0:off file /etc/hosts doesn't contain the -# hostname by default, avoid warning/error messages in the host system -# and use it for IP address check in pro edition -if [ -z "$TARGET_HOSTNAME" ] ; then - if "$PRO_EDITION" ; then - TARGET_HOSTNAME="$ROLE" - fi - - if "$CE_EDITION" ; then - TARGET_HOSTNAME="spce" - fi - - # if we don't install ngcp ce/pro but - # $HOSTNAME is set via ip=.... then - # take it, otherwise fall back to safe default - if [ -z "$TARGET_HOSTNAME" ] ; then - if [ -n "$HOSTNAME" ] ; then - TARGET_HOSTNAME="$HOSTNAME" - else - TARGET_HOSTNAME="debian" - fi - fi -fi - -# get install device from "ip=:..." boot arg -if checkBootParam ip ; then - declare -A IP_ARR - if loadNfsIpArray IP_ARR "$(getBootParam ip)" ; then - INSTALL_DEV=${IP_ARR[device]} - EXT_GW=${IP_ARR[gw-ip]} - fi -fi - -# set reasonable install device from other source -if [ -z "$INSTALL_DEV" ] ; then - if [ -n "$EIFACE" ] ; then - INSTALL_DEV=$EIFACE - else - INSTALL_DEV=$DEFAULT_INSTALL_DEV - fi -fi -INSTALL_IP="$(ifdata -pa $INSTALL_DEV)" -logit "INSTALL_IP is $INSTALL_IP" - -# if the default network device (eth0) is unconfigured try to retrieve configuration from eth1 -if [ "$INSTALL_IP" = "NON-IP" ] && [ "$INSTALL_DEV" = "$DEFAULT_INSTALL_DEV" ] ; then - logit "Falling back to device eth1 for INSTALL_IP because $DEFAULT_INSTALL_DEV is unconfigured" - INSTALL_IP="$(ifdata -pa eth1)" - logit "INSTALL_IP is $INSTALL_IP" -fi - -# final external device and IP are same as installation -[ -n "$EXTERNAL_DEV" ] || EXTERNAL_DEV=$INSTALL_DEV -[ -n "$EXTERNAL_IP" ] || EXTERNAL_IP=$INSTALL_IP - -# hopefully set via bootoption/cmdline, -# otherwise fall back to hopefully-safe-defaults -# make sure the internal device (configured later) is not statically assigned, -# since when booting with ip=....eth1:off then the internal device needs to be eth0 -if "$PRO_EDITION" ; then - if [ -z "$INTERNAL_DEV" ] ; then - INTERNAL_DEV='eth1' - if [[ "$EXTERNAL_DEV" = "eth1" ]] ; then - INTERNAL_DEV='eth0' - fi - fi - - # needed for carrier - if "$RETRIEVE_MGMT_CONFIG" ; then - logit "Retrieving ha_int IPs configuration from management server" - wget --timeout=30 -O "/tmp/hosts" "${MANAGEMENT_IP}:3000/hostconfig/${TARGET_HOSTNAME}" - IP1=$(awk '/sp1/ { print $1 }' /tmp/hosts) || IP1=$DEFAULT_IP1 - IP2=$(awk '/sp2/ { print $1 }' /tmp/hosts) || IP2=$DEFAULT_IP2 - IP_HA_SHARED=$(awk '/sp(\s|$)/ { print $1 }' /tmp/hosts) || IP_HA_SHARED=$DEFAULT_IP_HA_SHARED - - if [ -z "$INTERNAL_NETMASK" ]; then - wget --timeout=30 -O "/tmp/interfaces" "http://${MANAGEMENT_IP}:3000/nwconfig/${TARGET_HOSTNAME}" - INTERNAL_NETMASK=$(grep "$INTERNAL_DEV inet" -A2 /tmp/interfaces | awk '/netmask/ { print $2 }') - fi - - if [ -z "$EXTERNAL_NETMASK" ]; then - wget --timeout=30 -O "/tmp/interfaces" "http://${MANAGEMENT_IP}:3000/nwconfig/${TARGET_HOSTNAME}" - EXTERNAL_NETMASK=$(grep "$EXTERNAL_DEV inet" -A2 /tmp/interfaces | awk '/netmask/ { print $2 }') - fi - fi - - [ -n "$EXT_GW" ] || EXT_GW=$DEFAULT_EXT_GW - [ -n "$IP1" ] || IP1=$DEFAULT_IP1 - [ -n "$IP2" ] || IP2=$DEFAULT_IP2 - [ -n "$IP_HA_SHARED" ] || IP_HA_SHARED=$DEFAULT_IP_HA_SHARED - # Use $IP_HA_SHARED as $MANAGEMENT_IP on PRO (it is comming from boot option 'ngcpmgmt' on Carrier) - [ -n "$MANAGEMENT_IP" ] || MANAGEMENT_IP="${IP_HA_SHARED}" - case "$ROLE" in - sp1) INTERNAL_IP=$IP1 ;; - sp2) INTERNAL_IP=$IP2 ;; - esac - [ -n "$INTERNAL_NETMASK" ] || INTERNAL_NETMASK=$DEFAULT_INTERNAL_NETMASK - [ -n "$EXTERNAL_NETMASK" ] || EXTERNAL_NETMASK=$DEFAULT_EXT_NETMASK - [ -n "$MCASTADDR" ] || MCASTADDR=$DEFAULT_MCASTADDR - - logit "ha_int sp1: $IP1 sp2: $IP2 shared sp: $IP_HA_SHARED netmask: $INTERNAL_NETMASK" -fi - -[ -n "$EIFACE" ] || EIFACE=$INSTALL_DEV - -if "$CARRIER_EDITION" ; then - # The first Carrier node is booted via DHCP, while requires static HW config on reboot - [ -n "$EADDR" ] || EADDR=$DEFAULT_EXT_IP -else - [ -n "$EADDR" ] || EADDR=$INSTALL_IP -fi - -if "$CE_EDITION" ; then - case "$SP_VERSION" in - # we do not have a local mirror for lenny, so disable it - 2.1) DEBIAN_RELEASE="lenny" ;; - 2.2) DEBIAN_RELEASE="squeeze" ;; - 2.4) DEBIAN_RELEASE="squeeze" ;; - 2.5) DEBIAN_RELEASE="squeeze" ;; - 2.6-rc1) DEBIAN_RELEASE="squeeze" ;; - 2.6-rc2) DEBIAN_RELEASE="squeeze" ;; - 2.6) DEBIAN_RELEASE="squeeze" ;; - 2.7-rc2) DEBIAN_RELEASE="squeeze" ;; - 2.7-rc3) DEBIAN_RELEASE="squeeze" ;; - 2.7) DEBIAN_RELEASE="squeeze" ;; - 2.8) DEBIAN_RELEASE="squeeze" ;; - esac -fi - -set_deploy_status "settings" - -### echo settings -[ -n "$SP_VERSION" ] && SP_VERSION_STR=$SP_VERSION || SP_VERSION_STR="" - -echo "Deployment Settings: - - Install ngcp: $NGCP_INSTALLER" - -if "$CARRIER_EDITION" ; then - echo " sip:carrier" -elif "$PRO_EDITION" ; then - echo " sip:provider: PRO" -elif "$CE_EDITION" ; then - echo " sip:provider: CE" -fi - -echo " - Target disk: /dev/$DISK - Target Hostname: $TARGET_HOSTNAME - Installer version: $SP_VERSION_STR - Install NW iface: $INSTALL_DEV - Install IP: $INSTALL_IP - Use DHCP in host: $DHCP - - Installing in chassis? $CHASSIS - -" | tee -a /tmp/installer-settings.txt - -if "$PRO_EDITION" ; then - echo " - Host Role: $ROLE - Host Role Carrier: $CROLE - Profile: $PROFILE - - External NW iface: $EXTERNAL_DEV - Ext host IP: $EXTERNAL_IP - Ext cluster iface: $EIFACE - Ext cluster IP: $EADDR - Multicast addr: $MCASTADDR - Internal NW iface: $INTERNAL_DEV - Int sp1 host IP: $IP1 - Int sp2 host IP: $IP2 - Int sp shared IP: $IP_HA_SHARED - Int netmask: $INTERNAL_NETMASK - MGMT address: $MANAGEMENT_IP -" | tee -a /tmp/installer-settings.txt -fi - -if "$INTERACTIVE" ; then - echo "WARNING: Execution will override any existing data!" - echo "Settings OK? y/N" - read a - if [[ "$a" != "y" ]] ; then - echo "Exiting as requested." - exit 2 - fi - unset a -fi -## }}} - -##### all parameters set ####################################################### - -set_deploy_status "start" - -# measure time of installation procedure - everyone loves stats! -start_seconds=$(cut -d . -f 1 /proc/uptime) - -if "$LOGO" ; then - disable_trace - GRML_INFO=$(cat /etc/grml_version) - IP_INFO=$(ip-screen) - CPU_INFO=$(lscpu | awk '/^CPU\(s\)/ {print $2}') - RAM_INFO=$(/usr/bin/gawk '/MemTotal/{print $2}' /proc/meminfo) - DATE_INFO=$(date) - INSTALLER_TYPE="Install CE: $CE_EDITION PRO: $PRO_EDITION [$ROLE] Carrier: $CARRIER_EDITION [$CROLE]" - if [ -n "$NGCP_PPA" ] ; then - PPA_INFO="| PPA: ${NGCP_PPA} " - fi - if [ -n "$NGCP_PPA_INSTALLER" ] ; then - PPA_INFO+="| Installer PPA: ${NGCP_PPA_INSTALLER}" - fi - # color - echo -ne "\ec\e[1;32m" - clear - #print logo - echo "+++ Grml-Sipwise Deployment +++" - echo "" - echo "$GRML_INFO" - echo "Host IP(s): $IP_INFO | Deployment version: $SCRIPT_VERSION" - echo "$CPU_INFO CPU(s) | ${RAM_INFO}kB RAM | $CHASSIS" - echo "" - echo "Install ngcp: $NGCP_INSTALLER | $INSTALLER_TYPE" - echo "Installing $SP_VERSION_STR platform | Debian: $DEBIAN_RELEASE $PPA_INFO" - echo "Install IP: $INSTALL_IP | Started deployment at $DATE_INFO" - # number of lines - echo -ne "\e[10;0r" - # reset color - echo -ne "\e[9B\e[1;m" - enable_trace -fi - -if "$PRO_EDITION" ; then - if "$RETRIEVE_MGMT_CONFIG" && "$RESTART_NETWORK" ; then - echo "Skipping $INTERNAL_DEV config" - else - # internal network (default on eth1) - if ifconfig "$INTERNAL_DEV" &>/dev/null ; then - ifconfig "$INTERNAL_DEV" $INTERNAL_IP netmask $INTERNAL_NETMASK - else - die "Error: no $INTERNAL_DEV NIC found, can not deploy internal network. Exiting." - fi - fi - # ipmi on IBM hardware - if ifconfig usb0 &>/dev/null ; then - ifconfig usb0 169.254.1.102 netmask 255.255.0.0 - fi -fi - -set_deploy_status "diskverify" - -# TODO - hardcoded for now, to avoid data damage -check_for_supported_disk() { - if grep -q 'ServeRAID' "/sys/block/${DISK}/device/model" ; then - return 0 - fi - - # IBM System x3250 M3 - if grep -q 'Logical Volume' "/sys/block/${DISK}/device/model" && \ - grep -q "LSILOGIC" "/sys/block/${DISK}/device/vendor" ; then - return 0 - fi - - # IBM System HS23 LSISAS2004 - if grep -q 'Logical Volume' "/sys/block/${DISK}/device/model" && \ - grep -q "LSI" "/sys/block/${DISK}/device/vendor" ; then - return 0 - fi - - # PERC H700, PERC H710,... - if grep -q 'PERC' "/sys/block/${DISK}/device/model" && \ - grep -q "DELL" "/sys/block/${DISK}/device/vendor" ; then - return 0 - fi - - # proxmox on blade, internal system - if grep -q 'COMSTAR' "/sys/block/${DISK}/device/model" && \ - grep -q "OI" "/sys/block/${DISK}/device/vendor" ; then - FIRMWARE_PACKAGES="$FIRMWARE_PACKAGES firmware-qlogic" - return 0 - fi - - local disk_model - disk_model=$(cat "/sys/block/${DISK}/device/model") || true - local disk_vendor - disk_vendor=$(cat "/sys/block/${DISK}/device/vendor") || true - - echo "WARNING: Cannot detect supported device vendor/model." >&2 - echo "(Disk: ${DISK} Vendor: ${disk_vendor} Model: ${disk_model})" >&2 - echo "Would you like to continue anyway? (yes/NO)" >&2 - read a - case "$a" in - y|Y|yes|YES) - echo "Continue anyway as requested." - return 0 - ;; - *) - echo "Aborting installation using disk '${DISK}'" >&2 - return 1 - ;; - esac - unset a - - # no match so far? - return 1 -} - -# run in according environment only -if [ -n "$TARGET_DISK" ] ; then - logit "Skipping check for supported disk as TARGET_DISK variable is set." -else - if [[ $(imvirt 2>/dev/null) == "Physical" ]] ; then - - if ! check_for_supported_disk ; then - die "Error: /dev/${DISK} does not look like a VirtIO, ServeRAID, LSILOGIC or PowerEdge disk/controller. Exiting to avoid possible data damage." - fi - - else - # make sure it runs only within qemu/kvm - if [[ "${DISK}" == "vda" ]] && readlink -f /sys/block/vda/device | grep -q 'virtio' ; then - echo "Looks like a virtio disk, ok." - elif grep -q 'QEMU HARDDISK' "/sys/block/${DISK}/device/model" ; then - echo "Looks like a QEMU harddisk, ok." - elif grep -q 'VBOX HARDDISK' "/sys/block/${DISK}/device/model" ; then - echo "Looks like a VBOX harddisk, ok." - elif grep -q 'Virtual disk' "/sys/block/${DISK}/device/model" && [[ $(imvirt) == "VMware ESX Server" ]] ; then - echo "Looks like a VMware ESX Server harddisk, ok." - else - die "Error: /dev/${DISK} does not look like a virtual disk. Exiting to avoid possible data damage. Note: imvirt output is $(imvirt)" - fi - fi -fi - -# relevant only while deployment, will be overridden later -if [ -n "$HOSTNAME" ] ; then - cat > /etc/hosts << EOF -127.0.0.1 grml localhost -::1 ip6-localhost ip6-loopback grml -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters -ff02::3 ip6-allhosts - -127.0.0.1 $ROLE $HOSTNAME -$INSTALL_IP $ROLE $HOSTNAME -EOF -fi - -# remote login ftw -/etc/init.d/ssh start >/dev/null & -echo "root:sipwise" | chpasswd - -## partition disk -set_deploy_status "disksetup" - -# 2000GB = 2097152000 blocks in /proc/partitions - so make a rough estimation -if [ "$(awk "/ ${DISK}$/ {print \$3}" /proc/partitions)" -gt 2000000000 ] ; then - TABLE=gpt -else - TABLE=msdos -fi - -if "$LVM" ; then - # make sure lvcreate understands the --yes option - lv_create_opts='' - lvm_version=$(dpkg-query -W -f="\${Version}\n" lvm2) || die "Unknown package lvm2" - setupstorage_version=$(dpkg-query --show --showformat="\${Version}" fai-setup-storage) || die "Unknown package fai-setup-storage" - - if dpkg --compare-versions "$setupstorage_version" ge 5.0 ; then - logit "Installed fai-setup-storage version ${setupstorage_version} doesn't need the LVM '--yes' workaround." - elif dpkg --compare-versions "$lvm_version" lt 2.02.106 ; then - logit "Installed lvm2 version ${lvm_version} doesn't need the '--yes' workaround." - else - logit "Enabling '--yes' workaround for lvm2 version ${lvm_version}." - lv_create_opts='lvcreateopts="--yes"' - fi - - if "$NGCP_INSTALLER" ; then - VG_NAME="ngcp" - else - VG_NAME="vg0" - fi - - cat > /tmp/partition_setup.txt << EOF -disk_config ${DISK} disklabel:${TABLE} bootable:1 -primary - 4096- - - - -disk_config lvm -vg ${VG_NAME} ${DISK}1 -${VG_NAME}-root / -95% ext3 rw -${VG_NAME}-swap swap RAM:50% swap sw $lv_create_opts -EOF - - # make sure setup-storage/parted doesn't fail if LVM is already present - blockdev --rereadpt "/dev/${DISK}" - for disk in "/dev/${DISK}"* ; do - logit "Removing possibly existing LVM/PV label from $disk" - pvremove "$disk" --force --force --yes || true - done - dd if=/dev/zero of="/dev/${DISK}" bs=1M count=1 - blockdev --rereadpt "/dev/${DISK}" - - export LOGDIR='/tmp/setup-storage' - mkdir -p $LOGDIR - - # /usr/lib/fai/fai-disk-info is available as of FAI 4.0, - # older versions shipped /usr/lib/fai/disk-info which doesn't - # support the partition setup syntax we use in our setup - if ! [ -x /usr/lib/fai/fai-disk-info ] ; then - die "You are using an outdated ISO, please update it to have fai-setup-storage >=4.0.6 available." - fi - - disklist=$(/usr/lib/fai/fai-disk-info | sort) - export disklist - PATH=/usr/lib/fai:${PATH} setup-storage -f /tmp/partition_setup.txt -X || die "Failure during execution of setup-storage" - - # used later by installer - ROOT_FS="/dev/mapper/${VG_NAME}-root" - SWAP_PARTITION="/dev/mapper/${VG_NAME}-swap" - -else # no LVM - parted -s -a optimal "/dev/${DISK}" mktable "$TABLE" || die "Failed to set up partition table" - # hw-raid with rootfs + swap partition - parted -s -a optimal "/dev/${DISK}" 'mkpart primary ext4 2048s 95%' || die "Failed to set up primary partition" - parted -s -a optimal "/dev/${DISK}" 'mkpart primary linux-swap 95% -1' || die "Failed to set up swap partition" - sync - - # used later by installer - ROOT_FS="/dev/${DISK}1" - SWAP_PARTITION="/dev/${DISK}2" - - echo "Initialising swap partition $SWAP_PARTITION" - mkswap -L ngcp-swap "$SWAP_PARTITION" || die "Failed to initialise swap partition" - - # for later usage in /etc/fstab use /dev/disk/by-label/ngcp-swap instead of /dev/${DISK}2 - SWAP_PARTITION="/dev/disk/by-label/ngcp-swap" -fi - -# otherwise e2fsck fails with "need terminal for interactive repairs" -echo FSCK=no >>/etc/debootstrap/config - -# package selection -cat > /etc/debootstrap/packages << EOF -# addons: packages which d-i installs but debootstrap doesn't -eject -grub-pc -pciutils -usbutils -ucf -# locales -> but we want locales-all instead: -locales-all - -# required e.g. for "Broadcom NetXtreme II BCM5709S Gigabit Ethernet" -# lacking the firmware will result in non-working network on -# too many physical server systems, so just install it by default -firmware-bnx2 -firmware-bnx2x - -# MT#7999 ethtool used in bonding -ethtool - -# support acpi (d-i installs them as well) -acpi acpid acpi-support-base - -# be able to login on the system, even if just installing plain Debian -openssh-server - -# support bridge / vlan -bridge-utils -vlan - -# MT#13637 support https in sources.list -apt-transport-https - -# TT#5444 ca-certificates is necessary to wget ngcp-installer over https -ca-certificates - -# packages d-i installs but we ignore/skip: -#discover -#gettext-base -#installation-report -#kbd -#laptop-detect -#os-prober -EOF - -# ifenslave-2.6 in jessie+ is a transitional dummy package that will disappear. -case "$DEBIAN_RELEASE" in - lenny|squeeze|wheezy) - PKG_IFENSLAVE="ifenslave-2.6" - ;; - *) - PKG_IFENSLAVE="ifenslave" - ;; -esac -echo "Adding ${PKG_IFENSLAVE} package (because we're installing ${DEBIAN_RELEASE})" -logit "Adding ${PKG_IFENSLAVE} package (because we're installing ${DEBIAN_RELEASE})" -cat >> /etc/debootstrap/packages << EOF -# support bonding -${PKG_IFENSLAVE} -EOF - -# MT#8813 The linux-headers-2.6-amd64 package doesn't exist in jessie and newer -case "$DEBIAN_RELEASE" in - lenny|squeeze|wheezy) - echo "Adding linux-headers-2.6-amd64 package (because we're installing ${DEBIAN_RELEASE})" - logit "Adding linux-headers-2.6-amd64 package (because we're installing ${DEBIAN_RELEASE})" - cat >> /etc/debootstrap/packages << EOF -# required for dkms -linux-headers-2.6-amd64 -EOF - ;; - *) - echo "Adding linux-headers-amd64 package (because we're installing ${DEBIAN_RELEASE})" - logit "Adding linux-headers-amd64 package (because we're installing ${DEBIAN_RELEASE})" - cat >> /etc/debootstrap/packages << EOF -# required for dkms -linux-headers-amd64 -EOF - ;; -esac - -if "$LVM" ; then - cat >> /etc/debootstrap/packages << EOF -# support LVM -lvm2 -EOF -fi - -if [ -n "$FIRMWARE_PACKAGES" ] ; then - cat >> /etc/debootstrap/packages << EOF -# firmware packages for hardware specific needs -$FIRMWARE_PACKAGES -EOF -fi - -# NOTE: we use the debian.sipwise.com CNAME by intention here -# to avoid conflicts with apt-pinning, preferring deb.sipwise.com -# over official Debian -MIRROR="${DEBIAN_REPO_TRANSPORT}://${DEBIAN_REPO_HOST}/debian/" -SEC_MIRROR="${DEBIAN_REPO_TRANSPORT}://${DEBIAN_REPO_HOST}/debian-security/" -DBG_MIRROR="${DEBIAN_REPO_TRANSPORT}://${DEBIAN_REPO_HOST}/debian-debug/" - -if [ -z "${GPG_KEY}" ] ; then - KEYRING='/etc/apt/trusted.gpg.d/sipwise.gpg' -else - KEYRING='/etc/apt/trusted.gpg' - - echo "Fetching debootstrap keyring as GPG key '${GPG_KEY}'..." - logit "Fetching debootstrap keyring as GPG key '${GPG_KEY}'..." - - TRY=60 - while ! gpg --keyserver "${GPG_KEY_SERVER}" --recv-keys "${GPG_KEY}" ; do - if [ ${TRY} -gt 0 ] ; then - TRY=$((TRY-5)) - echo "Waiting for gpg keyserver '${GPG_KEY_SERVER}' availability ($TRY seconds)..." - sleep 5 - else - die "Failed to fetch GPG key '${GPG_KEY}' from '${GPG_KEY_SERVER}'" - fi - done - - if ! gpg -a --export "${GPG_KEY}" | apt-key add - ; then - die "Failed to import GPG key '${GPG_KEY}' as apt-key" - fi -fi - -set_deploy_status "debootstrap" - -mkdir -p /etc/debootstrap/etc/apt/ -logit "Setting up /etc/debootstrap/etc/apt/sources.list" -cat > /etc/debootstrap/etc/apt/sources.list << EOF -# Set up via deployment.sh for grml-debootstrap usage -deb ${MIRROR} ${DEBIAN_RELEASE} main contrib non-free -EOF - -echo "deb ${SEC_MIRROR} ${DEBIAN_RELEASE}-security main contrib non-free" >> /etc/debootstrap/etc/apt/sources.list -echo "deb ${MIRROR} ${DEBIAN_RELEASE}-updates main contrib non-free" >> /etc/debootstrap/etc/apt/sources.list - -if [ "$DEBIAN_RELEASE" != "jessie" ] ; then - echo "deb ${DBG_MIRROR} ${DEBIAN_RELEASE}-debug main contrib non-free" >> /etc/debootstrap/etc/apt/sources.list -fi - -# GRUB versions until Debian/wheezy generate an invalid device.map -# entry if /dev/disk/by-id/lvm-pv-uuid-* is present, resulting in -# a GRUB installation failing with "error: no such disk" during boot. -# This is only a problem if we're using a virtio disk and deploying -# from a system running lvm2 v2.02.106 or newer. -if [ "${DISK}" = "vda" ] ; then - case "$DEBIAN_RELEASE" in - lenny|squeeze|wheezy) - echo "Applying /dev/disk/by-id/lvm-pv-uuid-* workaround for virtio disk and Debian release <= wheezy" - logit "Applying /dev/disk/by-id/lvm-pv-uuid-* workaround for virtio disk and Debian release <= wheezy" - rm -f /dev/disk/by-id/lvm-pv-uuid-* - ;; - esac -fi - -if [ "$DEBIAN_RELEASE" = "stretch" ] && [ ! -r /usr/share/debootstrap/scripts/stretch ] ; then - echo "Enabling stretch support for debootstrap via symlink to sid" - ln -s /usr/share/debootstrap/scripts/sid /usr/share/debootstrap/scripts/stretch -fi - -# install Debian -# shellcheck disable=SC2086 -echo y | grml-debootstrap \ - --arch "${ARCH}" \ - --grub "/dev/${DISK}" \ - --filesystem "${FILESYSTEM}" \ - --hostname "${TARGET_HOSTNAME}" \ - --mirror "$MIRROR" \ - --debopt "--keyring=${KEYRING}" $EXTRA_DEBOOTSTRAP_OPTS \ - --keep_src_list \ - --defaultinterfaces \ - -r "$DEBIAN_RELEASE" \ - -t "$ROOT_FS" \ - --password 'sipwise' 2>&1 | tee -a /tmp/grml-debootstrap.log - -if [ "${PIPESTATUS[1]}" != "0" ]; then - die "Error during installation of Debian ${DEBIAN_RELEASE}. Find details via: mount $ROOT_FS $TARGET ; ls $TARGET/debootstrap/*.log" -fi - -sync -mount "$ROOT_FS" "$TARGET" - -# MT#13711 -case "$DEBIAN_RELEASE" in - lenny|squeeze) - echo "Setting up /etc/apt/apt.conf.d/42_ngcp_aptproxy to avoid random 'Hash Sum mismatch' failures." - logit "Setting up /etc/apt/apt.conf.d/42_ngcp_aptproxy to avoid random 'Hash Sum mismatch' failures." - echo "// NGCP_MANAGED_FILE - do not remove this line if it should be automatically handled" > "${TARGET}/etc/apt/apt.conf.d/42_ngcp_aptproxy" - echo "// Installed via 'deployment.sh' on $(date)" >> "${TARGET}/etc/apt/apt.conf.d/42_ngcp_aptproxy" - echo 'Acquire::http::Pipeline-Depth "0";' >> "${TARGET}/etc/apt/apt.conf.d/42_ngcp_aptproxy" - ;; -esac - -# MT#7805 -if "$NGCP_INSTALLER" ; then - cat << EOT | augtool --root="$TARGET" -insert opt after /files/etc/fstab/*[file="/"]/opt[last()] -set /files/etc/fstab/*[file="/"]/opt[last()] noatime -save -EOT -fi - -# provide useable swap partition -echo "Enabling swap partition $SWAP_PARTITION via /etc/fstab" -cat >> "${TARGET}/etc/fstab" << EOF -$SWAP_PARTITION none swap sw,pri=0 0 0 -EOF - -case "$DEBIAN_RELEASE" in - lenny|squeeze|wheezy) - echo "Removing packages which debootstrap installs but d-i doesn't" - chroot $TARGET apt-get --purge -y remove tcpd xauth - ;; -esac - -if "$PRO_EDITION" ; then - echo "Pro edition: keeping firmware* packages." -else - chroot $TARGET apt-get --purge -y remove \ - firmware-linux firmware-linux-free firmware-linux-nonfree || true -fi - -# get rid of automatically installed packages -chroot $TARGET apt-get --purge -y autoremove - -# purge removed packages -removed_packages=( $(chroot $TARGET dpkg --list | awk '/^rc/ {print $2}') ) -if [ ${#removed_packages[@]} -ne 0 ]; then - chroot "$TARGET" dpkg --purge "${removed_packages[@]}" -fi - -# make sure `hostname` and `hostname --fqdn` return data from chroot -grml-chroot $TARGET hostname -F /etc/hostname - -# make sure installations of packages works, will be overridden later again -cat > $TARGET/etc/hosts << EOF -127.0.0.1 localhost -127.0.0.1 $HOSTNAME - -::1 localhost ip6-localhost ip6-loopback -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters -EOF - -if "$PRO_EDITION" && [[ $(imvirt) != "Physical" ]] ; then - echo "Generating udev persistent net rules." - INT_MAC=$(udevadm info -a -p /sys/class/net/${INTERNAL_DEV} | awk -F== '/ATTR{address}/ {print $2}') - EXT_MAC=$(udevadm info -a -p /sys/class/net/${EXTERNAL_DEV} | awk -F== '/ATTR{address}/ {print $2}') - - if [ "$INT_MAC" = "$EXT_MAC" ] ; then - die "Error: MAC address for $INTERNAL_DEV is same as for $EXTERNAL_DEV" - fi - - cat > $TARGET/etc/udev/rules.d/70-persistent-net.rules << EOF -## Generated by Sipwise deployment script -SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}==$INT_MAC, ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="$INTERNAL_DEV" -SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}==$EXT_MAC, ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="$EXTERNAL_DEV" -EOF -fi - -if "$RETRIEVE_MGMT_CONFIG" ; then - # needs to be executed *after* udev rules have been set up, - # otherwise we get duplicated MAC address<->device name mappings - echo "Retrieving network configuration from management server" - wget --timeout=30 -O /etc/network/interfaces "${MANAGEMENT_IP}:3000/nwconfig/$(cat ${TARGET}/etc/hostname)" - cp /etc/network/interfaces "${TARGET}/etc/network/interfaces" - # can't be moved to ngcp-installer, otherwise Grml can't execute: - # > wget --timeout=30 -O Packages.gz "${repos_base_path}Packages.gz" - # because host 'web01' is unknown - echo "Retrieving /etc/hosts configuration from management server" - wget --timeout=30 -O "${TARGET}/etc/hosts" "${MANAGEMENT_IP}:3000/hostconfig/$(cat ${TARGET}/etc/hostname)" -fi - -if "$RETRIEVE_MGMT_CONFIG" && "$RESTART_NETWORK" ; then - # restart networking for the time being only when running either in toram mode - # or not booting from NFS, once we've finished the carrier setup procedure we - # should be able to make this as our only supported default mode and drop - # everything inside the 'else' statement... - if grep -q 'toram' /proc/cmdline || ! grep -q 'root=/dev/nfs' /proc/cmdline ; then - logit 'Set /etc/hosts from TARGET' - cp ${TARGET}/etc/hosts /etc/hosts - echo 'Restarting networking' - logit 'Restarting networking' - /etc/init.d/networking restart - else - # make sure we can access the management system which might be reachable - # through a specific VLAN only - ip link set dev "$INTERNAL_DEV" down # avoid conflicts with VLAN device(s) - - # vlan-raw-device bond0 doesn't exist in the live environment, if we don't - # adjust it accordingly for our environment the vlan device(s) can't be - # brought up - # note: we do NOT modify the /e/n/i file from $TARGET here by intention - sed -i "s/vlan-raw-device .*/vlan-raw-device eth0/" /etc/network/interfaces - - while IFS= read -r interface ; do - echo "Bringing up VLAN interface ${interface}" - ifup "${interface}" - done < <(awk '/^auto vlan/ {print $2}' /etc/network/interfaces) - fi # toram -fi - -get_installer_path() { - if [ -z "$SP_VERSION" ] && ! $TRUNK_VERSION ; then - INSTALLER=ngcp-installer-latest.deb - - if "$PRO_EDITION" ; then - INSTALLER_PATH="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/sppro/" - else - INSTALLER_PATH="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/spce/" - fi - - return # we don't want to run any further code from this function - fi - - # use pool directory according for ngcp release - if "$PRO_EDITION" ; then - if "$CARRIER_EDITION" ; then - local installer_package='ngcp-installer-carrier' - else - local installer_package='ngcp-installer-pro' - fi - local repos_base_path="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/sppro/${SP_VERSION}/dists/${DEBIAN_RELEASE}/main/binary-amd64/" - INSTALLER_PATH="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/sppro/${SP_VERSION}/pool/main/n/ngcp-installer/" - else - local installer_package='ngcp-installer-ce' - local repos_base_path="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/spce/${SP_VERSION}/dists/${DEBIAN_RELEASE}/main/binary-amd64/" - INSTALLER_PATH="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/spce/${SP_VERSION}/pool/main/n/ngcp-installer/" - fi - - # use a separate repos for trunk releases - if $TRUNK_VERSION ; then - local repos_base_path="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/autobuild/dists/release-trunk-${DEBIAN_RELEASE}/main/binary-amd64/" - INSTALLER_PATH="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/autobuild/pool/main/n/ngcp-installer/" - fi - - if [ -n "$NGCP_PPA_INSTALLER" ] ; then - local repos_base_path="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/autobuild/dists/${NGCP_PPA_INSTALLER}/main/binary-amd64/" - INSTALLER_PATH="${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/autobuild/pool/main/n/ngcp-installer/" - fi - - wget --timeout=30 -O Packages.gz "${repos_base_path}Packages.gz" - # sed: display paragraphs matching the "Package: ..." string, then grab string "^Version: " and display the actual version via awk - # sort -u to avoid duplicates in repositories shipping the ngcp-installer-pro AND ngcp-installer-pro-ha-v3 debs - local version - version=$(zcat Packages.gz | sed "/./{H;\$!d;};x;/Package: ${installer_package}/b;d" | awk '/^Version: / {print $2}' | sort -u) - - [ -n "$version" ] || die "Error: installer version for ngcp ${SP_VERSION}, Debian release $DEBIAN_RELEASE with installer package $installer_package could not be detected." - - if "$CARRIER_EDITION" ; then - INSTALLER="ngcp-installer-carrier_${version}_all.deb" - elif "$PRO_EDITION" ; then - INSTALLER="ngcp-installer-pro_${version}_all.deb" - else - INSTALLER="ngcp-installer-ce_${version}_all.deb" - fi -} - -set_repos() { - cat > $TARGET/etc/apt/sources.list << EOF -# Please visit /etc/apt/sources.list.d/ instead. -EOF - - cat > $TARGET/etc/apt/sources.list.d/debian.list << EOF -## custom sources.list, deployed via deployment.sh - -# Debian repositories -deb ${MIRROR} ${DEBIAN_RELEASE} main contrib non-free -deb ${SEC_MIRROR} ${DEBIAN_RELEASE}-security main contrib non-free -deb ${MIRROR} ${DEBIAN_RELEASE}-updates main contrib non-free -EOF - - if [ "$DEBIAN_RELEASE" != "jessie" ] ; then - echo "deb ${DBG_MIRROR} ${DEBIAN_RELEASE}-debug main contrib non-free" >> "$TARGET/etc/apt/sources.list.d/debian.list" - fi - - # support testing rc releases without providing an according installer package ahead - if [ -n "$AUTOBUILD_RELEASE" ] ; then - echo "Running installer with sources.list for $DEBIAN_RELEASE + autobuild release-$AUTOBUILD_RELEASE" - - cat > $TARGET/etc/apt/sources.list.d/sipwise.list << EOF -## custom sources.list, deployed via deployment.sh - -# Sipwise repositories -deb [arch=amd64] ${SIPWISE_REPO_TRANSPORT}://${SIPWISE_REPO_HOST}/autobuild/release/release-${AUTOBUILD_RELEASE} release-${AUTOBUILD_RELEASE} main -EOF - fi -} - -get_network_devices () { - # get list of available network devices (excl. some known-to-be-irrelevant ones, also see MT#8297) - net_devices=$(tail -n +3 /proc/net/dev | awk -F: '{print $1}'| sed "s/\s*//" | grep -ve '^vmnet' -ve '^vboxnet' -ve '^docker' -ve '^usb' | sort -u) - - NETWORK_DEVICES="" - for network_device in $net_devices $DEFAULT_INSTALL_DEV $INTERNAL_DEV $EXTERNAL_DEV ; do - # avoid duplicates - echo "$NETWORK_DEVICES" | grep -wq "$network_device" || NETWORK_DEVICES="$NETWORK_DEVICES $network_device" - done - export NETWORK_DEVICES - unset net_devices -} - -gen_installer_config () { - mkdir -p "${TARGET}/etc/ngcp-installer/" - - # We are installing Carrier using DHCP but configure network.yml on static IPs - # as a result we cannot use "ip route show dev $DEFAULT_INSTALL_DEV" - if "$CARRIER_EDITION" ; then - if [ -n "$EXT_GW" ]; then - GW="$EXT_GW" - else - echo "Last resort, guesting gateway for external IP as first IP in EADDR" - GW=$(echo "$EADDR" | awk -F. '{print $1"."$2"."$3".1"}') - fi - else - GW="$(ip route show dev $DEFAULT_INSTALL_DEV | awk '/^default via/ {print $3}')" - fi - - if "$CARRIER_EDITION" ; then - cat > ${TARGET}/etc/ngcp-installer/config_deploy.inc << EOF -CROLE="${CROLE}" -FILL_APPROX_CACHE="${FILL_APPROX_CACHE}" -VLAN_BOOT_INT="${VLAN_BOOT_INT}" -VLAN_SSH_EXT="${VLAN_SSH_EXT}" -VLAN_WEB_EXT="${VLAN_WEB_EXT}" -VLAN_SIP_EXT="${VLAN_SIP_EXT}" -VLAN_SIP_INT="${VLAN_SIP_INT}" -VLAN_HA_INT="${VLAN_HA_INT}" -VLAN_RTP_EXT="${VLAN_RTP_EXT}" -EOF - fi - - if "$PRO_EDITION" ; then - get_network_devices - cat >> ${TARGET}/etc/ngcp-installer/config_deploy.inc << EOF -HNAME="${ROLE}" -IP1="${IP1}" -IP2="${IP2}" -IP_HA_SHARED="${IP_HA_SHARED}" -EIFACE="${EIFACE}" -EADDR="${EADDR}" -MCASTADDR="${MCASTADDR}" -DPL_MYSQL_REPLICATION="${DPL_MYSQL_REPLICATION}" -TARGET_HOSTNAME="${TARGET_HOSTNAME}" -DEFAULT_INSTALL_DEV="${DEFAULT_INSTALL_DEV}" -INTERNAL_DEV="${INTERNAL_DEV}" -GW="${GW}" -EXTERNAL_DEV="${EXTERNAL_DEV}" -NETWORK_DEVICES="${NETWORK_DEVICES}" -DEFAULT_INTERNAL_NETMASK="${DEFAULT_INTERNAL_NETMASK}" -# I would like to delete ${DEFAULT_INTERNAL_NETMASK} and use ${INTERNAL_NETMASK} into installer, -# Lets test we have INTERNAL_NETMASK==DEFAULT_INTERNAL_NETMASK for CE/PRO/Carrier (in installer) -# and switch code to INTERNAL_NETMASK then. -INTERNAL_NETMASK="${INTERNAL_NETMASK}" -EXTERNAL_NETMASK="${EXTERNAL_NETMASK}" -RETRIEVE_MGMT_CONFIG="${RETRIEVE_MGMT_CONFIG}" -MANAGEMENT_IP="${MANAGEMENT_IP}" -EOF - fi - - cat >> ${TARGET}/etc/ngcp-installer/config_deploy.inc << EOF -FORCE=yes -SKIP_SOURCES_LIST="${SKIP_SOURCES_LIST}" -ADJUST_FOR_LOW_PERFORMANCE="${ADJUST_FOR_LOW_PERFORMANCE}" -ENABLE_VM_SERVICES="${ENABLE_VM_SERVICES}" -SIPWISE_REPO_HOST="${SIPWISE_REPO_HOST}" -DEBIAN_REPO_TRANSPORT="${DEBIAN_REPO_TRANSPORT}" -SIPWISE_REPO_TRANSPORT="${SIPWISE_REPO_TRANSPORT}" -NAMESERVER="$(awk '/^nameserver/ {print $2}' /etc/resolv.conf)" -NGCP_PPA="${NGCP_PPA}" -DEBUG_MODE="${DEBUG_MODE}" -NGCP_INIT_SYSTEM="${NGCP_INIT_SYSTEM}" -EOF - - cat "${TARGET}/etc/ngcp-installer/config_deploy.inc" > /tmp/ngcp-installer-cmdline.log -} - -if "$NGCP_INSTALLER" ; then - # set INSTALLER_PATH and INSTALLER depending on release/version - get_installer_path - - # generate debian/sipwise repos - set_repos - - set_deploy_status "ngcp-installer" - - # install ngcp-installer - logit "ngcp-installer: $INSTALLER" - cat << EOT | grml-chroot $TARGET /bin/bash -wget ${INSTALLER_PATH}/${INSTALLER} -dpkg -i $INSTALLER -EOT - - # generate installer configs - gen_installer_config - - # generate ngcp-installer run script - cat > "${TARGET}/tmp/ngcp-installer-deployment.sh" << "EOT" -#!/bin/bash -echo "Running ngcp-installer via grml-chroot." | tee -a /tmp/ngcp-installer-debug.log -ngcp-installer 2>&1 | tee -a /tmp/ngcp-installer-debug.log -RC=${PIPESTATUS[0]} -if [ "${RC}" = "0" ] ; then - echo "OK, ngcp-installer finished with exit code '${RC}', continue netscript deployment." | tee -a /tmp/ngcp-installer-debug.log -else - echo "ERROR: Fatal error while running ngcp-installer (exit code '${RC}')!" | tee -a /tmp/ngcp-installer-debug.log >&2 - exit ${RC} -fi -EOT - - # execute ngcp-installer - if grml-chroot "${TARGET}" /bin/bash /tmp/ngcp-installer-deployment.sh ; then - logit "installer: success" - else - logit "installer: error" - die "Error during installation of ngcp. Find details at: ${TARGET}/tmp/ngcp-installer.log ${TARGET}/tmp/ngcp-installer-debug.log" - fi - - # upload db dump only if we're deploying a trunk version - if $TRUNK_VERSION && checkBootParam ngcpupload ; then - set_deploy_status "prepare_translations" - grml-chroot $TARGET apt-get -y install ngcp-dev-tools - if ! grml-chroot $TARGET ngcp-prepare-translations ; then - die "Error: Failed to prepare ngcp-panel translations. Exiting." - fi - set_deploy_status "ngcp-installer" - fi - - NGCP_SERVICES_FILE="${TARGET}/usr/share/ngcp-system-tools/ngcp.inc" - if ! [ -r "$NGCP_SERVICES_FILE" ]; then - die "Error: File $NGCP_SERVICES_FILE not found. Exiting." - fi - - # make sure services are stopped - . "$NGCP_SERVICES_FILE" - for service in ${HA_NGCP_SERVICES} ${NGCP_SERVICES} ${NON_NGCP_SERVICES} ; do - if [ -f "${TARGET}/etc/init.d/${service}" ] ; then - echo "Stopping ${service} ..." - grml-chroot ${TARGET} "/etc/init.d/${service}" stop || true - fi - done - - # nuke files - find "${TARGET}/var/log" -type f -size +0 -not -name \*.ini -exec sh -c ":> \${1}" sh {} \; - :>$TARGET/var/run/utmp - :>$TARGET/var/run/wtmp - - # make a backup of the installer logfiles for later investigation - if [ -r "${TARGET}"/tmp/ngcp-installer.log ] ; then - cp "${TARGET}"/tmp/ngcp-installer.log "${TARGET}"/var/log/ - fi - if [ -r "${TARGET}"/tmp/ngcp-installer-debug.log ] ; then - cp "${TARGET}"/tmp/ngcp-installer-debug.log "${TARGET}"/var/log/ - fi - if [ -r /tmp/grml-debootstrap.log ] ; then - cp /tmp/grml-debootstrap.log "${TARGET}"/var/log/ - fi - - { - echo "# deployment.sh running on $(date)" - echo "SCRIPT_VERSION=${SCRIPT_VERSION}" - echo "CMD_LINE=\"${CMD_LINE}\"" - echo "NGCP_INSTALLER_CMDLINE=\"TRUNK_VERSION=$TRUNK_VERSION SKIP_SOURCES_LIST=$SKIP_SOURCES_LIST ngcp-installer $ROLE $IP1 $IP2 $EADDR $EIFACE $IP_HA_SHARED\"" - } > "${TARGET}"/var/log/deployment.log - -fi - -case "$DEBIAN_RELEASE" in - stretch) - set_custom_grub_boot_options - ;; -esac - -if "$CARRIER_EDITION" ; then - echo "Nothing to do on Carrier, /etc/network/interfaces was already set up." -elif ! "$NGCP_INSTALLER" ; then - echo "Not modifying /etc/network/interfaces as installing plain Debian." -elif "$DHCP" ; then - cat > $TARGET/etc/network/interfaces << EOF -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). -# The loopback network interface -auto lo -iface lo inet loopback - -# The primary network interface -auto $EXTERNAL_DEV -iface $EXTERNAL_DEV inet dhcp -EOF - # make sure internal network is available even with external - # device using DHCP - if "$PRO_EDITION" ; then - cat >> $TARGET/etc/network/interfaces << EOF - -auto $INTERNAL_DEV -iface $INTERNAL_DEV inet static - address $INTERNAL_IP - netmask $INTERNAL_NETMASK - -EOF - fi -else - # assume host system has a valid configuration - if "$PRO_EDITION" && "$VLAN" ; then - cat > $TARGET/etc/network/interfaces << EOF -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). -# The loopback network interface -auto lo -iface lo inet loopback - -auto vlan${VLANID} -iface vlan${VLANID} inet static - address $(ifdata -pa $EXTERNAL_DEV) - netmask $(ifdata -pn $EXTERNAL_DEV) - gateway $(route -n | awk '/^0\.0\.0\.0/{print $2; exit}') - dns-nameservers $(awk '/^nameserver/ {print $2}' /etc/resolv.conf | xargs echo -n) - vlan-raw-device $VLANIF - -auto $INTERNAL_DEV -iface $INTERNAL_DEV inet static - address $INTERNAL_IP - netmask $INTERNAL_NETMASK - -# Example: -# allow-hotplug eth0 -# iface eth0 inet static -# address 192.168.1.101 -# netmask 255.255.255.0 -# network 192.168.1.0 -# broadcast 192.168.1.255 -# gateway 192.168.1.1 -# # dns-* options are implemented by the resolvconf package, if installed -# dns-nameservers 195.58.160.194 195.58.161.122 -# dns-search sipwise.com -EOF - elif "$PRO_EDITION" && "$BONDING" ; then - cat > $TARGET/etc/network/interfaces << EOF -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). -# The loopback network interface -auto lo -iface lo inet loopback - -auto bond0 -iface bond0 inet static - bond-slaves $EXTERNAL_DEV $INTERNAL_DEV - bond_mode 802.3ad - bond_miimon 100 - bond_lacp_rate 1 - address $(ifdata -pa $EXTERNAL_DEV) - netmask $(ifdata -pn $EXTERNAL_DEV) - gateway $(route -n | awk '/^0\.0\.0\.0/{print $2; exit}') - dns-nameservers $(awk '/^nameserver/ {print $2}' /etc/resolv.conf | xargs echo -n) - -# additional possible bonding mode -# auto bond0 -# iface bond0 inet manual -# bond-slaves eth0 eth1 -# bond_mode active-backup -# bond_miimon 100 - -# Example: -# allow-hotplug eth0 -# iface eth0 inet static -# address 192.168.1.101 -# netmask 255.255.255.0 -# network 192.168.1.0 -# broadcast 192.168.1.255 -# gateway 192.168.1.1 -# # dns-* options are implemented by the resolvconf package, if installed -# dns-nameservers 195.58.160.194 195.58.161.122 -# dns-search sipwise.com -EOF - elif "$PRO_EDITION" ; then # no bonding but pro-edition - cat > $TARGET/etc/network/interfaces << EOF -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). -# The loopback network interface -auto lo -iface lo inet loopback - -auto $EXTERNAL_DEV -iface $EXTERNAL_DEV inet static - address $(ifdata -pa $EXTERNAL_DEV) - netmask $(ifdata -pn $EXTERNAL_DEV) - gateway $(route -n | awk '/^0\.0\.0\.0/{print $2; exit}') - dns-nameservers $(awk '/^nameserver/ {print $2}' /etc/resolv.conf | xargs echo -n) - -auto $INTERNAL_DEV -iface $INTERNAL_DEV inet static - address $INTERNAL_IP - netmask $INTERNAL_NETMASK - -# Example: -# allow-hotplug eth0 -# iface eth0 inet static -# address 192.168.1.101 -# netmask 255.255.255.0 -# network 192.168.1.0 -# broadcast 192.168.1.255 -# gateway 192.168.1.1 -# # dns-* options are implemented by the resolvconf package, if installed -# dns-nameservers 195.58.160.194 195.58.161.122 -# dns-search sipwise.com -EOF - else # ce edition - cat > $TARGET/etc/network/interfaces << EOF -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). -# The loopback network interface -auto lo -iface lo inet loopback - -auto $EXTERNAL_DEV -iface $EXTERNAL_DEV inet static - address $(ifdata -pa $EXTERNAL_DEV) - netmask $(ifdata -pn $EXTERNAL_DEV) - gateway $(route -n | awk '/^0\.0\.0\.0/{print $2; exit}') - dns-nameservers $(awk '/^nameserver/ {print $2}' /etc/resolv.conf | xargs echo -n) - -### Further usage examples - -## Enable IPv6 autoconfiguration: -# auto eth1 -# iface eth1 inet6 manual -# up ifconfig eth1 up - -## Specific manual configuration: -# allow-hotplug eth2 -# iface eth2 inet static -# address 192.168.1.101 -# netmask 255.255.255.0 -# network 192.168.1.0 -# broadcast 192.168.1.255 -# gateway 192.168.1.1 -# # dns-* options are implemented by the resolvconf package, if installed -# dns-nameservers 195.58.160.194 195.58.161.122 -# dns-search sipwise.com -EOF - fi -fi # if $DHCP - -generate_etc_hosts() { - - # finalise hostname configuration - cat > $TARGET/etc/hosts << EOF -127.0.0.1 localhost - -# The following lines are desirable for IPv6 capable hosts -::1 ip6-localhost ip6-loopback -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters - -EOF - - # append hostnames of sp1/sp2 so they can talk to each other - # in the HA setup - if "$PRO_EDITION" ; then - cat >> $TARGET/etc/hosts << EOF -$IP1 sp1 -$IP2 sp2 -$IP_HA_SHARED sp -EOF - else - # otherwise 'hostname --fqdn' does not work and causes delays with exim4 startup - cat >> $TARGET/etc/hosts << EOF -# required for FQDN, please adjust if needed -127.0.0.2 $TARGET_HOSTNAME. $TARGET_HOSTNAME -EOF - fi - -} - -fake_uname() { - cat > "${TARGET}/tmp/uname.c" << EOF -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef UTS_RELEASE -#define UTS_RELEASE "0.0.0" -#endif - -#ifndef RTLD_NEXT -#define RTLD_NEXT ((void *) -1l) -#endif - -typedef int (*uname_t) (struct utsname * buf); - -static void *get_libc_func(const char *funcname) -{ - void *func; - char *error; - - func = dlsym(RTLD_NEXT, funcname); - if ((error = dlerror()) != NULL) { - fprintf(stderr, "Can't locate libc function \`%s' error: %s", funcname, error); - _exit(EXIT_FAILURE); - } - return func; -} - -int uname(struct utsname *buf) -{ - int ret; - char *env = NULL; - uname_t real_uname = (uname_t) get_libc_func("uname"); - - ret = real_uname((struct utsname *) buf); - strncpy(buf->release, ((env = getenv("UTS_RELEASE")) == NULL) ? UTS_RELEASE : env, 65); - return ret; -} -EOF - - grml-chroot "$TARGET" gcc -shared -fPIC -ldl /tmp/uname.c -o /tmp/fake-uname.so || die 'Failed to build fake-uname.so' - - # avoid "ERROR: ld.so: object '/tmp/fake-uname.so' from LD_PRELOAD cannot be preloaded: ignored." - # messages caused by the host system when running grml-chroot process - cp "$TARGET"/tmp/fake-uname.so /tmp/fake-uname.so -} - -vagrant_configuration() { - # bzip2, linux-headers-amd64 and make are required for VirtualBox Guest Additions installer - # less + sudo are required for Vagrant itself - echo "Installing software for VirtualBox Guest Additions installer" - # there's no linux-headers-amd64 package in squeeze: - case "$DEBIAN_RELEASE" in - squeeze) local linux_headers_package="linux-headers-2.6-amd64" ;; - *) local linux_headers_package="linux-headers-amd64" ;; - esac - if ! chroot "$TARGET" apt-get -y install bzip2 less ${linux_headers_package} make sudo ; then - die "Error: failed to install 'bzip2 less ${linux_headers_package} make sudo' packages." - fi - - vagrant_ssh_pub_key='/var/tmp/id_rsa_sipwise.pub' - echo "Checking out ngcp-vmbuilder git repository" - if ! wget -O "${vagrant_ssh_pub_key}" http://builder.mgm.sipwise.com/vagrant-ngcp/id_rsa_sipwise.pub ; then - die "Error: failed to wget public Sipwise SSH key for Vagrant boxes" - fi - - if "$NGCP_INSTALLER" ; then - SIPWISE_HOME="/var/sipwise" - - # TODO: move PATH adjustment to ngcp-installer (ngcpcfg should have a template here) - if ! grep -q '^# Added for Vagrant' "${TARGET}/${SIPWISE_HOME}/.profile" 2>/dev/null ; then - echo "Adjusting PATH configuration for user Sipwise" - echo "# Added for Vagrant" >> "${TARGET}/${SIPWISE_HOME}/.profile" - echo "PATH=\$PATH:/sbin:/usr/sbin" >> "${TARGET}/${SIPWISE_HOME}/.profile" - fi - - echo "Adjusting ssh configuration for user sipwise (add Vagrant SSH key)" - mkdir -p "${TARGET}/${SIPWISE_HOME}/.ssh/" - cat "${vagrant_ssh_pub_key}" >> "${TARGET}/${SIPWISE_HOME}/.ssh/sipwise_vagrant_key" - chroot "${TARGET}" chown sipwise:sipwise "${SIPWISE_HOME}/.ssh" "${SIPWISE_HOME}/.ssh/sipwise_vagrant_key" - chroot "${TARGET}" chmod 0600 "${SIPWISE_HOME}/.ssh/sipwise_vagrant_key" - fi - - echo "Adjusting ssh configuration for user root" - mkdir -p "${TARGET}/root/.ssh/" - cat "${vagrant_ssh_pub_key}" >> "${TARGET}/root/.ssh/sipwise_vagrant_key" - chroot "${TARGET}" chmod 0600 /root/.ssh/sipwise_vagrant_key - case "${DEBIAN_RELEASE}" in - squeeze) - sed -i 's|^[#\s]*AuthorizedKeysFile.*$|AuthorizedKeysFile %h/.ssh/sipwise_vagrant_key|g' "${TARGET}/etc/ssh/sshd_config" - ;; - *) - sed -i 's|^[#\s]*\(AuthorizedKeysFile.*\)$|\1 %h/.ssh/sipwise_vagrant_key|g' "${TARGET}/etc/ssh/sshd_config" - ;; - esac - - # see https://github.com/mitchellh/vagrant/issues/1673 - # and https://bugs.launchpad.net/ubuntu/+source/xen-3.1/+bug/1167281 - if ! grep -q 'adjusted for Vagrant' "${TARGET}/root/.profile" ; then - echo "Adding workaround for annoying bug 'stdin: is not a tty' Vagrant message" - sed -ri -e "s/mesg\s+n/# adjusted for Vagrant\ntty -s \&\& mesg n/" "${TARGET}/root/.profile" - fi - - install_vbox_iso - - # required for fake_uname and VBoxLinuxAdditions.run - grml-chroot $TARGET apt-get -y install libc6-dev gcc - fake_uname - - # shellcheck disable=SC2010 - KERNELHEADERS=$(basename "$(ls -d ${TARGET}/usr/src/linux-headers*amd64 | grep -v -- -rt-amd64 | sort -u -r -V | head -1)") - if [ -z "$KERNELHEADERS" ] ; then - die "Error: no kernel headers found for building the VirtualBox Guest Additions kernel module." - fi - KERNELVERSION=${KERNELHEADERS##linux-headers-} - if [ -z "$KERNELVERSION" ] ; then - die "Error: no kernel version could be identified." - fi - - if [ ! -r "$vbox_isofile" ] ; then - die "Error: could not find $vbox_isofile" - fi - - mkdir -p "${TARGET}/media/cdrom" - mountpoint "${TARGET}/media/cdrom" >/dev/null && umount "${TARGET}/media/cdrom" - mount -t iso9660 "${vbox_isofile}" "${TARGET}/media/cdrom/" - UTS_RELEASE=$KERNELVERSION LD_PRELOAD=/tmp/fake-uname.so grml-chroot "$TARGET" /media/cdrom/VBoxLinuxAdditions.run --nox11 - tail -10 "${TARGET}/var/log/VBoxGuestAdditions.log" - umount "${TARGET}/media/cdrom/" - - # work around regression in virtualbox-guest-additions-iso 4.3.10 - if [ -d ${TARGET}/opt/VBoxGuestAdditions-4.3.10 ] ; then - echo "Installing VBoxGuestAddition symlink to work around vbox 4.3.10 issue" - ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions ${TARGET}/usr/lib/VBoxGuestAdditions - fi - - # VBoxLinuxAdditions.run chooses /usr/lib64 as soon as this directory exists, which - # is the case for our PRO systems shipping the heartbeat-2 package; then the - # symlink /sbin/mount.vboxsf points to the non-existing /usr/lib64/VBoxGuestAdditions/mount.vboxsf - # file instead of pointing to /usr/lib/x86_64-linux-gnu/VBoxGuestAdditions/mount.vboxsf - if ! chroot "$TARGET" readlink -f /sbin/mount.vboxsf ; then - echo "Installing mount.vboxsf symlink to work around /usr/lib64 issue" - ln -sf /usr/lib/x86_64-linux-gnu/VBoxGuestAdditions/mount.vboxsf ${TARGET}/sbin/mount.vboxsf - fi - - # MACs are different on buildbox and on local VirtualBox - # see http://ablecoder.com/b/2012/04/09/vagrant-broken-networking-when-packaging-ubuntu-boxes/ - echo "Removing /etc/udev/rules.d/70-persistent-net.rules" - rm -f "${TARGET}/etc/udev/rules.d/70-persistent-net.rules" - - if [ -d "${TARGET}/etc/.git" ]; then - echo "Commit /etc/* changes using etckeeper" - chroot "$TARGET" etckeeper commit "Vagrant/VirtualBox changes on /etc/*" - fi -} - -if "$CARRIER_EDITION" ; then - echo "Nothing to do on Carrier, /etc/hosts was already set up." -else - echo "Generating /etc/hosts" - generate_etc_hosts -fi - -if "$VAGRANT" ; then - echo "Bootoption vagrant present, executing vagrant_configuration." - vagrant_configuration -fi - -if [ -n "$PUPPET" ] ; then - -check_puppet_rc () { - local _puppet_rc="$1" - local _expected_rc="$2" - - if [ "${_puppet_rc}" != "${_expected_rc}" ] ; then - # an exit code of '0' happens for 'puppet agent --enable' only, - # an exit code of '2' means there were changes, - # an exit code of '4' means there were failures during the transaction, - # an exit code of '6' means there were both changes and failures. - set_deploy_status "error" - fi -} - -check_puppet_rerun() { - local repeat=1 - - if ! checkBootParam nopuppetrepeat && [ "$(get_deploy_status)" = "error" ] ; then - echo "Do you want to [r]epeat puppet run or [c]ontinue?" - while true; do - read a - case "${a,,}" in - r) - echo "Repeating puppet run." - repeat=0 - set_deploy_status "puppet" - break - ;; - c) - echo "Continue without repeating puppet run." - set_deploy_status "puppet" - break - ;; - * ) echo -n "Please answer 'r' to repeat or 'c' to continue: " ;; - esac - unset a - done - fi - - return "${repeat}" -} - -check_puppetserver_time() { - while true; do - offset=$(ntpdate -q "$PUPPET_SERVER" | sed -n '1s/.*offset \(.*\),.*/\1/p' | tr -d -) - seconds=${offset%.*} - if (( seconds < 10 )) ; then - echo "All OK. Time offset between $PUPPET_SERVER and current server is $seconds seconds only." - break - elif checkBootParam nopuppetrepeat ; then - echo "WARNING: time offset between $PUPPET_SERVER and current server is $seconds seconds." - echo "(ignoring due to boot option nopuppetrepeat)" - break - else - echo "WARNING: time difference between the current server and $PUPPET_SERVER is ${seconds} seconds (bigger than 10 seconds)." - echo "Please synchronize time and press any key to recheck or [c]ontinue with puppet run." - read a - case "${a,,}" in - c) - echo "Continue ignoring time offset check." - break - ;; - * ) echo -n "Rechecking the offset..." ;; - esac - unset a - fi - done -} - -puppet_install_from_git () { - local repeat - - : "${PUPPET_GIT_REPO?ERROR: variable 'PUPPET_GIT_REPO' is NOT defined, cannot continue.}" - : "${PUPPET_LOCAL_GIT?ERROR: variable 'PUPPET_LOCAL_GIT' is NOT defined, cannot continue.}" - : "${PUPPET_GIT_BRANCH?ERROR: variable 'PUPPET_GIT_BRANCH' is NOT defined, cannot continue.}" - - echo "Searching for Hiera rescue device by label '${PUPPET_RESCUE_LABEL}'..." - local PUPPET_RESCUE_DRIVE - PUPPET_RESCUE_DRIVE=$(blkid | grep -E "LABEL=\"${PUPPET_RESCUE_LABEL}" | head -1 | awk -F: '{print $1}') - - if [ -n "${PUPPET_RESCUE_DRIVE}" ] ; then - echo "Found Hiera rescue device: '${PUPPET_RESCUE_DRIVE}'" - else - die "ERROR: No USB device found matching label '${PUPPET_RESCUE_LABEL}', cannot continue!" - fi - - echo "Searching for Hiera rescue device type..." - local DEVICE_TYPE - DEVICE_TYPE=$(blkid | grep -E "LABEL=\"${PUPPET_RESCUE_LABEL}" | head -1 | sed 's/.*TYPE="\(.*\)".*/\1/') - - if [ -n "${DEVICE_TYPE}" ] ; then - echo "Hiera rescue device type is:'${DEVICE_TYPE}'" - else - die "ERROR: Cannot detect device type for device '${PUPPET_RESCUE_LABEL}', cannot continue!" - fi - - echo "Copying data from device '${PUPPET_RESCUE_DRIVE}' (mounted into '${PUPPET_RESCUE_PATH}', type '${DEVICE_TYPE}')" - mkdir -p "${PUPPET_RESCUE_PATH}" - mount -t "${DEVICE_TYPE}" -o ro "${PUPPET_RESCUE_DRIVE}" "${PUPPET_RESCUE_PATH}" - mkdir -m 0700 -p "${TARGET}/etc/puppetlabs/code/hieradata/" - cp -a "${PUPPET_RESCUE_PATH}"/hieradata/* "${TARGET}/etc/puppetlabs/code/hieradata/" - mkdir -p ~/.ssh - cp "${PUPPET_RESCUE_PATH}"/hieradata/defaults.d/id_rsa_r10k ~/.ssh/ - chmod 600 ~/.ssh/id_rsa_r10k - umount -f "${PUPPET_RESCUE_PATH}" - rmdir "${PUPPET_RESCUE_PATH}" - - echo "Cloning Puppet git repository from '${PUPPET_GIT_REPO}' to '${PUPPET_LOCAL_GIT}' (branch '${PUPPET_GIT_BRANCH}')" - echo 'ssh -i ~/.ssh/id_rsa_r10k -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh - chmod +x ssh - if ! GIT_SSH="${PWD}/ssh" git clone --depth 1 -b "${PUPPET_GIT_BRANCH}" "${PUPPET_GIT_REPO}" "${PUPPET_LOCAL_GIT}" ; then - die "ERROR: Cannot clone git repository, see the error above, cannot continue!" - fi - rm "${PWD}/ssh" - - local PUPPET_CODE_PATH - PUPPET_CODE_PATH="/etc/puppetlabs/code/environments/${PUPPET}" - - echo "Creating empty Puppet environment ${TARGET}/${PUPPET_CODE_PATH}" - mkdir -m 0755 -p "${TARGET}/${PUPPET_CODE_PATH}" - - echo "Deploying Puppet code from Git repository to ${TARGET}/${PUPPET_CODE_PATH}" - cp -a "${PUPPET_LOCAL_GIT}"/* "${TARGET}/${PUPPET_CODE_PATH}" - rm -rf "${PUPPET_LOCAL_GIT:?}" - - repeat=true - while $repeat ; do - repeat=false - echo "Initializing Hiera config..." - grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" \ - -e "include puppet::hiera" 2>&1 | tee -a /tmp/puppet.log - check_puppet_rc "${PIPESTATUS[0]}" "2" - check_puppet_rerun && repeat=true - done - - repeat=true - while $repeat ; do - repeat=false - echo "Running Puppet core deployment..." - grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" --tags core,apt \ - "${PUPPET_CODE_PATH}/manifests/site.pp" 2>&1 | tee -a /tmp/puppet.log - check_puppet_rc "${PIPESTATUS[0]}" "2" - check_puppet_rerun && repeat=true - done - - repeat=true - while $repeat ; do - repeat=false - echo "Running Puppet main deployment..." - grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" \ - "${PUPPET_CODE_PATH}/manifests/site.pp" 2>&1 | tee -a /tmp/puppet.log - check_puppet_rc "${PIPESTATUS[0]}" "2" - check_puppet_rerun && repeat=true - done -} - -puppet_install_from_puppet () { - local repeat - - check_puppetserver_time - - repeat=true - while $repeat ; do - repeat=false - echo "Running Puppet core deployment..." - grml-chroot $TARGET puppet agent --test --tags core,apt 2>&1 | tee -a /tmp/puppet.log - check_puppet_rc "${PIPESTATUS[0]}" "2" - check_puppet_rerun && repeat=true - done - - repeat=true - while $repeat ; do - repeat=false - echo "Running Puppet main deployment..." - grml-chroot $TARGET puppet agent --test 2>&1 | tee -a /tmp/puppet.log - check_puppet_rc "${PIPESTATUS[0]}" "2" - check_puppet_rerun && repeat=true - done -} - - set_deploy_status "puppet" - - echo "Rebuilding /etc/hosts" - cat > $TARGET/etc/hosts << EOF -# Generated via deployment.sh -127.0.0.1 localhost - -# The following lines are desirable for IPv6 capable hosts -::1 ip6-localhost ip6-loopback -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters - -EOF - - echo "Setting hostname to $TARGET_HOSTNAME" - echo "$TARGET_HOSTNAME" > ${TARGET}/etc/hostname - grml-chroot $TARGET hostname -F /etc/hostname - - chroot $TARGET apt-get -y install resolvconf libnss-myhostname - - if [ "$DEBIAN_RELEASE" = "stretch" ] && [ ! -x "${TARGET}/usr/bin/dirmngr" ] ; then - echo "Installing dirmngr on Debian Stretch otherwise 'apt-key adv --recv-keys' is failing to fetch GPG key" - chroot $TARGET apt-get -y install dirmngr - fi - - echo "Installing 'puppet-agent' with dependencies" - cat >> ${TARGET}/etc/apt/sources.list.d/puppetlabs.list << EOF -deb ${DEBIAN_REPO_TRANSPORT}://${DEBIAN_REPO_HOST}/puppetlabs/ ${DEBIAN_RELEASE} main puppet dependencies -EOF - - PUPPET_GPG_KEY="6F6B15509CF8E59E6E469F327F438280EF8D349F" - - TRY=60 - while ! chroot ${TARGET} apt-key adv --recv-keys --keyserver "${GPG_KEY_SERVER}" "${PUPPET_GPG_KEY}" ; do - if [ ${TRY} -gt 0 ] ; then - TRY=$((TRY-5)) - echo "Waiting for gpg keyserver '${GPG_KEY_SERVER}' availability ($TRY seconds)..." - sleep 5 - else - die "Failed to fetch GPG key '${PUPPET_GPG_KEY}' from '${GPG_KEY_SERVER}'" - fi - done - - chroot ${TARGET} apt-get update - chroot ${TARGET} apt-get -y install puppet-agent openssh-server lsb-release ntpdate - - if [ "$DEBIAN_RELEASE" = "stretch" ]; then - chroot ${TARGET} ln -s /proc/self/mounts /etc/mtab || true - fi - - cat > ${TARGET}/etc/puppetlabs/puppet/puppet.conf<< EOF -# This file has been created by deployment.sh -[main] -server=${PUPPET_SERVER} -environment=${PUPPET} -EOF - - if [ -f "${TARGET}/etc/profile.d/puppet-agent.sh" ] ; then - echo "Exporting Puppet 4 new PATH (otherwise /opt/puppetlabs/bin/puppet is not found)" - source "${TARGET}/etc/profile.d/puppet-agent.sh" - fi - - if [ -n "${PUPPET_GIT_REPO}" ] ; then - echo "Installing from Puppet Git repository using 'puppet apply'" - puppet_install_from_git - else - echo "Installing from Puppet server '${PUPPET_SERVER}' using 'puppet agent'" - puppet_install_from_puppet - fi - -fi # if [ -n "$PUPPET" ] ; then - -# make sure we don't leave any running processes -for i in asterisk atd collectd collectdmon dbus-daemon exim4 \ - glusterd glusterfs glusterfsd glusterfs-server haveged monit nscd \ - redis-server snmpd voisniff-ng ; do - killall -9 $i >/dev/null 2>&1 || true -done - -# remove retrieved and generated files -rm -f ${TARGET}/config_*yml -rm -f ${TARGET}/constants_*.yml -rm -f ${TARGET}/ngcp-installer*deb - -if [ -r "${INSTALL_LOG}" ] && [ -d "${TARGET}"/var/log/ ] ; then - cp "${INSTALL_LOG}" "${TARGET}"/var/log/ -fi - -# don't leave any mountpoints -sync -umount ${TARGET}/proc 2>/dev/null || true -umount ${TARGET}/sys 2>/dev/null || true -umount ${TARGET}/dev/pts 2>/dev/null || true -umount ${TARGET}/dev 2>/dev/null || true -chroot ${TARGET} umount -a 2>/dev/null || true -sync - -# unmount chroot - what else? -umount $TARGET || umount -l $TARGET # fall back if a process is still being active - -if "$LVM" ; then - # make sure no device mapper handles are open, otherwise - # rereading partition table won't work - dmsetup remove_all || true -fi - -# make sure /etc/fstab is up2date -if ! blockdev --rereadpt "/dev/${DISK}" ; then - echo "Something on disk /dev/${DISK} (mountpoint $TARGET) seems to be still active, debugging output follows:" - ps auxwww || true -fi - -# party time! who brings the whiskey? -echo "Installation finished. \o/" -echo -echo - -[ -n "$start_seconds" ] && SECONDS="$(( $(cut -d . -f 1 /proc/uptime) - start_seconds))" || SECONDS="unknown" -logit "Successfully finished deployment process [$(date) - running ${SECONDS} seconds]" -echo "Successfully finished deployment process [$(date) - running ${SECONDS} seconds]" - -if [ "$(get_deploy_status)" != "error" ] ; then - set_deploy_status "finished" -fi - -# if ngcpstatus boot option is used wait for a specific so a -# remote host has a chance to check for deploy status "finished", -# defaults to 0 seconds otherwise -sleep "$STATUS_WAIT" - -if "$INTERACTIVE" ; then - exit 0 -fi - -# do not prompt when running in automated mode -if "$REBOOT" ; then - echo "Rebooting system as requested via ngcpreboot" - for key in s u b ; do - echo $key > /proc/sysrq-trigger - sleep 2 - done -fi - -if "$HALT" ; then - echo "Halting system as requested via ngcphalt" - - for key in s u o ; do - echo $key > /proc/sysrq-trigger - sleep 2 - done -fi - -echo "Do you want to [r]eboot or [h]alt the system now? (Press any other key to cancel.)" -unset a -read a -case "$a" in - r) - echo "Rebooting system as requested." - # reboot is for losers - for key in s u b ; do - echo $key > /proc/sysrq-trigger - sleep 2 - done - ;; - h) - echo "Halting system as requested." - # halt(8) is for losers - for key in s u o ; do - echo $key > /proc/sysrq-trigger - sleep 2 - done - ;; - *) - echo "Not halting system as requested. Please do not forget to reboot." - ;; -esac - -## END OF FILE #################################################################1 diff --git a/t/Dockerfile b/t/Dockerfile deleted file mode 100644 index c11bfea..0000000 --- a/t/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -# DOCKER_NAME=netscript-stretch -FROM docker.mgm.sipwise.com/sipwise-stretch:latest - -# Important! Update this no-op ENV variable when this Dockerfile -# is updated with the current date. It will force refresh of all -# of the base images and things like `apt-get update` won't be using -# old cached versions when the Dockerfile is built. -ENV REFRESHED_AT 2018-01-22 - -RUN apt-get update && apt-get install --assume-yes git make - -RUN echo './t/testrunner' >>/root/.bash_history - -WORKDIR /code/ - -################################################################################ -# Instructions for usage -# ---------------------- -# When you want to build the base image from scratch -# jump to the next section if you don't want to build yourself!: -# -# % docker build --tag="lua-ngcp-kamailio-stretch" -f t/Dockerfile . -# % docker run --rm -i -t -v $(pwd):/code:rw lua-ngcp-kamailio-stretch:latest bash -# -# Use the existing docker image: -# % docker pull docker.mgm.sipwise.com/lua-ngcp-kamailio-stretch -# NOTE: run the following command from root folder of git repository: -# % docker run --rm -i -t -v $(pwd):/code:rw docker.mgm.sipwise.com/lua-ngcp-kamailio-stretch:latest bash -# -# Inside docker (the command is in history, just press UP button): -# ./t/testrunner -# -################################################################################ diff --git a/t/testrunner b/t/testrunner deleted file mode 100755 index 981e1c7..0000000 --- a/t/testrunner +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -# This script is used for running the tests with proper arguments -# from within Jenkins - -set -e -set -u - -if [ -d /results ] ; then - # Running from Jenkins (RW) - RESULTS="/results" - - cd "/code" -else - # Running locally in Docker - RESULTS="./results" - mkdir -p "${RESULTS}" -fi - -make -make syntaxcheck -make script_version