diff --git a/.github/ISSUE_TEMPLATE/issue.bug.yml b/.github/ISSUE_TEMPLATE/issue.bug.yml index ce0e2f8..b36886e 100644 --- a/.github/ISSUE_TEMPLATE/issue.bug.yml +++ b/.github/ISSUE_TEMPLATE/issue.bug.yml @@ -52,6 +52,7 @@ body: label: CPU architecture options: - x86-64 + - arm64 validations: required: true - type: textarea diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 9dc443e..ebb1704 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -43,10 +43,15 @@ jobs: token=$(curl -sX GET \ "https://ghcr.io/token?scope=repository%3Alinuxserver%2Faltus%3Apull" \ | jq -r '.token') - digest=$(curl -s \ + multidigest=$(curl -s \ --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ --header "Authorization: Bearer ${token}" \ "https://ghcr.io/v2/${image}/manifests/${tag}" \ + | jq -r 'first(.manifests[].digest)') + digest=$(curl -s \ + --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ + --header "Authorization: Bearer ${token}" \ + "https://ghcr.io/v2/${image}/manifests/${multidigest}" \ | jq -r '.config.digest') image_info=$(curl -sL \ --header "Authorization: Bearer ${token}" \ diff --git a/Dockerfile b/Dockerfile index 995bb03..07cbab4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +# syntax=docker/dockerfile:1 + FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm # set version label @@ -19,9 +21,9 @@ RUN \ libatk-bridge2.0-0 \ libgtk-3-0 && \ echo "**** install altus studio from appimage ****" && \ - if [ -z ${ALTUS_VERSION+x} ]; then \ + if [ -z "${ALTUS_VERSION+x}" ]; then \ ALTUS_VERSION=$(curl -sX GET "https://api.github.com/repos/amanharwara/altus/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ fi && \ cd /tmp && \ curl -o \ @@ -33,6 +35,7 @@ RUN \ find /opt/altus -type d -exec chmod go+rx {} + && \ ln -s /opt/altus/Altus /opt/altus/altus && \ sed -i 's|| \n yes\n \n|' /etc/xdg/openbox/rc.xml && \ + printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ apt-get autoclean && \ rm -rf \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 new file mode 100644 index 0000000..2b6d8e0 --- /dev/null +++ b/Dockerfile.aarch64 @@ -0,0 +1,73 @@ +# syntax=docker/dockerfile:1 + +# build stage +FROM ghcr.io/linuxserver/baseimage-debian:arm64v8-bookworm AS build-stage + +ARG ALTUS_VERSION + +RUN \ + echo "**** install build packages ****" && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install -y \ + nodejs \ + npm && \ + npm install --global yarn && \ + ln -s /usr/lib/aarch64-linux-gnu/libz.so.1 /usr/lib/aarch64-linux-gnu/libz.so && \ + echo "**** build altus ****" && \ + if [ -z "${ALTUS_VERSION+x}" ]; then \ + ALTUS_VERSION=$(curl -sX GET "https://api.github.com/repos/amanharwara/altus/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + fi && \ + git clone -b "${ALTUS_VERSION}" https://github.com/amanharwara/altus.git /tmp/altus && \ + cd /tmp/altus && \ + yarn install && \ + yarn run make -p linux && \ + mv out/make/*.AppImage /tmp/altus.app && \ + cd /tmp && \ + chmod +x /tmp/altus.app && \ + ./altus.app --appimage-extract && \ + mv squashfs-root /opt/altus && \ + find /opt/altus -type d -exec chmod go+rx {} + && \ + ln -s /opt/altus/Altus /opt/altus/altus + +# runtime stage +FROM ghcr.io/linuxserver/baseimage-kasmvnc:arm64v8-debianbookworm + +# set version label +ARG BUILD_DATE +ARG VERSION +ARG ALTUS_VERSION +LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" +LABEL maintainer="thelamer" + +# title +ENV TITLE=Altus + +COPY --from=build-stage /opt/altus /opt/altus + +RUN \ + echo "**** install packages ****" && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive \ + apt-get install --no-install-recommends -y \ + libatk1.0-0 \ + libatk-bridge2.0-0 \ + libgtk-3-0 && \ + sed -i 's|| \n yes\n \n|' /etc/xdg/openbox/rc.xml && \ + printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ + echo "**** cleanup ****" && \ + apt-get autoclean && \ + rm -rf \ + /config/.cache \ + /config/.launchpadlib \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + /tmp/* + +# add local files +COPY /root / + +# ports and volumes +EXPOSE 3000 +VOLUME /config diff --git a/Jenkinsfile b/Jenkinsfile index afbdf6d..0770189 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -29,14 +29,14 @@ pipeline { DEV_DOCKERHUB_IMAGE = 'lsiodev/altus' PR_DOCKERHUB_IMAGE = 'lspipepr/altus' DIST_IMAGE = 'ubuntu' - MULTIARCH = 'false' + MULTIARCH = 'true' CI = 'true' CI_WEB = 'true' CI_PORT = '3000' CI_SSL = 'false' CI_DELAY = '120' - CI_DOCKERENV = 'TZ=US/Pacific' - CI_AUTH = 'user:password' + CI_DOCKERENV = '' + CI_AUTH = '' CI_WEBPATH = '' } stages { diff --git a/README.md b/README.md index f077d73..6cada25 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ The architectures supported by this image are: | Architecture | Available | Tag | | :----: | :----: | ---- | | x86-64 | ✅ | amd64-\ | -| arm64 | ❌ | | +| arm64 | ✅ | arm64v8-\ | | armhf | ❌ | | ## Application Setup @@ -113,7 +113,7 @@ services: - PGID=1000 - TZ=Etc/UTC volumes: - - /path/to/config:/config + - /path/to/altus/config:/config ports: - 3000:3000 - 3001:3001 @@ -132,7 +132,7 @@ docker run -d \ -e TZ=Etc/UTC \ -p 3000:3000 \ -p 3001:3001 \ - -v /path/to/config:/config \ + -v /path/to/altus/config:/config \ --shm-size="1gb" \ --restart unless-stopped \ lscr.io/linuxserver/altus:latest @@ -315,5 +315,6 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **19.10.24:** - Switch to multi-arch. * **29.01.24:** - Structural changes for v5. * **07.12.23:** - Initial release. diff --git a/jenkins-vars.yml b/jenkins-vars.yml index c227ccf..0cc09e4 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -17,12 +17,12 @@ repo_vars: - DEV_DOCKERHUB_IMAGE = 'lsiodev/altus' - PR_DOCKERHUB_IMAGE = 'lspipepr/altus' - DIST_IMAGE = 'ubuntu' - - MULTIARCH = 'false' + - MULTIARCH = 'true' - CI = 'true' - CI_WEB = 'true' - CI_PORT = '3000' - CI_SSL = 'false' - CI_DELAY = '120' - - CI_DOCKERENV = 'TZ=US/Pacific' - - CI_AUTH = 'user:password' + - CI_DOCKERENV = '' + - CI_AUTH = '' - CI_WEBPATH = '' diff --git a/readme-vars.yml b/readme-vars.yml index 0761f06..dce7b79 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -11,19 +11,14 @@ project_blurb_optional_extras_enabled: false # supported architectures available_architectures: - { arch: "{{ arch_x86_64 }}", tag: "latest"} - -# development version -development_versions: false + - { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} # container parameters common_param_env_vars_enabled: true param_container_name: "{{ project_name }}" -param_usage_include_env: true -param_env_vars: - - { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." } param_usage_include_vols: true param_volumes: - - { vol_path: "/config", vol_host_path: "/path/to/config", desc: "Users home directory in the container, stores program settings and files." } + - { vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Users home directory in the container, stores program settings and files." } param_usage_include_ports: true param_ports: - { external_port: "3000", internal_port: "3000", port_desc: "Altus desktop gui." } @@ -75,5 +70,6 @@ app_setup_block: | # changelog changelogs: + - { date: "19.10.24:", desc: "Switch to multi-arch." } - { date: "29.01.24:", desc: "Structural changes for v5." } - { date: "07.12.23:", desc: "Initial release." }