لینوکس و من

۱۲ مطلب با کلمه‌ی کلیدی «آرچ» ثبت شده است

 
یکی از مخازن نرم افزار آرچ لینوکس به نام مخزن کاربران آرچ(به اختصار AUR) توسط یک بد افزار آلوده شد و در حال حاضر سه بسته در این مخزن نرم افزار حاوی بد افزار هستن.
نحوه کار این مخزن (AUR) کاربر محوره.یعنی کاربر ها میتونن خودشون بسته های مورد نظرشون رو روی مخزن آپلود کنن.این بدافزار هم به همین شیوه به مخزن راه پیدا کرده.
کاربری با نام xeactor به فایلی به اسم acroread که یک فایل PDF بود یک کد مخرب اضافه کرد.
 
این کد اسکریپتی رو روی سیستم آلوده دانلود میکنه که میتونه کار systemd رو مختل کنه و این اسکریپت هر 360 ثانیه اجرا میشه.
وظیفه این بدافزار این هست که اطلاعاتی رو از سیستم آلوده مثل اطلاعات سی پی یو،زمان و تاریخ سیستم،اطلاعات پکیج منیجر و خروجی دستور های uname -a و systemctl list-until رو جمع آوری کنه و به عنوان یک فایل pastebin بفرسته.
دو پکیج دیگه هم به روشی مشابه آلوده شدن.هرچند این برای کامپیوتر های آلوده شده خطر جدی نیست.
بعد از کشف شدن این بد افزار کاربر xeactor به حالت تعلیق در اومد.

معرفی توزیع:آرچ لینوکس



بهبود کارایی لینوکس با I/O scheduler جدید کرنل 4.12

یکی از وظایف اصلی هسته سیستم عامل، مدیریت دستگاه‌های ورودی و خروجی سیستم یا به اصطلاح I/O می‌باشد. برنامه‌های مختلفی که نیاز به دسترسی به دستگاه‌ها ورودی و خروجی دارند درخواست‌های خود را به هسته سیستم عامل ارسال می‌کنند و هسته سیستم عامل با توجه به تعداد درخواست‌هایی که برای دستگاه‌های مختلف وجود دارد، این درخواست‌ها را در صف قرار داده و برای انجام زمانبندی می‌کند. شیوه زمانبندی این درخواست‌ها تاثیر به سزایی در سرعت و پاسخگویی سیستم دارد. معمولا به دلیل کند بودن بعضی از دستگاه‌های ذخیره‌سازی همانند دیسک‌های سخت نسبت به سایر بخش‌های اصلی سیستم همچون CPU و RAM، عملیات I/O به عنوان یکی از دلایل اصلی کند بودن سیستم و پاسخگو (Responsive) نبودن برنامه‌ها می‌باشد.
روش‌ها و الگوریتم‌های مختلفی برای زمانبندی I/O وجود دارد. روش‌هایی که تاکنون در هسته لینوکس برای زمانبندی I/O استفاده می‌شد شامل CFQ، NOOP و Deadline بود. با ظهور دستگاه‌های ذخیره‌سازی جدید که قادر به انجام صدها و هزاران درخواست I/O در ثانیه می‌باشند، نیاز به روش‌های زمانبندی جدید که قادر به استفاده از این پتانسیل عظیم باشد بیش از پیش حس می‌شد. یکی از بهبودهایی که از کرنل نسخه 3.13 وارد هسته لینوکس شد multiqueue block layer بود که منجر به افزایش کارایی سیستم در استفاده از دستگاه‌های ذخیره سازی با کارایی بالا می‌شود. منتها این مکانیزم به خودی خود بدون وجود الگوریتم‌های زمانبندی که از این مکانیزم استفاده کنند فایده چندانی نداشت. ولی سرانجام در کرنل نسخه 4.12 دو زمانبند جدید که از این مکانیزم استفاده می‌کنند وارد هسته لینوکس شد. این الگوریتم‌ها به ترتیب BFQ و Kyber می‌باشند. زمانبند BFQ مکانیزمی است که بیشتر برای استفاده در دیسک‌های سخت HDD استفاده می‌شود که منجر به بهبود زمان تاخیر برنامه‌های تعاملی و بهبود کارایی سیستم می‌شود. الگوریتم Kyber هم بدلیل پیچیدگی کمتر نسبت به BFQ برای دیسک‌های SSD و سریعتر استفاده ‌می‌شود.
به تازگی کرنل 4.12 وارد مخازن آرچ شد و کاربران آرچ امکان استفاده از این مکانیزم‌های جدید رو پیدا کردند. این زمانبند‌ها در حالت عادی فعال نیستند و برای فعال شدن آنها باید کارهای زیر را انجام بدید. توصیه می‌کنم که اگر سیستم شما از HDD استفاده می‌کند از BFQ استفاده کنید و برای SSD ترجیحا از Kyber و یا از روش‌های فعلی موجود استفاده کنید.
در حالت عادی زمانبند CFQ در آرچ استفاده می‌شود که برای دیدن زمانبند مورد استفاده در دیسک مورد نظر خود از دستور زیر استفاده کنید در اینجا دیسک sda رو چک میکنیم:
$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq]


