بازی با raspberry

 

خب سرانجام من هم یه raspberry خریدم. و مطابق معمول من raspberry pi 2 خریدم هفته بعد مدل 3 معرفی شد!

RaspberryPi2

اولین کار نصب سیستم عامل.

نسخه Raspbian Jessie را از اینجا دانلود می کنیم. نصب خیلی ساده است. اول کارت SD  را فرمت و سپس umount می کنیم بعد فایل دانلودی را از حالت فشرده خارج کرده و بر روی کارت حافظه می نویسیم:

#dd bs=4M if=/home/2016-02-09-raspbian-jessie.img | pv | of=/dev/mmcblk0

کارت حافظه را در اسلات حافظه پای میزاریم ، کابل شبکه و خروجی تصویر را متصل می کنیم در صورت تمایل یه حافظه جانبی و هدفون را هم وصل می کنیم. حالا وقت اتصال ورودی جریان استاندارد 5V 1500mA هست.

اگه همه چیز درست یاشه حالا شما اولین خروجی تصویر و بوت سیستم عامل پای را خواهید دید.

RaspberryPi2-ON

خب اینها که چیزی نبود، حالا میخوام با پای ام چیکار بکنم. اولین فکر تبدیل به یک دستگاه پخش موسیقی هست. من یه کارت صوتی اکسترنال Creative دارم، که با پورت usb وصل میشه و انواع مختلف خروجی های استاندارد را داره. خروجی صوتی استاندارد Raspberry هم واقعا افتضاح هست. پس باید خروجی استاندارد را غیر فعال کنم و خروجی usb را به عنوان پیشفرض بزارم.

sudo apt-get install alsa-base alsa-utils

sudo tail -f /var/log/messages

الان کارت صوتی را به پورت usb متصل می کنم و باید پیغام شناسایی دیوایس جدید را ببینم.

XFI-SBX

برای اطمینان از لود شدم ماژول

lsmod | grep snd_usb_audio

نصب و ویرایش ALSA

ALSA

عملکرد اسپیکر را چک می کنیم

speaker-test -D hw:0,0 -c2 -f wav

باید همه چیز درست باشه. پس نوبت به نصب پخش کننده موسیقی می رسه. من از MPD استفاده می کنم که علاوه بر سبکی فوق العاده انعطاف پذیر هست.

sudo apt-get mpd

sudo adduser mpd audio

برای اینکه حافظه های usb که متصل می کنیم به صورت خودکار ماونت بشوند از usbmount استفاده می کنیم. نصب و کانفیگ با خودتون، می تونید  از آپشنهایی مثل ماونت خودکار در مسیر پیشفرض mpd هم استفاده کنید..!

یک بار سیستم را ری استارت کنید و حالا فایل تنظیمات mpd را تغییر بدید.

Screenshot from 2016-03-13 16:03:00
سرویس mpd  را ری استارت کنید.

من برای راحتی کار MPDroid را روی گوشی نصب کردم و کنترل را از روی اون انجام میدم. انواع کلاینتهای ویندوزی ، لینوکسی و تحت وب هم برای سرویس mpd وجود داره.

 

Music-HiFi
از سیستم موسیقی دست ساز خودتون لذت ببرید..! 🙂

 

 

چگونه داده های عددی را به صورت نمودار در لینوکس نمایش دهیم

 

چند روز قبل یکی از همکاران  تکست زد و یه سوال پرسید که ” CPU monitor for Linux? / میخوام data collection با history داشته باشه ” خب من هم که تمام جوابهام کلی ، نامفهوم و گنگ هست. اول یه چیزهایی زمزمه کردم که بدرد هیچ بنی بشری نمیخورد. بعد موتورم روشن شد..

خب من میدونستم که با sysstat میشه منابع سیستم را مانیتور کرد. یکی از ابزار های خوب این مجموعه sar هست که اطلاعات سی پی یو را به ما میده. یه خروجی مثل این:

 

sar-output

خب حالا با این چیکار کنم؟ البته دوستی که این سوال را پرسید ارزش وقت گذاشتن را داشت و من هم بیکار و دنبال دردسر! پس میریم شروع میکنیم، چطوری میشه خیلی راحت همه این داده ها را روی گراف دید و نتیجه گیری کرد.

