Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ubuntu Core GG snap? #1689

Open
wills721 opened this issue Feb 11, 2025 · 35 comments
Open

Ubuntu Core GG snap? #1689

wills721 opened this issue Feb 11, 2025 · 35 comments
Labels
enhancement New feature or request

Comments

@wills721
Copy link

Describe the bug
Searching for Ubuntu Core Snap for Greengrass v2?

To Reproduce
[Steps to reproduce the behavior. If possible, provide a minimal amount of code that causes the bug.]
(https://snapcraft.io/aws-iot-greengrass)
Only v1 available and it is retired?

Expected behavior
Install greengrass v2 for Ubuntu Core using Snap (Ubuntu Core only supports Snap)

Actual behavior
Not available

Environment

  • OS: Ubuntu Core 24
  • JDK version:
  • Nucleus version:

Additional context
Add any other context about the problem here.

E.g. what is the impact of the bug?

@wills721 wills721 added bug Something isn't working needs-triage Needs eyeballs labels Feb 11, 2025
@patrzhan
Copy link
Member

Hi, we currently do not officially support snaps for Greengrass v2. Although it may be possible for us to consider it in the future, we don't currently have plans for it.

@patrzhan patrzhan added enhancement New feature or request and removed bug Something isn't working needs-triage Needs eyeballs labels Feb 12, 2025
@wills721
Copy link
Author

So, that implies you also do not support Ubuntu Core (24, 22, etc). That would be how I would interpret this. Right?

@patrzhan
Copy link
Member

Thank you for your interest in Greengrass snap support. We will take this feedback and prioritize it internally - it's already in our backlog. If you are working with a Technical Account Manager, please make sure to also surface this feature request with them.

In the meantime, while we don't have an officially supported snap, we have had success getting Greengrass running on Ubuntu Core. Here's an example snapcraft.yaml that you can use as a reference. Note that version and source should be updated in the example.

snapcraft.yaml:

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

name: aws-iot-greengrass-v2
base: core20
# GGv2 version, such as 2.14.1
version: {VERSION}
summary: AWS supported software that extends cloud capabilities to local devices.
description: |
  AWS supported software that extends cloud capabilities to local devices.
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict

# declare home plug to allow access to files owned by the user in the user’s home ($HOME) directory
plugs:
  home-for-greengrass:
    interface: home
    read: all
  docker-cli:
    interface: docker
  docker-executables:
    content: docker-executables
    default-provider: docker
    interface: content
    target: $SNAP/docker-env
  root-dot-docker:
    interface: personal-files
    write:
    - $HOME/.docker

parts:
  greengrass:
    # See 'snapcraft plugins'
    plugin: dump
    # Add source link, in format https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-{VERSION}.zip
    source: {SOURCE}
    stage-packages:
      - openjdk-8-jre-headless
    build-packages:
      # We need to replace dangling symlink for java ssl certs.
      - ca-certificates-java
    override-build: |
      # execute default build step
      snapcraftctl build

      cd "$SNAPCRAFT_PART_INSTALL/usr/lib/jvm" || exit 2

      # The java-8-openjdk-<arch> dir has a different name for each arch, so
      # we need a symlink that references the actual name.
      # Described in: https://forum.snapcraft.io/t/advanced-grammar-for-layouts-or-workaround/17177/4

      # This will be a symlink to the arch-specific openjdk directory.
      OPENJDK_DIR_SYMLINK="java-8-openjdk-arch-symlink"

      case $(arch) in
              x86_64)
              OPENJDK_DIR="java-8-openjdk-amd64"
              ;;
      esac

      ln -s "$OPENJDK_DIR" "$OPENJDK_DIR_SYMLINK" || \
      (echo "failed to link $OPENJDK_DIR_SYMLINK -> $OPENJDK_DIR" \
      && exit 4)

      # The cacerts under /etc won't be accessible after build-time,
      # so the symlink leading to them will become a dangling symlinnk.
      # To avoid this, we'll copy them to the java subdirectory.
      cp /etc/ssl/certs/java/cacerts \
              "$SNAPCRAFT_PART_INSTALL/usr/lib/jvm/$OPENJDK_DIR_SYMLINK/jre/lib/security/cacerts" \
              || exit 5
      cp /etc/ssl/certs/java/cacerts \
              "$SNAPCRAFT_PART_INSTALL/etc/ssl/certs/java/cacerts" \
              || exit 6
  wrapper-scripts:
    plugin: dump
    source: local-scripts/

layout:
  # symlink java
  /usr/bin/java:
    symlink: $SNAP/usr/lib/jvm/java-8-openjdk-arch-symlink/jre/bin/java

apps:
  greengrass:
    command: exec-loader.sh
    daemon: simple
    install-mode: disable
    plugs:
      - mount-observe
      - network-bind
      - process-control
      - hardware-observe
      - log-observe
      - home-for-greengrass
      - docker-cli
      - docker-executables
      - root-dot-docker

configure hook:

#!/bin/bash

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

validate_greengrass_config() {
  greengrass_config="$(snapctl get greengrass-config)"

  # TODO: Add correct validation for config file
  if [ -z "$greengrass_config" ]; then
    echo "\"$greengrass_config\" is not a valid Greengrass config" >&2
    return 1
  fi
}
validate_greengrass_config

install hook:

#!/bin/bash

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

# Set default value for greengrass config.
# For now, it doesn't matter if this is invalid as user will provide config during setup
snapctl set greengrass-config="$HOME/defaultconfig.yaml"

We have this exec_loader.sh script referenced in the snapcraft.yaml:

#!/bin/sh

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

# This script is necessary because loader script needs to be executed from
# $SNAP_DATA/greengrass/v2/alts/current/distro/bin path.
# Referencing this path from the snapcraft.yaml file results in path does not exist errors

set -o xtrace

GREENGRASS_CONFIG="$(snapctl get greengrass-config)"

