aboutsummaryrefslogtreecommitdiffstats
path: root/boot/so_install.sh
blob: d9a8a6468789b2b740dc703f26cc95303b61254a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash

# Read configuration files
NEXUS_REPO=$(cat /opt/config/nexus_repo.txt)
ARTIFACTS_VERSION=$(cat /opt/config/artifacts_version.txt)
DNS_IP_ADDR=$(cat /opt/config/dns_ip_addr.txt)
CLOUD_ENV=$(cat /opt/config/cloud_env.txt)
OPENSTACK_API_KEY=$(cat /opt/config/openstack_api_key.txt)
GERRIT_BRANCH=$(cat /opt/config/gerrit_branch.txt)
MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1)
CODE_REPO=$(cat /opt/config/remote_repo.txt)

# Add host name to /etc/host to avoid warnings in openstack images
if [[ $CLOUD_ENV != "rackspace" ]]
then
	echo 127.0.0.1 $(hostname) >> /etc/hosts

	# Allow remote login as root
	mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk
	cp /home/ubuntu/.ssh/authorized_keys /root/.ssh
fi

# Set private IP in /etc/network/interfaces manually in the presence of public interface
# Some VM images don't add the private interface automatically, we have to do it during the component installation
if [[ $CLOUD_ENV == "openstack_nofloat" ]]
then
	LOCAL_IP=$(cat /opt/config/local_ip_addr.txt)
	CIDR=$(cat /opt/config/oam_network_cidr.txt)
	BITMASK=$(echo $CIDR | cut -d"/" -f2)

	# Compute the netmask based on the network cidr
	if [[ $BITMASK == "8" ]]
	then
		NETMASK=255.0.0.0
	elif [[ $BITMASK == "16" ]]
	then
		NETMASK=255.255.0.0
	elif [[ $BITMASK == "24" ]]
	then
		NETMASK=255.255.255.0
	fi

	echo "auto eth1" >> /etc/network/interfaces
	echo "iface eth1 inet static" >> /etc/network/interfaces
	echo "    address $LOCAL_IP" >> /etc/network/interfaces
	echo "    netmask $NETMASK" >> /etc/network/interfaces
	echo "    mtu $MTU" >> /etc/network/interfaces
	ifup eth1
fi

# Download dependencies
echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >>  /etc/apt/sources.list.d/java.list
echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >>  /etc/apt/sources.list.d/java.list
apt-get update
apt-get install --allow-unauthenticated -y apt-transport-https ca-certificates wget openjdk-8-jdk git ntp ntpdate make

# Download scripts from Nexus
curl -k $NEXUS_REPO/org.onap.demo/boot/$ARTIFACTS_VERSION/so_vm_init.sh -o /opt/so_vm_init.sh
curl -k $NEXUS_REPO/org.onap.demo/boot/$ARTIFACTS_VERSION/so_serv.sh -o /opt/so_serv.sh
chmod +x /opt/so_vm_init.sh
chmod +x /opt/so_serv.sh
mv /opt/so_serv.sh /etc/init.d
update-rc.d so_serv.sh defaults

# Download and install docker-engine and docker-compose
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install -y linux-image-extra-$(uname -r) linux-image-extra-virtual
apt-get install -y --allow-unauthenticated docker-engine

mkdir /opt/docker
curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /opt/docker/docker-compose
chmod +x /opt/docker/docker-compose

# Set the MTU size of docker containers to the minimum MTU size supported by vNICs. OpenStack deployments may need to know the external DNS IP
DNS_FLAG=""
if [ -s /opt/config/dns_ip_addr.txt ]
then
	DNS_FLAG=$DNS_FLAG"--dns $(cat /opt/config/dns_ip_addr.txt) "
fi
if [ -s /opt/config/external_dns.txt ]
then
	DNS_FLAG=$DNS_FLAG"--dns $(cat /opt/config/external_dns.txt) "
fi
echo "DOCKER_OPTS=\"$DNS_FLAG--mtu=$MTU\"" >> /etc/default/docker

cp /lib/systemd/system/docker.service /etc/systemd/system
sed -i "/ExecStart/s/$/ --mtu=$MTU/g" /etc/systemd/system/docker.service
service docker restart

# DNS IP address configuration
echo "nameserver "$DNS_IP_ADDR >> /etc/resolvconf/resolv.conf.d/head
resolvconf -u

# Clone Gerrit repository
cd /opt
git clone -b $GERRIT_BRANCH --single-branch $CODE_REPO test_lab
SO_ENCRYPTION_KEY=$(cat /opt/test_lab/encryption.key)
echo -n "$OPENSTACK_API_KEY" | openssl aes-128-ecb -e -K $SO_ENCRYPTION_KEY -nosalt | xxd -c 256 -p > /opt/config/api_key.txt

# Rename network interface in openstack Ubuntu 16.04 images. Then, reboot the VM to pick up changes
if [[ $CLOUD_ENV != "rackspace" ]]
then
	sed -i "s/GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX=\"net.ifnames=0 biosdevname=0\"/g" /etc/default/grub
	grub-mkconfig -o /boot/grub/grub.cfg
	sed -i "s/ens[0-9]*/eth0/g" /etc/network/interfaces.d/*.cfg
	sed -i "s/ens[0-9]*/eth0/g" /etc/udev/rules.d/70-persistent-net.rules
	echo 'network: {config: disabled}' >> /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
	echo "APT::Periodic::Unattended-Upgrade \"0\";" >> /etc/apt/apt.conf.d/10periodic
	reboot
fi