من میدونستم که با rrdtool میشه نمودارهای هندسی کشید، ولی دنبال یک راه حل ساده تر بودم. یه جستجو روی گوگل به من ابزار خوب gnuplot را معرفی کرد. خیلی راحت از روی مطالب سایت برنامه با آدرس http://www.gnuplot.info/documentation.html میشه به یه کد ساده رسید.

اول باید خروجی را مرتب و قابل استفاده کنبم:

sar -f | grep -Ev ‘Average|LINUX|CPU|^$’ > sar.dat

خروجی سر را میفرستم به گرپ و سطر های خالی و سطرهایی که اون کلمات اضافه را دارند حذف میکنم و همه نتایج را در یک فایل ذخیره میکنم که بعدا قابل استفاده باشه. محتویات فایل  میشه این:

sar-grep

خب حالا میریم سراغ gnuplot و این کد را مینویسیم و به عنوان یک فایل اسکریپت ذخیره و اجرا میکنیم:

#!/usr/bin/gnuplot
set terminal png truecolor
set output “sar-graph.png”
set autoscale
set grid
set style data lines
set title “CPU usage with sar”
set xlabel “Time”
set ylabel “Percent”
set xdata time
set timefmt “%H:%M:%S”
set format x “%H:%M”
plot “sar.dat” using 1:3 title “User” with lines, \
“sar.dat” using 1:5 title “System” with lines, \
“sar.dat” using 1:8 title “Usage” with lines

خیلی ساده اول اومدم نوع نمودار و خروجی و سرنویس ها را مشخص کردم بعد گفتم که نمودار ایکس ها زمان هست که با قالب مشخص شده از ستون اول فایل که بعدا بهش میگم از کجا اون را بخونه و روی صفحه گراف نشون بده. خب حالا تو سه سطر آخر گفتم یه نمودار خطی با هر کدوم از سطرهای مشخص شده از فایل مثلا 3,5,8 بکشه و رنگ و عنوانش زا هم مشخص کنه. خروجی میشه یه فایل تصویر png شبیه این:

sar-graph

خب این از خروجی گزارش کارکرد امروز سی پی یو، بقیه روزها را از کجا بیارم؟

خیلی ساده کافیه فایلی که ابزار sar به عنوان لاگ ذخیره میکنه را با سوییچ -f بهش بدیم مثل این:

sar -f /var/log/sysstat/sa20151025 > sar.dat

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

چگونه یک دیسک scsi بدون راه اندازی مجدد به یک ماشین لینوکسی اضافه کنیم

 

اگه یک ماشین مجازی لینوکس روی vmware مدیریت کرده باشید احتمالا هنگام اضافه کردن یک دیسک scsi جدید به ماشین متوجه شدید که، لینوکس به صورت خودکار scsi controller را اسکن نمیکنه در نتیجه اضافه شدن دیسک جدید را متوجه نمیشه و نیاز به راه اندازی مجدد سیستم هست.

خب حالا برای حل این مشکل بدون ریست کردن سرور لینوکس چی کار میشه کرد؟ راه حل بسیار ساده است؛ برای مثال من این سیستم را دارم، یه ماشین لینوکس دبیان Debian 8.0 Jessie روی محیط مجازی esxi 5.5 که چهار دیسک و سه scsi controller داره. این هم یه تصویر از وضعیت فعلی block device های من با دستور lsblk هست:

lsblk

خب حالا وارد محیط vmware client  میشم و یک دیسک جدید به scsi controller شماره یک و node شماره دو ماشین مجازی ام اضافه می کنم. شماره node و تعداد scsi controller را اینجا به خاطر بسپارید بعدا به درد میخوره. به این صورت:

vmclient

حالا  یک fdisk –l  میگیرم و خب معلومه دیگه، هیچی به هیچی! ای هیچ برای هیچ بر هیچ مپیچ 🙂

fdisk-l

از مسیری که فایلهای مدیریت scsi controller در لینوکس وجود دارد یک ls  می گیریم:

ls-sys-class

یه چیزهایی آشنا به نظر میاد اینطور نیست؟ شبیه ترتیب همون scsi controller   و  node ها در محیط مجازی هست.

خب حالا من دستور زیر را اجرا می کنم و به جای شماره host عدد سه را می زنم که به نظر باید درست باشه

 

echo “- – -” > /sys/class/scsi_host/host#/scan

اون سه تا علامت – چیکار می کنه؟ کاراکتر – به جای wild character برای مقادیر channel, scsi target id, LUN  به کار میره و به معنی اسکن کردن همه چیز هست.

دستور را اجرا می کنیم و مثل حرفه ای ها! لاگ های سیستم را کنترل می کنیم:

 

watch –n1 tail /var/log/messages/

 

خب مثل اینکه یه چیزهای ظاهر شد، بله درسته دیسک scsi با مشخصاتی که می بینید با موفقیت اسکن و اضافه شد:

log-message

یک fdisk –l  هم می گیریم و بله همه چیز درسته!

fdisk-l

 

 

VMWare Virtual Disk Provisioning

 

در زمانی که شما در حال طی کردن مراحل ایجاد یک ماشین مجازی جدید هستید باید سیستم و شیوه ذخیره سازی بر روی فایل دیسک سخت مجازی را مشخص کنید.

NFS , VMFS datastore  از تمامی شیوه های ذخیره سازی موجود در VMWare  پشتیبانی می کنند.

  • NFS بدون شتاب دهنده سخت افزاری، فقط قابلیت پشتیبانی از فرمت thin را دارد.
  • شما می توانید از قابلیت vMotion برای تغییر یک دیسک مجازی به از یک فرمت به سایر فرمت ها استفاده کنید.

 

  • Thick

در روش ذخیره سازی thick  تمامی فضای مورد نظر برای ذخیره سازی در هنگام ساخت دیسک اختصاص داده می شود.

به عنوان مثال اگر شما یک دیسک مجازی 25GB ایجاد کنید فایل VMDK ساخته شده بر روی هاست نیز 25GB خواهد بود.

 

  • Thick Lazy Zeroed

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

ایجاد دیسک مجازی با استفاده از فرمت Thick Lazy داده های قابل بازیابی موجود بر روی دیسک فیزیکی را ازبین نمی برد و آنها همچنان بر روی فضای اختصاص داده شده باقی خواهند ماند.

شما نمی توانید به صورت دستی یک دیسک با فرمت Thick lazy را به دیسک با فرمت Thin  تغییر دهید. برای این کار در صورتی که دو عدد Datastore دارید از قابلیت Migrate هنگامی که ماشین مجازی خاموش است و اگر یک Datastore دارید فقط با قابلیت Clone می توانید اینکار را انجام دهید.

 

  • Thick Eager Zeroed

فرمتی از نوع Thick است که از قابلیت های Clustering مانند Fault Tolerance پشتیبانی می کند.  تمام فضای مورد نیاز دیسک مجازی در هنگام ساخت دیسک به آن اختصاص داده می شود.

برخلاف فرمت Lazy ، داده های موجود بر روی دیسک فیزیکی در هنگام ساخت دیسک مجازی با فرمت Eager غیرقابل استفاده می شوند. ممکن است ساخت یک دیسک با این فرمت بیشتر از ساخت دیسک با سایر فرمتها زمان ببرد.

 

  • Thin

هنگامی که به صرفه جویی در فضای ذخیره سازی نیاز باشد از Thin استفاده می شود. در هنگام ایجاد یک دیسک با فرمت thin  شما بسته به فضای موجود در ذخیره ساز، ظرفیت دیسک را تععین می کنید، اگرچه در هنگام ساخت دیسک با این فرمت فضای استفاده شده بسیار کمتر از فضای در نظر گرفته شده می باشد.