# cd into install dir
cd "$SNAP_DATA" || exit 1
mkdir -p $SNAP_DATA/greengrass/v2 || exit 2
java -Droot=$SNAP_DATA/greengrass/v2 -Dlog.store=FILE -jar $SNAP/lib/Greengrass.jar \
     --start false --init-config $GREENGRASS_CONFIG --component-default-user root:root || exit 3


cd "$SNAP_DATA/greengrass/v2/alts/current/distro/bin" || exit 4
# TODO: Avoid running executables from write dir like $SNAP_DATA. Instead try running them from $SNAP
exec ./loader

Please let me know if you have any other questions!

@wills721
Copy link
Author

I am. His name is Randhir, Priyanka [email protected]

Thank you I will give this a whirl.

Since AWS-CLI also is not supported -- are there any instructions here for setup after installation? I would imagine this snap for v2 also covers aws-cil?

@patrzhan
Copy link
Member

For aws-cli, you may need to reach out on their repository for help setting up. I don't believe we have an example for a GGv2 snap that includes the aws-cli.

@wills721
Copy link
Author

I actually already did. But, isnt aws-cli dependency to GGv2 snap? The only reason I asked was because I assumed it was.

@patrzhan
Copy link
Member

patrzhan commented Feb 15, 2025

Greengrass doesn't have a dependency on aws-cli, though you might find it useful to have for development like creating deployments usually that is done from your development device and not your Greengrass device. Are you thinking of the Greengrass CLI component? The Greengrass CLI component is also not required but can be helpful during development as well, but this would be a component that you can deploy once you have Greengrass up and running.

@wills721
Copy link
Author

No. I guess I've been installing aws-cli unnecessarily along with gg. I get it now.

@wills721
Copy link
Author

wills721 commented Feb 16, 2025