برای استفاده از زمانبندهای چند صفی (multiqueue) ابتدا بایستی پارامترهای scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1 را به پارامترهای بوت کرنل اضافه کنیم برای اینکار با فرض استفاده از GRUB به عنوان boot loader مورد استفاده اعمال زیر را انجام دهید:
ابتدا فایل etc/default/grub/ را با ویرایشگر مورد نظر خود باز کرده و پارامترهای گفته شده را به مقادیر موجود در جلوی گزینه GRUB_CMDLINE_LINUX_DEFAULT اضافه کنید یعنی به این صورت:
GRUB_CMDLINE_LINUX_DEFAULT="scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1"

سپس با دستور زیر فایل تنظیمات گراب را بروزرسانی کنید:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

در مرحله بعد برای استفاده از زمانبند BFQ برای تمامی دیسک‌های سیستم یک rule جدید برای udev ایجاد می‌کنیم. به این منظور ابتدا دستور زیر را برای ایجاد rule جدید اجرا کنید:
$ sudo nano /etc/udev/rules.d/10-bfq.rules

سپس محتویات زیر را درون این فایل قرار دهید:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="bfq"

در مرحله بعد سیستم خود را ریبوت کرده و بعد از بالا آمدن سیستم چک کنید که زمانبند BFQ برای دیسک شما مورد استفاده قرار گرفته باشد:
$ cat /sys/block/sda/queue/scheduler
mq-deadline kyber [bfq] none


همانطور که می‌بینید زمانبند bfq برای دیسک sda سیستم مورد استفاده قرار گرفته است. برای استفاده از Kyber هم به همین شیوه عمل می‌شود منتها در rule ایجاد شده برای udev به جای bfq گزینه kyber رو قرار بدید:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="kyber"

تبدیل لپتاپ به مودم وایرلس در آرچ لینوکس

قبلا ها اگه توی PC کانکشن ad-hoc میساختیم میتونستیم اون رو توی گوشی آندرویدمون پیدا کنیم و از اینترنت PC توی گوشی استفاده کنیم. یا از برنامه هایی مثل Airdroid و امثالهم بتونیم بدون اینکه نیاز به یک مودم جداگانه داشته باشیم استفاده کنیم. ولی دیگه از آندروید ۴ به بعد بخاطر دلایل امنیتی آندروید دیگه کانکشن های ad-hoc رو شناسایی نمیکنه.
برای دستیابی به این هدف نیاز به چیزی داریم به نام hostapd که در توزیع های لینوکسی موجوده. اما تنظیماتش برای تازه کارها یکم سخته. در آرچ و دوستان، یک اسکریپتی داریم به نام create_ap که در AUR وجود داره. برای کار با این اسکریپت باید سخت افزار وایرلس لپتاپ شما از این امکان پشتیبانی کنه که الآن دیگه اکثرا پشتیبانی میکنن. 
دستور iwconfig رو بزنید تا اینترفیس های شبکه ی PC شما رو بهتون نشون بده.
دستور create_ap راهنمایی خوبی داره. مثلا برای به اشتراک گذاشتن اینترنت PC از طریق وایرلس در لپتاپ من:
 
