feat(linux): Add deb, rpm packages as installation formats#524
feat(linux): Add deb, rpm packages as installation formats#524nekomeowww merged 8 commits intomoeru-ai:mainfrom
Conversation
✅ Deploy Preview for airi-docs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for airi-vtuber ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Summary of Changes
Hello @gg582, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request significantly enhances the distribution of the application on Linux by integrating native package formats. The primary goal is to provide a more user-friendly installation and update experience for users on Debian-based and Red Hat-based distributions, addressing limitations of the AppImage format, particularly concerning data persistence and updates. This change also includes an internal renaming of the application's package name.
Highlights
- New Linux Package Formats: Introduced support for .deb (Debian/Ubuntu) and .rpm (Red Hat/Fedora) package formats, alongside the existing AppImage, to provide a more native installation experience for Linux users.
- Package Name Renaming: The application's internal package name has been changed from "app" to "airi" across the project's Rust and Tauri configuration files.
- Comprehensive Dependency Listing: Detailed dependency lists have been added for both .deb and .rpm packages to ensure automatic installation of required libraries on target systems, improving user convenience.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Code Review
This pull request introduces support for creating .deb and .rpm packages, which is a great step for improving distribution on Linux. The main changes involve updating tauri.conf.json to add the new package targets and their dependencies. My review focuses on the newly added dependency lists. I've identified a potential compatibility issue with the Debian package dependencies that could limit the application's reach on older but still widely-used distributions, and I've also suggested an improvement for maintainability. The changes to Cargo.toml and Cargo.lock to rename the package from app to airi are a good move for branding consistency.
| "depends": [ | ||
| "libatk1.0-0t64", | ||
| "libatk-bridge2.0-0t64", | ||
| "libatomic1", | ||
| "libatspi2.0-0t64", | ||
| "libblkid1", | ||
| "libbrotli1", | ||
| "libbsd0", | ||
| "libbz2-1.0", | ||
| "libc6", | ||
| "libcairo2", | ||
| "libcairo-gobject2", | ||
| "libcap2", | ||
| "libcom-err2", | ||
| "libdatrie1", | ||
| "libdbus-1-3", | ||
| "libdrm2", | ||
| "libdw1t64", | ||
| "libegl1", | ||
| "libelf1t64", | ||
| "libenchant-2-2", | ||
| "libepoxy0", | ||
| "libevdev2", | ||
| "libexpat1", | ||
| "libffi8", | ||
| "libfontconfig1", | ||
| "libfreetype6", | ||
| "libfribidi0", | ||
| "libgbm1", | ||
| "libgcc-s1", | ||
| "libgcrypt20", | ||
| "libgdk-pixbuf-2.0-0", | ||
| "libgl1", | ||
| "libglib2.0-0t64", | ||
| "libglvnd0", | ||
| "libglx0", | ||
| "libgpg-error0", | ||
| "libgraphite2-3", | ||
| "libgssapi-krb5-2", | ||
| "libgstreamer1.0-0", | ||
| "libgstreamer-gl1.0-0", | ||
| "libgstreamer-plugins-base1.0-0", | ||
| "libgtk-3-0t64", | ||
| "libgudev-1.0-0", | ||
| "libharfbuzz0b", | ||
| "libharfbuzz-icu0", | ||
| "libhyphen0", | ||
| "libicu74", | ||
| "libidn2-0", | ||
| "libjavascriptcoregtk-4.1-0", | ||
| "libjpeg-turbo8", | ||
| "libk5crypto3", | ||
| "libkeyutils1", | ||
| "libkrb5-3", | ||
| "libkrb5support0", | ||
| "liblcms2-2", | ||
| "liblz4-1", | ||
| "liblzma5", | ||
| "libmanette-0.2-0", | ||
| "libmd0", | ||
| "libmount1", | ||
| "libnghttp2-14", | ||
| "liborc-0.4-0t64", | ||
| "libpango-1.0-0", | ||
| "libpangocairo-1.0-0", | ||
| "libpangoft2-1.0-0", | ||
| "libpcre2-8-0", | ||
| "libpixman-1-0", | ||
| "libpng16-16t64", | ||
| "libpsl5t64", | ||
| "libseccomp2", | ||
| "libsecret-1-0", | ||
| "libselinux1", | ||
| "libsharpyuv0", | ||
| "libsoup-3.0-0", | ||
| "libsqlite3-0", | ||
| "libssl3t64", | ||
| "libstdc++6", | ||
| "libsystemd0", | ||
| "libtasn1-6", | ||
| "libthai0", | ||
| "libudev1", | ||
| "libunistring5", | ||
| "libunwind8", | ||
| "libwayland-client0", | ||
| "libwayland-cursor0", | ||
| "libwayland-egl1", | ||
| "libwayland-server0", | ||
| "libwebkit2gtk-4.1-0", | ||
| "libwebp7", | ||
| "libwebpdemux2", | ||
| "libwebpmux3", | ||
| "libwoff1", | ||
| "libx11-6", | ||
| "libx11-xcb1", | ||
| "libxau6", | ||
| "libxcb1", | ||
| "libxcb-render0", | ||
| "libxcb-shm0", | ||
| "libxcomposite1", | ||
| "libxcursor1", | ||
| "libxdamage1", | ||
| "libxdmcp6", | ||
| "libxext6", | ||
| "libxfixes3", | ||
| "libxi6", | ||
| "libxinerama1", | ||
| "libxkbcommon0", | ||
| "libxml2", | ||
| "libxrandr2", | ||
| "libxrender1", | ||
| "libxslt1.1", | ||
| "libxtst6", | ||
| "libzstd1" | ||
| ] |
There was a problem hiding this comment.
The deb dependency list can be improved for better compatibility and maintainability.
-
Compatibility (
highseverity): The list uses package names with at64suffix (e.g.,libatk1.0-0t64). This targets very recent Debian/Ubuntu versions and will likely cause installation to fail on common LTS releases like Ubuntu 22.04. It's better to use base package names (e.g.,libatk1.0-0) to support a wider range of distributions. -
Maintainability (
mediumseverity): The list is unsorted, making it hard to manage. Alphabetical sorting improves readability and helps prevent duplicates.
I've provided a suggestion below that applies both fixes: it removes the t64 suffixes and sorts the list alphabetically.
"depends": [
"libatk-bridge2.0-0",
"libatk1.0-0",
"libatomic1",
"libatspi2.0-0",
"libblkid1",
"libbrotli1",
"libbsd0",
"libbz2-1.0",
"libc6",
"libcairo-gobject2",
"libcairo2",
"libcap2",
"libcom-err2",
"libdatrie1",
"libdbus-1-3",
"libdrm2",
"libdw1",
"libegl1",
"libelf1",
"libenchant-2-2",
"libepoxy0",
"libevdev2",
"libexpat1",
"libffi8",
"libfontconfig1",
"libfreetype6",
"libfribidi0",
"libgbm1",
"libgcc-s1",
"libgcrypt20",
"libgdk-pixbuf-2.0-0",
"libgl1",
"libglib2.0-0",
"libglvnd0",
"libglx0",
"libgpg-error0",
"libgraphite2-3",
"libgssapi-krb5-2",
"libgstreamer-gl1.0-0",
"libgstreamer-plugins-base1.0-0",
"libgstreamer1.0-0",
"libgtk-3-0",
"libgudev-1.0-0",
"libharfbuzz-icu0",
"libharfbuzz0b",
"libhyphen0",
"libicu74",
"libidn2-0",
"libjavascriptcoregtk-4.1-0",
"libjpeg-turbo8",
"libk5crypto3",
"libkeyutils1",
"libkrb5-3",
"libkrb5support0",
"liblcms2-2",
"liblz4-1",
"liblzma5",
"libmanette-0.2-0",
"libmd0",
"libmount1",
"libnghttp2-14",
"liborc-0.4-0",
"libpango-1.0-0",
"libpangocairo-1.0-0",
"libpangoft2-1.0-0",
"libpcre2-8-0",
"libpixman-1-0",
"libpng16-16",
"libpsl5",
"libseccomp2",
"libsecret-1-0",
"libselinux1",
"libsharpyuv0",
"libsqlite3-0",
"libsoup-3.0-0",
"libssl3",
"libstdc++6",
"libsystemd0",
"libtasn1-6",
"libthai0",
"libudev1",
"libunistring5",
"libunwind8",
"libwayland-client0",
"libwayland-cursor0",
"libwayland-egl1",
"libwayland-server0",
"libwebkit2gtk-4.1-0",
"libwebp7",
"libwebpdemux2",
"libwebpmux3",
"libwoff1",
"libx11-6",
"libx11-xcb1",
"libxau6",
"libxcb-render0",
"libxcb-shm0",
"libxcb1",
"libxcomposite1",
"libxcursor1",
"libxdamage1",
"libxdmcp6",
"libxext6",
"libxfixes3",
"libxi6",
"libxinerama1",
"libxkbcommon0",
"libxml2",
"libxrandr2",
"libxrender1",
"libxslt1.1",
"libxtst6",
"libzstd1"
]update deps to AI-generated code mentioned at PR moeru-ai#524 bot
2dbce0e to
d334442
Compare
|
Wait don't merge yet |
Why? |
The binary names in nix/package.nix need to be changed |
Perhaps open another for that. |
Description
Although this project has nix build for Linux, it is thought that Debian GNU/Linux based and Red Hat Enterprise Linux based distributions are prominent among Linux desktop users.
It is considered that Ubuntu, Debian, Linux Mint, Fedora, are commonly favored by contemporary desktop users, and most of the people prefer distro's own package formats over than AppImage.
Appimage owes a problem, that it is difficult to update an application while keeping their own local data.
Since this project's agenda is to make an AI VTuber, some people might feel intimacy to his own-prompted model. This problem would be bigger when AIRI supports Long-Term Memory.
It is suggested that we may support some user-friendly formats to further enhancement.
I am not used to packaging, so if somebody urges to add supports for Flatpak repository, I would like to engage.
Additional Context
Would you focus on the package dependencies to automatically install required libraries? Some users who use Linux is not familiar with Software development.
So I'd like to mention that Linux Operating System is not only for developers, but also a personal choice which can be chosen as convenience.
Thank you.