@patrzhan So I was able to successfully build your snap. I have my own aws-iot-greengrass-v2_2.14.1_arm64.snap. I needed to revise also the local-scripts location and the arch for aarch64 to get the right jdk (i'm using ubuntu desktop 24 arm64 on a pi).

However, I have several custom greengrass components. One in particular interacts with the serial port (/dev/ttyS0) relying also on using GPIO operations. I also need to enable I2C and disable serial console and enable serial hardware(I do this all normally with raspi-config). How would you recommend I configure all of this in the snap (interfaces?) so my custom component works properly?

@thomas-roos
Copy link
Member

You could use also Yocto to build an image that has that settings to I2C etc. settings and Greengrass included. Just add another solution to the problem - here is an example image for Greengrass for Raspberry Pi: https://github.com/aws4embeddedlinux/meta-aws-demos/blob/master/meta-aws-demos/recipes-core/images/aws-iot-greengrass-demo-image/README.md
Also available for fast tryout as a binary: https://github.com/aws4embeddedlinux/meta-aws-demos/releases/tag/2025.02.07

@wills721
Copy link
Author

@thomas-roos This is interesting and thank you for sending. But, it seems to abandon Ubuntu Core and all its (run time, deployment, maintenance) goodness. I think.

@thomas-roos
Copy link
Member

You can use the free yocto goodness instead 😉

@wills721
Copy link
Author

@patrzhan I've added a few interfaces:

willthio@localhost:/$ snap connections aws-iot-greengrass-v2
Interface Plug Slot Notes
content aws-iot-greengrass-v2:docker-executables - -
docker aws-iot-greengrass-v2:docker-cli - -
gpio-control aws-iot-greengrass-v2:gpio-control - -
hardware-observe aws-iot-greengrass-v2:hardware-observe - -
home aws-iot-greengrass-v2:home-for-greengrass - -
i2c aws-iot-greengrass-v2:i2c - -
log-observe aws-iot-greengrass-v2:log-observe - -
mount-observe aws-iot-greengrass-v2:mount-observe - -
network-bind aws-iot-greengrass-v2:network-bind :network-bind -
personal-files aws-iot-greengrass-v2:root-dot-docker - -
physical-memory-control aws-iot-greengrass-v2:physical-memory-control - -
process-control aws-iot-greengrass-v2:process-control - -
serial-port aws-iot-greengrass-v2:serial-port - -

How exactly do I run this and configure (e.g. my aws credentials) etc?

@wills721
Copy link
Author

@patrzhan

willthio@localhost:/var/snap/aws-iot-greengrass-v2/current/greengrass/v2$ sudo snap get aws-iot-greengrass-v2
Key Value
gg-certs /home/willthio/gg/local/greengrass-v2-certs/gg.tar.gz
greengrass-config /root/snap/aws-iot-greengrass-v2/x1/defaultconfig.yaml

So, I'm taking guesses :) I found the v1 had some sort of tar that contained certs and config.....I'm trying to guess what these are. Looking for some help in how to configure this!

@patrzhan
Copy link
Member

patrzhan commented Feb 17, 2025

I'm not personally familiar with the snap, but some notes we have mention to use manual installation with these instructions:

Greengrass manual provisioning

In order to run Greengrass you would need to follow the manual instruction guide here: https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html
First you must complete the following steps from the guide, to be able to provision your development device.

Note: You will skip Download the AWS IoT Greengrass Core software step as this is handled by the Greengrass snap

Continue following the manual provisioning guide

  • Install the AWS IoT Greengrass Core software
    • Under this section, you only need to perform step 2. The goal is to create a config.yaml file with the device details from the above steps.
    • Note: Edit the rootpath in the config file to point to the root path inside the snap. In this case it would be "/var/snap/aws-iot-greengrass-v2/current/greengrass/v2"
    • Replace certificateFilePath, privateKeyPath and rootCaPath with their respective paths under $HOME dir.
    • your config should look like so
      ---
      system:
          certificateFilePath: "/home/ubuntu/greengrass/v2/device.pem.crt"
          privateKeyPath: "/home/ubuntu/greengrass/v2/private.pem.key"
          rootCaPath: "/home/ubuntu/greengrass/v2/AmazonRootCA1.pem"
          rootpath: "/var/snap/aws-iot-greengrass-v2/current/greengrass/v2"
          thingName: "MyGreengrassCoreSnap"
      services:
          aws.greengrass.Nucleus:
              componentType: "NUCLEUS"
              version: "2.14.1"
              configuration:
                  awsRegion: "us-west-2"
                  iotRoleAlias: "GreengrassCoreSnapTokenExchangeRoleAlias"
                  iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
                  iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
      

Once you have this config.yaml created on your device, copy the file to the user's home directory.
You can then set the snap configuration with

sudo snap set aws-iot-greengrass-v2 greengrass-config=$HOME/config.yaml

@wills721
Copy link
Author

I will give this a shot!

@wills721
Copy link
Author

@patrzhan

One quick question as I ponder this before I do it. When installing GG the "normal outside snap" way the core device is automatically created w/in AWS IoT along with adding then the core device to a group. For instance, that is what the following will do when you install gg outside of snap:

sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE
-jar ./GreengrassInstaller/lib/Greengrass.jar
--aws-region
--thing-name
--thing-group-name
--component-default-user ggc_user:ggc_group
--provision true
--setup-system-service true

This is what I need to do -- but it seems what you are showing is more 'hard-coded' for the thing-core-name (etc)?

@patrzhan
Copy link
Member

Yeah, in manual provisioning you'll create those resources yourself and then configure GG via the config file you're adding. You'd be able to set it as whichever thing name you create as long as you have the correct certificates downloaded.

@wills721
Copy link
Author

Yeah, I see. It works but just a lot more work. I'll be testing this today. Thank you.

@wills721
Copy link
Author

Ok. First issue. The instructions you gave me was for a thing but not a core device. When you create a core device on the AWS IoT console it creates the config.yaml and you can download all the certs but the core device is not visible/active until you run the following command per the AWS IoT console:

sed -i 's|{{config_dir}}|/greengrass/v2|g; s|{{nucleus_component}}|aws.greengrass.Nucleus|g' /greengrass/v2/config.yaml && sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE -jar ./GreengrassInstaller/lib/Greengrass.jar --init-config /greengrass/v2/config.yaml --component-default-user ggc_user:ggc_group --setup-system-service true

I never had to do this -- I mean the core device was just created for me. Do I need to setup greengrass the old way first -- create and install the core device and THEN setup the config.yaml so the snap runs using the core device?

@MikeDombo
Copy link
Member

A Greengrass core device is a thing. Creating a thing is all you need to do. Then just launch Greengrass. The core device will be created automatically when Greengrass successfully connects to AWS IoT

@wills721
Copy link
Author

I know its a thing also of course. I'll try this with the Snap. @MikeDombo

@wills721
Copy link
Author

Here is what I get now -- I don't get far enough to see the core device creation due to the following error. Any idea?

2025-02-18T17:48:36.582Z [WARN] (main) oshi.software.os.linux.LinuxOperatingSystem: Did not find udev library in operating system. Some features may not work.. {}
2025-02-18T17:48:36.590Z [ERROR] (Serialized listener processor) com.aws.greengrass.dependency.Context: run-on-publish-queue-error. {}
java.lang.NoClassDefFoundError: Could not initialize class com.aws.greengrass.util.Permissions
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-18T17:48:36.590Z [ERROR] (main) com.aws.greengrass.easysetup.GreengrassSetup: Error while trying to setup Greengrass Nucleus. {}
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at oshi.jna.platform.linux.LinuxLibc.(LinuxLibc.java:22)
at oshi.software.os.linux.LinuxOperatingSystem.(LinuxOperatingSystem.java:97)
at oshi.SystemInfo.createOperatingSystem(SystemInfo.java:85)
at oshi.util.Memoizer$1.get(Memoizer.java:61)
at oshi.SystemInfo.getOperatingSystem(SystemInfo.java:76)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
at com.aws.greengrass.util.Permissions.(Permissions.java:20)
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

@wills721
Copy link
Author

Here is the log in its entirety

2025-02-18T20:59:32.594Z [WARN] (main) oshi.software.os.linux.LinuxOperatingSystem: Did not find udev library in operating system. Some features may not work.. {}
2025-02-18T20:59:32.601Z [ERROR] (Serialized listener processor) com.aws.greengrass.dependency.Context: run-on-publish-queue-error. {}
java.lang.NoClassDefFoundError: Could not initialize class com.aws.greengrass.util.Permissions
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-18T20:59:32.601Z [ERROR] (main) com.aws.greengrass.easysetup.GreengrassSetup: Error while trying to setup Greengrass Nucleus. {}
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at oshi.jna.platform.linux.LinuxLibc.(LinuxLibc.java:22)
at oshi.software.os.linux.LinuxOperatingSystem.(LinuxOperatingSystem.java:97)
at oshi.SystemInfo.createOperatingSystem(SystemInfo.java:85)
at oshi.util.Memoizer$1.get(Memoizer.java:61)
at oshi.SystemInfo.getOperatingSystem(SystemInfo.java:76)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
at com.aws.greengrass.util.Permissions.(Permissions.java:20)
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-18T20:59:32.607Z [WARN] (Thread-1) com.aws.greengrass.lifecyclemanager.Kernel: Shutting down Nucleus due to external signal. {}
2025-02-18T20:59:32.608Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-shutdown. {main=null}
2025-02-18T20:59:32.611Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for services to shutdown. {}
2025-02-18T20:59:32.612Z [INFO] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-initiated. {}
2025-02-18T20:59:32.613Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for executors to shutdown. {}
2025-02-18T20:59:32.613Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-complete. {executor-terminated=true, scheduled-executor-terminated=true}
2025-02-18T20:59:32.613Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-initiated. {}
2025-02-18T20:59:32.615Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-complete. {}
2025-02-18T20:59:33.408Z [WARN] (main) oshi.software.os.linux.LinuxOperatingSystem: Did not find udev library in operating system. Some features may not work.. {}
2025-02-18T20:59:33.414Z [ERROR] (Serialized listener processor) com.aws.greengrass.dependency.Context: run-on-publish-queue-error. {}
java.lang.NoClassDefFoundError: Could not initialize class com.aws.greengrass.util.Permissions
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-18T20:59:33.414Z [ERROR] (main) com.aws.greengrass.easysetup.GreengrassSetup: Error while trying to setup Greengrass Nucleus. {}
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at oshi.jna.platform.linux.LinuxLibc.(LinuxLibc.java:22)
at oshi.software.os.linux.LinuxOperatingSystem.(LinuxOperatingSystem.java:97)
at oshi.SystemInfo.createOperatingSystem(SystemInfo.java:85)
at oshi.util.Memoizer$1.get(Memoizer.java:61)
at oshi.SystemInfo.getOperatingSystem(SystemInfo.java:76)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
at com.aws.greengrass.util.Permissions.(Permissions.java:20)
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-18T20:59:33.417Z [WARN] (Thread-1) com.aws.greengrass.lifecyclemanager.Kernel: Shutting down Nucleus due to external signal. {}
2025-02-18T20:59:33.417Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-shutdown. {main=null}
2025-02-18T20:59:33.421Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for services to shutdown. {}
2025-02-18T20:59:33.422Z [INFO] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-initiated. {}
2025-02-18T20:59:33.422Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for executors to shutdown. {}
2025-02-18T20:59:33.423Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-complete. {executor-terminated=true, scheduled-executor-terminated=true}
2025-02-18T20:59:33.423Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-initiated. {}
2025-02-18T20:59:33.425Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-complete. {}
2025-02-18T20:59:34.398Z [WARN] (main) oshi.software.os.linux.LinuxOperatingSystem: Did not find udev library in operating system. Some features may not work.. {}
2025-02-18T20:59:34.405Z [ERROR] (Serialized listener processor) com.aws.greengrass.dependency.Context: run-on-publish-queue-error. {}
java.lang.NoClassDefFoundError: Could not initialize class com.aws.greengrass.util.Permissions
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-18T20:59:34.405Z [ERROR] (main) com.aws.greengrass.easysetup.GreengrassSetup: Error while trying to setup Greengrass Nucleus. {}
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at oshi.jna.platform.linux.LinuxLibc.(LinuxLibc.java:22)
at oshi.software.os.linux.LinuxOperatingSystem.(LinuxOperatingSystem.java:97)
at oshi.SystemInfo.createOperatingSystem(SystemInfo.java:85)
at oshi.util.Memoizer$1.get(Memoizer.java:61)
at oshi.SystemInfo.getOperatingSystem(SystemInfo.java:76)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
at com.aws.greengrass.util.Permissions.(Permissions.java:20)
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-18T20:59:34.408Z [WARN] (Thread-1) com.aws.greengrass.lifecyclemanager.Kernel: Shutting down Nucleus due to external signal. {}
2025-02-18T20:59:34.408Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-shutdown. {main=null}
2025-02-18T20:59:34.411Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for services to shutdown. {}
2025-02-18T20:59:34.413Z [INFO] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-initiated. {}
2025-02-18T20:59:34.413Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for executors to shutdown. {}
2025-02-18T20:59:34.413Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-complete. {executor-terminated=true, scheduled-executor-terminated=true}
2025-02-18T20:59:34.414Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-initiated. {}
2025-02-18T20:59:34.415Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-complete. {}
2025-02-18T20:59:35.152Z [WARN] (main) oshi.software.os.linux.LinuxOperatingSystem: Did not find udev library in operating system. Some features may not work.. {}
2025-02-18T20:59:35.159Z [ERROR] (main) com.aws.greengrass.easysetup.GreengrassSetup: Error while trying to setup Greengrass Nucleus. {}
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at oshi.jna.platform.linux.LinuxLibc.(LinuxLibc.java:22)
at oshi.software.os.linux.LinuxOperatingSystem.(LinuxOperatingSystem.java:97)
at oshi.SystemInfo.createOperatingSystem(SystemInfo.java:85)
at oshi.util.Memoizer$1.get(Memoizer.java:61)
at oshi.SystemInfo.getOperatingSystem(SystemInfo.java:76)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
at com.aws.greengrass.util.Permissions.(Permissions.java:20)
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-18T20:59:35.159Z [ERROR] (Serialized listener processor) com.aws.greengrass.dependency.Context: run-on-publish-queue-error. {}
java.lang.NoClassDefFoundError: Could not initialize class com.aws.greengrass.util.Permissions
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-18T20:59:35.162Z [WARN] (Thread-1) com.aws.greengrass.lifecyclemanager.Kernel: Shutting down Nucleus due to external signal. {}
2025-02-18T20:59:35.162Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-shutdown. {main=null}
2025-02-18T20:59:35.166Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for services to shutdown. {}
2025-02-18T20:59:35.167Z [INFO] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-initiated. {}
2025-02-18T20:59:35.167Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for executors to shutdown. {}
2025-02-18T20:59:35.167Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-complete. {executor-terminated=true, scheduled-executor-terminated=true}
2025-02-18T20:59:35.168Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-initiated. {}
2025-02-18T20:59:35.169Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-complete. {}
2025-02-18T20:59:36.156Z [WARN] (main) oshi.software.os.linux.LinuxOperatingSystem: Did not find udev library in operating system. Some features may not work.. {}
2025-02-18T20:59:36.164Z [ERROR] (Serialized listener processor) com.aws.greengrass.dependency.Context: run-on-publish-queue-error. {}
java.lang.NoClassDefFoundError: Could not initialize class com.aws.greengrass.util.Permissions
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-18T20:59:36.164Z [ERROR] (main) com.aws.greengrass.easysetup.GreengrassSetup: Error while trying to setup Greengrass Nucleus. {}
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at oshi.jna.platform.linux.LinuxLibc.(LinuxLibc.java:22)
at oshi.software.os.linux.LinuxOperatingSystem.(LinuxOperatingSystem.java:97)
at oshi.SystemInfo.createOperatingSystem(SystemInfo.java:85)
at oshi.util.Memoizer$1.get(Memoizer.java:61)
at oshi.SystemInfo.getOperatingSystem(SystemInfo.java:76)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
at com.aws.greengrass.util.Permissions.(Permissions.java:20)
at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-18T20:59:36.167Z [WARN] (Thread-1) com.aws.greengrass.lifecyclemanager.Kernel: Shutting down Nucleus due to external signal. {}
2025-02-18T20:59:36.167Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-shutdown. {main=null}
2025-02-18T20:59:36.171Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for services to shutdown. {}
2025-02-18T20:59:36.172Z [INFO] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-initiated. {}
2025-02-18T20:59:36.172Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for executors to shutdown. {}
2025-02-18T20:59:36.172Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-complete. {executor-terminated=true, scheduled-executor-terminated=true}
2025-02-18T20:59:36.173Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-initiated. {}
2025-02-18T20:59:36.174Z [INFO] (Thread-1) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-complete. {}

@wills721
Copy link
Author

More from journalctl (apparmor denials?)

Feb 18 20:59:34 localhost systemd[1]: Started snap.aws-iot-greengrass-v2.greengrass.service - Service for snap application aws-iot-greengrass-v2.greengrass.
Feb 18 20:59:34 localhost aws-iot-greengrass-v2.greengrass[3715]: + snapctl get greengrass-config
Feb 18 20:59:34 localhost aws-iot-greengrass-v2.greengrass[3693]: + GREENGRASS_CONFIG=/home/willthio/gg/certs/config.yaml
Feb 18 20:59:34 localhost aws-iot-greengrass-v2.greengrass[3693]: + cd /var/snap/aws-iot-greengrass-v2/x1
Feb 18 20:59:34 localhost aws-iot-greengrass-v2.greengrass[3693]: + mkdir -p /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2
Feb 18 20:59:34 localhost aws-iot-greengrass-v2.greengrass[3693]: + java -Droot=/var/snap/aws-iot-greengrass-v2/x1/greengrass/v2 -Dlog.store=FILE -jar /snap/aws-iot-greengrass-v2/x1/lib/Greengrass.jar --start false --init-config /home/willthio/gg/cer>
Feb 18 20:59:34 localhost kernel: audit: type=1400 audit(1739912374.613:199): apparmor="DENIED" operation="open" class="file" profile="snap.aws-iot-greengrass-v2.greengrass" name="/proc/cgroups" pid=3722 comm="java" requested_mask="r" denied_mask="r">
Feb 18 20:59:35 localhost kernel: audit: type=1400 audit(1739912375.140:200): apparmor="DENIED" operation="open" class="file" profile="snap.aws-iot-greengrass-v2.greengrass" name="/root/.cache/JNA/temp/" pid=3722 comm="java" requested_mask="r" denied>
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: Error while trying to setup Greengrass Nucleus
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.util.platforms.unix.UnixPlatform.(UnixPlatform.java:87)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.(LinuxPlatform.java:11)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.util.platforms.Platform.getInstance(Platform.java:70)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.util.Permissions.(Permissions.java:20)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.util.NucleusPaths.setRootPath(NucleusPaths.java:105)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:172)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.config.Topic.subscribe(Topic.java:55)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.lifecyclemanager.KernelCommandLine.parseArgs(KernelCommandLine.java:147)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.lifecyclemanager.Kernel.parseArgs(Kernel.java:686)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:307)
Feb 18 20:59:35 localhost aws-iot-greengrass-v2.greengrass[3722]: at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Feb 18 20:59:35 localhost systemd[1]: snap.aws-iot-greengrass-v2.greengrass.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
Feb 18 20:59:35 localhost systemd[1]: snap.aws-iot-greengrass-v2.greengrass.service: Failed with result 'exit-code'.
Feb 18 20:59:35 localhost systemd[1]: snap.aws-iot-greengrass-v2.greengrass.service: Consumed 1.013s CPU time.
Feb 18 20:59:35 localhost systemd[1]: snap.aws-iot-greengrass-v2.greengrass.service: Scheduled restart job, restart counter is at 4.
Feb 18 20:59:35 localhost systemd[1]: Started snap.aws-iot-greengrass-v2.greengrass.service - Service for snap application aws-iot-greengrass-v2.greengrass.