sudo create_ap wlp3s0 enp0s29f0u1c2 esm password
توضیحات:
wlp3s0 نام اینترفیس وایرلس لپتاپ
enp0s29f0u1c2 نام اینترفیسی که اینترنت بهش وارد میشه. مثلا پورت USB یا پورت LAN 
esm اسم وایرلسی که میخواید داشته باشید.
password رمز عبوری که میخواید داشته باشید.
 
این اسکریپت حالت های مختلفی داره. مثلا با n- دیگه اینترنتی به اشتراک گذاشته نمیشه و فقط یک کانکشن وایرلس ایجاد میشه. مثلا برای چیزایی مثل Airdroid.
 
با ctrl +c هم قطع میشه. البته من هر وقت این کار رو میکنم و بعدش suspend میکنم، دیگه بعد از resume موبایل نمیتونست به اون کانکشن متصل بشه و باید نام وایرلس رو عوض میکردم! اما وقتی بدون ctrl + c لپتاپ رو suspend میکنم این مشکل پیش نمیاد. گفتم اگه مال شما هم این جوری شد بدونید.
 
میتونید دستورتون رو در یک فایل اجرایی در پوشه ی /usr/local/bin/ قرار بدید تا با یک دستور مشخص این کانکشن ساخته بشه.
اگر پیامی مبنی بر مشکلی در RFkill گرفتید یک بار وایرلس لپتاپ رو خاموش و روشن کنید و این دستور رو بزنید:
 
rfkill unblock all

آخرین سرور های بسته های آرچ رو داشته باشید

آرچ برای بسته های خودش سیستم جالبی رو داره. به این صورت که سرورهای مختلفی در سراسر دنیا بسته های آرچ رو در خودشون دارن. بنابراین شما میتونید بهترین سرور رو از نظر سرعت پیدا کنید و در لیست mirrors بسته ها قرار بدید. همه ی این کارها با این برنامه قابل انجام هست: reflector
اول این برنامه رو نصب کنید:
sudo pacman -S reflector
بعد این دستور رو اجرا کنید تا ۱۰ تا سرور پرسرعت به ترتیب لیست بشن.

sudo reflector --verbose -l 10 -p http --sort rate --save /etc/pacman.d/mirrorlist
برای اطلاعات بیشتر به منبع مراجعه کنید.

bluetooth بعد از resume در آرچ

Bluetooth بعد از resume از suspend از کار می‌افته. یعنی می‌افتاد! و در کل من دوست دارم که کلید خاموش/روشن کردن بلوتوث با وایرلس فرق داشته باشه. برای همین یه اسکریپتی ساختم که مخصوص خاموش/روشن کردن بلوتوث باشه. و البته اون کارهایی رو که لازمه تا بلوتوث بعد از resume کار کنه رو توش قرار دادم (رنگ قرمز)

#!/bin/sh

STAT=`cat /sys/class/rfkill/rfkill0/state`
      if [ "$STAT" = "1" ];
         then hciconfig hci0 down;
         else sudo rmmod btusb & sudo modprobe btusb & hciconfig hci0 up;
      fi

البته توجه داشته باشید که دستور sudo در اسکریپت وجود داره. برای اینکه دستور sudo بدون اینکه پسورد لازم باشه براش، اجرا بشه، باید یه کاری بکنید که در وبلاگم آموزش دادم. هرچند از لحاظ امنیتی ایراد داره. اما کسی با ما کاری نداره که ;)

