
3 步把 LocalSend 打成 AppImage免安裝、免 root 的 Linux 打包指南【免費(fèi)下載鏈接】localsendAn open-source cross-platform alternative to AirDrop項(xiàng)目地址: https://gitcode.com/GitHub_Trending/lo/localsend朋友用 Ubuntu同事用 Fedora親戚用 Arch挨個(gè)發(fā)安裝包每次都會(huì)卡在不同的依賴問題上。這次把 LocalSend開源跨設(shè)備文件傳輸工具打成一個(gè) AppImage 便攜應(yīng)用對(duì)方雙擊就能用不用管他裝的是哪個(gè)發(fā)行版也不用碰 root 權(quán)限。 AppImage 原理一句話為什么可以免安裝AppImage 是一種把所有東西塞進(jìn)一個(gè)文件的 Linux 便攜應(yīng)用格式程序本體、運(yùn)行時(shí)要用的庫、桌面配置全部裝進(jìn)同一個(gè)文件里。運(yùn)行它時(shí)靠 FUSE一種讓普通程序模擬文件系統(tǒng)的內(nèi)核機(jī)制臨時(shí)掛載解壓到一個(gè)臨時(shí)目錄直接執(zhí)行退出后自動(dòng)清理。LocalSend 選這個(gè)格式圖的就是自包含目標(biāo)機(jī)器不需要裝 Flutter 運(yùn)行時(shí)不需要碰運(yùn)氣找對(duì)版本的 GTK只要桌面環(huán)境正常就能跑。發(fā)給朋友裝機(jī)這是最省心的路子。一圖看懂 AppImage 的打包與掛載流程通俗講前半段是你機(jī)器上的事把東西全裝進(jìn)一個(gè)袋子。后半段是對(duì)方機(jī)器上的事袋子臨時(shí)拆開放到內(nèi)存掛載點(diǎn)里用用完就扔。全程不往系統(tǒng)目錄寫東西所以不需要 root。Linux 應(yīng)用打包選型AppImage 對(duì)比 Snap / Flatpak / deb視角AppImageSnapFlatpakdeb / rpm是否要先裝別的組件不用單文件即可需要 snapd需要 flatpak不用但各發(fā)行版要各自打包安裝是否動(dòng) root不裝直接運(yùn)行要首次要要應(yīng)用放在哪隨意家目錄、U 盤、網(wǎng)絡(luò)共享系統(tǒng)固定位置系統(tǒng)固定位置系統(tǒng)固定位置升級(jí)方式下載新文件覆蓋舊的系統(tǒng)自動(dòng)系統(tǒng)自動(dòng)包管理器適合誰便攜分發(fā)、跨發(fā)行版部署全機(jī)統(tǒng)一管理沙盒化運(yùn)行單機(jī)走官方源如果你的目標(biāo)是一個(gè)文件丟到誰那都能跑AppImage 最直接想要自動(dòng)升級(jí)和沙盒再考慮 Snap / Flatpak。三步拿到 LocalSend 的 AppImage環(huán)境、構(gòu)建、打包第一步裝好構(gòu)建環(huán)境構(gòu)建機(jī)需要 Flutter 的 Linux 桌面工具鏈外加 LocalSend 特有的兩個(gè)依賴——一個(gè)給頂部托盤圖標(biāo)appindicator一個(gè)給 AppImage 掛載sudo apt install curl clang cmake libgtk-3-dev ninja-build \ libayatana-appindicator3-dev libfuse2 squashfs-tools另外從 appimage-builder 官方 release 頁下載 x86_64 版 AppImage放到/usr/local/bin并賦予可執(zhí)行權(quán)限。第二步先構(gòu)建出 Flutter Linux 二進(jìn)制git clone https://gitcode.com/GitHub_Trending/lo/localsend cd localsend git submodule update --init alias fluttersubmodules/flutter/bin/flutter flutter pub get flutter pub run build_runner build -d flutter build linux倉庫里用子模塊鎖定了 Flutter 版本上面的 alias 就是用它構(gòu)建保證結(jié)果可復(fù)現(xiàn)。構(gòu)建完產(chǎn)物在build/linux/x64/release/bundle/。第三步用 appimage-builder 打成單文件mkdir AppDir cp -r build/linux/x64/release/bundle/* AppDir cp support/build/appimage/AppImageBuilder_x86_64.yml AppImageBuilder.yml appimage-builder chmod x LocalSend-*-x86_64.AppImage跑完當(dāng)前目錄下的 AppImage 就能用了。要出 ARM64 版本把配方換成 support/build/appimage/AppImageBuilder_arm_64.yml 即可項(xiàng)目還附了一鍵腳本 support/scripts/compile_linux_appimage.sh卡住了可以對(duì)著它排查。appimage-builder 配置怎么配抓住 3 個(gè)要點(diǎn)配方文件是 support/build/appimage/AppImageBuilder_x86_64.yml字段不用全記看懂下面這幾處就行app_info: id: org.localsend.localsend_app exec: localsend_app exec_args: $ apt: include: [libayatana-appindicator3-1:amd64, librsvg2-common:amd64] exclude: [adwaita-icon-theme:*]app_info是應(yīng)用的戶口id是反向域名格式的唯一標(biāo)識(shí)桌面環(huán)境靠它認(rèn)這是同一個(gè)應(yīng)用exec指定解壓后第一個(gè)要跑的可執(zhí)行文件。寫錯(cuò)了會(huì)怎樣exec指向不存在的文件雙擊 AppImage 直接報(bào) command not foundid和別的應(yīng)用撞了系統(tǒng)菜單里同一個(gè)應(yīng)用出現(xiàn)兩個(gè)圖標(biāo)。apt白名單決定袋子里裝什么include列出從 Ubuntu 22.04 源里抓取并捆綁的運(yùn)行時(shí)庫exclude把圖標(biāo)主題這類沒用的東西清出去。寫錯(cuò)了會(huì)怎樣少一個(gè)庫對(duì)方運(yùn)行時(shí)報(bào) error while loading shared libraries不清理文件白白多出幾十 MB。runtime.env告訴應(yīng)用去哪找資源給XDG_DATA_DIRS設(shè)成/usr/local/share/:/usr/share/:${XDG_DATA_DIRS}桌面環(huán)境按這個(gè)順序找圖標(biāo)和菜單項(xiàng)。寫錯(cuò)了會(huì)怎樣程序能開但應(yīng)用菜單里沒圖標(biāo)或者圖標(biāo)是灰色默認(rèn)樣式。跨發(fā)行版部署常見問題速查現(xiàn)象運(yùn)行 AppImage 報(bào)error mounting AppImage: 13, permission denied原因當(dāng)前用戶沒有 FUSE 權(quán)限讀不了/dev/fuse修復(fù)sudo usermod -aG fuse $USER后重新登錄趕時(shí)間就先加--appimage-extract解壓再用現(xiàn)象打包時(shí)mksquashfs: command not found原因構(gòu)建機(jī)缺 squashfs 壓縮工具修復(fù)sudo apt install squashfs-tools配方里也留了一行自動(dòng)補(bǔ)裝的保險(xiǎn)現(xiàn)象程序能跑但頂欄托盤圖標(biāo)不見了GNOME / Ubuntu原因缺 appindicator 運(yùn)行時(shí)庫修復(fù)確認(rèn)配方apt.include里有l(wèi)ibayatana-appindicator3-1收尾AppImage 是 Linux 跨發(fā)行版分發(fā)最省心的答案一個(gè)文件、免安裝、免 root。配方和腳本都擺在倉庫里你可以現(xiàn)在就跟著跑一遍打完后發(fā)給那位用冷門發(fā)行版的朋友驗(yàn)證一下?!久赓M(fèi)下載鏈接】localsendAn open-source cross-platform alternative to AirDrop項(xiàng)目地址: https://gitcode.com/GitHub_Trending/lo/localsend創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考