@wills721
Copy link
Author

wills721 commented Feb 19, 2025

The issue related to permissions above was resolved by installing the snap using '--devmode'.

However, I am now having issues with the loader:

2025-02-19T14:39:30.245Z [INFO] (main) com.aws.greengrass.util.platforms.Platform: Getting platform instance com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.. {}
2025-02-19T14:39:30.271Z [ERROR] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelAlternatives: Unable to set loader script at /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/current/distro/bin/loader as executable. {}
java.nio.file.FileSystemException: /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/current/distro/bin/loader: Read-only file system
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)

This appears to also be a permissions issue but one that is not resolved by '--devmode'

@patrzhan

@patrzhan
Copy link
Member

Can you try installing on a fresh system? Doing this seemed to mitigate this loader script error in the past, but otherwise I wouldn't be sure for other workarounds yet.

@wills721
Copy link
Author

wills721 commented Feb 21, 2025

@patrzhan I re-built/burned a brand new Core22 on a CM4. Same error (and I assume the subsequent ones are just domino effect errors)

root@ubuntu:/var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/logs# cat greengrass.log
2025-02-21T14:00:19.101Z [INFO] (main) com.aws.greengrass.util.platforms.Platform: Getting platform instance com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.. {}
2025-02-21T14:00:19.214Z [ERROR] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelAlternatives: Unable to set loader script at /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/current/distro/bin/loader as executable. {}
java.nio.file.FileSystemException: /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/current/distro/bin/loader: Read-only file system
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:238)
at sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:260)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.setMode(UnixPlatform.java:510)
at com.aws.greengrass.util.platforms.Platform.lambda$setPermissions$3(Platform.java:190)
at com.aws.greengrass.util.platforms.Platform.setPermissions(Platform.java:214)
at com.aws.greengrass.util.platforms.Platform.setPermissions(Platform.java:150)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.validateLaunchDirSetup(KernelAlternatives.java:207)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.isLaunchDirSetup(KernelAlternatives.java:162)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.relinkInitLaunchDir(KernelAlternatives.java:258)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.setupInitLaunchDirIfAbsent(KernelAlternatives.java:228)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.(KernelAlternatives.java:83)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:201)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-21T14:00:19.217Z [WARN] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelAlternatives: Failed to setup initial launch directory. Expecting loader script at: /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/current/distro/bin/loader. {}
2025-02-21T14:00:19.219Z [ERROR] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelAlternatives: Unable to set loader script at /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/init/distro/bin/loader as executable. {}
java.nio.file.FileSystemException: /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/alts/init/distro/bin/loader: Read-only file system
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:238)
at sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:260)
at com.aws.greengrass.util.platforms.unix.UnixPlatform.setMode(UnixPlatform.java:510)
at com.aws.greengrass.util.platforms.Platform.lambda$setPermissions$3(Platform.java:190)
at com.aws.greengrass.util.platforms.Platform.setPermissions(Platform.java:214)
at com.aws.greengrass.util.platforms.Platform.setPermissions(Platform.java:150)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.validateLaunchDirSetup(KernelAlternatives.java:207)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.setupInitLaunchDirIfAbsent(KernelAlternatives.java:231)
at com.aws.greengrass.lifecyclemanager.KernelAlternatives.(KernelAlternatives.java:83)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.initPaths(KernelCommandLine.java:201)
at com.aws.greengrass.lifecyclemanager.KernelCommandLine.lambda$parseArgs$0(KernelCommandLine.java:147)
at com.aws.greengrass.config.Topic.fire(Topic.java:272)
at com.aws.greengrass.config.Topic.lambda$withNewerValue$0(Topic.java:260)
at com.aws.greengrass.dependency.Context$1.run(Context.java:72)