روش دیگه ای که میتونیم انجام بدیم تا مشکل از کار افتادن بلوتوث برطرف بشه و نیازی به sudo نباشه، اینه که دستور rmmod btusb & modprobe btusb رو در systemd قرار بدیم که بعد از suspend اجرا بشه. (و طبیعتا اون عبارت قرمز رو هم از اسکریپتمون برداریم.) آموزش این کار هم دو سه تا نوشته پایین تر وجود داره.

تغییر login manager ها

اگر در توزیعی مثل آرچ کار میکنید که روشش این طوریه که تا شما بهش چیزی نگید اون هم حرف نمیزنه، وقتی یک login manager قبلی مثل gdm دارید و حالا میخواید مثلا kdm نصب کنید، باید اینو بهش بگید! آرچ بنده خدا ساکته و مثل چیزایی مثل دبیان سوال زیادی نمی پرسه که کدومو میخواید؟ در آرچ این شمایید که اول حرف میزنید!
ls -l /etc/systemd/system/display-manager.service
sudo rm -r /etc/systemd/system/display-manager.service
sudo systemctl enable kdm.service

نمایش درست برنامه های GTK در KDE

دوباره میخوام مدتی با KDE کار کنم. چون گنوم‌شل با لپتاپ من سازگار نیست و بسیار کنده و mate هم اوضاعش خیلی خیته و همچنان بعد از این همه آپدیت پر از ایراده.
البته با هزار زور و زحمت از مخازن آرچ تونستم دسکتاپ گنوم ۲ رو نصب کنم. موفقیت آمیز هم بود اتفاقا. اما یه ایراد نابخشودنی داشت که نمیشد رفعش کرد. اینکه پنل مدام قاطی میکرد و آیکن ها رو نشون نمیداد. اپلت ها رو خیلیهاشون رو اد نمی کرد... اما بقیه چیزای گنوم خوب بودن. و همچنین بیم آن می رفت که با آپدیت سیستم تمام این ها به هم بریزه. هرچند میشه از آپدیت شدن یه سری بسته ها جلوگیری کرد، اما کافیه یه بسته ی ریزه میزه رو یادتون رفته باشه به لیست ممنوعه اضافه کنید. اون وقت بیا و درستش کن... اینکه گفتم چه کاریه، بریم ببینیم KDE به کجا رسیده...
بعد از ۵۰۰ و اندی مگابایت دانلود، KDE با سلام و صلوات راه اندازی شد. خوشبختانه compiz توش کار میکنه. (من از افکت های Kwin خوشم نمیاد). اما ایرادی که داره اینه که برنامه های GTK  (مثلا GIMP) با تم خودشون باز میشن و این طوری دوگانگی بوجود میاد. راه حلش در KDE 4.10 در آرچ اینه که میگم:

این سه تا بسته رو نصب کنید:
sudo pacman -S oxygen-gtk2 oxygen-gtk3 kde-gtk-config

آنگاه در تنظیمات تم kde برید میبینید که GTK اضافه شده. و در اونجا تم برنامه های GTK رو به oxygen-gtk تغییر بدید. البته این به این شرط میسر هست که تم شما در KDE اکسیژن باشه تا باز دوگانگی پیش نیاد. به نظر من که تم قشنگیه.

بازی با سرویس ها (اجرای دستورات شما)

سلام.
هدف اصلی: خاموش کردن nvidia ion هنگام boot و بعد از resume
هدف فرعی ۱: اجرای اسکریپت مخصوص خاموش کردن nvidia ion در آدرس usr/bin/disablecard/
هدف فرعی ۲: افزایش زمان باتری و کاهش دمای سیستم!

