first test change to implement greengrass automagically
This commit is contained in:
parent
9d15c0f7d1
commit
e36a1d4c54
|
@ -1 +1,2 @@
|
||||||
console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cgroup_enable=memory cgroup_memory=1
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
|
|
||||||
# uncomment to force a console size. By default it will be display's size minus
|
# uncomment to force a console size. By default it will be display's size minus
|
||||||
# overscan.
|
# overscan.
|
||||||
#framebuffer_width=1280
|
#framebuffer_width=800
|
||||||
#framebuffer_height=720
|
#framebuffer_height=480
|
||||||
|
|
||||||
# uncomment if hdmi display is not detected and composite is being output
|
# uncomment if hdmi display is not detected and composite is being output
|
||||||
#hdmi_force_hotplug=1
|
#hdmi_force_hotplug=1
|
||||||
|
@ -47,9 +47,8 @@
|
||||||
#dtparam=i2s=on
|
#dtparam=i2s=on
|
||||||
#dtparam=spi=on
|
#dtparam=spi=on
|
||||||
|
|
||||||
# Uncomment this to enable infrared communication.
|
# Uncomment this to enable the lirc-rpi module
|
||||||
#dtoverlay=gpio-ir,gpio_pin=17
|
#dtoverlay=lirc-rpi
|
||||||
#dtoverlay=gpio-ir-tx,gpio_pin=18
|
|
||||||
|
|
||||||
# Additional overlays and parameters are documented /boot/overlays/README
|
# Additional overlays and parameters are documented /boot/overlays/README
|
||||||
|
|
||||||
|
@ -63,3 +62,5 @@ max_framebuffers=2
|
||||||
|
|
||||||
[all]
|
[all]
|
||||||
#dtoverlay=vc4-fkms-v3d
|
#dtoverlay=vc4-fkms-v3d
|
||||||
|
start_x=1
|
||||||
|
gpu_mem=16
|
||||||
|
|
9
stageX/00-preinstall/00-run.sh
Executable file
9
stageX/00-preinstall/00-run.sh
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
install -m 644 files/nodesource.list "${ROOTFS_DIR}/etc/apt/sources.list.d/"
|
||||||
|
|
||||||
|
on_chroot apt-key add - < files/nodesource.gpg.key
|
||||||
|
on_chroot << EOF
|
||||||
|
apt-get update
|
||||||
|
apt-get upgrade -yqq
|
||||||
|
EOF
|
52
stageX/00-preinstall/files/nodesource.gpg.key
Normal file
52
stageX/00-preinstall/files/nodesource.gpg.key
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1
|
||||||
|
Comment: GPGTools - https://gpgtools.org
|
||||||
|
|
||||||
|
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
|
||||||
|
=CLGF
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
2
stageX/00-preinstall/files/nodesource.list
Normal file
2
stageX/00-preinstall/files/nodesource.list
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
deb https://deb.nodesource.com/node_12.x buster main
|
||||||
|
deb-src https://deb.nodesource.com/node_12.x buster main
|
2
stageX/01-nodejs/00-packages
Normal file
2
stageX/01-nodejs/00-packages
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
nodejs
|
||||||
|
npm
|
6
stageX/01-nodejs/01-run.sh
Executable file
6
stageX/01-nodejs/01-run.sh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
on_chroot << EOF
|
||||||
|
ln -sf "$(which nodejs)" /usr/bin/node
|
||||||
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
|
||||||
|
EOF
|
3
stageX/02-docker/00-packages
Normal file
3
stageX/02-docker/00-packages
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
libffi-dev
|
||||||
|
libssl-dev
|
||||||
|
python-configparser
|
8
stageX/02-docker/01-run.sh
Executable file
8
stageX/02-docker/01-run.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
install -m 755 files/install-docker.sh "${ROOTFS_DIR}/tmp/"
|
||||||
|
|
||||||
|
on_chroot << EOF
|
||||||
|
/tmp/install-docker.sh
|
||||||
|
usermod -aG docker pi
|
||||||
|
EOF
|
476
stageX/02-docker/files/install-docker.sh
Normal file
476
stageX/02-docker/files/install-docker.sh
Normal file
|
@ -0,0 +1,476 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# This script is meant for quick & easy install via:
|
||||||
|
# $ curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
|
# $ sh get-docker.sh
|
||||||
|
#
|
||||||
|
# For test builds (ie. release candidates):
|
||||||
|
# $ curl -fsSL https://test.docker.com -o test-docker.sh
|
||||||
|
# $ sh test-docker.sh
|
||||||
|
#
|
||||||
|
# NOTE: Make sure to verify the contents of the script
|
||||||
|
# you downloaded matches the contents of install.sh
|
||||||
|
# located at https://github.com/docker/docker-install
|
||||||
|
# before executing.
|
||||||
|
#
|
||||||
|
# Git commit from https://github.com/docker/docker-install when
|
||||||
|
# the script was uploaded (Should only be modified by upload job):
|
||||||
|
SCRIPT_COMMIT_SHA="f45d7c11389849ff46a6b4d94e0dd1ffebca32c1"
|
||||||
|
|
||||||
|
|
||||||
|
# The channel to install from:
|
||||||
|
# * nightly
|
||||||
|
# * test
|
||||||
|
# * stable
|
||||||
|
# * edge (deprecated)
|
||||||
|
DEFAULT_CHANNEL_VALUE="stable"
|
||||||
|
if [ -z "$CHANNEL" ]; then
|
||||||
|
CHANNEL=$DEFAULT_CHANNEL_VALUE
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_DOWNLOAD_URL="https://download.docker.com"
|
||||||
|
if [ -z "$DOWNLOAD_URL" ]; then
|
||||||
|
DOWNLOAD_URL=$DEFAULT_DOWNLOAD_URL
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_REPO_FILE="docker-ce.repo"
|
||||||
|
if [ -z "$REPO_FILE" ]; then
|
||||||
|
REPO_FILE="$DEFAULT_REPO_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mirror=''
|
||||||
|
DRY_RUN=${DRY_RUN:-}
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--mirror)
|
||||||
|
mirror="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=1
|
||||||
|
;;
|
||||||
|
--*)
|
||||||
|
echo "Illegal option $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift $(( $# > 0 ? 1 : 0 ))
|
||||||
|
done
|
||||||
|
|
||||||
|
case "$mirror" in
|
||||||
|
Aliyun)
|
||||||
|
DOWNLOAD_URL="https://mirrors.aliyun.com/docker-ce"
|
||||||
|
;;
|
||||||
|
AzureChinaCloud)
|
||||||
|
DOWNLOAD_URL="https://mirror.azure.cn/docker-ce"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
command -v "$@" > /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
is_dry_run() {
|
||||||
|
if [ -z "$DRY_RUN" ]; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecation_notice() {
|
||||||
|
distro=$1
|
||||||
|
date=$2
|
||||||
|
echo
|
||||||
|
echo "DEPRECATION WARNING:"
|
||||||
|
echo " The distribution, $distro, will no longer be supported in this script as of $date."
|
||||||
|
echo " If you feel this is a mistake please submit an issue at https://github.com/docker/docker-install/issues/new"
|
||||||
|
echo
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
get_distribution() {
|
||||||
|
lsb_dist=""
|
||||||
|
# Every system that we officially support has /etc/os-release
|
||||||
|
if [ -r /etc/os-release ]; then
|
||||||
|
lsb_dist="$(. /etc/os-release && echo "$ID")"
|
||||||
|
fi
|
||||||
|
# Returning an empty string here should be alright since the
|
||||||
|
# case statements don't act unless you provide an actual value
|
||||||
|
echo "$lsb_dist"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_debian_backport_repo() {
|
||||||
|
debian_version="$1"
|
||||||
|
backports="deb http://ftp.debian.org/debian $debian_version-backports main"
|
||||||
|
if ! grep -Fxq "$backports" /etc/apt/sources.list; then
|
||||||
|
(set -x; $sh_c "echo \"$backports\" >> /etc/apt/sources.list")
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_docker_as_nonroot() {
|
||||||
|
if is_dry_run; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if command_exists docker && [ -e /var/run/docker.sock ]; then
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
$sh_c 'docker version'
|
||||||
|
) || true
|
||||||
|
fi
|
||||||
|
your_user=your-user
|
||||||
|
[ "$user" != 'root' ] && your_user="$user"
|
||||||
|
# intentionally mixed spaces and tabs here -- tabs are stripped by "<<-EOF", spaces are kept in the output
|
||||||
|
echo "If you would like to use Docker as a non-root user, you should now consider"
|
||||||
|
echo "adding your user to the \"docker\" group with something like:"
|
||||||
|
echo
|
||||||
|
echo " sudo usermod -aG docker $your_user"
|
||||||
|
echo
|
||||||
|
echo "Remember that you will have to log out and back in for this to take effect!"
|
||||||
|
echo
|
||||||
|
echo "WARNING: Adding a user to the \"docker\" group will grant the ability to run"
|
||||||
|
echo " containers which can be used to obtain root privileges on the"
|
||||||
|
echo " docker host."
|
||||||
|
echo " Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface"
|
||||||
|
echo " for more information."
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if this is a forked Linux distro
|
||||||
|
check_forked() {
|
||||||
|
|
||||||
|
# Check for lsb_release command existence, it usually exists in forked distros
|
||||||
|
if command_exists lsb_release; then
|
||||||
|
# Check if the `-u` option is supported
|
||||||
|
set +e
|
||||||
|
lsb_release -a -u > /dev/null 2>&1
|
||||||
|
lsb_release_exit_code=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Check if the command has exited successfully, it means we're in a forked distro
|
||||||
|
if [ "$lsb_release_exit_code" = "0" ]; then
|
||||||
|
# Print info about current distro
|
||||||
|
cat <<-EOF
|
||||||
|
You're using '$lsb_dist' version '$dist_version'.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Get the upstream release info
|
||||||
|
lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[:space:]')
|
||||||
|
dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[:space:]')
|
||||||
|
|
||||||
|
# Print info about upstream distro
|
||||||
|
cat <<-EOF
|
||||||
|
Upstream release is '$lsb_dist' version '$dist_version'.
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
if [ -r /etc/debian_version ] && [ "$lsb_dist" != "ubuntu" ] && [ "$lsb_dist" != "raspbian" ]; then
|
||||||
|
if [ "$lsb_dist" = "osmc" ]; then
|
||||||
|
# OSMC runs Raspbian
|
||||||
|
lsb_dist=raspbian
|
||||||
|
else
|
||||||
|
# We're Debian and don't even know it!
|
||||||
|
lsb_dist=debian
|
||||||
|
fi
|
||||||
|
dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
|
||||||
|
case "$dist_version" in
|
||||||
|
10)
|
||||||
|
dist_version="buster"
|
||||||
|
;;
|
||||||
|
9)
|
||||||
|
dist_version="stretch"
|
||||||
|
;;
|
||||||
|
8|'Kali Linux 2')
|
||||||
|
dist_version="jessie"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
semverParse() {
|
||||||
|
major="${1%%.*}"
|
||||||
|
minor="${1#$major.}"
|
||||||
|
minor="${minor%%.*}"
|
||||||
|
patch="${1#$major.$minor.}"
|
||||||
|
patch="${patch%%[-.]*}"
|
||||||
|
}
|
||||||
|
|
||||||
|
ee_notice() {
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo " WARNING: $1 is now only supported by Docker EE"
|
||||||
|
echo " Check https://store.docker.com for information on Docker EE"
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
do_install() {
|
||||||
|
echo "# Executing docker install script, commit: $SCRIPT_COMMIT_SHA"
|
||||||
|
|
||||||
|
if command_exists docker; then
|
||||||
|
docker_version="$(docker -v | cut -d ' ' -f3 | cut -d ',' -f1)"
|
||||||
|
MAJOR_W=1
|
||||||
|
MINOR_W=10
|
||||||
|
|
||||||
|
semverParse "$docker_version"
|
||||||
|
|
||||||
|
shouldWarn=0
|
||||||
|
if [ "$major" -lt "$MAJOR_W" ]; then
|
||||||
|
shouldWarn=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$major" -le "$MAJOR_W" ] && [ "$minor" -lt "$MINOR_W" ]; then
|
||||||
|
shouldWarn=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
Warning: the "docker" command appears to already exist on this system.
|
||||||
|
|
||||||
|
If you already have Docker installed, this script can cause trouble, which is
|
||||||
|
why we're displaying this warning and provide the opportunity to cancel the
|
||||||
|
installation.
|
||||||
|
|
||||||
|
If you installed the current Docker package using this script and are using it
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ $shouldWarn -eq 1 ]; then
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
again to update Docker, we urge you to migrate your image store before upgrading
|
||||||
|
to v1.10+.
|
||||||
|
|
||||||
|
You can find instructions for this here:
|
||||||
|
https://github.com/docker/docker/wiki/Engine-v1.10.0-content-addressability-migration
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
again to update Docker, you can safely ignore this message.
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
|
||||||
|
You may press Ctrl+C now to abort this script.
|
||||||
|
EOF
|
||||||
|
( set -x; sleep 20 )
|
||||||
|
fi
|
||||||
|
|
||||||
|
user="$(id -un 2>/dev/null || true)"
|
||||||
|
|
||||||
|
sh_c='sh -c'
|
||||||
|
if [ "$user" != 'root' ]; then
|
||||||
|
if command_exists sudo; then
|
||||||
|
sh_c='sudo -E sh -c'
|
||||||
|
elif command_exists su; then
|
||||||
|
sh_c='su -c'
|
||||||
|
else
|
||||||
|
cat >&2 <<-'EOF'
|
||||||
|
Error: this installer needs the ability to run commands as root.
|
||||||
|
We are unable to find either "sudo" or "su" available to make this happen.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if is_dry_run; then
|
||||||
|
sh_c="echo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# perform some very rudimentary platform detection
|
||||||
|
lsb_dist=$( get_distribution )
|
||||||
|
lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
|
||||||
|
case "$lsb_dist" in
|
||||||
|
|
||||||
|
ubuntu)
|
||||||
|
if command_exists lsb_release; then
|
||||||
|
dist_version="$(lsb_release --codename | cut -f2)"
|
||||||
|
fi
|
||||||
|
if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then
|
||||||
|
dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
debian|raspbian)
|
||||||
|
dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
|
||||||
|
case "$dist_version" in
|
||||||
|
10)
|
||||||
|
dist_version="buster"
|
||||||
|
;;
|
||||||
|
9)
|
||||||
|
dist_version="stretch"
|
||||||
|
;;
|
||||||
|
8)
|
||||||
|
dist_version="jessie"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
|
||||||
|
centos)
|
||||||
|
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
|
||||||
|
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
rhel|ol|sles)
|
||||||
|
ee_notice "$lsb_dist"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if command_exists lsb_release; then
|
||||||
|
dist_version="$(lsb_release --release | cut -f2)"
|
||||||
|
fi
|
||||||
|
if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
|
||||||
|
dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Check if this is a forked Linux distro
|
||||||
|
check_forked
|
||||||
|
|
||||||
|
# Run setup for each distro accordingly
|
||||||
|
case "$lsb_dist" in
|
||||||
|
ubuntu|debian|raspbian)
|
||||||
|
pre_reqs="apt-transport-https ca-certificates curl"
|
||||||
|
if [ "$lsb_dist" = "debian" ]; then
|
||||||
|
# libseccomp2 does not exist for debian jessie main repos for aarch64
|
||||||
|
if [ "$(uname -m)" = "aarch64" ] && [ "$dist_version" = "jessie" ]; then
|
||||||
|
add_debian_backport_repo "$dist_version"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v gpg > /dev/null; then
|
||||||
|
pre_reqs="$pre_reqs gnupg"
|
||||||
|
fi
|
||||||
|
apt_repo="deb [arch=$(dpkg --print-architecture)] $DOWNLOAD_URL/linux/$lsb_dist $dist_version $CHANNEL"
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
$sh_c 'apt-get update -qq >/dev/null'
|
||||||
|
$sh_c "DEBIAN_FRONTEND=noninteractive apt-get install -y -qq $pre_reqs >/dev/null"
|
||||||
|
$sh_c "curl -fsSL \"$DOWNLOAD_URL/linux/$lsb_dist/gpg\" | apt-key add -qq - >/dev/null"
|
||||||
|
$sh_c "echo \"$apt_repo\" > /etc/apt/sources.list.d/docker.list"
|
||||||
|
$sh_c 'apt-get update -qq >/dev/null'
|
||||||
|
)
|
||||||
|
pkg_version=""
|
||||||
|
if [ -n "$VERSION" ]; then
|
||||||
|
if is_dry_run; then
|
||||||
|
echo "# WARNING: VERSION pinning is not supported in DRY_RUN"
|
||||||
|
else
|
||||||
|
# Will work for incomplete versions IE (17.12), but may not actually grab the "latest" if in the test channel
|
||||||
|
pkg_pattern="$(echo "$VERSION" | sed "s/-ce-/~ce~.*/g" | sed "s/-/.*/g").*-0~$lsb_dist"
|
||||||
|
search_command="apt-cache madison 'docker-ce' | grep '$pkg_pattern' | head -1 | awk '{\$1=\$1};1' | cut -d' ' -f 3"
|
||||||
|
pkg_version="$($sh_c "$search_command")"
|
||||||
|
echo "INFO: Searching repository for VERSION '$VERSION'"
|
||||||
|
echo "INFO: $search_command"
|
||||||
|
if [ -z "$pkg_version" ]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: '$VERSION' not found amongst apt-cache madison results"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
search_command="apt-cache madison 'docker-ce-cli' | grep '$pkg_pattern' | head -1 | awk '{\$1=\$1};1' | cut -d' ' -f 3"
|
||||||
|
# Don't insert an = for cli_pkg_version, we'll just include it later
|
||||||
|
cli_pkg_version="$($sh_c "$search_command")"
|
||||||
|
pkg_version="=$pkg_version"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
if [ -n "$cli_pkg_version" ]; then
|
||||||
|
$sh_c "apt-get install -y -qq --no-install-recommends docker-ce-cli=$cli_pkg_version >/dev/null"
|
||||||
|
fi
|
||||||
|
$sh_c "apt-get install -y -qq --no-install-recommends docker-ce$pkg_version >/dev/null"
|
||||||
|
)
|
||||||
|
echo_docker_as_nonroot
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
centos|fedora)
|
||||||
|
yum_repo="$DOWNLOAD_URL/linux/$lsb_dist/$REPO_FILE"
|
||||||
|
if ! curl -Ifs "$yum_repo" > /dev/null; then
|
||||||
|
echo "Error: Unable to curl repository file $yum_repo, is it valid?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ "$lsb_dist" = "fedora" ]; then
|
||||||
|
pkg_manager="dnf"
|
||||||
|
config_manager="dnf config-manager"
|
||||||
|
enable_channel_flag="--set-enabled"
|
||||||
|
disable_channel_flag="--set-disabled"
|
||||||
|
pre_reqs="dnf-plugins-core"
|
||||||
|
pkg_suffix="fc$dist_version"
|
||||||
|
else
|
||||||
|
pkg_manager="yum"
|
||||||
|
config_manager="yum-config-manager"
|
||||||
|
enable_channel_flag="--enable"
|
||||||
|
disable_channel_flag="--disable"
|
||||||
|
pre_reqs="yum-utils"
|
||||||
|
pkg_suffix="el"
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
$sh_c "$pkg_manager install -y -q $pre_reqs"
|
||||||
|
$sh_c "$config_manager --add-repo $yum_repo"
|
||||||
|
|
||||||
|
if [ "$CHANNEL" != "stable" ]; then
|
||||||
|
$sh_c "$config_manager $disable_channel_flag docker-ce-*"
|
||||||
|
$sh_c "$config_manager $enable_channel_flag docker-ce-$CHANNEL"
|
||||||
|
fi
|
||||||
|
$sh_c "$pkg_manager makecache"
|
||||||
|
)
|
||||||
|
pkg_version=""
|
||||||
|
if [ -n "$VERSION" ]; then
|
||||||
|
if is_dry_run; then
|
||||||
|
echo "# WARNING: VERSION pinning is not supported in DRY_RUN"
|
||||||
|
else
|
||||||
|
pkg_pattern="$(echo "$VERSION" | sed "s/-ce-/\\\\.ce.*/g" | sed "s/-/.*/g").*$pkg_suffix"
|
||||||
|
search_command="$pkg_manager list --showduplicates 'docker-ce' | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'"
|
||||||
|
pkg_version="$($sh_c "$search_command")"
|
||||||
|
echo "INFO: Searching repository for VERSION '$VERSION'"
|
||||||
|
echo "INFO: $search_command"
|
||||||
|
if [ -z "$pkg_version" ]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: '$VERSION' not found amongst $pkg_manager list results"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
search_command="$pkg_manager list --showduplicates 'docker-ce-cli' | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'"
|
||||||
|
# It's okay for cli_pkg_version to be blank, since older versions don't support a cli package
|
||||||
|
cli_pkg_version="$($sh_c "$search_command" | cut -d':' -f 2)"
|
||||||
|
# Cut out the epoch and prefix with a '-'
|
||||||
|
pkg_version="-$(echo "$pkg_version" | cut -d':' -f 2)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
if ! is_dry_run; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
# install the correct cli version first
|
||||||
|
if [ -n "$cli_pkg_version" ]; then
|
||||||
|
$sh_c "$pkg_manager install -y -q docker-ce-cli-$cli_pkg_version"
|
||||||
|
fi
|
||||||
|
$sh_c "$pkg_manager install -y -q docker-ce$pkg_version"
|
||||||
|
)
|
||||||
|
echo_docker_as_nonroot
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo
|
||||||
|
echo "ERROR: Unsupported distribution '$lsb_dist'"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# wrapped up in a function so that we have some protection against only getting
|
||||||
|
# half the file during "curl | sh"
|
||||||
|
do_install
|
11
stageX/03-greengrass/00-run.sh
Normal file
11
stageX/03-greengrass/00-run.sh
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
install -m 755 files/install-greengrass.sh "${ROOTFS_DIR}/bin/"
|
||||||
|
install -m 644 files/greengrass.service /etc/systemd/system/greengrass.service
|
||||||
|
install -m 755 files/S02greengrass /etc/init.d/S02greengrass
|
||||||
|
|
||||||
|
on_chroot << EOF
|
||||||
|
/bin/install-greengrass.sh bootstrap-greengrass
|
||||||
|
modprobe configs
|
||||||
|
systemctl enable greengrass.service
|
||||||
|
EOF
|
7
stageX/03-greengrass/files/S02greengrass
Normal file
7
stageX/03-greengrass/files/S02greengrass
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/sh
|
||||||
|
mkdir -p /greengrass/certs
|
||||||
|
mkdir -p /greengrass/config
|
||||||
|
cp /boot/certs/* /greengrass/certs/
|
||||||
|
cp /boot/config/* /greengrass/config/
|
||||||
|
cd /greengrass/ggc/core
|
||||||
|
./greengrassd \$@
|
13
stageX/03-greengrass/files/greengrass.service
Normal file
13
stageX/03-greengrass/files/greengrass.service
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Greengrass Daemon
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
PIDFile=/var/run/greengrassd.pid
|
||||||
|
Restart=on-failure
|
||||||
|
ExecStart=/etc/init.d/S02greengrass start
|
||||||
|
ExecReload=/etc/init.d/S02greengrass restart
|
||||||
|
ExecStop=/etc/init.d/S02greengrass stop
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
3094
stageX/03-greengrass/files/install-greengrass.sh
Normal file
3094
stageX/03-greengrass/files/install-greengrass.sh
Normal file
File diff suppressed because it is too large
Load Diff
8
stageX/04-first-boot/01-run.sh
Executable file
8
stageX/04-first-boot/01-run.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
install -m 755 files/firstboot.sh "${ROOTFS_DIR}/boot/firstboot.sh"
|
||||||
|
install -m 755 files/firstboot.service "${ROOTFS_DIR}/etc/systemd/system/firstboot.sh"
|
||||||
|
|
||||||
|
on_chroot << EOF
|
||||||
|
systemctl enable firstboot.service
|
||||||
|
EOF
|
14
stageX/04-first-boot/files/firstboot.service
Normal file
14
stageX/04-first-boot/files/firstboot.service
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[Unit]
|
||||||
|
Description=First Boot Config Script
|
||||||
|
After=network.target
|
||||||
|
Before=rc-local.service
|
||||||
|
ConditionFileNotEmpty=/boot/firstboot.sh
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/boot/firstboot.sh
|
||||||
|
ExecStartPost=/bin/mv /boot/firstboot.sh /boot/firstboot.sh.done
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=no
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
61
stageX/04-first-boot/files/firstboot.sh
Normal file
61
stageX/04-first-boot/files/firstboot.sh
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# lock dirs/files
|
||||||
|
LOCKFILE="/etc/iot-setup-lock"
|
||||||
|
|
||||||
|
# Forces hostname to be the serial number of the device
|
||||||
|
set-hostname() {
|
||||||
|
CURRENT_HOSTNAME=`hostname`
|
||||||
|
SERIAL_NUMBER=$(grep -Po '^Serial\s*:\s*\K[[:xdigit:]]{16}' /proc/cpuinfo)
|
||||||
|
|
||||||
|
if [ "x${CURRENT_HOSTNAME}" != "x${SERIAL_NUMBER}" ] ; then
|
||||||
|
echo $SERIAL_NUMBER | tee /etc/hostname
|
||||||
|
sed -i 's/^127\.0\.1\.1/# 127\.0\.1\.1/g' /etc/hosts
|
||||||
|
echo "127.0.1.1 $SERIAL_NUMBER" | tee -a /etc/hosts
|
||||||
|
fi
|
||||||
|
|
||||||
|
return "${SERIAL}"
|
||||||
|
}
|
||||||
|
|
||||||
|
request-iot-package() {
|
||||||
|
SERIAL="$1"
|
||||||
|
curl -q -XGET http://frontend.hitachi.net/register?serial="$SERIAL"
|
||||||
|
}
|
||||||
|
|
||||||
|
download-iot-package() {
|
||||||
|
DL_URL="$1"
|
||||||
|
ATTEMPT=0
|
||||||
|
RETRIES=10
|
||||||
|
|
||||||
|
while [ ${ATTEMPT} -lt ${RETRIES} ]; do
|
||||||
|
curl -q -XGET "${DL_URL}" -o package.tgz && break
|
||||||
|
ATTEMPT=${ATTEMPT}+1
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Only runs if we are at first boot
|
||||||
|
run-if-unlocked() {
|
||||||
|
[ -f "${LOCKFILE}" ] || run "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Creates the lock file
|
||||||
|
set-lock-file() {
|
||||||
|
touch "${LOCKFILE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default run
|
||||||
|
run() {
|
||||||
|
SERIAL=$(set-hostname)
|
||||||
|
DL_URL=$(request-iot-package)
|
||||||
|
download-iot-package ${DL_URL} && {
|
||||||
|
set-lock-file
|
||||||
|
reboot now
|
||||||
|
} || {
|
||||||
|
logger ERROR "Impossible to setup device ${SERIAL} via ${DL_URL}. Waiting for Human to fix"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# By default executes from here
|
||||||
|
run-if-unlocked
|
5
stageX/prerun.sh
Executable file
5
stageX/prerun.sh
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
if [ ! -d "${ROOTFS_DIR}" ]; then
|
||||||
|
copy_previous
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user