From 568062679760e0c8cc81f2ba4d86db2f06a87f76 Mon Sep 17 00:00:00 2001 From: tomoyan596 Date: Fri, 26 Dec 2025 06:20:10 +0900 Subject: [PATCH 1/4] feat: Add optimized build profile and Debian packaging for ARMv6 --- Cargo.toml | 13 ++++++ Cross.toml | 15 +++++++ cli/Cargo.toml | 12 ++++++ server/Cargo.toml | 19 +++++++-- server/debian/atomic-server.env | 63 +++++++++++++++++++++++++++++ server/debian/atomic-server.service | 31 ++++++++++++++ server/debian/postinst | 24 +++++++++++ 7 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 server/debian/atomic-server.env create mode 100644 server/debian/atomic-server.service create mode 100755 server/debian/postinst diff --git a/Cargo.toml b/Cargo.toml index 64142f74b..8d1e0bfa4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,16 @@ members = ["server", "cli", "lib"] # Tauri build is deprecated, see # https://github.com/atomicdata-dev/atomic-server/issues/718 exclude = ["desktop"] + +[profile.release] +opt-level = 3 +lto = true +strip = false + +[profile.dietpi] +inherits = "release" +opt-level = "z" +lto = true +codegen-units = 1 +strip = true +#panic = "abort" diff --git a/Cross.toml b/Cross.toml index 90c57516d..a80c031aa 100644 --- a/Cross.toml +++ b/Cross.toml @@ -33,3 +33,18 @@ pre-build = [ "apt-get update", "apt-get install --assume-yes nasm:$CROSS_DEB_ARCH", ] + +[target.arm-unknown-linux-gnueabihf] +pre-build = [ + # Update package list + "apt-get update", + # Upgrade installed packages + "apt-get upgrade --assume-yes", + "apt-get install --assume-yes nasm curl", + # Add NodeSource repository for Node.js 20 + "curl -fsSL https://deb.nodesource.com/setup_20.x | bash", + "apt-get install --assume-yes nodejs", + # Install pnpm via npm + "npm install -g pnpm" +] + diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 25832780b..418ac681a 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -28,3 +28,15 @@ assert_cmd = "2" default = ["native"] # Non-wasi interface. These features cannot be compiled to WASI. native = ["edit"] + +[package.metadata.deb] +extended-description = "Atomic CLI - A command-line interface for headless CMS and real-time databases." +maintainer = "tomoyan " +copyright = "2025, tomoyan" +license-file = ["../LICENSE", "0"] +depends = "$auto" +section = "web" +priority = "optional" +assets = [ + ["../target/arm-unknown-linux-gnueabihf/dietpi/atomic-cli", "/usr/bin/atomic-cli", "755"], +] diff --git a/server/Cargo.toml b/server/Cargo.toml index 63262f277..f8bd33518 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -11,9 +11,6 @@ readme = "./README.md" repository = "https://github.com/atomicdata-dev/atomic-server" version = "0.40.2" -[profile.release] -lto = true - [[bin]] name = "atomic-server" path = "src/bin.rs" @@ -150,3 +147,19 @@ https = ["rustls", "instant-acme", "rcgen", "rustls-pemfile"] [lib] name = "atomic_server_lib" path = "src/lib.rs" + +[package.metadata.deb] +extended-description = "Atomic Server - Headless CMS and real-time database." +maintainer = "tomoyan " +copyright = "2025, tomoyan" +license-file = ["../LICENSE", "0"] +depends = "$auto" +section = "web" +priority = "optional" +maintainer-scripts = "debian/" +assets = [ + ["../target/arm-unknown-linux-gnueabihf/dietpi/atomic-server", "/usr/bin/atomic-server", "755"], + ["debian/atomic-server.service", "/lib/systemd/system/atomic-server.service", "644"], + ["debian/atomic-server.env", "/etc/atomic-server/atomic-server.env", "640"], +] +conf-files = ["/etc/atomic-server/atomic-server.env"] diff --git a/server/debian/atomic-server.env b/server/debian/atomic-server.env new file mode 100644 index 000000000..ab4627eb6 --- /dev/null +++ b/server/debian/atomic-server.env @@ -0,0 +1,63 @@ +# Recreates the `/setup` Invite for creating a new Root User. +# Also re-runs various populate commands, and re-builds the index +#ATOMIC_INITIALIZE=true + +# Re-builds the indexes. Parses all the resources. +# Do this when updating requires it, or if you have issues with Collections / Queries / Search. +#ATOMIC_REBUILD_INDEX=true + +# Use staging environments for services like LetsEncrypt +#ATOMIC_DEVELOPMENT=true + +# The origin domain where the app is hosted, without the port and schema values. +ATOMIC_DOMAIN=localhost + +# 9.883 is decimal for the `⚛` character. +# The port where the HTTP app is available. Set to 80 if you want this to be available on the network. +#ATOMIC_PORT=9883 + +# The port where the HTTPS app is available. Set to 443 if you want this to be available on the network. +#ATOMIC_PORT_HTTPS=9884 + +# The IP address of the server. Set to :: if you want this to be available to other devices on your network. +#ATOMIC_IP=:: + +# Use HTTPS instead of HTTP. +# Will get certificates from LetsEncrypt fully automated. +#ATOMIC_HTTPS=true + +# Initializes DNS-01 challenge for LetsEncrypt. Use this if you want to use subdomains. +#ATOMIC_HTTPS_DNS=true + +# The contact mail address for Let's Encrypt HTTPS setup +#ATOMIC_EMAIL=domain-admin@atomicserver.eu + +# Custom JS script to include in the body of the HTML template +#ATOMIC_SCRIPT= + +# Path for atomic data config directory. Defaults to "~/.config/atomic/"" +ATOMIC_CONFIG_DIR=/etc/atomic-server + +# Path for atomic data store folder. Contains your Store, uploaded files and more. Default value depends on your OS. +ATOMIC_DATA_DIR=/var/lib/atomic-server/data + +# Path for the atomic data cache folder. Contains search index, temp files and more. Default value depends on your OS. +ATOMIC_CACHE_DIR=/var/cache/atomic-server + +# CAUTION: Skip authentication checks, making all data publicly readable. Improves performance. +#ATOMIC_PUBLIC_MODE=false + +# The full URL of the server. It should resolve to the home page. +# Set this if you use an external server or tunnel, instead of directly exposing atomic-server. +# If you leave this out, it will be generated from `domain`, `port` and `http` / `https`. +#ATOMIC_SERVER_URL=http://localhost:9883 + +# How much logs you want. Also influences what is sent to your trace service, if you've set one (e.g. OpenTelemetry) +#RUST_LOG=info + +# How you want to trace what's going on with the server. Useful for monitoring performance and errors in production. +# Combine with `log_level` to get more or less data (`trace` is the most verbose) +#ATOMIC_TRACING=stdout + +# Introduces random delays in the server, to simulate a slow connection. Useful for testing. +#ATOMIC_SLOW_MODE=false \ No newline at end of file diff --git a/server/debian/atomic-server.service b/server/debian/atomic-server.service new file mode 100644 index 000000000..3a550f848 --- /dev/null +++ b/server/debian/atomic-server.service @@ -0,0 +1,31 @@ +[Unit] +Description=Atomic Server +Documentation=https://docs.atomicdata.dev +After=network.target +StartLimitIntervalSec=0 + +[Service] +Type=simple +User=atomic-server +Group=atomic-server + +# systemdにディレクトリ作成を依頼 +ConfigurationDirectory=atomic-server +StateDirectory=atomic-server +CacheDirectory=atomic-server + +# 環境変数の指定 +Environment=ATOMIC_CONFIG_DIR=/etc/atomic-server +Environment=ATOMIC_DATA_DIR=/var/lib/atomic-server/data +Environment=ATOMIC_PORT=9883 +# 必要に応じてドメインやIPを指定 +Environment=ATOMIC_DOMAIN=%H + +ExecStart=/usr/bin/atomic-server +WorkingDirectory=/etc/atomic-server/ +EnvironmentFile=/etc/atomic-server/atomic-server.env +Restart=always +RestartSec=1 + +[Install] +WantedBy=multi-user.target diff --git a/server/debian/postinst b/server/debian/postinst new file mode 100755 index 000000000..f1809ca9d --- /dev/null +++ b/server/debian/postinst @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +# $1 が "configure" の時のみ実行(インストール・アップグレード時) +if [ "$1" = "configure" ]; then + # ユーザーが存在しない場合に作成 + if ! getent passwd atomic-server > /dev/null; then + echo "Creating atomic-server system user..." + adduser --system --group --no-create-home --home /var/lib/atomic-server --shell /usr/sbin/nologin atomic-server + fi + + # ディレクトリの所有権を確実に変更 + # (systemdのStateDirectory等で作成されたディレクトリも含む) + chown -R atomic-server:atomic-server /var/lib/atomic-server || true + chown -R atomic-server:atomic-server /etc/atomic-server || true + + # .env内の localhost を実際のホスト名に置換 + if [ -f /etc/atomic-server/atomic-server.env ]; then + HOSTNAME=$(hostname) + sed -i "s/ATOMIC_DOMAIN=localhost/ATOMIC_DOMAIN=$HOSTNAME/g" /etc/atomic-server/atomic-server.env + fi +fi + +exit 0 From c33396c339dcf2c7e112e8a6cd7126ce3a918838 Mon Sep 17 00:00:00 2001 From: tomoyan596 Date: Fri, 26 Dec 2025 07:13:52 +0900 Subject: [PATCH 2/4] docs: translate comments to English in debian scripts --- server/debian/atomic-server.service | 6 +++--- server/debian/postinst | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/debian/atomic-server.service b/server/debian/atomic-server.service index 3a550f848..f4f1ea408 100644 --- a/server/debian/atomic-server.service +++ b/server/debian/atomic-server.service @@ -9,16 +9,16 @@ Type=simple User=atomic-server Group=atomic-server -# systemdにディレクトリ作成を依頼 +# Request systemd to manage these directories ConfigurationDirectory=atomic-server StateDirectory=atomic-server CacheDirectory=atomic-server -# 環境変数の指定 +# Environment variables Environment=ATOMIC_CONFIG_DIR=/etc/atomic-server Environment=ATOMIC_DATA_DIR=/var/lib/atomic-server/data Environment=ATOMIC_PORT=9883 -# 必要に応じてドメインやIPを指定 +# Use system hostname as the domain by default Environment=ATOMIC_DOMAIN=%H ExecStart=/usr/bin/atomic-server diff --git a/server/debian/postinst b/server/debian/postinst index f1809ca9d..baa9fae9d 100755 --- a/server/debian/postinst +++ b/server/debian/postinst @@ -1,20 +1,20 @@ #!/bin/sh set -e -# $1 が "configure" の時のみ実行(インストール・アップグレード時) +# Only execute during the 'configure' phase (install and upgrade) if [ "$1" = "configure" ]; then - # ユーザーが存在しない場合に作成 + # Create the system user if it doesn't exist if ! getent passwd atomic-server > /dev/null; then echo "Creating atomic-server system user..." adduser --system --group --no-create-home --home /var/lib/atomic-server --shell /usr/sbin/nologin atomic-server fi - # ディレクトリの所有権を確実に変更 - # (systemdのStateDirectory等で作成されたディレクトリも含む) + # Ensure correct ownership for directories + # (Including those managed by systemd's StateDirectory etc.) chown -R atomic-server:atomic-server /var/lib/atomic-server || true chown -R atomic-server:atomic-server /etc/atomic-server || true - # .env内の localhost を実際のホスト名に置換 + # Replace 'localhost' with the actual system hostname in the .env file if [ -f /etc/atomic-server/atomic-server.env ]; then HOSTNAME=$(hostname) sed -i "s/ATOMIC_DOMAIN=localhost/ATOMIC_DOMAIN=$HOSTNAME/g" /etc/atomic-server/atomic-server.env From 8a315e375ec736377518267eef26a61738c2b86e Mon Sep 17 00:00:00 2001 From: tomoyan596 Date: Sat, 27 Dec 2025 02:59:36 +0900 Subject: [PATCH 3/4] refactor: unify maintainer metadata and clean up systemd service --- Cross.toml | 1 - cli/Cargo.toml | 4 ++-- server/Cargo.toml | 4 ++-- server/debian/atomic-server.service | 7 ------- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/Cross.toml b/Cross.toml index a80c031aa..4ddccc685 100644 --- a/Cross.toml +++ b/Cross.toml @@ -47,4 +47,3 @@ pre-build = [ # Install pnpm via npm "npm install -g pnpm" ] - diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 418ac681a..418749ec8 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -30,9 +30,9 @@ default = ["native"] native = ["edit"] [package.metadata.deb] +maintainer = "Joep Meindertsma " +copyright = "2020-2025, Joep Meindertsma" extended-description = "Atomic CLI - A command-line interface for headless CMS and real-time databases." -maintainer = "tomoyan " -copyright = "2025, tomoyan" license-file = ["../LICENSE", "0"] depends = "$auto" section = "web" diff --git a/server/Cargo.toml b/server/Cargo.toml index f8bd33518..ea29acab6 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -149,9 +149,9 @@ name = "atomic_server_lib" path = "src/lib.rs" [package.metadata.deb] +maintainer = "Joep Meindertsma " +copyright = "2020-2025, Joep Meindertsma" extended-description = "Atomic Server - Headless CMS and real-time database." -maintainer = "tomoyan " -copyright = "2025, tomoyan" license-file = ["../LICENSE", "0"] depends = "$auto" section = "web" diff --git a/server/debian/atomic-server.service b/server/debian/atomic-server.service index f4f1ea408..c905d849c 100644 --- a/server/debian/atomic-server.service +++ b/server/debian/atomic-server.service @@ -14,13 +14,6 @@ ConfigurationDirectory=atomic-server StateDirectory=atomic-server CacheDirectory=atomic-server -# Environment variables -Environment=ATOMIC_CONFIG_DIR=/etc/atomic-server -Environment=ATOMIC_DATA_DIR=/var/lib/atomic-server/data -Environment=ATOMIC_PORT=9883 -# Use system hostname as the domain by default -Environment=ATOMIC_DOMAIN=%H - ExecStart=/usr/bin/atomic-server WorkingDirectory=/etc/atomic-server/ EnvironmentFile=/etc/atomic-server/atomic-server.env From 8af55fcb4fd8810ea1c36138423aa271e68074d6 Mon Sep 17 00:00:00 2001 From: tomoyan596 Date: Sat, 27 Dec 2025 03:23:32 +0900 Subject: [PATCH 4/4] chore: add homepage to atomic-cli for metadata consistency --- cli/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 418749ec8..a75ad6378 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -6,6 +6,7 @@ license = "MIT" name = "atomic-cli" readme = "README.md" repository = "https://github.com/atomicdata-dev/atomic-server" +homepage = "https://atomicserver.eu/" version = "0.40.0" [dependencies]