خیلی گشتم تا این رو در آرچ پیدا کنم. توی دبیان خیلی راحت فایل اسکریپت رو میذاشتیم در یک فولدر خاصی و اون اسکریپت بعد از resume اجرا میشد. برای boot هم با crontab این کار رو انجام میدادم. اما در آرچ اینگونه نیست...
آرچ از systemd  استفاده میکنه. این ابزاریه برای کنترل سرویس های آرچ. (روی لینکش کلیک کنید تا متوجه بشید). برای اینکه اتفاق خاصی در زمان خاصی بیفته، باید اون رو تبدیل به یک سرویس کنیم و بدیمش به آرچ که بفهمه و اجراش بکنه. من زیاد جزئیات و عمق مطلب رو نمیدونم. صرفا با خوندن ویکی و چند بار آزمون و خطا موفق شدم. شما میتونید این کار رو تعمیم بدید و هر کاری که دوست دارید با سیستمتون انجام بدید.

فایل disablecard یک اسکریپت مخصوص خاموش کردن nvidia ion در لپتاپ منه (asus 1215n) که اون رو در usr/bin/ قرار دادم که با دستور sudo disablecard به طور دستی اجراش میکردم تا کارش رو انجام بده. برای اینکه این اتفاق رو تبدیل به یک سرویس کنم این کارها رو کردم.

۱- یک فایل به اسم دلخواه nvidia-off.service در این فولدر میسازیم usr/lib/systemd/system/ و این محتوی رو توش میریزیم!
[Unit]
Description=Turns off nvidia ion
After=slim.service

[Service]
ExecStart=/usr/bin/disablecard
Type=oneshot

[Install]
WantedBy=slim.service

توضیح اینکه After یعنی اینکه این سرویس بعد از اجرای چه سرویسی باید اجرا بشه؟ من لیستی از سرویسهایی رو که هنگام بوت اجرا شده بودند با دستور systemctl list-unit-files --type=service پیدا کردم. و دیدم مثلا کدوم سرویس enabled هست. گفتم بعد از اون این اتفاق بیفته! شما هم میتونید به دلخواه خودتون ببینید سیستمتون چطوری تنظیم شده.
۲- برای resume هم یک فایل به اسم دلخواه nvidia-off-resume.service در همون فولدر میسازیم و این محتوی رو توش میریزیم:
[Unit]
Description=Turns off nvidia after resume
After=suspend.target

[Service]
Type=oneshot
ExecStart=/usr/bin/disablecard

[Install]
WantedBy=suspend.target
۳- حالا دستورات زیر رو یکی یکی اجرا میکنیم تا کارمون تکمیل بشه:

sudo systemctl daemon-reload
sudo systemctl enable nvidia-off-resume
sudo systemctl enable nvidia-off
و در پایان یک بار reboot میکنیم تا نتیجه رو ببینیم. که موفقیت آمیز بود! با مراجعه به ویکی آرچ میتونید کارهای پیچیده تر و جالب تری هم بکنید.

نصب دسکتاپ mate روی آرچ

mate ادامه ی راه Gnome2 هست که توسط تیم لینوکس مینت ادامه دار شد! جایگزین خوبیه برای کسانی که از گنوم ۳ خوششون نمیاد یا لپتاپشون مثل مال من توانایی اجرای انیمیشن های مسخره و ساده ی گنوم شل رو نداره (اما compiz به زیبایی و راحتی اجرا میشه.
سریع بریم سر اصل مطلب.

۱- عبارات زیر رو داخل فایل etc/pacman.conf/ ذخیره کنید:
[mate] SigLevel = Optional TrustAll Server = http://repo.mate-desktop.org/archlinux/$arch
۲- mate رو نصب کنید:
pacman -Syy
pacman -S mate mate-extras
به نکته ی شماره ۴ مطلب قبلی برید و اون کارها رو انجام بدید.

توضیحات بیشتر در ویکی mate در سایت آرچ

۴- برای اینکه network manager درست کار کنه باید بسته ی خاصی رو نصب کنید. از AUR این بسته رو دانلود کنید. و طبق آموزشی که قبلا گذاشتم اون رو نصب کنید. اما توجه کنید که قبلش در فایل PKGBUILD باید عبارت gnome-bluetooth رو به mate-bluetooth تغییر بدید.

برای نصب compiz دردسر زیادی کشیدم. الان وقتش رو ندارم. شاید بعدا بنویسم.