2025-02-21T14:00:19.226Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: No ongoing deployment detected. Proceed as default. {}
2025-02-21T14:00:19.241Z [WARN] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Transaction log /var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/config/config.tlog is invalid and no usable backup transaction log exists. Either an initial Nucleus setup is ongoing or all config tlogs were corrupted. {}
2025-02-21T14:00:19.242Z [INFO] (main) com.aws.greengrass.config.Configuration: config-loading. Read configuration from a file path. {path=/home/willthio/greengrass-v2-certs/config.yaml}
2025-02-21T14:00:19.758Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: effective-config-dump-complete. {file=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2/config/effectiveConfig.yaml}
2025-02-21T14:00:19.888Z [INFO] (main) com.aws.greengrass.security.SecurityService: Register crypto key service provider. {keyType=file}
2025-02-21T14:00:19.891Z [INFO] (main) com.aws.greengrass.security.SecurityService: Register MQTT connection security provider. {keyType=file}
2025-02-21T14:00:19.927Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Successfully setup Nucleus launch parameters. {}
2025-02-21T14:00:20.497Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Nucleus lifecycle has been initialized successfully. {}
2025-02-21T14:00:20.648Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Copy Nucleus artifacts to component store. {destination=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.14.1/aws.greengrass.nucleus, source=/snap/aws-iot-greengrass-v2/x1}
2025-02-21T14:00:25.340Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-shutdown. {main=null}
2025-02-21T14:00:25.351Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for services to shutdown. {}
2025-02-21T14:00:25.368Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: effective-config-dump-complete. {file=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2/config/effectiveConfig.yaml}
2025-02-21T14:00:25.371Z [INFO] (Serialized listener processor) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-initiated. {}
2025-02-21T14:00:25.372Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Waiting for executors to shutdown. {}
2025-02-21T14:00:25.373Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: executor-service-shutdown-complete. {executor-terminated=true, scheduled-executor-terminated=true}
2025-02-21T14:00:25.373Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-initiated. {}
2025-02-21T14:00:25.377Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: context-shutdown-complete. {}
2025-02-21T14:00:27.570Z [INFO] (main) com.aws.greengrass.util.platforms.Platform: Getting platform instance com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform.. {}
2025-02-21T14:00:27.642Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: No ongoing deployment detected. Proceed as default. {}
2025-02-21T14:00:27.914Z [INFO] (main) com.aws.greengrass.config.Configuration: config-loading. Read configuration from a file path. {path=/var/snap/aws-iot-greengrass-v2/x1/greengrass/v2/config/config.tlog}
2025-02-21T14:00:28.089Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: effective-config-dump-complete. {file=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2/config/effectiveConfig.yaml}
2025-02-21T14:00:28.142Z [INFO] (main) com.aws.greengrass.security.SecurityService: Register crypto key service provider. {keyType=file}
2025-02-21T14:00:28.145Z [INFO] (main) com.aws.greengrass.security.SecurityService: Register MQTT connection security provider. {keyType=file}
2025-02-21T14:00:28.564Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-start. Launch Nucleus. {configPath=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2/config, rootPath=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2, version=2.14.1}
2025-02-21T14:00:29.190Z [INFO] (main) software.amazon.awssdk.eventstreamrpc.RpcServer: IpcServer started.... {}
2025-02-21T14:00:29.366Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: serviceImplementors: {UpdateSystemPolicyService:class com.aws.greengrass.lifecyclemanager.UpdateSystemPolicyService...}. {}
2025-02-21T14:00:29.425Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-inject-error. {class=mqttClient}
java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:165)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 16 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 21 more

