pkgs.appimageTools
pkgs.appimageTools مجموعهای از توابع برای استخراج و بستهبندی فایلهای AppImage است.
این توابع برای زمانی در نظر گرفته شدهاند که بستهبندی سنتی از منبع غیرممکن باشد، یا زمان زیادی ببرد.
برای اجرای سریع یک فایل AppImage، میتوان از pkgs.appimage-run نیز استفاده کرد.
هشدار
رابط برنامهنویسی کاربرد (API) مربوط به
appimageToolsناپایدار است و ممکن است در آینده دستخوش تغییرات ناسازگار با نسخههای قبلی شود.
بستهبندی (Wrapping)
برای بستهبندی (wrap) هر AppImage از wrapType2 استفاده کنید.
این کار یک محیط FHS شامل بستههای متعددی ایجاد میکند که انتظار میرود وجود داشته باشند تا AppImage کار کند. wrapType2 انتظار آرگومانی حاوی صفت src و همچنین صفت name یا صفات pname و version را دارد.
این تابع در نهایت buildFHSEnv را فراخوانی میکند و هر صفت (attribute) اضافی در آرگومان ورودی به wrapType2 به آن منتقل خواهد شد.
این بدان معناست که برای مثال میتوانید صفت extraInstallCommands را ارسال کنید و همان تأثیری را خواهد داشت که در buildFHSEnv توصیف شده است.
> > > **مثال** > > # بستهبندی یک AppImage از GitHub >نکته
در گذشته،
appimageToolsهر دو تابعwrapType1وwrapType2را ارائه میداد تا بسته به نوع AppImage که بستهبندی میشد استفاده شوند. با این حال، این دو در اوایل سال ۲۰۲۰ یکپارچه شدند، به این معنی که اکنون هر دو تابعwrapType1وwrapType2رفتار یکسانی دارند.
{ appimageTools, fetchurl }: appimageTools.wrapType2 { pname = "nuclear"; version = "0.6.30"; src = fetchurl { url = "https://github.com/nukeop/nuclear/releases/download/v${version}/nuclear-v${version}.AppImage"; hash = "sha256-he1uGC1M/nFcKpMM9JKY4oeexJcnzV0ZRxhTjtJz6xw="; }; }
آرگومان ارسالشده به wrapType2 همچنین میتواند شامل صفت (attribute) extraPkgs باشد، که به شما اجازه میدهد بستههای اضافی را درون محیط FHS که AppImage شما در آن اجرا خواهد شد قرار دهید. extraPkgs باید تابعی باشد که لیستی از بستهها را برمیگرداند.
چند روش برای یافتن وابستگیهای مورد نیاز یک برنامه وجود دارد:
- بررسی فایلهای استخراجشده AppImage، خواندن اسکریپتهای آن و اجرای
patchelfوlddروی فایلهای اجرایی آن. این کار همچنین درappimage-runبا تنظیمAPPIMAGE_DEBUG_EXEC=bashامکانپذیر است. - اجرای
strace -vfefileروی فایل اجرایی پوششدادهشده و پیدا کردن کتابخانههایی که یافت نمیشوند.
{ appimageTools, fetchurl }: appimageTools.wrapType2 { pname = "irccloud"; version = "0.16.0"; src = fetchurl { url = "https://github.com/irccloud/irccloud-desktop/releases/download/v${version}/IRCCloud-${version}-linux-x86_64.AppImage"; hash = "sha256-/hMPvYdnVB1XjKgU2v47HnVvW4+uC3rhRjbucqin4iI="; }; extraPkgs = pkgs: [ pkgs.at-spi2-core ]; }
استخراج
اگر نیاز به استخراج محتویات یک AppImage دارید، از extract استفاده کنید.
این تابع معمولاً در Nixpkgs برای نصب فایلهای اضافی، علاوه بر پوششدهی (wrapping) AppImage، استفاده میشود. extract به آرگومانی با صفت (attribute) src و همچنین صفت name یا صفات pname و version نیاز دارد.
> > > **مثال** > > # استخراج یک AppImage برای نصب فایلهای اضافی > > `wrapType2` بهطور خودکار AppImage را برای شما استخراج کرده و آن را از طریق صفت `contents` در دسترس قرار میدهد. > توجه کنید که چگونه از `finalAttrs.contents` در `extraInstallCommands` برای نصب فایلهای اضافی استخراجشده از AppImage استفاده شده است. >نکته
در گذشته،
appimageToolsهر دو تابعextractType1وextractType2را ارائه میداد تا بسته به نوع AppImage در حال استخراج استفاده شوند. با این حال، آنها در اوایل سال ۲۰۲۰ یکپارچه شدند، به این معنی که در حال حاضر هر دو تابعextractType1وextractType2رفتاری کاملاً مشابهextractدارند.
{ appimageTools, fetchurl }: appimageTools.wrapType2 (finalAttrs: { pname = "irccloud"; version = "0.16.0"; src = fetchurl { url = "https://github.com/irccloud/irccloud-desktop/releases/download/v${version}/IRCCloud-${version}-linux-x86_64.AppImage"; hash = "sha256-/hMPvYdnVB1XjKgU2v47HnVvW4+uC3rhRjbucqin4iI="; }; extraPkgs = pkgs: [ pkgs.at-spi2-core ]; extraInstallCommands = '' mv $out/bin/irccloud-${version} $out/bin/irccloud install -m 444 -D ${finalAttrs.contents}/irccloud.desktop $out/share/applications/irccloud.desktop install -m 444 -D ${finalAttrs.contents}/usr/share/icons/hicolor/512x512/apps/irccloud.png \ $out/share/icons/hicolor/512x512/apps/irccloud.png substituteInPlace $out/share/applications/irccloud.desktop \ --replace-fail 'Exec=AppRun' 'Exec=irccloud' ''; })
appimageTools همچنین تابع extract را در صورتی که نیاز به انجام دستی آن داشته باشید ارائه میدهد، که نیازمند آرگومانهای pname، version و src است (src همان فایل AppImage برای استخراج است).
آرگومانهای ارسالشده به extract میتوانند شامل یک صفت (attribute) به نام postExtract نیز باشند که به شما اجازه میدهد پس از استخراج فایلها از AppImage، دستورات تکمیلی را اجرا کنید. postExtract باید یک رشته حاوی دستورات جهت اجرا باشد.
> > > **مثال** > > # استخراج یک AppImage برای نصب فایلهای اضافی، با استفاده از `postExtract` > > این یک بازنویسی از [](#ex-extracting-appimage) برای استفاده از `postExtract` و `wrapAppImage` است. >هشدار
هنگام تعیین
postExtract، باید به جایappimageTools.wrapType2ازappimageTools.wrapAppImageاستفاده کنید. در غیر این صورت،wrapType2محتوای AppImage را بدون رعایت دستورالعملهایpostExtractاستخراج خواهد کرد.
{ appimageTools, fetchurl }: appimageTools.wrapAppImage (finalAttrs: { pname = "irccloud"; version = "0.16.0"; src = fetchurl { url = "https://github.com/irccloud/irccloud-desktop/releases/download/v${version}/IRCCloud-${version}-linux-x86_64.AppImage"; hash = "sha256-/hMPvYdnVB1XjKgU2v47HnVvW4+uC3rhRjbucqin4iI="; }; contents = appimageTools.extract { inherit (finalAttrs) pname version src; postExtract = '' substituteInPlace $out/irccloud.desktop --replace-fail 'Exec=AppRun' 'Exec=irccloud' ''; }; extraPkgs = pkgs: [ pkgs.at-spi2-core ]; extraInstallCommands = '' mv $out/bin/irccloud-${version} $out/bin/irccloud install -m 444 -D ${finalAttrs.contents}/irccloud.desktop $out/share/applications/irccloud.desktop install -m 444 -D ${finalAttrs.contents}/usr/share/icons/hicolor/512x512/apps/irccloud.png \ $out/share/icons/hicolor/512x512/apps/irccloud.png ''; })