2017-01-29 13:33:33 -06:00
|
|
|
#!/bin/bash
|
|
|
|
## This script is to automate loading of vendor specific docker images
|
|
|
|
## and instalation of configuration files and vendor specific packages
|
|
|
|
## to debian file system.
|
|
|
|
##
|
|
|
|
## USAGE:
|
2017-02-27 15:08:41 -06:00
|
|
|
## ./sonic_debian_extension.sh FILESYSTEM_ROOT PLATFORM_DIR
|
2017-01-29 13:33:33 -06:00
|
|
|
## PARAMETERS:
|
|
|
|
## FILESYSTEM_ROOT
|
|
|
|
## Path to debian file system root directory
|
|
|
|
|
|
|
|
FILESYSTEM_ROOT=$1
|
|
|
|
[ -n "$FILESYSTEM_ROOT" ] || {
|
|
|
|
echo "Error: no or empty FILESYSTEM_ROOT argument"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2017-02-27 15:08:41 -06:00
|
|
|
PLATFORM_DIR=$2
|
|
|
|
[ -n "$PLATFORM_DIR" ] || {
|
|
|
|
echo "Error: no or empty PLATFORM_DIR argument"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
## Enable debug output for script
|
|
|
|
set -x -e
|
|
|
|
|
|
|
|
. functions.sh
|
|
|
|
BUILD_TEMPLATES=files/build_templates
|
|
|
|
IMAGE_CONFIGS=files/image_config
|
|
|
|
|
|
|
|
clean_sys() {
|
|
|
|
sudo umount $FILESYSTEM_ROOT/sys/fs/cgroup/* \
|
|
|
|
$FILESYSTEM_ROOT/sys/fs/cgroup \
|
|
|
|
$FILESYSTEM_ROOT/sys || true
|
|
|
|
}
|
|
|
|
trap_push clean_sys
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT mount sysfs /sys -t sysfs
|
|
|
|
|
|
|
|
sudo chroot $FILESYSTEM_ROOT service docker start
|
|
|
|
|
|
|
|
# Apply apt configuration files
|
|
|
|
sudo cp $IMAGE_CONFIGS/apt/sources.list $FILESYSTEM_ROOT/etc/apt/
|
|
|
|
sudo cp -R $IMAGE_CONFIGS/apt/sources.list.d/ $FILESYSTEM_ROOT/etc/apt/
|
|
|
|
cat $IMAGE_CONFIGS/apt/sonic-dev.gpg.key | sudo LANG=C chroot $FILESYSTEM_ROOT apt-key add -
|
|
|
|
|
2017-02-27 02:13:36 -06:00
|
|
|
# Update apt's snapshot of its repos
|
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get update
|
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
# Apply environtment configuration files
|
|
|
|
sudo cp $IMAGE_CONFIGS/environment/environment $FILESYSTEM_ROOT/etc/
|
|
|
|
sudo cp $IMAGE_CONFIGS/environment/motd $FILESYSTEM_ROOT/etc/
|
|
|
|
|
2017-02-27 02:13:36 -06:00
|
|
|
# Create all needed directories
|
|
|
|
sudo mkdir -p $FILESYSTEM_ROOT/etc/sonic/
|
|
|
|
sudo mkdir -p $FILESYSTEM_ROOT/usr/share/sonic/templates/
|
|
|
|
|
2017-03-17 16:51:42 -05:00
|
|
|
# Install dependencies for SONiC config engine
|
2017-02-27 02:13:36 -06:00
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install \
|
2017-03-17 16:51:42 -05:00
|
|
|
python-dev \
|
2017-02-27 02:13:36 -06:00
|
|
|
python-lxml \
|
2017-03-17 16:51:42 -05:00
|
|
|
python-yaml \
|
|
|
|
python-bitarray
|
2017-02-27 02:13:36 -06:00
|
|
|
|
2017-04-04 01:56:15 -05:00
|
|
|
# Install SONiC config engine Python package
|
|
|
|
CONFIG_ENGINE_WHEEL_NAME=$(basename {{config_engine_wheel_path}})
|
|
|
|
sudo cp {{config_engine_wheel_path}} $FILESYSTEM_ROOT/$CONFIG_ENGINE_WHEEL_NAME
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT pip install $CONFIG_ENGINE_WHEEL_NAME
|
|
|
|
sudo rm -rf $FILESYSTEM_ROOT/$CONFIG_ENGINE_WHEEL_NAME
|
2017-03-23 14:18:52 -05:00
|
|
|
|
|
|
|
# Install Python client for Redis
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT pip install redis
|
2017-04-25 13:07:54 -05:00
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT pip install redis-dump-load
|
2017-02-27 02:13:36 -06:00
|
|
|
|
2017-04-04 01:56:15 -05:00
|
|
|
# Install SwSS SDK Python 2 package
|
|
|
|
SWSSSDK_PY2_WHEEL_NAME=$(basename {{swsssdk_py2_wheel_path}})
|
|
|
|
sudo cp {{swsssdk_py2_wheel_path}} $FILESYSTEM_ROOT/$SWSSSDK_PY2_WHEEL_NAME
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT pip install $SWSSSDK_PY2_WHEEL_NAME
|
|
|
|
sudo rm -rf $FILESYSTEM_ROOT/$SWSSSDK_PY2_WHEEL_NAME
|
|
|
|
|
2017-02-27 02:13:36 -06:00
|
|
|
# Install SONiC Utilities (and its dependencies via 'apt-get -y install -f')
|
|
|
|
sudo dpkg --root=$FILESYSTEM_ROOT -i target/debs/python-sonic-utilities_*.deb || \
|
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
|
|
|
|
|
2017-03-02 14:17:04 -06:00
|
|
|
# SONiC utilities installs bash-completion as a dependency. However, it is disabled by default
|
|
|
|
# in bash.bashrc, so we copy a version of the file with it enabled here.
|
|
|
|
sudo cp -f $IMAGE_CONFIGS/bash/bash.bashrc $FILESYSTEM_ROOT/etc/
|
|
|
|
|
2017-02-27 02:13:36 -06:00
|
|
|
# Install SONiC Device Data (and its dependencies via 'apt-get -y install -f')
|
|
|
|
sudo dpkg --root=$FILESYSTEM_ROOT -i target/debs/sonic-device-data_*.deb || \
|
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
|
|
|
|
|
2017-04-21 10:22:44 -05:00
|
|
|
# Copy crontabs
|
|
|
|
sudo cp -f $IMAGE_CONFIGS/cron.d/* $FILESYSTEM_ROOT/etc/cron.d/
|
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
# Copy NTP configuration files and templates
|
|
|
|
sudo cp $IMAGE_CONFIGS/ntp/ntp-config.service $FILESYSTEM_ROOT/etc/systemd/system/
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable ntp-config.service
|
|
|
|
sudo cp $IMAGE_CONFIGS/ntp/ntp-config.sh $FILESYSTEM_ROOT/usr/bin/
|
2017-02-18 19:50:29 -06:00
|
|
|
sudo cp $IMAGE_CONFIGS/ntp/ntp.conf.j2 $FILESYSTEM_ROOT/usr/share/sonic/templates/
|
2017-01-29 13:33:33 -06:00
|
|
|
|
|
|
|
# Copy rsyslog configuration files and templates
|
|
|
|
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog-config.service $FILESYSTEM_ROOT/etc/systemd/system/
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable rsyslog-config.service
|
|
|
|
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog-config.sh $FILESYSTEM_ROOT/usr/bin/
|
2017-02-18 19:50:29 -06:00
|
|
|
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog.conf.j2 $FILESYSTEM_ROOT/usr/share/sonic/templates/
|
2017-01-29 13:33:33 -06:00
|
|
|
sudo cp $IMAGE_CONFIGS/rsyslog/rsyslog.d/* $FILESYSTEM_ROOT/etc/rsyslog.d/
|
|
|
|
|
2017-04-21 10:22:44 -05:00
|
|
|
# Copy logrotate.d configuration files
|
|
|
|
sudo cp -f $IMAGE_CONFIGS/logrotate.d/rsyslog $FILESYSTEM_ROOT/etc/logrotate.d/
|
|
|
|
|
|
|
|
# Copy systemd-journald configuration files
|
|
|
|
sudo cp -f $IMAGE_CONFIGS/systemd/journald.conf $FILESYSTEM_ROOT/etc/systemd/
|
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
# Copy interfaces configuration files and templates
|
|
|
|
sudo cp $IMAGE_CONFIGS/interfaces/interfaces-config.service $FILESYSTEM_ROOT/etc/systemd/system/
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable interfaces-config.service
|
|
|
|
sudo cp $IMAGE_CONFIGS/interfaces/interfaces-config.sh $FILESYSTEM_ROOT/usr/bin/
|
2017-02-18 19:50:29 -06:00
|
|
|
sudo cp $IMAGE_CONFIGS/interfaces/*.j2 $FILESYSTEM_ROOT/usr/share/sonic/templates/
|
2017-01-29 13:33:33 -06:00
|
|
|
|
2017-02-17 15:47:01 -06:00
|
|
|
# Copy initial interfaces configuration file, will be overwritten on first boot
|
|
|
|
sudo cp $IMAGE_CONFIGS/interfaces/init_interfaces $FILESYSTEM_ROOT/etc/network
|
|
|
|
|
|
|
|
# Copy updategraph script and service file
|
|
|
|
sudo cp $IMAGE_CONFIGS/updategraph/updategraph.service $FILESYSTEM_ROOT/etc/systemd/system/
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable updategraph.service
|
|
|
|
sudo cp $IMAGE_CONFIGS/updategraph/updategraph $FILESYSTEM_ROOT/usr/bin/
|
|
|
|
{% if enable_dhcp_graph_service == "y" %}
|
|
|
|
sudo bash -c "echo enabled=true > $FILESYSTEM_ROOT/etc/sonic/updategraph.conf"
|
|
|
|
sudo bash -c "echo src=dhcp >> $FILESYSTEM_ROOT/etc/sonic/updategraph.conf"
|
|
|
|
sudo bash -c "echo dhcp_as_static=true >> $FILESYSTEM_ROOT/etc/sonic/updategraph.conf"
|
|
|
|
{% else %}
|
|
|
|
sudo bash -c "echo enabled=false > $FILESYSTEM_ROOT/etc/sonic/updategraph.conf"
|
|
|
|
{% endif %}
|
2017-06-12 13:05:22 -05:00
|
|
|
{% if shutdown_bgp_on_start == "y" %}
|
|
|
|
sudo bash -c "echo bgp_admin_state: > $FILESYSTEM_ROOT/etc/sonic/bgp_admin.yml"
|
|
|
|
sudo bash -c "echo ' all: off' >> $FILESYSTEM_ROOT/etc/sonic/bgp_admin.yml"
|
|
|
|
{% endif %}
|
2017-01-29 13:33:33 -06:00
|
|
|
# Copy SNMP configuration files
|
|
|
|
sudo cp $IMAGE_CONFIGS/snmp/snmp.yml $FILESYSTEM_ROOT/etc/sonic/
|
|
|
|
|
2017-06-21 20:52:50 -05:00
|
|
|
# Copy ASN configuration files
|
|
|
|
sudo cp $IMAGE_CONFIGS/asn/deployment_id_asn_map.yml $FILESYSTEM_ROOT/etc/sonic/
|
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
# Copy sudoers configuration file
|
|
|
|
sudo cp $IMAGE_CONFIGS/sudoers/sudoers $FILESYSTEM_ROOT/etc/
|
|
|
|
|
2017-02-10 09:39:05 -06:00
|
|
|
## Install package without starting service
|
|
|
|
## ref: https://wiki.debian.org/chroot
|
|
|
|
sudo tee -a $FILESYSTEM_ROOT/usr/sbin/policy-rc.d > /dev/null <<EOF
|
|
|
|
#!/bin/sh
|
|
|
|
exit 101
|
|
|
|
EOF
|
|
|
|
sudo chmod a+x $FILESYSTEM_ROOT/usr/sbin/policy-rc.d
|
|
|
|
|
2017-02-27 15:08:41 -06:00
|
|
|
{% if installer_debs.strip() -%}
|
2017-01-29 13:33:33 -06:00
|
|
|
{% for deb in installer_debs.strip().split(' ') -%}
|
2017-04-03 21:13:29 -05:00
|
|
|
{% if sonic_asic_platform == "mellanox" %}
|
2017-01-29 13:33:33 -06:00
|
|
|
sudo dpkg --extract {{deb}} $FILESYSTEM_ROOT
|
2017-04-03 21:13:29 -05:00
|
|
|
{% else %}
|
2017-02-10 09:39:05 -06:00
|
|
|
sudo dpkg --root=$FILESYSTEM_ROOT -i {{deb}} || sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
|
2017-04-03 21:13:29 -05:00
|
|
|
{% endif %}
|
2017-01-29 13:33:33 -06:00
|
|
|
{% endfor %}
|
2017-02-27 15:08:41 -06:00
|
|
|
{% endif %}
|
2017-02-10 09:39:05 -06:00
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
## Run depmod command for target kernel modules
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT depmod -a {{kversion}}
|
2017-02-27 15:08:41 -06:00
|
|
|
|
|
|
|
## download all dependency packages for platform debian packages
|
|
|
|
{% if lazy_installer_debs.strip() -%}
|
|
|
|
{% for file in lazy_installer_debs.strip().split(' ') -%}
|
|
|
|
|
|
|
|
{% set dev = file.split('@')[0] -%}
|
|
|
|
{% set deb = file.split('@')[1] -%}
|
|
|
|
{% set debfilename = deb.split('/')|last -%}
|
|
|
|
{% set debname = debfilename.split('_')|first -%}
|
|
|
|
|
|
|
|
sudo dpkg --root=$FILESYSTEM_ROOT -i {{deb}} || sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f --download-only
|
|
|
|
|
|
|
|
sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}}
|
|
|
|
sudo cp {{ deb }} $FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}}/
|
2017-04-04 01:56:15 -05:00
|
|
|
for f in $(find $FILESYSTEM_ROOT/var/cache/apt/archives -name "*.deb"); do
|
2017-02-27 15:08:41 -06:00
|
|
|
sudo mv $f $FILESYSTEM_ROOT/$PLATFORM_DIR/{{dev}}/
|
|
|
|
done
|
|
|
|
|
|
|
|
sudo dpkg --root=$FILESYSTEM_ROOT -P {{ debname }}
|
|
|
|
|
|
|
|
{% endfor %}
|
2017-01-29 13:33:33 -06:00
|
|
|
{% endif %}
|
2017-02-27 15:08:41 -06:00
|
|
|
|
|
|
|
sudo rm -f $FILESYSTEM_ROOT/usr/sbin/policy-rc.d
|
|
|
|
|
|
|
|
## copy platform rc.local
|
|
|
|
sudo cp $IMAGE_CONFIGS/platform/rc.local $FILESYSTEM_ROOT/etc/
|
|
|
|
|
2017-01-29 13:33:33 -06:00
|
|
|
{% if installer_images.strip() -%}
|
|
|
|
{% for image in installer_images.strip().split(' ') -%}
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT docker load < {{image}}
|
|
|
|
{% endfor %}
|
|
|
|
sudo chroot $FILESYSTEM_ROOT service docker stop
|
2017-04-04 01:56:15 -05:00
|
|
|
{% for script in installer_start_scripts.split(' ') -%}
|
2017-01-29 13:33:33 -06:00
|
|
|
sudo cp {{script}} $FILESYSTEM_ROOT/usr/bin/
|
|
|
|
{% endfor %}
|
|
|
|
{% for service in installer_services.split(' ') -%}
|
2017-03-01 12:57:35 -06:00
|
|
|
if [ -f {{service}} ]; then
|
|
|
|
sudo cp {{service}} $FILESYSTEM_ROOT/etc/systemd/system/
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable {{service}}
|
|
|
|
fi
|
2017-01-29 13:33:33 -06:00
|
|
|
{% endfor %}
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT fuser -km /sys || true
|
|
|
|
sudo LANG=C chroot $FILESYSTEM_ROOT umount -lf /sys
|
|
|
|
{% endif %}
|
|
|
|
|
2017-03-17 16:51:42 -05:00
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get remove -y python-dev
|
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get clean -y
|
|
|
|
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get autoremove -y
|
|
|
|
|
2017-02-07 02:33:20 -06:00
|
|
|
{% for file in installer_extra_files.split(' ') -%}
|
|
|
|
{% if file.strip() -%}
|
|
|
|
{% set src = file.split(':')[0] -%}
|
|
|
|
{% set dst = file.split(':')[1] -%}
|
|
|
|
sudo cp {{src}} $FILESYSTEM_ROOT/{{dst}}
|
|
|
|
{% endif -%}
|
|
|
|
{% endfor -%}
|
|
|
|
|