2025-02-21T14:00:29.460Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=aws.greengrass.Nucleus}
2025-02-21T14:00:29.527Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=main}
2025-02-21T14:00:29.579Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=UpdateSystemPolicyService}
2025-02-21T14:00:29.584Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=DeploymentService}
2025-02-21T14:00:29.705Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-inject-error. {class=fleetStatusService}
java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.status.FleetStatusService
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.deployment.DeploymentService.postInject(DeploymentService.java:197)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.dependency.Context$Value.getOrCreateArgInstances(Context.java:524)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:489)
... 18 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 22 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 27 more

2025-02-21T14:00:29.710Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-inject-error. {class=mqttClient}
java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.deployment.DeploymentService.postInject(DeploymentService.java:197)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 18 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 23 more

2025-02-21T14:00:29.712Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-post-inject-error. {class=class com.aws.greengrass.deployment.IotJobsHelper}
java.lang.NullPointerException
at com.aws.greengrass.deployment.IotJobsHelper.postInject(IotJobsHelper.java:288)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.deployment.DeploymentService.postInject(DeploymentService.java:197)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-21T14:00:29.722Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-inject-error. {class=mqttClient}
java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.deployment.DeploymentService.postInject(DeploymentService.java:198)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 18 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 23 more

2025-02-21T14:00:29.736Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-post-inject-error. {class=class com.aws.greengrass.deployment.ShadowDeploymentListener}
java.lang.NullPointerException
at com.aws.greengrass.deployment.ShadowDeploymentListener.postInject(ShadowDeploymentListener.java:170)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.deployment.DeploymentService.postInject(DeploymentService.java:198)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:395)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)