برای مثال اگر یک دیسک با ظرفیت 25GB با فرمت Thin ایجاد کنید فضای مصرف شده در لحظه ایجاد دیسک بر روی ذخیره ساز بیش از چند MB نخواهد بود و فایل  VMDK اندازه بسیار کمتری از ظرفیت نسبت داده شده به آن را خواهد داشت. با آغاز به کار ماشین مجازی با این دیسک اندازه فایل VMDK تا رسید به حداکثر مقدار تعیین شده برای آن افزایش پیدا خواهد کرد.

  • اگر از قابلیتهای Clustering مانند Fault Tolerance می خواهید استفاده کنید، دیسک را با فرمت Thin ایجاد نکنید.
  • شما می توانید این فرمت را به صورت دستی به فرمت Thick تغییر دهید.
  • اگر فضای ذخیره ساز اشغال گردد و دیسک ساخته شده با فرمت Thin قابلیت افزایش سایز را نداشته باشد ماشین مجازی ساخته شده با آن دیسک، غیر قابل استفاده خواهد بود.

 

اضافه کردن مخازن محلی اختصاصی در لینوکس – قسمت دوم

 

در ادامه قسمت قبل مخازن ردهت را بررسی می کنیم.

ابتدا بسته های مورد نیاز را نصب می کنیم

yum install createrepo deltarpm python-deltarpm httpd

بعد بسته های مورد نظر را با در نظر گرفتن وابستگی ها و نوع معماری سیستم مورود نظر روی یک پوشه وب سرور کپی می کنیم. بهترین کار دانلود کردن بسته ها از روی یکی از مخازن اصلی ردهت هست.

mkdir /var/www/html/packages

cp /home/user/downloaded-packages/* /var/www/html/packages/

خب حالا تست کنید که وب سرور شما درست کار میکنه یه مرورگر باز کنید و آدرس زیر را وارد کنید

http://localhost/packages/

اگه لیست بسته ها نشون داده شد همه چیز درست کار میکنه

حالا که همه چیز درسته باید فایل ایندکس بسته های ردهت را ایجاد کنید

createrepo /var/www/html/packages/

الان باید فایل مخزن جدید را در لیست مخازن ردهت ایجاد کنید

yum-configure-manager –add-repo file:///var/www/html/packages/

فایل را ویرایش و این مقدار را به انتها اضافه کنید

packages03

 

 

 

حالا مخزن جدید را فعال کنید و همه چیز باید درست باشه

yum-configure-manager –enable packages

yum repolist

اضافه کردن مخازن محلی اختصاصی در لینوکس – قسمت اول

واسه یه پروژه نیاز به ایجاد مخازن لوکال بود و می خواستم این مثلا آموزش را برای یک نفر از همون پروژه آماده کنم دیدم بی فایده است (همون قضیه آب در هاون کوبیدن) وبلاگ هم که رو هواست گفتم اینجا بنویسم که این دُر و گوهر دانشم هدر نره یه موقع!

اول دبیان

ابتدا بسته های مورد نیاز را نصب می کنیم

apt‐get install build‐essential
apt‐get install apache2

بعد بسته های مورد نظر را با در نظر گرفتن وابستگی ها و نوع معماری سیستم مورود نظر روی یک پوشه وب سرور کپی می کنیم. بهترین کار دانلود کردن بسته ها از روی یکی از مخازن اصلی دبیان هست.

mkdir /var/www/packages/amd64
cp /home/user/downloaded-packages /var/www/packages/amd64

خب حالا تست کنید که وب سرور شما درست کار میکنه یه بروزر باز کنید و آدرس زیر را وارد کنید

https://localhost/packages/amd64/

اگه لیست بسته ها نشون داده شد همه چیز درست کار میکنه در غیر اینصورت احتمالا مشکل از Indexes option کانفیگ آپاچه هست (این یکی را دیگه خودتون درست کنید)

خب حالا باید کاتالوگ فایل بسته های دبیان را ایجاد کنید

packages01

  –

 حالا مخزن جدید را به لیست مخازن دبیان اضافه کنید

packages02

این خط را به انتهای فایل اضافه کنید

deb file: /var/www/packages/amd64/ /

و همه چیز درسته حالا از سرعت نصب بالای بسته ها بر روی مخازن لوکال خودتون لذت ببرید!

apt-get update

*مخازن رد هت هم در قسمت بعد..