From a8f0024403f76ea39280f98e3ffeddb2a6ab7f42 Mon Sep 17 00:00:00 2001 From: Javier Viguera Date: Wed, 7 Jun 2017 20:49:58 +0200 Subject: [PATCH] AWS Greengrass: update to version 1.0.0 Signed-off-by: Javier Viguera --- ...ve-bashisms-in-launcher-shell-script.patch | 69 +++++-- ...-some-time-to-check-GG-daemon-status.patch | 35 ---- .../greengrass/greengrass_0.9.0.bb | 162 ---------------- .../greengrass/greengrass_1.0.0.bb | 176 ++++++++++++++++++ 4 files changed, 226 insertions(+), 216 deletions(-) delete mode 100644 meta-digi-dey/recipes-aws/greengrass/greengrass/0002-greengrassd-wait-some-time-to-check-GG-daemon-status.patch delete mode 100644 meta-digi-dey/recipes-aws/greengrass/greengrass_0.9.0.bb create mode 100644 meta-digi-dey/recipes-aws/greengrass/greengrass_1.0.0.bb diff --git a/meta-digi-dey/recipes-aws/greengrass/greengrass/0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch b/meta-digi-dey/recipes-aws/greengrass/greengrass/0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch index fd722576a..1a6f0046d 100644 --- a/meta-digi-dey/recipes-aws/greengrass/greengrass/0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch +++ b/meta-digi-dey/recipes-aws/greengrass/greengrass/0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch @@ -1,16 +1,16 @@ From: Javier Viguera -Date: Wed, 31 May 2017 13:52:30 +0200 +Date: Wed, 7 Jun 2017 20:44:56 +0200 Subject: [PATCH] greengrassd: remove bashisms in launcher shell script So it runs properly in other Posix shells (like the one in Busybox) Signed-off-by: Javier Viguera --- - greengrassd | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) + greengrassd | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/greengrassd b/greengrassd -index c312d23dda3c..1d4b3ad6dd22 100755 +index cadaa6b0101e..e24422af2f3d 100755 --- a/greengrassd +++ b/greengrassd @@ -1,4 +1,4 @@ @@ -19,7 +19,7 @@ index c312d23dda3c..1d4b3ad6dd22 100755 ##########Environment Requirement for Greengrass Daemon########## # by default, the daemon assumes it's going to be launched from a directory -@@ -35,19 +35,19 @@ setup() { +@@ -38,19 +38,19 @@ setup() { mkdir -p $GGC_ROOT_FS # Mask greengrass directory for containers @@ -40,10 +40,10 @@ index c312d23dda3c..1d4b3ad6dd22 100755 - if [[ "$PROT_HARDLINK_VAL" -ne 1 || "$PROT_SOFTLINK_VAL" -ne 1 ]]; then + if [ "$PROT_HARDLINK_VAL" -ne 1 ] || [ "$PROT_SOFTLINK_VAL" -ne 1 ]; then - echo "Insecure configuration detected: No hardlink/softlink protection" | tee -a $CRASH_LOG + echo "AWS Greengrass detected insecure OS configuration: No hardlink/softlink protection enabled." | tee -a $CRASH_LOG exit 1 fi -@@ -124,7 +124,7 @@ validateEnvironment() { +@@ -127,7 +127,7 @@ validateEnvironment() { start() { setup @@ -52,21 +52,52 @@ index c312d23dda3c..1d4b3ad6dd22 100755 validatePlatformSecurity fi -@@ -169,7 +169,7 @@ stop() { - break - fi - done; -- echo -e "\nStopped greengrass daemon" -+ printf "\nStopped greengrass daemon\n" - rm $PID_FILE - else - echo "Unable to kill the process with pid: $PID" -@@ -186,16 +186,16 @@ usage() { +@@ -139,7 +139,7 @@ start() { + then + pid=$! + # sleep 5 seconds to wait for daemon to start or exit +- for i in {1..5}; do ++ for i in $(seq 1 5); do + echo -n "." + sleep 1 + done +@@ -147,10 +147,10 @@ start() { + if [ -e "/proc/$pid" ] + then + echo "$pid" > $PID_FILE +- echo -e "\e[0;32mGreengrass daemon started with PID: $pid\e[0m" ++ printf "\e[0;32mGreengrass daemon started with PID: $pid\e[0m\n" + else + echo "Greengrass daemon $pid failed to start" +- echo -e "\e[0;31m$(cat $CRASH_LOG)\e[0m" ++ printf "\e[0;31m$(cat $CRASH_LOG)\e[0m\n" + exit 1 + fi + else +@@ -179,7 +179,7 @@ stop() { + # If the pid no longer exists, we're done, remove the pid file and exit. Otherwise, just increment the loop counter + if [ ! -e "/proc/$PID" ]; then + rm $PID_FILE +- echo -e "\nStopped greengrass daemon, exiting with success" ++ printf "\nStopped greengrass daemon, exiting with success\n" + break + else + total_sleep_seconds=$(($total_sleep_seconds+1)) +@@ -194,7 +194,7 @@ stop() { + + if [ $total_sleep_seconds -ge $MAX_DAEMON_KILL_WAIT_SECONDS ]; then + # If we are here, we never exited in the previous loop and the pid still exists. Exit with failure. +- echo -e "\nProcess with pid $PID still alive after timeout of $MAX_DAEMON_KILL_WAIT_SECONDS seconds. Unable to kill process, exiting with failure." ++ printf "\nProcess with pid $PID still alive after timeout of $MAX_DAEMON_KILL_WAIT_SECONDS seconds. Unable to kill process, exiting with failure.\n" + exit 1 + fi + fi +@@ -204,16 +204,16 @@ usage() { echo "" echo "Usage: $0 [FLAGS] {start|stop|restart}" echo "" -- echo -e "[FLAGS]: -i, --insecure \t Run GGC in insecure mode, (highly discouraged!)" -+ printf "[FLAGS]: -i, --insecure \t Run GGC in insecure mode, (highly discouraged!)\n" +- echo -e "[FLAGS]: -i, --insecure \t Run GGC in insecure mode without hardlink/softlink protection, (highly discouraged for production use)" ++ printf "[FLAGS]: -i, --insecure \t Run GGC in insecure mode without hardlink/softlink protection, (highly discouraged for production use)\n" echo "" exit 1 } diff --git a/meta-digi-dey/recipes-aws/greengrass/greengrass/0002-greengrassd-wait-some-time-to-check-GG-daemon-status.patch b/meta-digi-dey/recipes-aws/greengrass/greengrass/0002-greengrassd-wait-some-time-to-check-GG-daemon-status.patch deleted file mode 100644 index 3b0d074ae..000000000 --- a/meta-digi-dey/recipes-aws/greengrass/greengrass/0002-greengrassd-wait-some-time-to-check-GG-daemon-status.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Javier Viguera -Date: Tue, 6 Jun 2017 18:34:10 +0200 -Subject: [PATCH] greengrassd: wait some time to check GG daemon status after - launch - -GG daemon may die due to misconfigurations, but this takes a bit of -time, so wait a bit to check whether the daemon is still alive. - -Signed-off-by: Javier Viguera ---- - greengrassd | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/greengrassd b/greengrassd -index 1d4b3ad6dd22..50c922bca3ae 100755 ---- a/greengrassd -+++ b/greengrassd -@@ -134,13 +134,16 @@ start() { - if nohup $COMMAND >/dev/null 2>$CRASH_LOG < /dev/null & - then - pid=$! -+ # Give GG daemon some time to initialize before checking -+ # whether it's still alive. -+ sleep .5 - if [ -e "/proc/$pid" ] - then - echo "PID: $pid" - echo "$pid" > $PID_FILE - echo "Greengrass daemon started" - else -- echo "Greengrass daemon $pid crashed after start" -+ echo "Greengrass daemon $pid crashed after start: check ${CRASH_LOG}" - exit 1 - fi - else diff --git a/meta-digi-dey/recipes-aws/greengrass/greengrass_0.9.0.bb b/meta-digi-dey/recipes-aws/greengrass/greengrass_0.9.0.bb deleted file mode 100644 index 459073004..000000000 --- a/meta-digi-dey/recipes-aws/greengrass/greengrass_0.9.0.bb +++ /dev/null @@ -1,162 +0,0 @@ -# Copyright (C) 2017, Digi International Inc. - -SUMMARY = "AWS IoT Greengrass core" -HOMEPAGE = "https://aws.amazon.com/greengrass/" -# -# The package includes different licenses: -# -# [Apache-2.0] -# LICENSE/github_aws_aws_sdk_go_License.txt -# LICENSE/github_coreos_go_systemd_License.txt -# LICENSE/github_docker_docker_License.txt -# LICENSE/github_docker_go_units_License.txt -# LICENSE/github_go_ini_ini_License.txt -# LICENSE/github_jmespath_go_jmespath_License.txt -# LICENSE/github_opencontainers_runc_License.txt -# LICENSE/github_opencontainers_runtime_spec_License.txt -# LICENSE/github_pquerna_ffjson_License.txt -# LICENSE/github_vishvananda_netlink_License.txt -# [BSD-2-Clause] -# LICENSE/github_godbus_dbus_License.txt -# LICENSE/github_huin_gobinarytest_License.txt -# LICENSE/github_seccomp_libseccomp_golang_License.txt -# LICENSE/github_syndtr_gocapability_License.txt -# [BSD-3-Clause] -# LICENSE/github_golang_protobuf_License.txt -# LICENSE/github_jeffallen_mqtt_License.txt -# LICENSE/Golang_License.txt -# [MIT] -# LICENSE/github_huin_mqtt_License.txt -# LICENSE/github_mattn_go_sqlite3_License.txt -# LICENSE/github_nu7hatch_gouuid_License.txt -# LICENSE/github_Sirupsen_logrus_License.txt -# LICENSE/github_urfave_cli_License.txt -# LICENSE/github_yosssi_gmq_License.txt -# [Proprietary] -# LICENSE/GG-BetaMaterials-License.txt -# -LICENSE = "Apache-2.0 | BSD-2-Clause | BSD-3-Clause | MIT | Proprietary" -LIC_FILES_CHKSUM = " \ - file://LICENSE/GG-BetaMaterials-License.txt;md5=a33101714f905fe97db6fe085c1271ef \ - file://LICENSE/github_aws_aws_sdk_go_License.txt;md5=d273d63619c9aeaf15cdaf76422c4f87 \ - file://LICENSE/github_coreos_go_systemd_License.txt;md5=715f3348ed8b9bf4fac3b08133384a4d \ - file://LICENSE/github_docker_docker_License.txt;md5=bba4ee48af378e39b452d742d29c710b \ - file://LICENSE/github_docker_go_units_License.txt;md5=bb99db20f1c48c2c4952c27c72855e36 \ - file://LICENSE/github_godbus_dbus_License.txt;md5=b03a62440372a9acf9692ad365932c87 \ - file://LICENSE/github_go_ini_ini_License.txt;md5=715f3348ed8b9bf4fac3b08133384a4d \ - file://LICENSE/github_golang_protobuf_License.txt;md5=16fe162f7848190010b6ec7bfaac030a \ - file://LICENSE/github_huin_gobinarytest_License.txt;md5=f2b3138d9d314bccf5297dea7e3e6d14 \ - file://LICENSE/github_huin_mqtt_License.txt;md5=12fd125064676697934b7d8c09bed0e8 \ - file://LICENSE/github_jeffallen_mqtt_License.txt;md5=b7269d52765d477e10f319c19d8a9d33 \ - file://LICENSE/github_jmespath_go_jmespath_License.txt;md5=640d33f0070c9dc3a194d2ed7db02974 \ - file://LICENSE/github_mattn_go_sqlite3_License.txt;md5=948f36a2300ac729e60416063190f664 \ - file://LICENSE/github_nu7hatch_gouuid_License.txt;md5=6b18748dcc29fda05fa5aaef44d517fd \ - file://LICENSE/github_opencontainers_runc_License.txt;md5=587c01b2dcc5dc3b4bed51b918c64731 \ - file://LICENSE/github_opencontainers_runtime_spec_License.txt;md5=ef95ed297310c3d09ba16c06d5e161a5 \ - file://LICENSE/github_pquerna_ffjson_License.txt;md5=d273d63619c9aeaf15cdaf76422c4f87 \ - file://LICENSE/github_seccomp_libseccomp_golang_License.txt;md5=9205c4c469bfb9d3a63f346539ee445b \ - file://LICENSE/github_Sirupsen_logrus_License.txt;md5=29baae91637760ae68feb57ca93e5a0a \ - file://LICENSE/github_syndtr_gocapability_License.txt;md5=321f58fa53a0b1bb9a887f14660d436b \ - file://LICENSE/github_urfave_cli_License.txt;md5=f1f14a2449300559aed90bedc36a71ed \ - file://LICENSE/github_vishvananda_netlink_License.txt;md5=c95fd0efd62139c155e956a448df8fd6 \ - file://LICENSE/github_yosssi_gmq_License.txt;md5=2509f45544da1ecce869ce2de1aa44dd \ - file://LICENSE/Golang_License.txt;md5=3d7ed06383c65a3161b36c6a0b0b98f5 \ -" - -SRC_URI = " \ - http:///not/exist/greengrass-linux-armv6l-${PV}-release.tar.gz \ - file://greengrass-init \ - file://0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch \ - file://0002-greengrassd-wait-some-time-to-check-GG-daemon-status.patch \ -" -SRC_URI[md5sum] = "eb7e6dbdfe00e51db8b7ffbd2284ae59" -SRC_URI[sha256sum] = "24da4016345eeeb6a86067619d385015139437fbd16dba9a91461758692f933f" - -GG_TARBALL_LOCAL_PATH ?= "" - -# The tarball is only available for downloading after registration, so provide -# a PREMIRROR to a local directory that can be configured in the project's -# local.conf file using GG_TARBALL_LOCAL_PATH variable. -python() { - gg_tarball_local_path = d.getVar('GG_TARBALL_LOCAL_PATH', True) - if gg_tarball_local_path: - premirrors = d.getVar('PREMIRRORS', True) - d.setVar('PREMIRRORS', "http:///not/exist/greengrass.* file://%s \\n %s" % (gg_tarball_local_path, premirrors)) -} - -S = "${WORKDIR}/${BPN}" - -inherit update-rc.d useradd - -GG_USESYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'yes', 'no', d)}" - -# Disable tasks not needed for the binary package -do_configure[noexec] = "1" -do_compile[noexec] = "1" - -do_install() { - install -d ${D}/${BPN} - tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - -C ${S} . \ - | tar --no-same-owner -xpf - -C ${D}/${BPN} - - # Install wrapper bootscript to launch Greengrass core on boot - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/greengrass-init ${D}${sysconfdir}/init.d/greengrass - sed -i -e "s,##GG_INSTALL_DIR##,/${BPN},g" ${D}${sysconfdir}/init.d/greengrass - - # Configure whether to use systemd or not - sed -i -e "/useSystemd/{s,\[yes|no],${GG_USESYSTEMD},g}" ${D}/${BPN}/configuration/config.json -} - -pkg_postinst_${PN}() { - # Enable protection for hardlinks and symlinks - if ! grep -qs 'protected_.*links' $D${sysconfdir}/sysctl.conf; then - cat >> $D${sysconfdir}/sysctl.conf <<-_EOF_ - # Greengrass: protect hardlinks/symlinks - fs.protected_hardlinks = 1 - fs.protected_symlinks = 1 - _EOF_ - fi - - # Customize '/etc/fstab' - if [ -f "$D${sysconfdir}/fstab" ]; then - # Disable TMPFS /var/volatile - sed -i -e '\#^tmpfs[[:blank:]]\+/var/volatile#s,^,#,g' $D${sysconfdir}/fstab - - # Mount a cgroup hierarchy with all available subsystems - if ! grep -qs '^cgroup' $D${sysconfdir}/fstab; then - cat >> $D${sysconfdir}/fstab <<-_EOF_ - # Greengrass: mount cgroups - cgroup /sys/fs/cgroup cgroup defaults 0 0 - _EOF_ - fi - fi - - # Disable '/etc/resolv.conf' symlink - if [ -f "$D${sysconfdir}/default/volatiles/00_core" ]; then - sed -i -e '/resolv.conf/d' $D${sysconfdir}/default/volatiles/00_core - cat >> $D${sysconfdir}/default/volatiles/00_core <<-_EOF_ - # Greengrass: create a real (no symlink) resolv.conf - f root root 0644 /etc/resolv.conf none - _EOF_ - fi -} - -FILES_${PN} = "/${BPN} ${sysconfdir}" - -INITSCRIPT_NAME = "greengrass" -INITSCRIPT_PARAMS = "defaults 80 20" - -USERADD_PACKAGES = "${PN}" -GROUPADD_PARAM_${PN} = "-r ggc_group" -USERADD_PARAM_${PN} = "-r -M -N -g ggc_group -s /bin/false ggc_user" - -# -# Disable failing QA checks: -# -# Binary was already stripped -# No GNU_HASH in the elf binary -# -INSANE_SKIP_${PN} += "already-stripped ldflags" - -RDEPENDS_${PN} += "ca-certificates python-argparse python-json python-numbers sqlite3" diff --git a/meta-digi-dey/recipes-aws/greengrass/greengrass_1.0.0.bb b/meta-digi-dey/recipes-aws/greengrass/greengrass_1.0.0.bb new file mode 100644 index 000000000..c73977241 --- /dev/null +++ b/meta-digi-dey/recipes-aws/greengrass/greengrass_1.0.0.bb @@ -0,0 +1,176 @@ +# Copyright (C) 2017, Digi International Inc. + +SUMMARY = "AWS IoT Greengrass core" +HOMEPAGE = "https://aws.amazon.com/greengrass/" +# +# The package includes different licenses: +# +# [Apache-2.0] +# LICENSE/attributions/github_aws_aws_sdk_go_License.txt +# LICENSE/attributions/github_coreos_go_systemd_License.txt +# LICENSE/attributions/github_docker_docker_License.txt +# LICENSE/attributions/github_docker_go_units_License.txt +# LICENSE/attributions/github_go_ini_ini_License.txt +# LICENSE/attributions/github_jmespath_go_jmespath_License.txt +# LICENSE/attributions/github_opencontainers_runc_License.txt +# LICENSE/attributions/github_opencontainers_runtime_spec_License.txt +# LICENSE/attributions/github_pquerna_ffjson_License.txt +# LICENSE/attributions/github_vishvananda_netlink_License.txt +# [BSD-2-Clause] +# LICENSE/attributions/github_godbus_dbus_License.txt +# LICENSE/attributions/github_huin_gobinarytest_License.txt +# LICENSE/attributions/github_seccomp_libseccomp_golang_License.txt +# LICENSE/attributions/github_syndtr_gocapability_License.txt +# [BSD-3-Clause] +# LICENSE/attributions/github_golang_protobuf_License.txt +# LICENSE/attributions/github_jeffallen_mqtt_License.txt +# LICENSE/attributions/Golang_License.txt +# [MIT] +# LICENSE/attributions/github_huin_mqtt_License.txt +# LICENSE/attributions/github_mattn_go_sqlite3_License.txt +# LICENSE/attributions/github_nu7hatch_gouuid_License.txt +# LICENSE/attributions/github_Sirupsen_logrus_License.txt +# LICENSE/attributions/github_urfave_cli_License.txt +# LICENSE/attributions/github_yosssi_gmq_License.txt +# [PD] +# LICENSE/attributions/sqlite_org_License.txt +# [Proprietary] +# LICENSE/Greengrass AWS SW License (IoT additiona) vr6.txt +# +LICENSE = "Apache-2.0 | BSD-2-Clause | BSD-3-Clause | MIT | PD | Proprietary" +LIC_FILES_CHKSUM = " \ + file://LICENSE/attributions/github_aws_aws_sdk_go_License.txt;md5=d273d63619c9aeaf15cdaf76422c4f87 \ + file://LICENSE/attributions/github_coreos_go_systemd_License.txt;md5=715f3348ed8b9bf4fac3b08133384a4d \ + file://LICENSE/attributions/github_docker_docker_License.txt;md5=bba4ee48af378e39b452d742d29c710b \ + file://LICENSE/attributions/github_docker_go_units_License.txt;md5=bb99db20f1c48c2c4952c27c72855e36 \ + file://LICENSE/attributions/github_godbus_dbus_License.txt;md5=b03a62440372a9acf9692ad365932c87 \ + file://LICENSE/attributions/github_go_ini_ini_License.txt;md5=715f3348ed8b9bf4fac3b08133384a4d \ + file://LICENSE/attributions/github_golang_protobuf_License.txt;md5=16fe162f7848190010b6ec7bfaac030a \ + file://LICENSE/attributions/github_huin_gobinarytest_License.txt;md5=f2b3138d9d314bccf5297dea7e3e6d14 \ + file://LICENSE/attributions/github_huin_mqtt_License.txt;md5=12fd125064676697934b7d8c09bed0e8 \ + file://LICENSE/attributions/github_jeffallen_mqtt_License.txt;md5=b7269d52765d477e10f319c19d8a9d33 \ + file://LICENSE/attributions/github_jmespath_go_jmespath_License.txt;md5=640d33f0070c9dc3a194d2ed7db02974 \ + file://LICENSE/attributions/github_mattn_go_sqlite3_License.txt;md5=948f36a2300ac729e60416063190f664 \ + file://LICENSE/attributions/github_nu7hatch_gouuid_License.txt;md5=6b18748dcc29fda05fa5aaef44d517fd \ + file://LICENSE/attributions/github_opencontainers_runc_License.txt;md5=587c01b2dcc5dc3b4bed51b918c64731 \ + file://LICENSE/attributions/github_opencontainers_runtime_spec_License.txt;md5=ef95ed297310c3d09ba16c06d5e161a5 \ + file://LICENSE/attributions/github_pquerna_ffjson_License.txt;md5=d273d63619c9aeaf15cdaf76422c4f87 \ + file://LICENSE/attributions/github_seccomp_libseccomp_golang_License.txt;md5=9205c4c469bfb9d3a63f346539ee445b \ + file://LICENSE/attributions/github_Sirupsen_logrus_License.txt;md5=29baae91637760ae68feb57ca93e5a0a \ + file://LICENSE/attributions/github_syndtr_gocapability_License.txt;md5=321f58fa53a0b1bb9a887f14660d436b \ + file://LICENSE/attributions/github_urfave_cli_License.txt;md5=f1f14a2449300559aed90bedc36a71ed \ + file://LICENSE/attributions/github_vishvananda_netlink_License.txt;md5=c95fd0efd62139c155e956a448df8fd6 \ + file://LICENSE/attributions/github_yosssi_gmq_License.txt;md5=2509f45544da1ecce869ce2de1aa44dd \ + file://LICENSE/attributions/Golang_License.txt;md5=3d7ed06383c65a3161b36c6a0b0b98f5 \ + file://LICENSE/attributions/sqlite_org_License.txt;md5=380e2694a297aa32879ca2ae9c6c029b \ +" + +# Bitbake does not support spaces in filenames, but GG License does have spaces, +# so workaround the problem by renaming the file before using it. +GG_LIC_FILENAME = "Greengrass AWS SW License (IoT additiona) vr6.txt" +GG_LIC_FILENAME_NOSPACES = "${@d.getVar('GG_LIC_FILENAME', True).replace(' ','_')}" +LIC_FILES_CHKSUM += "file://LICENSE/${GG_LIC_FILENAME_NOSPACES};md5=7df5bf535d02b2f83c260250fe330b6c" + +SRC_URI = " \ + http:///not/exist/greengrass-linux-armv7l-${PV}.tar.gz \ + file://greengrass-init \ + file://0001-greengrassd-remove-bashisms-in-launcher-shell-script.patch \ +" +SRC_URI[md5sum] = "893cf23f3e645d6cfe6975ea55b8b458" +SRC_URI[sha256sum] = "aa71facd21e515f6e98d4aaec873bb9bf9490552df3466ed57c0aef5cc8bef4a" + +GG_TARBALL_LOCAL_PATH ?= "" + +# The tarball is only available for downloading after registration, so provide +# a PREMIRROR to a local directory that can be configured in the project's +# local.conf file using GG_TARBALL_LOCAL_PATH variable. +python() { + gg_tarball_local_path = d.getVar('GG_TARBALL_LOCAL_PATH', True) + if gg_tarball_local_path: + premirrors = d.getVar('PREMIRRORS', True) + d.setVar('PREMIRRORS', "http:///not/exist/greengrass.* file://%s \\n %s" % (gg_tarball_local_path, premirrors)) +} + +S = "${WORKDIR}/${BPN}" + +inherit update-rc.d useradd + +GG_USESYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'yes', 'no', d)}" + +# Rename GG license file +do_unpack[postfuncs] += "rename_license" +rename_license() { + cd ${S}/LICENSE + mv "${GG_LIC_FILENAME}" "${GG_LIC_FILENAME_NOSPACES}" +} + +# Disable tasks not needed for the binary package +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install() { + install -d ${D}/${BPN} + tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - -C ${S} . \ + | tar --no-same-owner -xpf - -C ${D}/${BPN} + + # Install wrapper bootscript to launch Greengrass core on boot + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/greengrass-init ${D}${sysconfdir}/init.d/greengrass + sed -i -e "s,##GG_INSTALL_DIR##,/${BPN},g" ${D}${sysconfdir}/init.d/greengrass + + # Configure whether to use systemd or not + sed -i -e "/useSystemd/{s,\[yes|no],${GG_USESYSTEMD},g}" ${D}/${BPN}/configuration/config.json +} + +pkg_postinst_${PN}() { + # Enable protection for hardlinks and symlinks + if ! grep -qs 'protected_.*links' $D${sysconfdir}/sysctl.conf; then + cat >> $D${sysconfdir}/sysctl.conf <<-_EOF_ + # Greengrass: protect hardlinks/symlinks + fs.protected_hardlinks = 1 + fs.protected_symlinks = 1 + _EOF_ + fi + + # Customize '/etc/fstab' + if [ -f "$D${sysconfdir}/fstab" ]; then + # Disable TMPFS /var/volatile + sed -i -e '\#^tmpfs[[:blank:]]\+/var/volatile#s,^,#,g' $D${sysconfdir}/fstab + + # Mount a cgroup hierarchy with all available subsystems + if ! grep -qs '^cgroup' $D${sysconfdir}/fstab; then + cat >> $D${sysconfdir}/fstab <<-_EOF_ + # Greengrass: mount cgroups + cgroup /sys/fs/cgroup cgroup defaults 0 0 + _EOF_ + fi + fi + + # Disable '/etc/resolv.conf' symlink + if [ -f "$D${sysconfdir}/default/volatiles/00_core" ]; then + sed -i -e '/resolv.conf/d' $D${sysconfdir}/default/volatiles/00_core + cat >> $D${sysconfdir}/default/volatiles/00_core <<-_EOF_ + # Greengrass: create a real (no symlink) resolv.conf + f root root 0644 /etc/resolv.conf none + _EOF_ + fi +} + +FILES_${PN} = "/${BPN} ${sysconfdir}" + +INITSCRIPT_NAME = "greengrass" +INITSCRIPT_PARAMS = "defaults 80 20" + +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "-r ggc_group" +USERADD_PARAM_${PN} = "-r -M -N -g ggc_group -s /bin/false ggc_user" + +# +# Disable failing QA checks: +# +# Binary was already stripped +# No GNU_HASH in the elf binary +# +INSANE_SKIP_${PN} += "already-stripped ldflags" + +RDEPENDS_${PN} += "ca-certificates python-argparse python-json python-numbers sqlite3"