تجربه نصب اینک‌اسکیپ ۱ روی رزبری‌پای

داستان نصب نسخه ۱ برنامه اینک‌اسکیپ با چالش‌های پیش‌بینی‌نشده‌ای مواجه شد. در این مطلب، تجربه این به‌روزرسانی را با شما به اشتراک می‌گذارم.

ماجرا از جایی شروع شد که به امین، یه #رزبری‌پای دادم که شروع کنه برنامه‌نویسی یاد بگیره اما تصمیم گرفت که کارهای گرافیکی کنه. براش #اینک‌اسکیپ نصب کردم و یه قدری هم بهش آموزش دادم اما بهش گفتم فیلم‌های شروع سریع کار با اینک‌اسکیپ و باز طراحی پوستر لاگ ایلام در نرم‌افزار اینک‌اسکیپ رو که در ایلام‌لاگ ارائه داده بودم و روی پیرتیوب منتشر کرده بودم ببینه. اون هم شروع کرد به دیدن و خوب هم پیش‌رفت کرد.

این وسط دو مشکل داشتیم: اول اینکه انگلیسی امین خوب نیست و مجبوره محیط رو فارسی کنه و دوم اینکه نسخه اینک‌اسکیپ روی مخازن، ۰٫۹۲ خیلی قدیمی بود که متن راست به چپ را پشتیبانی نمی‌کرد. در مورد مشکل اول، سال‌ها پیش بخش‌هایی از اینک‌اسکیپ به فارسی ترجمه شده. اما خیلی ناقصه. لازم بود که روی ترجمه‌اش کار کنم. اما منطقی نبود که روی ترجمه نسخه قدیمی وقت گذاشت. در مورد مشکل دوم هم فعلا مشکلش رو با ساخت قالب پیش‌فرضی که به صورت دستی، جهت متن کل سند، راست به چپ تنظیم شده حل کردم. اما راه‌حل، این نیست. هم به این خاطر و هم به خاطر ویژگی‌های جدید نسخه ۱، بهتر بود که یه جوری به نسخه ۱ ارتقا بدیم. این‌طوری، هر دو مشکل رفع می‌شدند.

قدری بررسی کردم و در فضای گفتگویی که کاربران اینک‌اسکیپ دارند، موضوع رو مطرح کردم. کسی پیام داد که در مخازن backports دبیان نسخه ۱ اینک‌اسکیپ وجود داره. قدری چرخ زدم و متوجه شدم آن مخزن، برای نسخه دبیان buster هست ولی نسخه رزبین روی رزبری‌پای، بر اساس دبیان stretch بود. کار سخت شد. من هم دیگه ایران نبودم که بتونم مستقیم برای امین یه رزبین جدید نصب کنم. تنها کاری که می‌شد کرد، ارتقای مستقیم از stretch به buster بود. شانسی که آوردیم این بود که خودم هم رزبری‌پای داشتم. بنابراین تصمیم گرفتم یک بار این ارتقا را روی دستگاه خودم انجام دهم و بعد در صورت موفقیت، این کار را از راه دور برای امین انجام دهم.

شروع به روزرسانی

کار را بر اساس آموزشی در همین رابطه آغاز کردم. شروع کار (طبیعتا) با این دستورات بود:

sudo apt update
sudo apt dist-upgrade -y

ارتقای رزبری از استرچ به باستر

اما همین اول به مشکل برخوردم:

➜  ~ sudo apt dist-upgrade -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libmicrodns0
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up wolfram-engine (12.0.1+2019062401) ...
ln: failed to create symbolic link '/usr/share/icons/nuoveXT2/64x64/mimetypes/application-mathematica.png': File exists
dpkg: error processing package wolfram-engine (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 wolfram-engine
E: Sub-process /usr/bin/dpkg returned an error code (1)

برنامه wolfram-engine نیاز داشت یه سری پرونده ایجاد کنه که از قبل وجود داشتند. خطایی که می‌ده، خطای مسخره‌ای است. منطقا یا باید در صورت وجود، بی خیال بشه، یا باید جایگزین کنه و یا می‌تونه سوال کنه. اما ترجیح می‌ده با چنین خطایی، به‌روزرسانی کل دستگاه رو با اختلال مواجه کنه. سوال را روی raspberrypi.stackexchange.com پرسیدم اما به جز نهی کردن از به‌روزرسانی مستقیم، جوابی نگرفتم. رفتم بررسی کردم ببینم این برنامه چیه که دیدم لازمش ندارم. حذفش کردم و حل شد.

دستورها را دوباره اجرا کردم. اما این بار طبق همان آموزشی که بالاتر اشاره کردم، مخازن را از stretch به buster تغییر دادم. برای این کار، محتوای پرونده‌های زیر را (با دسترسی root) ویرایش و buster را جایگزین stretch کردم:

/etc/apt/sources.list
/etc/apt/sources.list.d/raspi.list

مجددا دستورات زیر را اجرا کردم:

sudo apt update
sudo apt dist-upgrade -y

این بار، پس از دریافت بیش از ۲ گیگابایت بسته‌های جدید، در آخر کار به خطای زیر خوردم:

Err:1 http://archive.raspberrypi.org/debian buster/main armhf raspberrypi-kernel armhf 1.20210108-1                                                                                                                          
  Hash Sum mismatch
  Hashes of expected file:
   - SHA256:9ecb41e8129827e18f1addee8105491f0227f320f3fccfadaa2507e57229f8b9
   - SHA1:49434d37d9a840805b38e893660f178e6efcd1bc [weak]
   - MD5Sum:514c436e37abab16414852e6f0b1eadd [weak]
   - Filesize:76426824 [weak]
  Hashes of received file:
   - SHA256:ab4000628b59585d0c260db1b09b3bdd2c527eb030ae5d5fb3dc65b26484ffca
   - SHA1:edf95406a68889f193aa87e95745597d0c3e05f0 [weak]
   - MD5Sum:14ed22b18b1477a27c96dd631b05a450 [weak]
   - Filesize:34230959 [weak]
  Last modification reported: Fri, 08 Jan 2021 15:50:34 +0000
Fetched 34.2 MB in 5min 57s (95.7 kB/s)                                                                                                                                                                                      
E: Failed to fetch http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-kernel_1.20210108-1_armhf.deb  Hash Sum mismatch
   Hashes of expected file:
    - SHA256:9ecb41e8129827e18f1addee8105491f0227f320f3fccfadaa2507e57229f8b9
    - SHA1:49434d37d9a840805b38e893660f178e6efcd1bc [weak]
    - MD5Sum:514c436e37abab16414852e6f0b1eadd [weak]
    - Filesize:76426824 [weak]
   Hashes of received file:
    - SHA256:ab4000628b59585d0c260db1b09b3bdd2c527eb030ae5d5fb3dc65b26484ffca
    - SHA1:edf95406a68889f193aa87e95745597d0c3e05f0 [weak]
    - MD5Sum:14ed22b18b1477a27c96dd631b05a450 [weak]
    - Filesize:34230959 [weak]
   Last modification reported: Fri, 08 Jan 2021 15:50:34 +0000
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

مطابق پیشنهاد خط پایانی، دستورات sudo apt update و sudo apt install --fix-missing را اجرا کردم اما مشکل رفع نشد. موضوع را روی raspberrypi.stackexchange.com مطرح کردم اما باز هم پاسخ گرفتم که ارتقای مستقیم از stretch به buster پیشنهاد نمی‌شه. به گروه رزبری‌پای روی ماتریکس پیام دادم و دوستان هم کمک کردند اما باز هم مشکل حل نشد.

در این فاصله، یک بخش دیگر از دستوراتی که در آموزش دیده بودم را به کار بستم؛ دستوری که سفت‌افزار (firmware) را به‌روز می‌کرد. هم خود دستور و هم بسیاری جاها روی اینترنت تاکید داشتند که هرگز این کار را نکنید. اما دل را به دریا زدم و دستور زیر را اجرا کردم:

sudo rpi-update

ارتقای سفت‌افزار رزبری‌پای

خدا را شکل بدون مشکل نصب شد و دستگاه هم به درستی بالا آمد. اما مشکل قبلی هنوز پابرجا بود.

شروع کردم به بررسی خط به خط خطایی که نمایش داده می‌شد. متوجه شدم که به جای دریافت پرونده‌ای با اندازه 76426824، پرونده‌ای با اندازه 34230959 بایت دریافت می‌شود و طبیعی است که hash sum این دو پرونده با هم تطابق نداشته باشه. (hash sum، روشی برای بررسی تطابق عین به عین دو پرونده است) تلاش کردم مستقیم دریافتش کنم که چند بار سر ۴۹ درصد، بارگیری به شکست می‌خورد. نهایتا (همراه با چند بالا و پایین نه چندان مهم) این پرونده را کامل بارگیری کرده و آن را در جایی که بسته‌های به‌روزرسانی دیگر قرار داشتند کپی کردم؛ در این نشانی:

/var/cache/apt/archive/

پس از این مرحله، مجددا دستور sudo apt dist-upgrade -y را اجرا کردم و نصب بسته‌ها آغاز شد. بعد از چند ساعت و پاسخ به پرسش‌هایی در ارتباط با جایگزین پرونده تنظیمات چند برنامه با نسخه جدید (که برخی را بررسی کرده و متناسب با تغییرات، اجازه جایگزینی را دادم) به‌روزرسانی کامل شد.

تا اینجا، رزبری از سیستم‌عامل مبتنی بر دبیان stretch به سیستم‌عامل مبتنی بر دبنیان buster ارتقا پیدا کرده بود و همه چیز هم به خوبی کار می‌کرد. حالا نوبت به اینک‌اسکیپ رسیده بود. برای این کار لازم بود مخزن backports دبیان را به فهرست مخازن اضافه کنم. برای این کار، خط زیر را به ‪/etc/apt/sources.list‫ اضافه کردم:

deb http://deb.debian.org/debian buster-backports main contrib non-free

سپس، نیز به به‌روزرسانی مخازن بود و…. خطای جدید:

➜  ~ sudo apt update
Hit:1 http://raspbian.raspberrypi.org/raspbian buster InRelease                           
Get:2 http://deb.debian.org/debian buster-backports InRelease [46.7 kB]                   
Hit:3 http://archive.raspberrypi.org/debian buster InRelease        
Hit:4 http://packages.microsoft.com/repos/code stable InRelease
Err:2 http://deb.debian.org/debian buster-backports InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 04EE7237B7D453EC NO_PUBKEY 648ACFD622F3D138
Reading package lists... Done
W: GPG error: http://deb.debian.org/debian buster-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 04EE7237B7D453EC NO_PUBKEY 648ACFD622F3D138
E: The repository 'http://deb.debian.org/debian buster-backports InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

دلیل بروز این خطا این است که کلید رمزنگاری مخزن، روی دستگاه من نیست و لذا (اگر درست بگویم) اعتبارسنجی تطابق پرونده‌های آن مخزن برای من میسر نخواهد بود. با جستجویی ساده در اینترنت، شیوه دریافت کلیدهای مربوط به رمزنگاری این مخازن را یافتم. با دو دستور زیر، اطلاعات لازم برای کلیدهای خواسته شده را دریافت کردم:

➜  ~ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys 04EE7237B7D453EC
Executing: /tmp/apt-key-gpghome.lIZGQoIfwR/gpg.1.sh --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys 04EE7237B7D453EC
gpg: key E0B11894F66AEC98: public key "Debian Archive Automatic Signing Key (9/stretch) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1

➜  ~ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys 648ACFD622F3D138
Executing: /tmp/apt-key-gpghome.N6TmoFgj5O/gpg.1.sh --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys 648ACFD622F3D138
gpg: keyserver receive failed: No data

هرچند دستور دوم با خطا مواجه شد اما ظاهرا تاثیری در ادامه کار نداشت. گام بعدی، نصب اینک‌اسکیپ از بود. انتظار داشتم با دستور معمول sudo apt install inkscape کار نصل انجام شود اما چنین نشد. نسخه روی مخازن هنوز قدیمی بود. با یک بررسی مختصر متوجه شدم که به طور پیش‌فرض، apt از مخازن backports برای نصب استفاده نمی‌کند و اگر کسی بخواهد چنین کند، باید به طور دقیق چنین خواسته‌ای را مطرح کند. این کار هم با افزون گزینه مربوط به این کار قابل انجام بود؛ به این شکل:

➜  ~ sudo apt -t buster-backports install inkscape

و نصب انجام شد!
تمام :)

نصب اینک‌اسکیپ ۱ روی رزبری‌پای

جمع‌بندی

قشنگی دنیای #گنولینوکس و #نرم‌افزار_آزاد همین است که می‌شود ریز اتفاقات را دید و دنبال کرد و حتی دست‌کاری‌شان کرد. البته من کار خاصی نکردم اما همین مقدار هم کم نیست. و نکته دیگر اینکه از خطاها نباید ترسید. گاهی با خواندن خطاها، می‌توان درد را فهمید. هیچ کس به من نگفت (یکی گفت اما دیر گفت) که چرا فلان پرونده، ناقص بارگیری می‌شود. خودم فهمیدم و برایش چاره‌ای اندیشیدم.

خلاصه اینکه تمرین ارتقا از stretch به buster روی رزبری خودم، با موفقیت انجام شد. حال، باید این کار را روی دستگاه امین و از راه دور انجام دهم.