From 363f45d6cdf7790979c6c005fcdea1dbadc60af1 Mon Sep 17 00:00:00 2001 From: shenmo <jifengshenmo@outlook.com> Date: Wed, 19 Jul 2023 17:36:02 +0800 Subject: [PATCH] init --- README.md | 19 ++ src/DEBIAN/control | 8 + src/DEBIAN/postinst | 3 + src/DEBIAN/postrm | 10 + ...rk-app.bookworm-compatibility-mode.desktop | 9 + ....spark-app.bookworm-compatibility-mode.svg | 86 ++++++++ .../files/bin/bookworm-init | 192 ++++++++++++++++++ .../files/bin/bookworm-run | 49 +++++ .../files/build-container.sh | 10 + .../info | 17 ++ 10 files changed, 403 insertions(+) create mode 100644 README.md create mode 100755 src/DEBIAN/control create mode 100755 src/DEBIAN/postinst create mode 100755 src/DEBIAN/postrm create mode 100644 src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/applications/store.spark-app.bookworm-compatibility-mode.desktop create mode 100644 src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/icons/store.spark-app.bookworm-compatibility-mode.svg create mode 100755 src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init create mode 100755 src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run create mode 100755 src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/build-container.sh create mode 100644 src/opt/apps/store.spark-app.bookworm-compatibility-mode/info diff --git a/README.md b/README.md new file mode 100644 index 0000000..854eff1 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# 书虫兼容环境 +书虫兼容环境,使用bwrap容器在deepin或UOS上使用Debian 12的应用,为你带来更好的使用体验! + +兼容环境内不允许提权,若要在容器内使用root,请使用 sudo /opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run + +## 构建指南 + +先构建容器再打包,容器位置在`src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/` + + +# Bookworm compatibility mode + +Bookworm compatibility mode allows you to use Debian 12 applications on deepin or UniontechOS using bwrap containers, providing you with a better user experience! + +It is not allowed to gain root privileges within the compatible environment. If you need to use root within the container, please use "sudo /opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run" + +## Build Guide + +Build the container first then build the package. Container at `src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/` diff --git a/src/DEBIAN/control b/src/DEBIAN/control new file mode 100755 index 0000000..1c07d9a --- /dev/null +++ b/src/DEBIAN/control @@ -0,0 +1,8 @@ +Package: store.spark-app.bookworm-compatibility-mode +Version: 12.0 +Section: misc +Priority: optional +Depends: bubblewrap +Maintainer: shenmo <shenmo@spark-app.store> +Architecture: amd64 +Description: bwrap wrapper for install and running debs inside a bookworm container diff --git a/src/DEBIAN/postinst b/src/DEBIAN/postinst new file mode 100755 index 0000000..b5c8206 --- /dev/null +++ b/src/DEBIAN/postinst @@ -0,0 +1,3 @@ +#!/bin/bash + +/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init diff --git a/src/DEBIAN/postrm b/src/DEBIAN/postrm new file mode 100755 index 0000000..733975c --- /dev/null +++ b/src/DEBIAN/postrm @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ "$1" = "remove" ] || [ "$1" = "purge" ];then + +echo "清理卸载残留" +rm -rf /opt/apps/store.spark-app.bookworm-compatibility-mode/ +else +echo "非卸载,跳过清理" +fi + diff --git a/src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/applications/store.spark-app.bookworm-compatibility-mode.desktop b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/applications/store.spark-app.bookworm-compatibility-mode.desktop new file mode 100644 index 0000000..9550cdc --- /dev/null +++ b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/applications/store.spark-app.bookworm-compatibility-mode.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Categories=utils +Exec=/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run %U +Icon=store.spark-app.bookworm-compatibility-mode +Name=Bookworm CM +Name[zh_CN]=书虫兼容环境 +StartupNotify=true +Type=Application +Terminal=true diff --git a/src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/icons/store.spark-app.bookworm-compatibility-mode.svg b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/icons/store.spark-app.bookworm-compatibility-mode.svg new file mode 100644 index 0000000..50dcb70 --- /dev/null +++ b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/entries/icons/store.spark-app.bookworm-compatibility-mode.svg @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 10.0, SVG Export Plug-In . SVG Version: 3.0.0 Build 77) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [ + <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/"> + <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/"> + <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/"> + <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/"> + <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/"> + <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/"> + <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/"> + <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/"> + <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/"> + <!ENTITY ns_svg "http://www.w3.org/2000/svg"> + <!ENTITY ns_xlink "http://www.w3.org/1999/xlink"> +]> +<svg + xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;" i:viewOrigin="262 450" i:rulerOrigin="0 0" i:pageBounds="0 792 612 0" + xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" + width="87.041" height="108.445" viewBox="0 0 87.041 108.445" overflow="visible" enable-background="new 0 0 87.041 108.445" + xml:space="preserve"> + <metadata> + <variableSets xmlns="&ns_vars;"> + <variableSet varSetName="binding1" locked="none"> + <variables></variables> + <v:sampleDataSets xmlns="&ns_custom;" xmlns:v="&ns_vars;"></v:sampleDataSets> + </variableSet> + </variableSets> + <sfw xmlns="&ns_sfw;"> + <slices></slices> + <sliceSourceBounds y="341.555" x="262" width="87.041" height="108.445" bottomLeftOrigin="true"></sliceSourceBounds> + </sfw> + </metadata> + <g id="Layer_1" i:layer="yes" i:dimmedPercent="50" i:rgbTrio="#4F008000FFFF"> + <g> + <path i:knockout="Off" fill="#A80030" d="M51.986,57.297c-1.797,0.025,0.34,0.926,2.686,1.287 + c0.648-0.506,1.236-1.018,1.76-1.516C54.971,57.426,53.484,57.434,51.986,57.297"/> + <path i:knockout="Off" fill="#A80030" d="M61.631,54.893c1.07-1.477,1.85-3.094,2.125-4.766c-0.24,1.192-0.887,2.221-1.496,3.307 + c-3.359,2.115-0.316-1.256-0.002-2.537C58.646,55.443,61.762,53.623,61.631,54.893"/> + <path i:knockout="Off" fill="#A80030" d="M65.191,45.629c0.217-3.236-0.637-2.213-0.924-0.978 + C64.602,44.825,64.867,46.932,65.191,45.629"/> + <path i:knockout="Off" fill="#A80030" d="M45.172,1.399c0.959,0.172,2.072,0.304,1.916,0.533 + C48.137,1.702,48.375,1.49,45.172,1.399"/> + <path i:knockout="Off" fill="#A80030" d="M47.088,1.932l-0.678,0.14l0.631-0.056L47.088,1.932"/> + <path i:knockout="Off" fill="#A80030" d="M76.992,46.856c0.107,2.906-0.85,4.316-1.713,6.812l-1.553,0.776 + c-1.271,2.468,0.123,1.567-0.787,3.53c-1.984,1.764-6.021,5.52-7.313,5.863c-0.943-0.021,0.639-1.113,0.846-1.541 + c-2.656,1.824-2.131,2.738-6.193,3.846l-0.119-0.264c-10.018,4.713-23.934-4.627-23.751-17.371 + c-0.107,0.809-0.304,0.607-0.526,0.934c-0.517-6.557,3.028-13.143,9.007-15.832c5.848-2.895,12.704-1.707,16.893,2.197 + c-2.301-3.014-6.881-6.209-12.309-5.91c-5.317,0.084-10.291,3.463-11.951,7.131c-2.724,1.715-3.04,6.611-4.227,7.507 + C31.699,56.271,36.3,61.342,44.083,67.307c1.225,0.826,0.345,0.951,0.511,1.58c-2.586-1.211-4.954-3.039-6.901-5.277 + c1.033,1.512,2.148,2.982,3.589,4.137c-2.438-0.826-5.695-5.908-6.646-6.115c4.203,7.525,17.052,13.197,23.78,10.383 + c-3.113,0.115-7.068,0.064-10.566-1.229c-1.469-0.756-3.467-2.322-3.11-2.615c9.182,3.43,18.667,2.598,26.612-3.771 + c2.021-1.574,4.229-4.252,4.867-4.289c-0.961,1.445,0.164,0.695-0.574,1.971c2.014-3.248-0.875-1.322,2.082-5.609l1.092,1.504 + c-0.406-2.696,3.348-5.97,2.967-10.234c0.861-1.304,0.961,1.403,0.047,4.403c1.268-3.328,0.334-3.863,0.66-6.609 + c0.352,0.923,0.814,1.904,1.051,2.878c-0.826-3.216,0.848-5.416,1.262-7.285c-0.408-0.181-1.275,1.422-1.473-2.377 + c0.029-1.65,0.459-0.865,0.625-1.271c-0.324-0.186-1.174-1.451-1.691-3.877c0.375-0.57,1.002,1.478,1.512,1.562 + c-0.328-1.929-0.893-3.4-0.916-4.88c-1.49-3.114-0.527,0.415-1.736-1.337c-1.586-4.947,1.316-1.148,1.512-3.396 + c2.404,3.483,3.775,8.881,4.404,11.117c-0.48-2.726-1.256-5.367-2.203-7.922c0.73,0.307-1.176-5.609,0.949-1.691 + c-2.27-8.352-9.715-16.156-16.564-19.818c0.838,0.767,1.896,1.73,1.516,1.881c-3.406-2.028-2.807-2.186-3.295-3.043 + c-2.775-1.129-2.957,0.091-4.795,0.002c-5.23-2.774-6.238-2.479-11.051-4.217l0.219,1.023c-3.465-1.154-4.037,0.438-7.782,0.004 + c-0.228-0.178,1.2-0.644,2.375-0.815c-3.35,0.442-3.193-0.66-6.471,0.122c0.808-0.567,1.662-0.942,2.524-1.424 + c-2.732,0.166-6.522,1.59-5.352,0.295c-4.456,1.988-12.37,4.779-16.811,8.943l-0.14-0.933c-2.035,2.443-8.874,7.296-9.419,10.46 + l-0.544,0.127c-1.059,1.793-1.744,3.825-2.584,5.67c-1.385,2.36-2.03,0.908-1.833,1.278c-2.724,5.523-4.077,10.164-5.246,13.97 + c0.833,1.245,0.02,7.495,0.335,12.497c-1.368,24.704,17.338,48.69,37.785,54.228c2.997,1.072,7.454,1.031,11.245,1.141 + c-4.473-1.279-5.051-0.678-9.408-2.197c-3.143-1.48-3.832-3.17-6.058-5.102l0.881,1.557c-4.366-1.545-2.539-1.912-6.091-3.037 + l0.941-1.229c-1.415-0.107-3.748-2.385-4.386-3.646l-1.548,0.061c-1.86-2.295-2.851-3.949-2.779-5.23l-0.5,0.891 + c-0.567-0.973-6.843-8.607-3.587-6.83c-0.605-0.553-1.409-0.9-2.281-2.484l0.663-0.758c-1.567-2.016-2.884-4.6-2.784-5.461 + c0.836,1.129,1.416,1.34,1.99,1.533c-3.957-9.818-4.179-0.541-7.176-9.994l0.634-0.051c-0.486-0.732-0.781-1.527-1.172-2.307 + l0.276-2.75C4.667,58.121,6.719,47.409,7.13,41.534c0.285-2.389,2.378-4.932,3.97-8.92l-0.97-0.167 + c1.854-3.234,10.586-12.988,14.63-12.486c1.959-2.461-0.389-0.009-0.772-0.629c4.303-4.453,5.656-3.146,8.56-3.947 + c3.132-1.859-2.688,0.725-1.203-0.709c5.414-1.383,3.837-3.144,10.9-3.846c0.745,0.424-1.729,0.655-2.35,1.205 + c4.511-2.207,14.275-1.705,20.617,1.225c7.359,3.439,15.627,13.605,15.953,23.17l0.371,0.1 + c-0.188,3.802,0.582,8.199-0.752,12.238L76.992,46.856"/> + <path i:knockout="Off" fill="#A80030" d="M32.372,59.764l-0.252,1.26c1.181,1.604,2.118,3.342,3.626,4.596 + C34.661,63.502,33.855,62.627,32.372,59.764"/> + <path i:knockout="Off" fill="#A80030" d="M35.164,59.654c-0.625-0.691-0.995-1.523-1.409-2.352 + c0.396,1.457,1.207,2.709,1.962,3.982L35.164,59.654"/> + <path i:knockout="Off" fill="#A80030" d="M84.568,48.916l-0.264,0.662c-0.484,3.438-1.529,6.84-3.131,9.994 + C82.943,56.244,84.088,52.604,84.568,48.916"/> + <path i:knockout="Off" fill="#A80030" d="M45.527,0.537C46.742,0.092,48.514,0.293,49.803,0c-1.68,0.141-3.352,0.225-5.003,0.438 + L45.527,0.537"/> + <path i:knockout="Off" fill="#A80030" d="M2.872,23.219c0.28,2.592-1.95,3.598,0.494,1.889 + C4.676,22.157,2.854,24.293,2.872,23.219"/> + <path i:knockout="Off" fill="#A80030" d="M0,35.215c0.563-1.728,0.665-2.766,0.88-3.766C-0.676,33.438,0.164,33.862,0,35.215"/> + </g> + </g> +</svg> diff --git a/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init new file mode 100755 index 0000000..02876b7 --- /dev/null +++ b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init @@ -0,0 +1,192 @@ +#!/bin/bash + +if [ "$(id -u)" != "0" ]; then + echo "当前用户不是 root 用户,退出" + exit +fi +chrootEnvPath=/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bookworm-env +if [ ! -e $chrootEnvPath ];then +echo "Uncompress the env...." +tar -xvf $chrootEnvPath.tar.xz -C /opt/apps/store.spark-app.bookworm-compatibility-mode/files/ +chown -R $(who | awk '{print $1}' | head -n 1) $chrootEnvPath +fi + +non_root_user=$(who | awk '{print $1}' | head -n 1) +uid=$(id -u $non_root_user) + +function bookworm-run(){ +bwrap --dev-bind $chrootEnvPath/ / \ + --setenv LANG "$LANG" \ + --setenv LC_COLLATE "$LC_COLLATE" \ + --setenv LC_CTYPE "$LC_CTYPE" \ + --setenv LC_MONETARY "$LC_MONETARY" \ + --setenv LC_MESSAGES "$LC_MESSAGES" \ + --setenv LC_NUMERIC "$LC_NUMERIC" \ + --setenv LC_TIME "$LC_TIME" \ + --setenv LC_ALL "$LC_ALL" \ + --setenv PULSE_SERVER /run/user/$uid/pulse/native \ + --dev-bind $chrootEnvPath/etc /etc \ + --dev-bind $chrootEnvPath/opt /opt \ + --dev-bind $chrootEnvPath/usr /usr \ + --dev-bind /media /media \ + --dev /dev \ + --proc /proc \ + --dev-bind /run/user/$uid/pulse /run/user/$uid/pulse \ + --dev-bind $chrootEnvPath/var /var \ + --dev-bind / /run/host \ + --hostname bookworm-compatibility-mode \ + --unshare-uts \ + --bind /etc/passwd /etc/passwd \ + --dev-bind /etc/resolv.conf /etc/resolv.conf \ + --dev-bind /home /home \ + $@ + +} +bookworm-run apt install apt-utils bc curl dialog diffutils findutils gnupg2 less libnss-myhostname libvte-2.9*-common libvte-common lsof ncurses-base passwd pinentry-curses procps sudo time util-linux wget libegl1-mesa libgl1-mesa-glx libvulkan1 mesa-vulkan-drivers locales -y + + +cp -r /usr/lib/x86_64-linux-gnu/dri $chrootEnvPath/usr/lib/x86_64-linux-gnu/dri + +container_user_gid="$(id -rg)" +container_user_home="${HOME:-"/"}" +container_user_name="${USER}" +container_user_uid="$(id -ru)" + + +cat << EOFFFFFF > $chrootEnvPath/init.sh +#!/bin/bash + printf "bookworm-cm: Setting up sudo...\n" + mkdir -p /etc/sudoers.d + # Do not check fqdn when doing sudo, it will not work anyways + if ! grep -q 'Defaults !fqdn' /etc/sudoers.d/sudoers; then + printf "Defaults !fqdn\n" >> /etc/sudoers.d/sudoers + fi + # Ensure passwordless sudo is set up for user + if ! grep -q "\"${container_user_name}\" ALL = (root) NOPASSWD:ALL" /etc/sudoers.d/sudoers; then + printf "\"%s\" ALL = (root) NOPASSWD:ALL\n" "${container_user_name}" >> /etc/sudoers.d/sudoers + fi + + +printf "bookworm-cm: Setting up groups...\n" +# If not existing, ensure we have a group for our user. +if ! grep -q "^${container_user_name}:" /etc/group; then + if ! groupadd --force --gid "${container_user_gid}" "${container_user_name}"; then + # It may occur that we have users with unsupported user name (eg. on LDAP or AD) + # So let's try and force the group creation this way. + printf "%s:x:%s:" "${container_user_name}" "${container_user_gid}" >> /etc/group + fi +fi + +printf "bookworm-cm: Setting up users...\n" + +# Setup kerberos integration with the host +if [ -d "/run/host/var/kerberos" ] && + [ -d "/etc/krb5.conf.d" ] && + [ ! -e "/etc/krb5.conf.d/kcm_default_ccache" ]; then + + cat << EOF > "/etc/krb5.conf.d/kcm_default_ccache" +# # To disable the KCM credential cache, comment out the following lines. +[libdefaults] + default_ccache_name = KCM: +EOF +fi + +# If we have sudo/wheel groups, let's add the user to them. +additional_groups="" +if grep -q "^sudo" /etc/group; then + additional_groups="sudo" +elif grep -q "^wheel" /etc/group; then + additional_groups="wheel" +fi + +# Let's add our user to the container. if the user already exists, enforce properties. +# +# In case of AD or LDAP usernames, it is possible we will have a backslach in the name. +# In that case grep would fail, so we replace the backslash with a point to make the regex work. +# shellcheck disable=SC1003 +if ! grep -q "^$(printf '%s' "${container_user_name}" | tr '\\' '.'):" /etc/passwd && + ! grep -q "^.*:.*:${container_user_uid}:" /etc/passwd; then + if ! useradd \ + --home-dir "${container_user_home}" \ + --no-create-home \ + --groups "${additional_groups}" \ + --shell "${SHELL:-"/bin/bash"}" \ + --uid "${container_user_uid}" \ + --gid "${container_user_gid}" \ + "${container_user_name}"; then + + printf "Warning: there was a problem setting up the user\n" + printf "Warning: trying manual addition\n" + printf "%s:x:%s:%s:%s:%s:%s" \ + "${container_user_name}" "${container_user_uid}" \ + "${container_user_gid}" "${container_user_name}" \ + "${container_user_home}" "${SHELL:-"/bin/bash"}" >> /etc/passwd + printf "%s::1::::::" "${container_user_name}" >> /etc/shadow + fi +# Ensure we're not using the specified SHELL. Run it only once, so that future +# user's preferences are not overwritten at each start. +elif [ ! -e /etc/passwd.done ]; then + # This situation is presented when podman or docker already creates the user + # for us inside container. We should modify the user's prepopulated shadowfile + # entry though as per user's active preferences. + + # If the user was there with a different username, get that username so + # we can modify it + if ! grep -q "^$(printf '%s' "${container_user_name}" | tr '\\' '.'):" /etc/passwd; then + user_to_modify=$(getent passwd "${container_user_uid}" | cut -d: -f1) + fi + + if ! usermod \ + --home "${container_user_home}" \ + --shell "${SHELL:-"/bin/bash"}" \ + --groups "${additional_groups}" \ + --uid "${container_user_uid}" \ + --gid "${container_user_gid}" \ + --login "${container_user_name}" \ + "${user_to_modify:-"${container_user_name}"}"; then + + printf "Warning: there was a problem setting up the user\n" + fi + touch /etc/passwd.done +fi +addgroup messagebus +# We generate a random password to initialize the entry for the user and root. +temporary_password="$(cat /proc/sys/kernel/random/uuid)" +printf "%s\n%s\n" "${temporary_password}" "${temporary_password}" | passwd root +printf "%s:%s" "${container_user_name}" "${temporary_password}" | chpasswd -e +# Delete password for root and user +printf "%s:" "root" | chpasswd -e +printf "%s:" "${container_user_name}" | chpasswd -e + +EOFFFFFF + +chmod +x $chrootEnvPath/init.sh +bookworm-run bash /init.sh +bookworm-run rm /init.sh +bookworm-run cp /run/host/etc/locale.gen /etc/locale.gen && locale-gen +bookworm-run touch /finish.flag +sudo -u $(who | awk '{print $1}' | head -n 1) bwrap --dev-bind $chrootEnvPath/ / \ + --setenv LANG "$LANG" \ + --setenv LC_COLLATE "$LC_COLLATE" \ + --setenv LC_CTYPE "$LC_CTYPE" \ + --setenv LC_MONETARY "$LC_MONETARY" \ + --setenv LC_MESSAGES "$LC_MESSAGES" \ + --setenv LC_NUMERIC "$LC_NUMERIC" \ + --setenv LC_TIME "$LC_TIME" \ + --setenv LC_ALL "$LC_ALL" \ + --setenv PULSE_SERVER /run/user/$uid/pulse/native \ + --dev-bind $chrootEnvPath/etc /etc \ + --dev-bind $chrootEnvPath/opt /opt \ + --dev-bind $chrootEnvPath/usr /usr \ + --dev-bind /media /media \ + --dev /dev \ + --proc /proc \ + --dev-bind /run/user/$uid/pulse /run/user/$uid/pulse \ + --dev-bind $chrootEnvPath/var /var \ + --dev-bind / /run/host \ + --hostname bookworm-compatibility-mode \ + --unshare-uts \ + --bind /etc/passwd /etc/passwd \ + --dev-bind /etc/resolv.conf /etc/resolv.conf \ + --dev-bind /home /home \ + locale-gen diff --git a/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run new file mode 100755 index 0000000..dcb4ccd --- /dev/null +++ b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-run @@ -0,0 +1,49 @@ +#!/bin/bash +if [ ! -e /opt/apps/store.spark-app.bookworm-compatibility-mode/files/bookworm-env/finish.flag ];then + +if [ "$(id -u)" = "0" ]; then + /opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init +else +pkexec /opt/apps/store.spark-app.bookworm-compatibility-mode/files/bin/bookworm-init +fi + + +fi +if [ "$1" = "" ];then +OPTIONS="bash" +else +OPTIONS="$@" +fi +chrootEnvPath=/opt/apps/store.spark-app.bookworm-compatibility-mode/files/bookworm-env +non_root_user=$(who | awk '{print $1}' | head -n 1) +uid=$(id -u $non_root_user) + + +bwrap --dev-bind $chrootEnvPath/ / \ + --setenv LANG "$LANG" \ + --setenv LC_COLLATE "$LC_COLLATE" \ + --setenv LC_CTYPE "$LC_CTYPE" \ + --setenv LC_MONETARY "$LC_MONETARY" \ + --setenv LC_MESSAGES "$LC_MESSAGES" \ + --setenv LC_NUMERIC "$LC_NUMERIC" \ + --setenv LC_TIME "$LC_TIME" \ + --setenv LC_ALL "$LC_ALL" \ + --setenv PULSE_SERVER /run/user/$uid/pulse/native \ + --dev-bind $chrootEnvPath/etc /etc \ + --dev-bind $chrootEnvPath/opt /opt \ + --dev-bind $chrootEnvPath/usr /usr \ + --dev-bind /media /media \ + --dev /dev \ + --proc /proc \ + --dev-bind /run/user/$uid/pulse /run/user/$uid/pulse \ + --dev-bind $chrootEnvPath/var /var \ + --dev-bind / /run/host \ + --hostname bookworm-compatibility-mode \ + --unshare-uts \ + --bind /etc/passwd /etc/passwd \ + --dev-bind /etc/resolv.conf /etc/resolv.conf \ + --dev-bind /home /home \ + $OPTIONS + + + diff --git a/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/build-container.sh b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/build-container.sh new file mode 100755 index 0000000..c80d2c9 --- /dev/null +++ b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/files/build-container.sh @@ -0,0 +1,10 @@ +#!/bin/bash +if [ `which debootstrap` = "" ];then +echo "Need to install debootstrap!" +exit +fi + +cd "`dirname $0`" +sudo debootstrap bookworm ./bookworm-env https://mirrors.ustc.edu.cn/debian/ +tar -cJvf bookworm-env.tar.xz bookworm-env/* +sudo rm -rf bookworm-env diff --git a/src/opt/apps/store.spark-app.bookworm-compatibility-mode/info b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/info new file mode 100644 index 0000000..7a8c743 --- /dev/null +++ b/src/opt/apps/store.spark-app.bookworm-compatibility-mode/info @@ -0,0 +1,17 @@ +{ +"appid": "store.spark-app.bookworm-compatibility-mode", +"name": "store.spark-app.bookworm-compatibility-mode", +"version": "12.0", +"arch": ["amd64"], +"permissions": { +"autostart": true, +"notification": true, +"trayicon": true, +"clipboard": true, +"account": true, +"bluetooth": true, +"camera": true, +"audio_record": true, +"installed_apps": true +} +}