2025-02-21T14:00:29.739Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=FleetStatusService}
2025-02-21T14:00:29.741Z [ERROR] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Unable to load service FleetStatusService. {}
com.aws.greengrass.lifecyclemanager.exceptions.ServiceLoadException: Can't create Greengrass Service instance FleetStatusService
at com.aws.greengrass.lifecyclemanager.Kernel.locateGreengrassService(Kernel.java:573)
at com.aws.greengrass.lifecyclemanager.Kernel.lambda$locate$2(Kernel.java:444)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.status.FleetStatusService
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.newInstance(Context.java:124)
at com.aws.greengrass.lifecyclemanager.Kernel.locateGreengrassService(Kernel.java:556)
... 9 more
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.dependency.Context$Value.getOrCreateArgInstances(Context.java:524)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:489)
... 12 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 16 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 21 more

2025-02-21T14:00:29.743Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=TelemetryAgent}
2025-02-21T14:00:29.749Z [ERROR] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Unable to load service TelemetryAgent. {}
com.aws.greengrass.lifecyclemanager.exceptions.ServiceLoadException: Can't create Greengrass Service instance TelemetryAgent
at com.aws.greengrass.lifecyclemanager.Kernel.locateGreengrassService(Kernel.java:573)
at com.aws.greengrass.lifecyclemanager.Kernel.lambda$locate$2(Kernel.java:444)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.lambda$launch$0(KernelLifecycle.java:185)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:183)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.telemetry.TelemetryAgent
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.newInstance(Context.java:124)
at com.aws.greengrass.lifecyclemanager.Kernel.locateGreengrassService(Kernel.java:556)
... 9 more
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.dependency.Context$Value.getOrCreateArgInstances(Context.java:524)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:489)
... 12 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 16 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 21 more

2025-02-21T14:00:29.766Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: effective-config-dump-complete. {file=/var/snap/aws-iot-greengrass-v2/current/greengrass/v2/config/effectiveConfig.yaml}
2025-02-21T14:00:29.767Z [INFO] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: system-start. {main=services.main:NEW}
2025-02-21T14:00:29.777Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: Attempt to load service from plugins. {serviceName=FleetStatusService}
2025-02-21T14:00:29.779Z [ERROR] (main) com.aws.greengrass.lifecyclemanager.KernelLifecycle: Failed to send status update at kernel launch because kernel was unable to locate FleetStatusService. {}
com.aws.greengrass.lifecyclemanager.exceptions.ServiceLoadException: Can't create Greengrass Service instance FleetStatusService
at com.aws.greengrass.lifecyclemanager.Kernel.locateGreengrassService(Kernel.java:573)
at com.aws.greengrass.lifecyclemanager.Kernel.lambda$locate$2(Kernel.java:444)
at com.aws.greengrass.dependency.Context$Value.computeObjectIfEmpty(Context.java:567)
at com.aws.greengrass.lifecyclemanager.Kernel.locate(Kernel.java:443)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:199)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.status.FleetStatusService
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.newInstance(Context.java:124)
at com.aws.greengrass.lifecyclemanager.Kernel.locateGreengrassService(Kernel.java:556)
... 7 more
Caused by: java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.dependency.Context$Value.getOrCreateArgInstances(Context.java:524)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:489)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 14 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 19 more