# Run docker containers. For openstack Ubuntu 16.04 images this will run as a service after the VM has restarted
./so_vm_init.sh
<pattern>${pattern}</pattern> </encoder> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="asyncEELF"> <!-- deny all events with a level below INFO, that is TRACE and DEBUG --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <queueSize>${queueSize}</queueSize> <appender-ref ref="EELF" /> </appender> <!-- EELF Audit Appender. This appender is used to record audit engine related logging events. The audit logger and appender are specializations of the EELF application root logger and appender. This can be used to segregate Policy engine events from other components, or it can be eliminated to record these events as part of the application root log. --> <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="EELFAudit"> <file>${logDirectory}/${auditLogName}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${maxFileSize}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${maxHistory}</maxHistory> <totalSizeCap>${totalSizeCap}</totalSizeCap> </rollingPolicy> <encoder> <pattern>${pattern}</pattern> </encoder> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="asyncEELFAudit"> <queueSize>${queueSize}</queueSize> <appender-ref ref="EELFAudit" /> </appender> <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="EELFMetrics"> <file>${logDirectory}/${metricsLogName}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${maxFileSize}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${maxHistory}</maxHistory> <totalSizeCap>${totalSizeCap}</totalSizeCap> </rollingPolicy> <encoder> <!-- <pattern>"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n"</pattern> --> <pattern>${pattern}</pattern> </encoder> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="asyncEELFMetrics"> <queueSize>${queueSize}</queueSize> <appender-ref ref="EELFMetrics" /> </appender> <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="EELFDebug"> <file>${logDirectory}/${debugLogName}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${maxFileSize}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${maxHistory}</maxHistory> <totalSizeCap>${totalSizeCap}</totalSizeCap> </rollingPolicy> <encoder> <pattern>${pattern}</pattern> </encoder> </appender> <appender class="ch.qos.logback.classic.AsyncAppender" name="asyncEELFDebug"> <queueSize>${queueSize}</queueSize> <appender-ref ref="EELFDebug" /> <includeCallerData>false</includeCallerData> </appender> <!-- ============================================================================ --> <!-- EELF loggers --> <!-- ============================================================================ --> <logger additivity="false" level="info" name="com.att.eelf"> <appender-ref ref="asyncEELF" /> <appender-ref ref="asyncEELFDebug" /> </logger> <logger additivity="false" level="info" name="com.att.eelf.security"> <appender-ref ref="asyncEELFSecurity" /> </logger> <logger additivity="false" level="info" name="com.att.eelf.perf"> <appender-ref ref="asyncEELFPerformance" /> </logger> <logger additivity="false" level="info" name="com.att.eelf.server"> <appender-ref ref="asyncEELFServer" /> </logger> <logger additivity="false" level="info" name="com.att.eelf.policy"> <appender-ref ref="asyncEELFPolicy" /> </logger> <logger additivity="false" level="info" name="com.att.eelf.audit"> <appender-ref ref="asyncEELFAudit" /> </logger> <logger additivity="false" level="info" name="com.att.eelf.metrics"> <appender-ref ref="asyncEELFMetrics" /> </logger> <!-- Spring related loggers --> <logger level="WARN" name="org.springframework" /> <logger level="WARN" name="org.springframework.beans" /> <logger level="WARN" name="org.springframework.web" /> <logger level="WARN" name="com.blog.spring.jms" /> <!-- AJSC Services (bootstrap services) --> <logger level="WARN" name="ajsc" /> <logger level="WARN" name="ajsc.RouteMgmtService" /> <logger level="WARN" name="ajsc.ComputeService" /> <logger level="WARN" name="ajsc.VandelayService" /> <logger level="WARN" name="ajsc.FilePersistenceService" /> <logger level="WARN" name="ajsc.UserDefinedJarService" /> <logger level="WARN" name="ajsc.UserDefinedBeansDefService" /> <logger level="WARN" name="ajsc.LoggingConfigurationService" /> <logger level="WARN" name="ajsc.ErrorMessageLookupService" /> <!-- AJSC related loggers (DME2 Registration, csi logging, restlet, servlet logging) --> <logger level="WARN" name="ajsc.utils" /> <logger level="WARN" name="ajsc.utils.DME2Helper" /> <logger level="WARN" name="ajsc.filters" /> <logger level="WARN" name="ajsc.beans.interceptors" /> <logger level="WARN" name="ajsc.restlet" /> <logger level="WARN" name="ajsc.servlet" /> <logger level="INFO" name="com.att" /> <logger level="WARN" name="com.att.ajsc.csi.logging" /> <logger level="WARN" name="com.att.ajsc.filemonitor" /> <!-- SearchDB loggers --> <logger level="INFO" name="org.openecomp.sa" /> <!-- Other Loggers that may help troubleshoot --> <logger level="WARN" name="net.sf" /> <logger level="WARN" name="org.apache.commons.httpclient" /> <logger level="WARN" name="org.apache.commons" /> <logger level="WARN" name="org.apache.coyote" /> <logger level="WARN" name="org.apache.jasper" /> <!-- Camel Related Loggers (including restlet/servlet/jaxrs/cxf logging. May aid in troubleshooting) --> <logger level="WARN" name="org.apache.camel" /> <logger level="WARN" name="org.apache.cxf" /> <logger level="WARN" name="org.apache.camel.processor.interceptor" /> <logger level="WARN" name="org.apache.cxf.jaxrs.interceptor" /> <logger level="WARN" name="org.apache.cxf.service" /> <logger level="WARN" name="org.restlet" /> <logger level="WARN" name="org.apache.camel.component.restlet" /> <!-- logback internals logging --> <logger level="WARN" name="ch.qos.logback.classic" /> <logger level="WARN" name="ch.qos.logback.core" /> <root> <appender-ref ref="asyncEELF" /> <!-- <appender-ref ref="asyncEELFDebug" /> --> </root> </configuration>