.\" Man page generated from reStructuredText. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "SNAP-PAC" "8" "Jul 01, 2024" "" "snap-pac" .SH "نام (NAME)" snap-pac \- قلاب‌های pacman که از snapper برای ایجاد اسنپ‌شات‌های btrfs پیش/پس از تراکنش مانند YaST در openSUSE استفاده می‌کنند .SH "توضیحات (DESCRIPTION)" .sp این مجموعه‌ای از قلاب‌ها (hooks) و اسکریپت‌های \X'tty: link https://archlinux.org/pacman/'\fI\%pacman\fP\X'tty: link' است که باعث می‌شود \X'tty: link http://snapper.io/'\fI\%snapper\fP\X'tty: link' به‌طور خودکار پیش و پس از هر تراکنش pacman یک اسنپ‌شات (تصویر لحظه‌ای) تهیه کند، شبیه به کاری که \X'tty: link https://yast.opensuse.org/'\fI\%YaST\fP\X'tty: link' در OpenSuse انجام می‌دهد. این قابلیت روش ساده‌ای را برای بازگردانی تغییرات سیستم پس از یک تراکنش pacman فراهم می‌آورد. .sp از آنجا که این‌ها قلاب‌های pacman هستند، تفاوتی نمی‌کند که چگونه pacman را فراخوانی کنید—خواه به‌طور مستقیم، از طریق یک دستیار AUR یا با استفاده از یک نام مستعار (alias)—هر زمان که pacman بسته‌ای را نصب، ارتقا یا حذف کند، snapper اسنپ‌شات‌ها را ایجاد خواهد کرد. دستور pacman استفاده‌شده در بخش توضیحات snapper برای اسنپ‌شات‌ها ثبت می‌شود. علاوه بر این، در حین تراکنش pacman، شماره‌های اسنپ‌شات برای هر پیکربندی snapper بر روی صفحه نمایش و در گزارش (log) pacman خروجی داده می‌شوند تا کاربر بتواند به‌راحتی تغییراتی را که مایل به بازگردانی آن‌هاست، پیدا کند. .sp هنگامی که pacman را اجرا می‌کنید، اسنپ‌شات‌های پیش/پس snapper به‌طور خودکار ایجاد می‌شوند. برای مشاهده یک نمونه کامل‌تر، بخش \fI\%مثال (EXAMPLE)\fP\& را ببینید. .INDENT 0.0 .INDENT 3.5 .sp .EX $ sudo pacman \-S vim resolving dependencies... looking for conflicting packages... Packages (1) vim\-8.2.2489\-1 Total Installed Size: 3.79 MiB Net Upgrade Size: 0.00 MiB :: Proceed with installation? [Y/n] (1/1) checking keys in keyring [############] 100% (1/1) checking package integrity [############] 100% (1/1) loading package files [############] 100% (1/1) checking for file conflicts [############] 100% (1/1) checking available disk space [############] 100% :: Running pre\-transaction hooks... (1/1) Performing snapper pre snapshots for the following configurations... ==> root: 7394 :: Processing package changes... (1/1) installing vim [############] 100% :: Running post\-transaction hooks... (1/4) Arming ConditionNeedsUpdate... (2/4) Updating icon theme caches... (3/4) Updating the desktop file MIME type cache... (4/4) Performing snapper post snapshots for the following configurations... ==> root: 7395 .EE .UNINDENT .UNINDENT .sp برای لغو تغییرات ناشی از یک تراکنش pacman، از \fBsnapper undochange\fP\& استفاده کنید. برای جزئیات بیشتر و همچنین مشاهده مثال‌ها، به \fB\X'tty: link https://man.archlinux.org/man/snapper.8'\fI\%snapper(8)\fP\X'tty: link'\fP مراجعه کنید. .sp اگر سیستم با خرابی شدیدی مواجه شد—مثلاً snapper به دلیلی از دست رفته باشد و نتوانید آن را بازگردانید—باید به روش‌های پیشرفته‌تری متوسل شوید؛ مانند تهیه یک اسنپ‌شات از اسنپ‌شات pre و تبدیل آن به زیرحجم (subvolume) پیش‌فرض یا سوار کردن (mount) آن به عنوان /. به احتمال زیاد برای انجام هر یک از این کارها به یک فلش‌مموری زنده (Live USB) نیاز خواهید داشت تا وارد یک محیط chroot شوید. ابزار Snapper دارای قابلیت \fBsnapper rollback\fP است، اما پیکربندی سیستم شما باید به‌درستی برای استفاده از آن تنظیم شده باشد. روند دقیق کار به نوع پیکربندی خاص سیستم شما بستگی دارد. احتیاط کنید. .sp توجه داشته باشید که قلاب‌های پیش از تراکنش، قبل از انجام تراکنش pacman اما (در صورت وجود) پس از همگام‌سازی پایگاه‌داده pacman اجرا می‌شوند. به عبارت دیگر، اگر دستور \fIpacman \-Syu\fP را اجرا کنید و طبق دستورالعمل‌های بالا ارتقا را به عقب برگردانید (roll back کنید)، پایگاه‌داده pacman به وضعیت قبلی بازنخواهد گشت. در نتیجه، اگر پس از ارتقا و بازگردانی آن، بسته‌ای را نصب کنید، احتمالاً با یک ارتقای جزئی (partial upgrade) مواجه خواهید شد که پشتیبانی نمی‌شود. .SH "نصب (INSTALLATION)" .sp بسته \fBsnap\-pac\fP را با استفاده از pacman نصب کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX pacman \-S snap\-pac .EE .UNINDENT .UNINDENT .sp همچنین می‌توانید \X'tty: link https://github.com/wesbarnett/snap-pac/releases'\fI\%آخرین نسخه منتشرشده و امضای آن\fP\X'tty: link'\& را دریافت کنید. سپس فایل دانلودشده را اعتبارسنجی نمایید: .INDENT 0.0 .INDENT 3.5 .sp .EX gpg \-\-verify snap\-pac\-.tar.gz.sig .EE .UNINDENT .UNINDENT .sp که در آن \fB\fP شماره نسخه‌ای است که دریافت کرده‌اید. .sp در نهایت، اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX make install .EE .UNINDENT .UNINDENT .sp من فایل فشرده (tarball) نسخه منتشرشده و کامیت‌ها را با کلید PGP خود امضا کرده‌ام. با شروع از نسخه 2.2، فایل‌های tarball با کلید من با اثر انگشت (fingerprint) زیر امضا می‌شوند: \fBF7B28C61944FE30DABEEB0B01070BCC98C18BD66\fP\&. .sp برای نسخه‌های قبلی، اثر انگشت کلید برابر بود با: \fB8535CEF3F3C38EE69555BF67E4B5E45AA3B8C5C3\fP\&. .SS "وابستگی‌ها (Dependencies)" .sp ابزارهای \fBpython\fP، \fBpacman\fP و \fBsnapper\fP همگی مورد نیاز هستند. .SS "آزمایش (Testing)" .sp برای اجرای آزمون‌ها، ابزار \fBpytest\fP مورد نیاز است. برای اجرای آزمایش‌ها این دستور را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX make test .EE .UNINDENT .UNINDENT .SS "مستندات (Documentation)" .sp معمولاً نیازی نیست که خودتان مستندات را بسازید و به‌سادگی می‌توانید با مراجعه به \X'tty: link https://wesbarnett.github.io/snap-pac/'\fI\%مستندات برخط (آنلاین)\fP\X'tty: link' یا با دسترسی به صفحه راهنما (man page) آن را مشاهده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX man 8 snap\-pac .EE .UNINDENT .UNINDENT .sp برای ساخت مستندات، به \fBsphinx\fP نیاز است. برای ساخت مستندات می‌توانید دستور زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX make docs .EE .UNINDENT .UNINDENT .sp مستندات html حاصل در مسیر \fBdocs/build/index.html\fP قرار خواهد گرفت. علاوه بر این، این دستور صفحه راهنما را نیز تولید می‌کند که در مسیر \fBman8\fP قرار می‌گیرد. .SH "پیکربندی (CONFIGURATION)" .sp پیکربندی از طریق فایل‌های پیکربندی ini پایتون انجام می‌شود. تنظیمات پیش‌فرض باید برای بیشتر کاربران مناسب باشد، بنابراین ممکن است اصلاً نیازی به انجام پیکربندی نداشته باشید. به‌طور پیش‌فرض تنها از پیکربندی \fBroot\fP در snapper اسنپ‌شات گرفته می‌شود. .sp یک فایل نمونه پیکربندی همراه با توضیحات در مسیر \fB/etc/snap\-pac.ini\fP قرار دارد. .sp آن را با ویرایشگر دلخواه خود ویرایش کنید. این فایل دارای کامنت‌های توضیحی است و باید به‌اندازه کافی واضح و خودتوضیح باشد. .sp هر بخش (section) با یکی از پیکربندی‌های snapper مطابقت دارد. برای افزودن پیکربندی‌های دیگر snapper جهت اسنپ‌شات‌گیری، بخش‌های جدیدی اضافه کنید. به‌طور پیش‌فرض تنها از پیکربندی root اسنپ‌شات گرفته می‌شود. علاوه بر این، می‌توانید بخشی به نام \fBDEFAULT\fP اضافه کنید که گزینه‌های آن برای تمامی پیکربندی‌های snapper اعمال می‌شوند، مگر اینکه در بخش‌های بعدی بازنویسی (override) شوند. .sp هر بخش می‌تواند شامل ورودی‌های زیر باشد: .INDENT 0.0 .IP \(bu 2 \fBdesc_limit\fP \- عدد صحیح؛ حداکثر طول رشته توضیحات پیش از کوتاه‌سازی (truncate). پیش‌فرض: 72 .IP \(bu 2 \fBimportant_packages\fP \- فهرستی از رشته‌ها؛ نام بسته‌هایی که اگر در تراکنش pacman دخیل باشند، مقدار \fBimportant=yes\fP را به userdata در snapper برای آن جفت اسنپ‌شات اضافه می‌کند. پیش‌فرض: [] .IP \(bu 2 \fBimportant_commands\fP \- فهرستی از رشته‌ها؛ دستورات والدی که مقدار \fBimportant=yes\fP را به userdata در snapper برای آن جفت اسنپ‌شات اضافه می‌کنند. پیش‌فرض: [] .IP \(bu 2 \fBpre_description\fP \- رشته؛ توضیح برای اسنپ‌شات پیشین (pre). پیش‌فرض: دستور والدی که قلاب pacman را فراخوانی کرده است. .IP \(bu 2 \fBpost_description\fP \- رشته؛ توضیح برای اسنپ‌شات پسین (post). پیش‌فرض: فهرستی از بسته‌های نصب، ارتقا یا حذف‌شده که با فاصله از هم جدا شده‌اند. .IP \(bu 2 \fBsnapshot\fP \- بولی (boolean)؛ مشخص می‌کند که آیا از این پیکربندی اسنپ‌شات گرفته شود یا خیر. پیش‌فرض: برای پیکربندی \fBroot\fP مقدار True و در غیر این صورت False. .IP \(bu 2 \fBuserdata\fP \- فهرستی از رشته‌ها؛ جفت‌های کلید\-مقدار که برای آن جفت اسنپ‌شات به userdata اضافه می‌شوند. پیش‌فرض: [] .UNINDENT .SS "مثال‌ها (Examples)" .sp غیرفعال کردن اسنپ‌شات‌ها برای پیکربندی \fBroot\fP و فعال کردن آن‌ها برای پیکربندی \fBhome\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX [root] snapshot = False [home] snapshot = True .EE .UNINDENT .UNINDENT .sp تنظیم snapper برای افزودن مقدار userdata با \fBimportant=yes\fP برای هر اسنپ‌شات در پیکربندی \fBroot\fP هنگامی که یک ارتقای سیستمی انجام می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX [root] important_commands = [\(dqpacman \-Syu\(dq] .EE .UNINDENT .UNINDENT .sp تنظیم snapper برای افزودن مقدار userdata با \fBimportant=yes\fP برای هر اسنپ‌شات در پیکربندی \fBroot\fP هنگامی که یک تراکنش pacman با بسته‌های \fBlinux\fP و \fBlinux\-lts\fP سر و کار دارد: .INDENT 0.0 .INDENT 3.5 .sp .EX [root] important_packages = [\(dqlinux\(dq, \(dqlinux\-lts\(dq] .EE .UNINDENT .UNINDENT .sp در اینجا یک مثال کامل‌تر با چندین گزینه تنظیم‌شده برای پیکربندی‌های مختلف آمده است. در این حالت، هنگامی که بسته‌های \fBlinux\fP و \fBlinux\-lts\fP بخشی از تراکنش باشند، اسنپ‌شات پیکربندی \fBroot\fP دارای مقدار \fBimportant=yes\fP خواهد بود. علاوه بر این، در زمان ارتقای کامل سیستم نیز اسنپ‌شات‌های \fBroot\fP با \fBimportant=yes\fP علامت‌گذاری می‌شوند. توجه داشته باشید که نیازی به افزودن \fBsnapshot = True\fP برای پیکربندی \fBroot\fP نیست زیرا این مقدار پیش‌فرض است. .sp این فایل همچنین اسنپ‌شات‌ها را برای پیکربندی snapper مربوط به \fBhome\fP فعال می‌کند و userdata با مقدار \fBrequestid=42,user=arthur\fP را به تمامی اسنپ‌شات‌های آن پیکربندی می‌افزاید. علاوه بر این، توضیحات اسنپ‌شات پسین (post) بازنویسی شده است. .INDENT 0.0 .INDENT 3.5 .sp .EX [root] important_packages = [\(dqlinux\(dq, \(dqlinux\-lts\(dq] important_commands = [\(dqpacman \-Syu\(dq] [home] snapshot = True userdata = [\(dqrequestid=42\(dq, \(dquser=arthur\(dq] post_description = \(dqpacman transaction post snapshot\(dq .EE .UNINDENT .UNINDENT .SH "متغیرهای محیطی (ENVIRONMENT VARIABLES)" .sp برای جلوگیری موقت از ایجاد اسنپ‌شات برای یک دستور خاص pacman، متغیر محیطی \fBSNAP_PAC_SKIP\fP\& را تنظیم کنید. به عنوان مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX sudo SNAP_PAC_SKIP=y pacman \-Syu .EE .UNINDENT .UNINDENT .SH "مثال (EXAMPLE)" .sp در اینجا مثالی از نحوه ایجاد اسنپ‌شات‌ها و چگونگی بازگردانی یک تراکنش pacman آورده شده است. در اینجا بسته nano نصب می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX pacman \-S nano .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX resolving dependencies... looking for conflicting packages... Packages (1) nano\-2.5.3\-1 Total Installed Size: 2.14 MiB :: Proceed with installation? [Y/n] Y (1/1) checking keys in keyring [######################################] 100% (1/1) checking package integrity [######################################] 100% (1/1) loading package files [######################################] 100% (1/1) checking for file conflicts [######################################] 100% (1/1) checking available disk space [######################################] 100% :: Running pre\-transaction hooks... (1/1) Performing snapper pre snapshots for the following configurations... => root: 1033 :: Processing package changes... (1/1) installing nano [######################################] 100% :: Running post\-transaction hooks... (1/1) Performing snapper post snapshots for the following configurations... => root: 1034 .EE .UNINDENT .UNINDENT .sp شماره اسنپ‌شات snapper برای هر پیکربندی مورد استفاده نمایش داده می‌شود. این مورد در گزارش (log) pacman نیز ثبت می‌گردد. .sp اسنپ‌شات‌های ایجادشده قبل و بعد از تراکنش pacman در اینجا آورده شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX snapper \-c root list \-t pre\-post | tail \-n 1 .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX 1033 | 1034 | Fri 22 Apr 2016 01:54:13 PM CDT | Fri 22 Apr 2016 01:54:14 PM CDT | pacman \-S nano | .EE .UNINDENT .UNINDENT .sp آنچه در طول تراکنش تغییر کرده است: .INDENT 0.0 .INDENT 3.5 .sp .EX snapper \-c root status 1033..1034 .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX +..... /etc/nanorc c..... /etc/snapper/.snap\-pac\-pre +..... /usr/bin/nano +..... /usr/bin/rnano +..... /usr/share/doc/nano +..... /usr/share/doc/nano/faq.html +..... /usr/share/doc/nano/fr +..... /usr/share/doc/nano/fr/nano.1.html +..... /usr/share/doc/nano/fr/nanorc.5.html +..... /usr/share/doc/nano/fr/rnano.1.html .EE .UNINDENT .UNINDENT .sp خروجی بالا کوتاه شده است، اما ادامه دارد. برای آشنایی با معنای هر نماد، به \fB\X'tty: link https://man.archlinux.org/man/snapper.8'\fI\%snapper(8)\fP\X'tty: link'\fP مراجعه کنید. همچنین می‌توانید دستور \fBsnapper diff\fP را به همین شیوه اجرا کنید. .sp سپس، برای بازگردانی تراکنش pacman: .INDENT 0.0 .INDENT 3.5 .sp .EX snapper \-c root undochange 1033..1034 .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX create:0 modify:3 delete:100 .EE .UNINDENT .UNINDENT .sp اکنون nano به همراه تمام فایل‌هایی که تغییر داده بود دیگر نصب نیست: .INDENT 0.0 .INDENT 3.5 .sp .EX pacman \-Qi nano .EE .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .EX error: package \(aqnano\(aq was not found .EE .UNINDENT .UNINDENT .SH "عیب‌یابی (TROUBLESHOOTING)" .sp \fBبرنامه snap\-pac تنها از پیکربندی root اسنپ‌شات می‌گیرد.\fP .sp این رفتار پیش‌فرض است. بخش \fI\%پیکربندی (CONFIGURATION)\fP\& را ببینید. .sp \fBهنگام اجرای pacman هیچ اسنپ‌شاتی گرفته نمی‌شود.\fP .sp هیچ پیکربندی snapper برای قلاب‌های pacman مربوط به snap\-pac تنظیم نشده است. به‌طور پیش‌فرض، snap\-pac برای پیکربندی root و هر پیکربندی دیگری که گزینه SNAPSHOT در فایل پیکربندی آن روی yes تنظیم شده باشد، اسنپ‌شات می‌گیرد. بخش \fI\%پیکربندی (CONFIGURATION)\fP\& را ببینید. .sp \fBپس از بازیابی اسنپ‌شات از snap\-pac، پایگاه‌داده pacman قفل است.\fP .sp اسنپ‌شات‌های پیشین/پسین زمانی گرفته می‌شوند که pacman در حال اجرا است، بنابراین این امر مورد انتظار است. دستورالعمل‌هایی را که pacman به شما ارائه می‌دهد دنبال کنید (\fIبرای مثال\fP، حذف فایل قفل). می‌توانید فایل قفل پایگاه‌داده را به یک فیلتر snapper اضافه کنید تا snapper هنگام اجرای دستوراتی چون snapper diff، snapper status، snapper undochange و غیره آن را در نظر نگیرد. برای اطلاعات بیشتر، بخش فیلترها (Filters) را در \fB\X'tty: link https://man.archlinux.org/man/snapper.8'\fI\%snapper(8)\fP\X'tty: link'\fP ببینید. .SH "پرسش‌های متداول (FAQ)" .sp \fBآیا snap\-pac از پارتیشن‌های /boot غیر btrfs نسخه پشتیبان تهیه می‌کند؟\fP .sp خیر، اما می‌توانید قلابی اضافه کنید که این کار را برای شما انجام دهد. شبیه به نمونه زیر خواهد بود: .INDENT 0.0 .INDENT 3.5 .sp .EX [Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Package Target = linux [Action] Description = Backing up /boot... When = PreTransaction Exec = /usr/bin/rsync \-avzq \-\-delete /boot /.bootbackup .EE .UNINDENT .UNINDENT .sp توجه داشته باشید که احتمالاً می‌خواهید نام فایل را با یک پیشوند عددی کمتر از \fB05\fP نام‌گذاری کنید تا قبل از گرفته شدن اسنپ‌شات pre توسط snap\-pac اجرا شود. این کار تضمین می‌کند اسنپ‌شاتی که گرفته می‌شود، شامل نسخه پشتیبان پارتیشن بوت مطابق با وضعیت سیستم باشد. به عنوان مثال، می‌توانید نام آن را \fB04\-backupboot.hook\fP\& بگذارید. .sp \fBچگونه ماژول‌های قدیمی هسته را هنگام ارتقای هسته به‌طور خودکار پیوند (link) دهم؟\fP .sp این رفتار دیگر بخشی از این بسته نیست. از یک قلاب pacman مانند نمونه زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX [Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Package Target = linux [Action] Description = Symlinking old kernel modules... When = PostTransaction Exec = /usr/bin/bash \-c \(dqfind /usr/lib/modules \-xtype l \-delete; ln \-sv /.snapshots/$(snapper \-c root list | awk \(aqEND{print $1}\(aq)/snapshot/usr/lib/modules/$(uname \-r) /usr/lib/modules/\(dq .EE .UNINDENT .UNINDENT .SH "نویسنده (AUTHOR)" Wes Barnett .SH "حق نشر (COPYRIGHT)" 2024, Wes Barnett, PhD .\" Generated by docutils manpage writer. .