2025-02-21T14:00:29.789Z [INFO] (DeploymentService-lifecycle) com.aws.greengrass.deployment.DeploymentService: service-set-state. {serviceName=DeploymentService, currentState=NEW, newState=INSTALLED}
2025-02-21T14:00:29.793Z [INFO] (UpdateSystemPolicyService-lifecycle) com.aws.greengrass.lifecyclemanager.UpdateSystemPolicyService: service-set-state. {serviceName=UpdateSystemPolicyService, currentState=NEW, newState=INSTALLED}
2025-02-21T14:00:29.794Z [INFO] (main-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=main, currentState=NEW, newState=INSTALLED}
2025-02-21T14:00:29.793Z [INFO] (aws.greengrass.Nucleus-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=aws.greengrass.Nucleus, currentState=NEW, newState=INSTALLED}
2025-02-21T14:00:29.797Z [INFO] (aws.greengrass.Nucleus-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=aws.greengrass.Nucleus, currentState=INSTALLED, newState=STARTING}
2025-02-21T14:00:29.799Z [INFO] (UpdateSystemPolicyService-lifecycle) com.aws.greengrass.lifecyclemanager.UpdateSystemPolicyService: service-set-state. {serviceName=UpdateSystemPolicyService, currentState=INSTALLED, newState=STARTING}
2025-02-21T14:00:29.805Z [INFO] (DeploymentService-lifecycle) com.aws.greengrass.deployment.DeploymentService: service-set-state. {serviceName=DeploymentService, currentState=INSTALLED, newState=STARTING}
2025-02-21T14:00:29.809Z [INFO] (UpdateSystemPolicyService-lifecycle) com.aws.greengrass.lifecyclemanager.UpdateSystemPolicyService: service-set-state. {serviceName=UpdateSystemPolicyService, currentState=STARTING, newState=RUNNING}
2025-02-21T14:00:29.815Z [INFO] (pool-3-thread-7) com.aws.greengrass.lifecyclemanager.GenericExternalService: generic-service-finished. Nothing done. {serviceName=aws.greengrass.Nucleus, currentState=STARTING}
2025-02-21T14:00:29.815Z [INFO] (aws.greengrass.Nucleus-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=aws.greengrass.Nucleus, currentState=STARTING, newState=FINISHED}
2025-02-21T14:00:29.817Z [INFO] (DeploymentService-lifecycle) com.aws.greengrass.deployment.DeploymentService: service-set-state. {serviceName=DeploymentService, currentState=STARTING, newState=RUNNING}
2025-02-21T14:00:29.817Z [INFO] (aws.greengrass.Nucleus-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=aws.greengrass.Nucleus, currentState=FINISHED, newState=STOPPING}
2025-02-21T14:00:29.819Z [INFO] (main-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=main, currentState=INSTALLED, newState=STARTING}
2025-02-21T14:00:29.820Z [INFO] (pool-3-thread-5) com.aws.greengrass.lifecyclemanager.GenericExternalService: Shutdown initiated. {serviceName=aws.greengrass.Nucleus, currentState=STOPPING}
2025-02-21T14:00:29.821Z [INFO] (pool-3-thread-6) com.aws.greengrass.lifecyclemanager.GenericExternalService: generic-service-finished. Nothing done. {serviceName=main, currentState=STARTING}
2025-02-21T14:00:29.822Z [INFO] (main-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=main, currentState=STARTING, newState=FINISHED}
2025-02-21T14:00:29.823Z [INFO] (main-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=main, currentState=FINISHED, newState=STOPPING}
2025-02-21T14:00:29.823Z [INFO] (pool-3-thread-5) com.aws.greengrass.lifecyclemanager.GenericExternalService: generic-service-shutdown. {serviceName=aws.greengrass.Nucleus, currentState=STOPPING}
2025-02-21T14:00:29.824Z [INFO] (pool-3-thread-6) com.aws.greengrass.lifecyclemanager.GenericExternalService: Shutdown initiated. {serviceName=main, currentState=STOPPING}
2025-02-21T14:00:29.825Z [INFO] (aws.greengrass.Nucleus-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=aws.greengrass.Nucleus, currentState=STOPPING, newState=FINISHED}
2025-02-21T14:00:29.825Z [INFO] (pool-3-thread-6) com.aws.greengrass.lifecyclemanager.GenericExternalService: generic-service-shutdown. {serviceName=main, currentState=STOPPING}
2025-02-21T14:00:29.826Z [INFO] (main-lifecycle) com.aws.greengrass.lifecyclemanager.GenericExternalService: service-set-state. {serviceName=main, currentState=STOPPING, newState=FINISHED}

@wills721
Copy link
Author

wills721 commented Feb 21, 2025

@patrzhan The fix for this appeared to be to run sudo fsck -n -f. Then reboot the machine.

Still not out of the woods now. Now I get this error:
2025-02-21T18:57:58.609Z [ERROR] (main) com.aws.greengrass.dependency.Context: class-inject-error. {class=mqttClient}
java.lang.IllegalArgumentException: Can't create instance of com.aws.greengrass.mqttclient.MqttClient
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:492)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:108)
at com.aws.greengrass.dependency.Context.injectFields(Context.java:365)
at com.aws.greengrass.dependency.Context$Value.putAndInjectFields(Context.java:453)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:486)
at com.aws.greengrass.dependency.Context$Value.get(Context.java:434)
at com.aws.greengrass.dependency.Context.get(Context.java:104)
at com.aws.greengrass.lifecyclemanager.KernelLifecycle.launch(KernelLifecycle.java:165)
at com.aws.greengrass.lifecyclemanager.Kernel.launch(Kernel.java:302)
at com.aws.greengrass.easysetup.GreengrassSetup.performSetup(GreengrassSetup.java:354)
at com.aws.greengrass.easysetup.GreengrassSetup.main(GreengrassSetup.java:280)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.aws.greengrass.dependency.Context$Value.constructObjectWithInjection(Context.java:490)
... 16 more
Caused by: software.amazon.awssdk.crt.CrtRuntimeException: aws_tls_ctx_options_override_default_trust_store_from_path failed (aws_last_error: AWS_ERROR_FILE_INVALID_PATH(44), Invalid file path.) AWS_ERROR_FILE_INVALID_PATH(44)
at software.amazon.awssdk.crt.io.TlsContextOptions.tlsContextOptionsNew(Native Method)
at software.amazon.awssdk.crt.io.TlsContextOptions.getNativeHandle(TlsContextOptions.java:110)
at software.amazon.awssdk.crt.io.TlsContext.(TlsContext.java:24)
at software.amazon.awssdk.crt.io.ClientTlsContext.(ClientTlsContext.java:26)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:273)
at com.aws.greengrass.mqttclient.MqttClient.(MqttClient.java:217)
... 21 more

@wills721
Copy link
Author

Above was related to bad paths in config. I have it running now. On to getting my custom greengrass components running.

@wills721
Copy link
Author

@patrzhan Right now your snapcraft.yaml uses Core20 and Java8. That seems old?

@patrzhan
Copy link
Member

patrzhan commented Feb 27, 2025

Like I mentioned earlier, we don't currently have an officially supported snap, and the example I provided is one from a while ago, so it isn't particularly recent.

@wills721
Copy link
Author

Yeah, I was afraid of that. I have a meeting with my account rep about this on Weds March 5 @930am EST. Would like you to attend but not sure how to forward the invite to you @patrzhan

@thiru85
Copy link

thiru85 commented Mar 5, 2025

@patrzhan I'm helping @wills721 along with the AM. Will reach out separately if needed!

@wills721
Copy link
Author

wills721 commented Mar 14, 2025

@patrzhan Here is my revised fully WORKING snapcraft.yaml. Base 22, java17, builds my own Python which my custom components later use. Has plugs that relate to my business problem (e.g. serial ports, etc). But it works.

(stand by for YAML.......it it not letting me put it here as code)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

5 participants