From cb55b05ea8918ce389a168383a82d4b3442f136f Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 08:16:17 +0000 Subject: [PATCH] 'Add new script' --- ct/headers/livebook | 6 ++ ct/livebook.sh | 61 +++++++++++++++++ frontend/public/json/livebook.json | 40 +++++++++++ install/livebook-install.sh | 106 +++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 ct/headers/livebook create mode 100755 ct/livebook.sh create mode 100644 frontend/public/json/livebook.json create mode 100644 install/livebook-install.sh diff --git a/ct/headers/livebook b/ct/headers/livebook new file mode 100644 index 000000000..6ff6b47ef --- /dev/null +++ b/ct/headers/livebook @@ -0,0 +1,6 @@ + __ _ __ __ + / / (_) _____ / /_ ____ ____ / /__ + / / / / | / / _ \/ __ \/ __ \/ __ \/ //_/ + / /___/ /| |/ / __/ /_/ / /_/ / /_/ / ,< +/_____/_/ |___/\___/_.___/\____/\____/_/|_| + diff --git a/ct/livebook.sh b/ct/livebook.sh new file mode 100755 index 000000000..496503a30 --- /dev/null +++ b/ct/livebook.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: dkuku +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/livebook-dev/livebook + +APP="Livebook" +var_tags="${var_tags:-development}" +var_disk="${var_disk:-4}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-1024}" +var_os="${var_os:-ubuntu}" +var_version="${var_version:-24.04}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f /opt/livebook/.mix/escripts/livebook ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "livebook" "livebook-dev/livebook"; then + msg_info "Stopping Service" + systemctl stop livebook + msg_info "Stopped Service" + + msg_info "Updating Container" + $STD apt update + $STD apt upgrade -y + msg_ok "Updated Container" + + msg_info "Updating Livebook" + source /opt/livebook/.env + cd /opt/livebook + $STD mix escript.install hex livebook --force + + chown -R livebook:livebook /opt/livebook /data + systemctl start livebook + msg_ok "Updated Livebook" + msg_ok "Updated Successfully!" + fi + exit +} + +start +build_container +description + +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}" diff --git a/frontend/public/json/livebook.json b/frontend/public/json/livebook.json new file mode 100644 index 000000000..0bad4f4f3 --- /dev/null +++ b/frontend/public/json/livebook.json @@ -0,0 +1,40 @@ +{ + "name": "Livebook", + "slug": "livebook", + "categories": [ + 20 + ], + "date_created": "2025-10-30", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8080, + "documentation": "https://hexdocs.pm/livebook/readme.html", + "config_path": null, + "website": "https://livebook.dev", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/livebook.webp", + "description": "Elixir Livebook is an interactive, web-based notebook platform for Elixir that combines code, documentation, and visualizations in a single document. Similar to Jupyter notebooks, it allows developers to write and execute Elixir code in real-time, making it ideal for data exploration, prototyping, learning, and collaborative development. Livebook features rich markdown support, built-in charting capabilities, and seamless integration with the Elixir ecosystem.", + "install_methods": [ + { + "type": "default", + "script": "ct/livebook.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "Ubuntu", + "version": "24.04" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Show initial Livebook password: `cat ~/livebook.creds`", + "type": "info" + } + ] +} diff --git a/install/livebook-install.sh b/install/livebook-install.sh new file mode 100644 index 000000000..1d24e25eb --- /dev/null +++ b/install/livebook-install.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: dkuku +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/livebook-dev/livebook + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + build-essential \ + ca-certificates \ + cmake \ + git \ + libncurses5-dev +msg_ok "Installed Dependencies" + +msg_info "Creating livebook user" +mkdir -p /opt/livebook /data +export HOME=/opt/livebook +$STD adduser --system --group --home /opt/livebook --shell /bin/bash livebook +msg_ok "Created livebook user" + +msg_warn "WARNING: This script will run an external installer from a third-party source (https://elixir-lang.org)." +msg_warn "The following code is NOT maintained or audited by our repository." +msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" +msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://elixir-lang.org/install.sh" +echo +read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM +if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then + msg_error "Aborted by user. No changes have been made." + exit 10 +fi +curl -fsSO https://elixir-lang.org/install.sh +$STD sh install.sh elixir@latest otp@latest + +msg_info "Setup Erlang and Elixir" +ERLANG_VERSION=$(ls /opt/livebook/.elixir-install/installs/otp/ | head -n1) +ELIXIR_VERSION=$(ls /opt/livebook/.elixir-install/installs/elixir/ | head -n1) +LIVEBOOK_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16) + +export ERLANG_BIN="/opt/livebook/.elixir-install/installs/otp/$ERLANG_VERSION/bin" +export ELIXIR_BIN="/opt/livebook/.elixir-install/installs/elixir/$ELIXIR_VERSION/bin" +export PATH="$ERLANG_BIN:$ELIXIR_BIN:$PATH" + +$STD mix local.hex --force +$STD mix local.rebar --force +$STD mix escript.install hex livebook --force + +cat </opt/livebook/.env +export HOME=/opt/livebook +export ERLANG_VERSION=$ERLANG_VERSION +export ELIXIR_VERSION=$ELIXIR_VERSION +export LIVEBOOK_PORT=8080 +export LIVEBOOK_IP="::" +export LIVEBOOK_HOME=/data +export LIVEBOOK_PASSWORD="$LIVEBOOK_PASSWORD" +export ESCRIPTS_BIN=/opt/livebook/.mix/escripts +export ERLANG_BIN="/opt/livebook/.elixir-install/installs/otp/\${ERLANG_VERSION}/bin" +export ELIXIR_BIN="/opt/livebook/.elixir-install/installs/elixir/\${ELIXIR_VERSION}/bin" +export PATH="\$ESCRIPTS_BIN:\$ERLANG_BIN:\$ELIXIR_BIN:\$PATH" +EOF +{ + echo "Livebook-Credentials" + echo "Livebook Password: $LIVEBOOK_PASSWORD" +} >>~/livebook.creds +msg_ok "Installed Erlang $ERLANG_VERSION and Elixir $ELIXIR_VERSION" + +msg_info "Installing Livebook" +cat </etc/systemd/system/livebook.service +[Unit] +Description=Livebook +After=network.target + +[Service] +Type=exec +User=livebook +Group=livebook +WorkingDirectory=/data +EnvironmentFile=-/opt/livebook/.env +ExecStart=/bin/bash -c 'source /opt/livebook/.env && cd /opt/livebook && livebook server' +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +chown -R livebook:livebook /opt/livebook /data +systemctl enable -q --now livebook +msg_ok "Installed Livebook" + +motd_ssh +customize + +msg_info "Cleaning Up" +$STD apt autoremove -y +$STD apt autoclean -y +$STD apt clean -y +msg_ok "Cleaned Up"