From a88412856d46356ac60a57874b3deb4af43e87c3 Mon Sep 17 00:00:00 2001 From: ComixHe <54773474+ComixHe@users.noreply.github.com> Date: Fri, 31 May 2024 05:45:58 +0000 Subject: [PATCH] sync docs automatically. --- en/guide/debug/faq.md | 48 +++++++++++++------------ en/guide/debug/ll-pica-faq.md | 18 ++++++++++ en/guide/ll-builder/create.md | 46 ++++++++++++------------ en/guide/ll-builder/run.md | 4 ++- en/guide/ll-cli/update.md | 20 +++++------ en/guide/ll-pica/adep.md | 2 +- en/guide/ll-pica/convert.md | 9 +++-- en/guide/ll-pica/introduction.md | 19 +++++++++- en/guide/ll-pica/manifests.md | 7 ++-- en/guide/start/how_to_use.md | 6 ++-- en/guide/start/install.md | 30 +++++++++++++--- en/guide/start/whatis.md | 62 ++++++++++++++++---------------- guide/debug/faq.md | 50 ++++++++++++++------------ guide/debug/ll-pica-faq.md | 17 +++++++++ guide/ll-builder/create.md | 47 ++++++++++++------------ guide/ll-builder/run.md | 10 +++--- guide/ll-cli/update.md | 24 ++++++------- guide/ll-pica/adep.md | 2 +- guide/ll-pica/convert.md | 9 +++-- guide/ll-pica/introduction.md | 15 +++++++- guide/ll-pica/manifests.md | 7 ++-- guide/start/how_to_use.md | 12 ++++--- guide/start/install.md | 34 ++++++++++++++---- guide/start/whatis.md | 24 ++----------- 24 files changed, 307 insertions(+), 215 deletions(-) create mode 100644 en/guide/debug/ll-pica-faq.md create mode 100644 guide/debug/ll-pica-faq.md diff --git a/en/guide/debug/faq.md b/en/guide/debug/faq.md index d860ad5..0e77ed6 100644 --- a/en/guide/debug/faq.md +++ b/en/guide/debug/faq.md @@ -11,48 +11,50 @@ SPDX-License-Identifier: LGPL-3.0-or-later Linglong applications run in a container, and the application data will be mounted to `/opt/apps/`/. Only system data will exist in the `/usr/share` directory, and there will be no application-related data. Therefore, reading directly from `/usr/share` will fail. Suggested processing: Use the `XDG_DATA_DIRS` environment variable to read resources, and `/opt/apps//files/share` will exist in this environment variable search path. 2. The font library file cannot be found when the application is running. Why can the corresponding font library be read when the `deb` package is installed? - When the `deb` package is installed, it will depend on the corresponding font library file. The Linglong package format adopts a self-sufficient packaging format. Except for the basic system library, `qt` library and `dtk` library files provided in `runtime`, do not need to be provided by yourself, other dependent data files need to be provided by yourself. It is recommended to put the corresponding data file under `files/share`, and use the environment variable `XDG_DATA_DIRS` to read the path. + When the `deb` package is installed, it will depend on the corresponding font library file. The Linglong package format adopts a self-sufficient packaging format. Except for the basic system library, `Qt` library and `DTK` library files provided in `runtime`, do not need to be provided by yourself, other dependent data files need to be provided by yourself. It is recommended to put the corresponding data file under `files/share`, and use the environment variable `XDG_DATA_DIRS` to read the path. 3. What is in the Linglong application `runtime`? Can you add some library files to it? - At present, the `runtime` that Linglong application depends on provides the `qt` library and the `dtk` library. Because `runtime` has a strict size limit, adding additional library files to `runtime` is currently not allowed. + At present, the `runtime` that Linglong application depends on provides the `Qt` library and the `DTK` library. Because `runtime` has a strict size limit, adding additional library files to `runtime` is currently not allowed. 4. The application runs in the container. Can a configuration file be created in any path of the container during the running process? - This is not allowed. The file system in the container is a read-only file system and configuration files are not allowed to be created under arbitrary paths. + You can create configuration files under `XDG_CONFIG_HOME`. 5. Where is app data saved? Where can I find it outside the container? - Because Linglong applications follow the principle of non-interference, the `XDG_DATA_HOME`, `XDG_CONFIG_HOME`, `XDG_CACHE_HOME` environment variables are defined in the corresponding path of the host machine, `~/.linglong/`/. So the user application data will be saved under this path. When writing data while the application is running, it should also be able to read the corresponding environment variable to write the data. Mutual configuration calls between applications are prohibited. + Because Linglong applications follow the principle of non-interference, the `XDG_DATA_HOME`, `XDG_CONFIG_HOME`, `XDG_CACHE_HOME` environment variables are defined in the corresponding path of the host machine, `~/.linglong/`/. So the user application data will be saved under this path. When writing data while the application is running, it should also be able to read the corresponding environment variable to write the data. Prohibit reading and writing configurations of other applications. 6. The application provides the `dbus service` file, where do I place it? What does the `Exec` segment write? When the application provides the `dbus service` file, it needs to be placed in the `entries/dbus-1/services` directory. If `Exec` executes the binary in the Linglong package, use the `--exec` option parameter to execute the corresponding binary. -7. Can the application download files to the `$HOME` directory by default? I downloaded the file, why can't I find it on the host machine? +7. After the app is installed, the launcher cannot find it? - Linglong specification does not allow files and directories to be created in the `$HOME` directory. -8. Why does the desktop shortcut icon appear as a gear or blank? How are the icon files placed? + TryExec=xxx, if xxx does not exist in the $PATH, the application is considered non-existent and will not be displayed. +8. Why is the Icon displayed as a small black dot? - If the gear shaped icon is displayed, the icon has not been obtained. You need to confirm whether the `Icon` path name is correct. When the icon is empty, the `tryExec` field exists. When the command does not exist, it will cause the shortcut to display improperly. Place the application icon in the `icons` directory. The directory structure should be consistent with the system `icons` directory structure. The recommended path is `icons/hicolor/scalable/apps/org.desktopspec.demo.svg`. Use `svg` format icons. Refer to the icon file format specification. If you use a non-vector format, please place the icon according to the resolution. Note that the `desktop` file should not write the icon path, but directly write the icon name. -9. Why do `xdg-open` and `xdg-email` that come with the application fail? + The desktop file has an 'Icon' field written, but the Icon field name is incorrect or an absolute path is being used."。 +9. Why is the Icon field as a gear? - Linglong specially handles `xdg-open` and `xdg-email` in `runtime`, so the application is forbidden to execute the executable file or script of `xdg-open` and `xdg-email` that it carries. -10. Why doesn't the system environment variable used by the application take effect? + The desktop file does not provide Icon field. +10. Where are the icons stored? - When using environment variables, you need to confirm whether there are corresponding environment variables in the container. If not, you need to contact the Linglong team for processing. -11. The library files required for the application to run were not found. How can I provide them? + svg -> $PREFIX/share/icons/hicolor/scalable/apps/ - The resource files that the application needs to use and the library files both need to be provided by the application itself. The library files are placed in the `$PREFIX/lib` path. -12. Where can I choose the application download directory? + Other formats are stored according to resolution, such as 16x16. - Currently Linglong users can only choose the `Desktop`, `Documents`, `Downloads`, `Music`, `Pictures`, `Videos`, `Public`, and `Templates` directories under the user's home directory, and cannot be downloaded to other directories. -13. Why has the `QTWebEngine` rendering process crashed when the application is running? + png/xpm -> $PREFIX/share/icons/hicolor/16X16/apps/ +11. Why do `xdg-open` and `xdg-email` that come with the application fail? - Due to the system upgrade of `glibc`, the application fails to use the built-in browser, and the application needs to be re-adapted. A temporary solution is to set the environment variable: `export QTWEBENGINE_DISABLE_container=1`. -14. When the application is running, the `libqxcb.so` library cannot be found or the `qtwebengine` error is reported. What can I do? + Linglong specially handles `xdg-open` and `xdg-email` in `runtime`, so the application is forbidden to execute the executable file or script of `xdg-open` and `xdg-email` that it carries. +12. Why doesn't the system environment variable used by the application take effect? - When a `qt.conf` file exists, you need to configure the correct path in the file or use the `QTWEBENGINEPROCESS_PATH`, `QTWEBENGINERESOURCE_PATH`, `QT_QPA_PLATFORM_PLUGIN_PATH`, and `QT_PLUGIN_PATH` environment variables to configure the search path. -15. The application running error message `gpu_data_manager_impl_private`, how can I solve it? + When using environment variables, you need to confirm whether there are corresponding environment variables in the container. If not, you need to contact the Linglong team for processing. +13. The library files required for the application to run were not found. How can I provide them? + + The resource files that the application needs to use and the library files both need to be provided by the application itself. The library files are placed in the `$PREFIX/lib` path. +14. Why has the `Qt WebEngine` rendering process crashed when the application is running? - The current temporary solution is to add `--no-container`. + Due to the system upgrade of `glibc`, the application fails to use the built-in browser, and the application needs to be re-adapted. A temporary solution is to set the environment variable: `export QTWEBENGINE_DISABLE_SANDBOX=1`. +15. When the application is running, the `libqxcb.so` library cannot be found or the `qtwebengine` error is reported. What can I do? - Reference: [https://github.com/Automattic/simplenote-electron/issues/3044](https://github.com/Automattic/simplenote-electron/issues/3044) + When a `qt.conf` file exists, you need to configure the correct path in the file or use the `QTWEBENGINEPROCESS_PATH`, `QTWEBENGINE_RESOURCE_PATH`, `QT_QPA_PLATFORM_PLUGIN_PATH`, and `QT_PLUGIN_PATH` environment variables to configure the search path. 16. Can the application carry the database file by itself and write data to the database during operation? The file system in the container is a read-only file system and does not allow data to be written to application resource files. diff --git a/en/guide/debug/ll-pica-faq.md b/en/guide/debug/ll-pica-faq.md new file mode 100644 index 0000000..0aba3e0 --- /dev/null +++ b/en/guide/debug/ll-pica-faq.md @@ -0,0 +1,18 @@ +# FAQ + +1. Where is the default configuration located for the `linglong.yaml` file generated by `ll-pica`? + + The configuration file for `ll-pica` is located at `~/.pica/config.json`. +2. Does ll-pica fail to convert software such as Wine, Android apps, input methods, or security applications? + + Linglong applications currently do not support this type of application, and consequently, ll-pica cannot convert them either. +3. Why is there no sound from software that requires audio? + + Prompt "libpulsecommon-12.2.so not found" can be addressed by adding a line in the `build` section of the linglong.yaml file: `mv $PREFIX/lib/$TRIPLET/pulseaudio/* $PREFIX/lib/$TRIPLET`. +4. Why is the `command` field empty in the generated `linglong.yaml` file? + + ll-pica retrieves the 'Exec' field from the desktop file within the deb package. If the command is empty, please verify if the desktop file path + within the deb package exists in the following locations. + + - /opt/apps/$appid/entries/applications + - /usr/share/applications diff --git a/en/guide/ll-builder/create.md b/en/guide/ll-builder/create.md index f22a0e5..effb9dc 100644 --- a/en/guide/ll-builder/create.md +++ b/en/guide/ll-builder/create.md @@ -32,13 +32,13 @@ Arguments: The `ll-builder create` command creates a folder in the current directory according to the project name, and generates the `linglong.yaml` template file required for the build. Here is an example: ```bash -ll-builder create org.deepin.demo +ll-builder create org.deepin.hello ``` Here is the output: ```text -org.deepin.demo/ +org.deepin.hello/ └── linglong.yaml ``` @@ -54,8 +54,8 @@ version: "1" ```yaml package: - id: org.deepin.demo - name: deepin-demo + id: org.deepin.hello + name: hello version: 0.0.0.1 kind: app description: | @@ -83,8 +83,7 @@ runtime: org.deepin.Runtime/23.0.1 Linglong application startup command. ```yaml -command: - - /opt/apps/org.deepin.demo/files/bin/demo +command: [echo, -e, hello world] ``` ### Source @@ -118,28 +117,29 @@ The contents of the `linglong.yaml` file are as follows: version: "1" package: - id: org.deepin.demo - name: deepin-demo - version: 0.0.0.1 + id: @ID@ + name: your name #set your application name + version: 0.0.0.1 #set your version kind: app description: | - simple qt demo. + your description #set a brief text to introduce your application. -command: - - /opt/apps/org.deepin.demo/files/bin/demo +command: [echo, -e, hello world] #the commands that your application need to run. -base: org.deepin.foundation/23.0.0 -runtime: org.deepin.Runtime/23.0.1 +base: org.deepin.foundation/23.0.0 #set the base environment, this can be changed. + +#set the runtime environment if you need, a example of setting deepin runtime is as follows. +#runtime: +#org.deepin.Runtime/23.0.1 -sources: - - kind: git - url: "https://github.com/linuxdeepin/linglong-builder-demo.git" - version: master - commit: a3b89c3aa34c1aff8d7f823f0f4a87d5da8d4dc0 +#set the source if you need, a simple example of git is as follows. +#source: +# - kind: git +# url: https://github.com/linuxdeepin/linglong-builder-demo.git +# version: master\n +# commit: a3b89c3aa34c1aff8d7f823f0f4a87d5da8d4dc0 build: | - cd /project/linglong/sources/linglong-builder-demo.git - qmake -makefile PREFIX=${PREFIX} LIB_INSTALL_DIR=${PREFIX}/lib/${TRIPLET} - make - make install + echo 'hello' #some operation to build this project + ``` diff --git a/en/guide/ll-builder/run.md b/en/guide/ll-builder/run.md index 944528b..4f8d03a 100644 --- a/en/guide/ll-builder/run.md +++ b/en/guide/ll-builder/run.md @@ -36,7 +36,9 @@ ll-builder run If `ll-builder run` runs successfully, the output is as follows: -![org.deepin.demo.png](./images/org.deepin.demo.png) +```bash +hello world +``` To facilitate debugging, use an additional `--exec /bin/bash` parameter to replace the default execution program after entering the container, such as: diff --git a/en/guide/ll-cli/update.md b/en/guide/ll-cli/update.md index 4e84dc3..797df4d 100644 --- a/en/guide/ll-cli/update.md +++ b/en/guide/ll-cli/update.md @@ -6,18 +6,18 @@ SPDX-License-Identifier: LGPL-3.0-or-later # Update Linglong App -Use `ll-cli update` to update Linglong apps. +Use `ll-cli upgrade` to upgrade Linglong apps. -View the help information for the `ll-cli update` command: +View the help information for the `ll-cli upgrade` command: ```bash -ll-cli update --help +ll-cli upgrade --help ``` Here is the output: ```text -Usage: ll-cli [options] update com.deepin.demo +Usage: ll-cli [options] upgrade com.deepin.demo Options: -h, --help Displays help on commandline options. @@ -26,26 +26,24 @@ Options: --module <--module=runtime> the module of app Arguments: - update update an application + upgrade update an application appId application id ``` -Use `ll-cli update` to update a local app to the latest version in the remote repository, such as: +Use `ll-cli upgrade` to upgrade a local app to the latest version in the remote repository, such as: ```bash -ll-cli update +ll-cli upgrade org.deepin.calculator ``` Here is the output: ```text -update org.deepin.calculator , please wait a few minutes... -org.deepin.calculator is updating... -message: update org.deepin.calculator success, version:5.7.16 --> 5.7.21.4 +100% Install main:org.deepin.calculator/5.7.21.4/x86_64 success ``` Example of updating the specified version to the latest version: ```bash -ll-cli update +ll-cli upgrade org.deepin.calculator/5.7.16 ``` diff --git a/en/guide/ll-pica/adep.md b/en/guide/ll-pica/adep.md index 7469f1e..50b6147 100644 --- a/en/guide/ll-pica/adep.md +++ b/en/guide/ll-pica/adep.md @@ -29,7 +29,7 @@ Global Flags: ``` ```bash -ll-builder adep -d "dep1,dep2" -p /path/to/linglong.yaml +ll-pica adep -d "dep1,dep2" -p /path/to/linglong.yaml ``` If executing within the same path where the `linglong.yaml` file resides, there is no need to include the `-p` parameter. diff --git a/en/guide/ll-pica/convert.md b/en/guide/ll-pica/convert.md index 6970f64..0f1454a 100644 --- a/en/guide/ll-pica/convert.md +++ b/en/guide/ll-pica/convert.md @@ -59,11 +59,10 @@ The constructed products are as follows: ```bash ├── package │ └── com.baidu.baidunetdisk -│ └── amd64 -│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_develop.layer -│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_runtime.layer -│ ├── linglong -│ └── linglong.yaml +│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_develop.layer +│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_runtime.layer +│ ├── linglong +│ └── linglong.yaml └── package.yaml ``` diff --git a/en/guide/ll-pica/introduction.md b/en/guide/ll-pica/introduction.md index 28a57c9..ec2f149 100644 --- a/en/guide/ll-pica/introduction.md +++ b/en/guide/ll-pica/introduction.md @@ -1,6 +1,23 @@ # ll-pica Introduction -This tool currently provides the capability to convert DEB packages into Linglong packages. Only software packages that comply with the app store packaging standards are supported for conversion. Packages related to Wine, Android emulators, input methods, and security software cannot be converted at this time. +This tool currently provides the capability to convert DEB packages into Linglong packages. Generate the required `linglong.yaml` file for building Linglong applications and rely on `ll-builder` to implement application build and export. Only software packages that comply with the [app store packaging standards](https://doc.chinauos.com/content/M7kCi3QB_uwzIp6HyF5J) are supported for conversion. + +:::tip + +The conversion tool is merely an auxiliary tool and does not guarantee +that the converted application will definitely run. It's possible that +the software depends on libraries installed in paths or other +configuration paths that do not align with those inside LingLong's +internal structure, leading to the inability to execute. In such cases, +you would need to use the command `ll-builder run --exec bash` to enter the container for debugging purposes. +::: + +The following situations are likely to result in unsuccessful execution: + +1. Packages related to Wine, Android emulators, input methods, and security software cannot be converted. +2. The package utilizes preinst, postinst, prerm, and postrm scripts. +3. It is necessary to read configuration files from a fixed path. +4. Need to obtain root permissions. View the help information for the `ll-pica` command: diff --git a/en/guide/ll-pica/manifests.md b/en/guide/ll-pica/manifests.md index 3e870d5..08d058d 100644 --- a/en/guide/ll-pica/manifests.md +++ b/en/guide/ll-pica/manifests.md @@ -8,10 +8,9 @@ The `package.yaml` file serves as the foundation for ll-pica to convert packages {workdir} ├── package │ └── {appid} -│ └── amd64 -│ ├── linglong -│ ├── linglong.yaml -│ └── start.sh +│ ├── linglong +│ ├── linglong.yaml +│ └── start.sh └── package.yaml ``` diff --git a/en/guide/start/how_to_use.md b/en/guide/start/how_to_use.md index efbd6fa..998c291 100644 --- a/en/guide/start/how_to_use.md +++ b/en/guide/start/how_to_use.md @@ -98,7 +98,7 @@ ll-builder run the successful output of `ll-builder run` is as follows: -![org.deepin.demo.png](../ll-builder/images/org.deepin.demo.png) +![org.deepin.calculator.png](./images/org.deepin.calculator.png) For debugging purposes, use the additional `--exec /bin/bash` parameter to replace the default program executed upon entering the container, for example: @@ -108,11 +108,11 @@ ll-builder run --exec /bin/bash # Conversion application -Here, we use baidunetdisk as an example for converting to a Linglong package from a deb package. +Here, we use baidunetdisk as an example. We will introduce the process of converting DEB packages into Linglong packages ## Obtain software package -Take baidunetdisk as an example. First, obtain the deb package file. +First, obtain the deb package file. Currently, only software following the application store packaging specifications is supported for conversion. diff --git a/en/guide/start/install.md b/en/guide/start/install.md index efe5c60..9e046f2 100644 --- a/en/guide/start/install.md +++ b/en/guide/start/install.md @@ -4,19 +4,21 @@ SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. SPDX-License-Identifier: LGPL-3.0-or-later --> -# Install +# Install linglong -Currently supported: deepin v23, UOS 1070. +Linglong is composed of three parts. -## Operating system +- ll-builder is used to build and debug Linglong applications, provided by linglong-builder. +- ll-box is a sandbox container, provided by linglong-box. +- ll-cli manages and runs Linglong applications, provided by linglong-bin. -- deepin v23 +## deepin v23 ```bash sudo apt install linglong-builder ``` -- UOS 1070 +## UOS 1070 add Linglong repository source @@ -28,3 +30,21 @@ echo "deb [trusted=yes] https://ci.deepin.com/repo/deepin/deepin-community/lingl sudo apt update sudo apt install linglong-builder ``` + +# Install the Pica tool + +This tool currently provides the capability to convert DEB packages into Linglong packages. Generate the required `linglong.yaml` file for building Linglong applications and rely on `ll-builder` to implement application build and export. + +## deepin v23 + +```bash +sudo apt install linglong-pica +``` + +## UOS 1070 + +The repository source needs to be added, which has been done previously. + +```bash +sudo apt install linglong-pica +``` diff --git a/en/guide/start/whatis.md b/en/guide/start/whatis.md index 82a4d45..32a96fc 100644 --- a/en/guide/start/whatis.md +++ b/en/guide/start/whatis.md @@ -4,7 +4,7 @@ SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. SPDX-License-Identifier: LGPL-3.0-or-later --> -# Introduction +# Summary Linglong, an open source package format developed by UnionTech Software, is designed to manage, distribute, create a sandbox for packages, and integrate development tools, instead of using package management tools such as `deb` or `rpm`. @@ -12,7 +12,7 @@ Linglong, an open source package format developed by UnionTech Software, is desi 1. Both `deb` and `rpm` are strongly-dependent package management systems and allow complex cross dependencies (or circular dependencies) between components, which makes maintenance a matter of great expertise. A little carelessness will lead to a complete system failure that cannot be repaired. 2. Installation dependencies and running dependencies are coupled so that multiple versions can hardly coexist. Although `deb` and `rpm` have provided several solutions to solve the multi-version coexistence problem, these solutions require changes in source code and are infeasible. -3. The `Hook` system is complex and has no restrictions, through which many operations can damage the system. +3. The `Hook` system is complex and has no restrictions, through which many operations can damage the system. 4. They have insufficient reliability, no redundant recovery design, and a lack of verification mechanisms. Once the package management system fails, the system can hardly be repaired. 5. The permissions of `deb` and `rpm` are loosely controlled with big security risks. 6. The current package updates do not support incremental updates, which is a great waste of resources. @@ -25,32 +25,32 @@ Linglong, an open source package format developed by UnionTech Software, is desi ## Comparison -| Features | Linglong | Flatpak | Snap | AppImage | -| ------------------------- | ------------------------------- | ------------- | ---------------- | --------------------------------------- | -| Package desktop apps | ✔ | ✔ | ✔ | ✔ | -| Package terminal apps | ✔ | ✔ | ✔ | ✔ | -| Deal with server apps | ✔ | ✘ | ✔ | ✘ | -| Package system services (root access) | ✘ | ✘ | ✔ | ✘ | -| Normal themes | ✔ | ✔ | ✔ | ✔ | -| Library hosting services | ✔ | ✘ | ✘ | ✘ | -| Source of libraries/dependencies | In packages | | | | -| Host system | In packages | | | | -| SDK | In packages | | | | -| snap base | | | | | -| Commercial support | ✔ | ✘ | ✔ | ✘ | -| Apps quantity | About 3000+ | 1400+ | 6600+ | 1300+ | -| Development tools | | GNOME Builder | electron-builder | | -| GNOME Builder | electron-builder | | | | -| Sandbox | ✔ | ✔ | ✔ | ◐ (Not officially available, but technically feasible) | -| Rootless sandbox | ✔ | ✘ | ✘ | ✘ | -| Run without installation | ✔ (Offer Bundle packages) | ✘ | ✘ | ✔ | -| Run without decompression | ✔ (Offer Bundle packages) | ✘ | ✔ | ✔ | -| Self-distribution/Green-format distribution | ◐ (Technically feasible, but system limits it) | ✘ | ✘ | ✔ | -| Run Wine apps | ✔ | ◐ (Theoretically possible) | ◐ (Theoretically possible) | ◐ (Use LD to modify open calls, with poor compatibility) | -| Support offline environment | ✔ | ✔ | ✔ | ✔ | -| Permission management | ✔ | ✔ | ✔ | ✘ | -| Center repository | linglong.space | FlatHub | Snap Store | AppImageHub | -| | | | | | -| Multi-version coexistence | ✔ | ✔ | ✔ | ✔ | -| Peer-to-peer distribution | ✔ | ✔ | ✔ | ✔ | -| App upgrades | By repository | By repository | By repository | By official tool | +| Features | Linglong | Flatpak | Snap | AppImage | +| ------------------------------------------- | ----------------------------------------------- | --------------------------- | --------------------------- | --------------------------------------------------------- | +| Package desktop apps | ✔ | ✔ | ✔ | ✔ | +| Package terminal apps | ✔ | ✔ | ✔ | ✔ | +| Deal with server apps | ✔ | ✘ | ✔ | ✘ | +| Package system services (root access) | ✘ | ✘ | ✔ | ✘ | +| Normal themes | ✔ | ✔ | ✔ | ✔ | +| Library hosting services | ✔ | ✘ | ✘ | ✘ | +| Source of libraries/dependencies | In packages | | | | +| Host system | In packages | | | | +| SDK | In packages | | | | +| snap base | | | | | +| Commercial support | ✔ | ✘ | ✔ | ✘ | +| Apps quantity | About 3000+ | 1400+ | 6600+ | 1300+ | +| Development tools | | GNOME Builder | electron-builder | | +| GNOME Builder | electron-builder | | | | +| Sandbox | ✔ | ✔ | ✔ | ◐ (Not officially available, but technically feasible) | +| Rootless sandbox | ✔ | ✘ | ✘ | ✘ | +| Run without installation | ✔ (Offer Bundle packages) | ✘ | ✘ | ✔ | +| Run without decompression | ✔ (Offer Bundle packages) | ✘ | ✔ | ✔ | +| Self-distribution/Green-format distribution | ◐ (Technically feasible, but system limits it) | ✘ | ✘ | ✔ | +| Run Wine apps | ◐ (Adapting now) | ◐ (Theoretically possible) | ◐ (Theoretically possible) | ◐ (Use LD to modify open calls, with poor compatibility) | +| Support offline environment | ✔ | ✔ | ✔ | ✔ | +| Permission management | ✔ | ✔ | ✔ | ✘ | +| Center repository | mirror-repo-linglong.deepin.com | FlatHub | Snap Store | AppImageHub | +| | | | | | +| Multi-version coexistence | ✔ | ✔ | ✔ | ✔ | +| Peer-to-peer distribution | ✔ | ✔ | ✔ | ✔ | +| App upgrades | By repository | By repository | By repository | By official tool | diff --git a/guide/debug/faq.md b/guide/debug/faq.md index fa7eb38..27d97c5 100644 --- a/guide/debug/faq.md +++ b/guide/debug/faq.md @@ -8,56 +8,60 @@ SPDX-License-Identifier: LGPL-3.0-or-later 1. 应用运行读取 `/usr/share`下应用安装资源文件,为什么读取失败? - 玲珑应用是在容器环境中运行,应用数据会挂载到 `/opt/apps/`/下,`/usr/share`目录下只会存在系统数据,不会存在应用相关数据。因此直接读取 `/usr/share`下会失败。建议处理:采用 `XDG_DATA_DIRS`环境变量读取资源,`/opt/apps//files/share`会存在在此环境变量搜索路径中。 + 玲珑应用是在容器环境中运行,应用数据会挂载到 `/opt/apps/`/下,`/usr/share`目录下只会存在系统数据,不会存在应用相关数据。因此直接读取 `/usr/share` 会失败。建议处理:采用 `XDG_DATA_DIRS` 环境变量读取资源,`/opt/apps//files/share`会存在在此环境变量搜索路径中。 2. 应用运行时找不到字体库文件?为什么 `deb`包安装时能读取到对应的字体库? - `deb`包安装时,会依赖带入对应的字体库文件。而玲珑包格式采用自给自足打包格式。除了基本的系统库,`runtime`里面提供的 `qt`库与 `dtk`库文件不用自己提供外,其他依赖数据文件,均需自己提供。建议对应的数据文件放入 `files/share`下,采用环境变量 `XDG_DATA_DIRS`读取路径。 + `deb`包安装时,会依赖带入对应的字体库文件。而玲珑包格式采用自给自足打包格式。除了基本的系统库,`runtime`里面提供的 `Qt`库与 `DTK`库文件不用自己提供外,其他依赖数据文件,均需自己提供。建议对应的数据文件放入 `files/share`下,采用环境变量 `XDG_DATA_DIRS`读取路径。 3. 玲珑应用 `runtime`里面有什么?能不能往里面添加一些库文件进去? - 目前玲珑应用依赖的 `runtime`里面提供的是 `qt`库与 `dtk`库。因 `runtime`有严格的大小限制。目前不允许往 `runtime`里面添加额外的库文件。 + 目前玲珑应用依赖的 `runtime`里面提供的是 `Qt`库与 `DTK`库。因 `runtime`有严格的大小限制。目前不允许往 `runtime`里面添加额外的库文件。 4. 应用在容器内运行,运行过程中能不能往容器任意路径下创建配置文件? - 这是不允许的行为,容器内文件系统是只读文件系统,不允许随意路径下创建配置文件。 + 可以在 `XDG_CONFIG_HOME` 下创建配置文件。 5. 应用数据保存到哪里?在容器外哪里能找到? - 因玲珑应用遵循互不干涉原则,`XDG_DATA_HOME`、`XDG_CONFIG_HOME`、`XDG_CACHE_HOME`环境变量被定义到宿主机 `~/.linglong/`/对应的路径下,因此用户应用数据会保存在此路径下,应用运行过程中写入数据时,也应该读取对应的环境变量写入数据。禁止应用间互相配置调用。 + 因玲珑应用遵循互不干涉原则,`XDG_DATA_HOME`、`XDG_CONFIG_HOME`、`XDG_CACHE_HOME`环境变量被定义到宿主机 `~/.linglong/`/对应的路径下,因此用户应用数据会保存在此路径下,应用运行过程中写入数据时,也应该读取对应的环境变量写入数据。禁止读写其它应用的配置。 6. 应用提供了 `dbus service`文件,如何放置?`Exec`段写什么? 应用提供 `dbus service`文件时,需要放到 `entries/dbus-1/services`目录下,如果 `Exec`执行玲珑包内二进制,使用 `--exec`选项参数执行对应的二进制。 -7. 应用能不能默认往 `$HOME`目录下下载文件?下载了文件,为什么宿主机器下找不到? +7. 应用安装后,启动器无法找到? - 玲珑规范,不允许往 `$HOME`目录下创建文件与目录。 -8. 桌面快捷方式为什么显示齿轮状?或者为空?图标文件如何放置? + TryExec=xxx, 当xxx 在 $PATH 路径中不存在时,会认为该应用不存在不予显示。 +8. 为什么图标显示为小黑点? - 显示齿轮状是图标未获取到,需要确认 `Icon`路径名称是否正确。图标为空时,是存在 `tryExec`字段,当命令不存在时,会导致快捷方式显示异常。放置应用图标 `icons`,目录结构与系统 `icons`目录结构保持一致即可,建议路径为 `icons/hicolor/scalable/apps/org.desktopspec.demo.svg`,使用 `svg`格式图标。参考图标文件格式规范如果使用非矢量格式,请按照分辨率来放置图标,注意 `desktop`文件不要写死图标路径,直接写图标名即可。 -9. 应用自带的 `xdg-open`、`xdg-email`为什么失效? + desktop 写了 Icon 字段,且 Icon 字段名称不对或者使用绝对路径。 +9. 为什么图标显示为齿轮? - `runtime`中玲珑特殊处理了 `xdg-open`、`xdg-email`,因此应用禁止执行自己携带的xdg-open、xdg-email可执行文件或者脚本。 -10. 应用使用系统环境变量未生效,为什么? + desktop 未提供 Icon 字段。 +10. 图标存放在哪个路径? + + svg -> $PREFIX/share/icons/hicolor/scalable/apps/ + + 其他格式按分辨率存放,如16X16 + + png/xpm -> $PREFIX/share/icons/hicolor/16X16/apps/ +11. 应用自带的 `xdg-open`、`xdg-email`为什么失效? + + `runtime`中玲珑特殊处理了 `xdg-open`、`xdg-email`,因此应用禁止执行自己携带的xdg-open、xdg-email可执行文件或者脚本。 +12. 应用使用系统环境变量未生效,为什么? 当使用环境变量时,需要确认容器内是否存在对应的环境变量,如果没有,需要联系玲珑团队处理。 -11. 应用运行需要的库文件没找到,如何提供? +13. 应用运行需要的库文件没找到,如何提供? 应用需要使用的资源文件,与库文件需要应用自身提供。库文件放到 `$PREFIX/lib` 路径下。 -12. 应用下载目录可以选择哪里? - - 目前玲珑用户下载目录只能选择用户主目录下 `Desktop`、`Documents`、`Downloads`、`Music`、`Pictures`、`Videos`、`Public`、`Templates` 目录,不能下载到其他目录。 -13. 应用运行时,为什么 `QT WebEngine`渲染进程已崩溃? +14. 应用运行时,为什么 `Qt WebEngine`渲染进程已崩溃? 因系统升级了 `glibc`,导致应用使用内置浏览器时失败,需要应用重新适配。临时解决方案是设置环境变量:`export QTWEBENGINE_DISABLE_SANDBOX=1`。 -14. 应用运行时,找不到 `libqxcb.so`库或者 `qtwebengin` 报错? - - 存在 `qt.conf`文件时,在文件中配置正确路径,或者使用 `QTWEBENGINEPROCESS_PATH`、`QTWEBENGINERESOURCE_PATH`、`QT_QPA_PLATFORM_PLUGIN_PATH`、`QT_PLUGIN_PATH`环境变量配置搜索路径。 -15. 应用运行报错信息 `gpu_data_manager_impl_private`,如何解决? +15. 应用运行时,找不到 `libqxcb.so`库或者 `qtwebengine` 报错? - 目前临时解决方案是加 `--no-sandbox`,参考:[https://github.com/Automattic/simplenote-electron/issues/3044](https://github.com/Automattic/simplenote-electron/issues/3044)。 + 存在 `qt.conf`文件时,在文件中配置正确路径,或者使用 `QTWEBENGINEPROCESS_PATH`、`QTWEBENGINE_RESOURCE_PATH`、`QT_QPA_PLATFORM_PLUGIN_PATH`、`QT_PLUGIN_PATH`环境变量配置搜索路径。 16. 应用能否自己携带数据库文件,并在运行中往数据库中写入数据? 容器内文件系统是只读文件系统,不允许往应用资源文件中写入数据。 17. 为什么执行携带 `suid`、`guid`权限二进制失效? 玲珑容器为保证系统安全,容器内禁止执行此类权限二进制。 -18. uab离线包格式在debian、ubuntu下输入法无法使用? +18. uab离线包格式在 Debian、Ubuntu 下输入法无法使用? 建议安装 `fictx`输入法后体验。 19. 怎么知道容器环境中安装了哪些包? diff --git a/guide/debug/ll-pica-faq.md b/guide/debug/ll-pica-faq.md new file mode 100644 index 0000000..f84d46f --- /dev/null +++ b/guide/debug/ll-pica-faq.md @@ -0,0 +1,17 @@ +# 常见问题 + +1. ll-pica 生成的 linglong.yaml 文件的默认配置在哪里? + + ll-pica 配置文件在 `~/.pica/config.json`。 +2. ll-pica 无法转换,wine、安卓、输入法、安全类软件吗? + + 玲珑应用目前不支持这类应用,ll-pica 也无法转换。 +3. 为什么需要使用音频的软件没有声音? + + 提示 not found libpulsecommon-12.2.so 可以在linglong.yaml 文件build 字段的里面,添加一行 `mv $PREFIX/lib/$TRIPLET/pulseaudio/* $PREFIX/lib/$TRIPLET`。 +4. 为什么生成出来的 linglong.yaml 文件中 command 字段是空的? + + ll-pica 是通过读取,deb 包中的 desktop 文件里来获取 Exec 字段,如果 command 为空,请检查 deb 包中的 desktop 文件路径是否在以下路径。 + + - /opt/apps/$appid/entries/applications + - /usr/share/applications diff --git a/guide/ll-builder/create.md b/guide/ll-builder/create.md index e015b6b..2a35b54 100644 --- a/guide/ll-builder/create.md +++ b/guide/ll-builder/create.md @@ -32,13 +32,13 @@ Arguments: `ll-builder create`命令根据输入的项目名称在当前目录创建对应的文件夹,同时生成构建所需的 `linglong.yaml`模板文件。示例如下: ```bash -ll-builder create org.deepin.demo +ll-builder create org.deepin.hello ``` -`ll-builder create org.deepin.demo`命令输出如下: +`ll-builder create org.deepin.hello`命令输出如下: ```text -org.deepin.demo/ +org.deepin.hello/ └── linglong.yaml ``` @@ -54,8 +54,8 @@ version: "1" ```yaml package: - id: org.deepin.demo - name: deepin-demo + id: org.deepin.hello + name: hello version: 0.0.0.1 kind: app description: | @@ -83,8 +83,7 @@ runtime: org.deepin.Runtime/23.0.1 玲珑应用的启动命令。 ```yaml -command: - - /opt/apps/org.deepin.demo/files/bin/demo +command: [echo, -e, hello world] ``` ### 源码 @@ -119,28 +118,28 @@ build: | version: "1" package: - id: org.deepin.demo - name: deepin-demo - version: 0.0.0.1 + id: @ID@ + name: your name #set your application name + version: 0.0.0.1 #set your version kind: app description: | - simple qt demo. + your description #set a brief text to introduce your application. -command: - - /opt/apps/org.deepin.demo/files/bin/demo +command: [echo, -e, hello world] #the commands that your application need to run. -base: org.deepin.foundation/23.0.0 -runtime: org.deepin.Runtime/23.0.1 +base: org.deepin.foundation/23.0.0 #set the base environment, this can be changed. -sources: - - kind: git - url: "https://github.com/linuxdeepin/linglong-builder-demo.git" - version: master - commit: a3b89c3aa34c1aff8d7f823f0f4a87d5da8d4dc0 +#set the runtime environment if you need, a example of setting deepin runtime is as follows. +#runtime: +#org.deepin.Runtime/23.0.1 + +#set the source if you need, a simple example of git is as follows. +#source: +# - kind: git +# url: https://github.com/linuxdeepin/linglong-builder-demo.git +# version: master\n +# commit: a3b89c3aa34c1aff8d7f823f0f4a87d5da8d4dc0 build: | - cd /project/linglong/sources/linglong-builder-demo.git - qmake -makefile PREFIX=${PREFIX} LIB_INSTALL_DIR=${PREFIX}/lib/${TRIPLET} - make - make install + echo 'hello' #some operation to build this project ``` diff --git a/guide/ll-builder/run.md b/guide/ll-builder/run.md index f56a22f..fc06103 100644 --- a/guide/ll-builder/run.md +++ b/guide/ll-builder/run.md @@ -8,7 +8,7 @@ SPDX-License-Identifier: LGPL-3.0-or-later `ll-builder run`命令可以运行编译后的可执行程序。 -查看`ll-builder run`命令的帮助信息: +查看 `ll-builder run`命令的帮助信息: ```bash ll-builder run --help @@ -36,12 +36,14 @@ ll-builder run `ll-builder run`运行成功输出如下: -![org.deepin.demo.png](./images/org.deepin.demo.png) +```bash +hello world +``` -为了便于调试,使用额外的`--exec /bin/bash`参数可替换进入容器后默认执行的程序,如: +为了便于调试,使用额外的 `--exec /bin/bash`参数可替换进入容器后默认执行的程序,如: ```bash ll-builder run --exec /bin/bash ``` -使用该选项,`ll-builder`创建容器后将进入`bash`终端,可在容器内执行其他操作。 +使用该选项,`ll-builder`创建容器后将进入 `bash`终端,可在容器内执行其他操作。 diff --git a/guide/ll-cli/update.md b/guide/ll-cli/update.md index 2559a4a..efbfd3a 100644 --- a/guide/ll-cli/update.md +++ b/guide/ll-cli/update.md @@ -6,18 +6,18 @@ SPDX-License-Identifier: LGPL-3.0-or-later # 更新应用 -`ll-cli update`命令可以更新玲珑应用。 +`ll-cli upgrade`命令可以更新玲珑应用。 -查看`ll-cli update`命令的帮助信息: +查看 `ll-cli upgrade`命令的帮助信息: ```bash -ll-cli update --help +ll-cli upgrade --help ``` -`ll-cli update`命令的帮助信息如下: +`ll-cli upgrade`命令的帮助信息如下: ```text -Usage: ll-cli [options] update com.deepin.demo +Usage: ll-cli [options] upgrade com.deepin.demo Options: -h, --help Displays help on commandline options. @@ -26,26 +26,24 @@ Options: --module <--module=runtime> the module of app Arguments: - update update an application + upgrade update an application appId application id ``` -通过`ll-cli update`命令将本地软件包版本更新到远端仓库中的最新版本,如: +通过 `ll-cli upgrade`命令将本地软件包版本更新到远端仓库中的最新版本,如: ```bash -ll-cli update +ll-cli upgrade org.deepin.calculator ``` -`ll-cli update org.deepin.calculator`命令输出如下: +`ll-cli upgrade org.deepin.calculator`命令输出如下: ```text -update org.deepin.calculator , please wait a few minutes... -org.deepin.calculator is updating... -message: update org.deepin.calculator success, version:5.7.16 --> 5.7.21.4 +100% Install main:org.deepin.calculator/5.7.21.4/x86_64 success ``` 更新指定版本到最新版本: ```bash -ll-cli update +ll-cli upgrade org.deepin.calculator/5.7.16 ``` diff --git a/guide/ll-pica/adep.md b/guide/ll-pica/adep.md index e3bd448..f91b744 100644 --- a/guide/ll-pica/adep.md +++ b/guide/ll-pica/adep.md @@ -28,7 +28,7 @@ Global Flags: ``` ```bash -ll-builder adep -d "dep1,dep2" -p /path/to/linglong.yaml +ll-pica adep -d "dep1,dep2" -p /path/to/linglong.yaml ``` 如果在 linglong.yaml 所在路径中执行不用添加 -p 参数。 diff --git a/guide/ll-pica/convert.md b/guide/ll-pica/convert.md index c997aad..cefe61f 100644 --- a/guide/ll-pica/convert.md +++ b/guide/ll-pica/convert.md @@ -54,11 +54,10 @@ ll-pica convert -c com.baidu.baidunetdisk_4.17.7_amd64.deb -w w -b ```bash ├── package │ └── com.baidu.baidunetdisk -│ └── amd64 -│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_develop.layer -│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_runtime.layer -│ ├── linglong -│ └── linglong.yaml +│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_develop.layer +│ ├── com.baidu.baidunetdisk_4.17.7.0_x86_64_runtime.layer +│ ├── linglong +│ └── linglong.yaml └── package.yaml ``` diff --git a/guide/ll-pica/introduction.md b/guide/ll-pica/introduction.md index 27f201f..ee817bd 100644 --- a/guide/ll-pica/introduction.md +++ b/guide/ll-pica/introduction.md @@ -1,6 +1,19 @@ # ll-pica 简介 -本工具目前提供 deb 包转换为玲珑包的能力。目前只支持转换符合应用商店打包规范的软件包,wine、安卓、输入法、安全类软件无法转换。 +本工具目前提供 deb 包转换为玲珑包的能力,生成构建玲珑应用需要的 linglong.yaml 文件,并依赖 ll-builder 来实现应用构建和导出。目前只支持转换符合[应用商店打包规范](https://doc.chinauos.com/content/M7kCi3QB_uwzIp6HyF5J)的软件包。 + +:::tip + +转换工具只是辅助工具,并不能保证被转换的应用一定能运行,可能软件本身依赖库的安装路径或其他配置路径与玲珑内部路径不统一,导致无法运行,需要使用 `ll-builder run --exec bash` 命令进入容器调试。 + +::: + +以下情况大概率无法运行成功: + +1. wine、安卓、输入法、安全类软件无法转换。 +2. 软件包中使用了 preinst、postinst、prerm、postrm 脚本。 +3. 需要读取固定路径的配置文件。 +4. 需要获取 root 权限。 查看 `ll-pica` 帮助信息: diff --git a/guide/ll-pica/manifests.md b/guide/ll-pica/manifests.md index bd3f7f8..aafd774 100644 --- a/guide/ll-pica/manifests.md +++ b/guide/ll-pica/manifests.md @@ -8,10 +8,9 @@ package.yaml 是 `ll-pica` 转换 deb 包的基础信息。如构建的 base、r {workdir} ├── package │ └── {appid} -│ └── amd64 -│ ├── linglong -│ ├── linglong.yaml -│ └── start.sh +│ ├── linglong +│ ├── linglong.yaml +│ └── start.sh └── package.yaml ``` diff --git a/guide/start/how_to_use.md b/guide/start/how_to_use.md index 93a5e0f..286a8ad 100644 --- a/guide/start/how_to_use.md +++ b/guide/start/how_to_use.md @@ -82,7 +82,7 @@ build: | cmake --build build --target install ``` -linglong.yaml 文件遵循 yaml 语法规范编写的。 +linglong.yaml 文件遵循 yaml 语法规范。 linglong.yaml 中字段的详细解释参考:[构建配置文件简介](../ll-builder/manifests.md) @@ -102,7 +102,7 @@ ll-builder run `ll-builder run` 运行成功输出如下: -![org.deepin.demo.png](../ll-builder/images/org.deepin.demo.png) +![org.deepin.calculator.png](./images/org.deepin.calculator.png) 为了便于调试,使用额外的 `--exec /bin/bash`参数可替换进入容器后默认执行的程序,如: @@ -115,11 +115,11 @@ ll-builder run --exec /bin/bash # 转换 deb 应用 -这里使用百度网盘作为 deb 转换玲珑包的例子。 +以“百度网盘”为例,接下来介绍将 deb 包转为为玲珑包的过程。 ## 获取软件包 -以百度网盘为例。先获取 deb 包文件。目前只支持转换遵循应用商店打包规范的软件。 +先获取 deb 包文件。目前只支持转换遵循应用商店打包规范的软件。 ```bash apt download com.baidu.baidunetdisk @@ -152,3 +152,7 @@ ll-cli run com.baidu.baidunetdisk 运行成功输出如下: ![img](images/com.baidu.baidunetdisk.png) + +# 视频链接 + +[同心联盟《开发赋能共建玲珑生态》分享直播会回看视频](https://www.bilibili.com/video/BV1ff421R7aY) diff --git a/guide/start/install.md b/guide/start/install.md index 767646d..4ecca99 100644 --- a/guide/start/install.md +++ b/guide/start/install.md @@ -4,19 +4,21 @@ SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. SPDX-License-Identifier: LGPL-3.0-or-later --> -# 安装 +# 安装玲珑 -目前支持,deepin v23、UOS 1070。 +玲珑由三部分组成 -## 系统 +- ll-builder 用来构建和调试玲珑应用,由 linglong-builder 提供。 +- ll-box 沙箱容器,由 linglong-box 提供。 +- ll-cli 管理和运行玲珑应用,由 linglong-bin 提供。 -- deepin v23 +## deepin v23 ```bash -sudo apt install linglong-builder +sudo apt install linglong-builder linglong-box linglong-bin ``` -- UOS 1070 +## UOS 1070 添加玲珑仓库源 @@ -26,5 +28,23 @@ echo "deb [trusted=yes] https://ci.deepin.com/repo/deepin/deepin-community/lingl ```bash sudo apt update -sudo apt install linglong-builder +sudo apt install linglong-builder linglong-box linglong-bin +``` + +# 安装 pica + +本工具目前提供 deb 包转换为玲珑包的能力,生成构建玲珑应用需要的 linglong.yaml 文件,并依赖 ll-builder 来实现应用构建和导出。 + +## deepin v23 + +```bash +sudo apt install linglong-pica +``` + +## UOS 1070 + +需要添加仓库源,前面已添加。 + +```bash +sudo apt install linglong-pica ``` diff --git a/guide/start/whatis.md b/guide/start/whatis.md index 99ecea1..49384b8 100644 --- a/guide/start/whatis.md +++ b/guide/start/whatis.md @@ -4,7 +4,7 @@ SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. SPDX-License-Identifier: LGPL-3.0-or-later --> -# 简介 +# 概述 玲珑是统信软件自研的开源软件包格式,用于替代 `deb`、`rpm`等包管理工具,实现了应用包管理、分发、容器、集成开发工具等功能。 @@ -45,28 +45,10 @@ SPDX-License-Identifier: LGPL-3.0-or-later | 不安装运行 | ✔ (提供 Bundle 模式) | ✘ | ✘ | ✔ | | 不解压运行 | ✔ (提供 Bundle 模式) | ✘ | ✔ | ✔ | | 自分发/绿色格式分发 | ◐ (技术可行,但是系统做限制) | ✘ | ✘ | ✔ | -| 支持 Wine 应用运行 | ✔ | ◐ (理论可行 | ◐ (理论可行) | ◐ (使用 LD 修改 open 调用,兼容性差) | +| 支持 Wine 应用运行 | ◐   (适配中) | ◐ (理论可行 | ◐ (理论可行) | ◐ (使用 LD 修改 open 调用,兼容性差) | | 离线环境支持 | ✔ | ✔ | ✔ | ✔ | | 权限管理 | ✔ | ✔ | ✔ | ✘ | -| 中心仓库 | repo.linglong.space | FlatHub | Snap Store | AppImageHub | +| 中心仓库 | mirror-repo-linglong.deepin.com | FlatHub | Snap Store | AppImageHub | | 多版本共存 | ✔ | ✔ | ✔ | ✔ | | 点对点分发 | ✔ | ✔ | ✔ | ✔ | | 应用升级 | 仓库升级 | 仓库升级 | 仓库升级 | 官方工具升级 | - -```vue - - \ No newline at end of file