شناخته نشدن USB Deviceها در VirtualBox

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

من قبل‌تر برای تست رفته بودم و phpvirtualbox نصب کرده بودم ولی تنظیم‌هاش توی /etc/defaults/virtualbox/ مونده بود. همین باعث شده بود که root نصب تغییر کنه و ابزارهای شناسایی درگاه USB به جای نادرستی اشاره کنند.
این ابزار به صورت پیش‌فرض توی /usr/lib/virtualbox/ قرار دارند و فراخوانی‌شون با استفاده از udev و فایل‌های تنظیمی است که در مسیر /etc/udev/rules.d/60-vboxdrv.rules/ قرارداره فراخوانی می‌شه.

این اولین نکته بود. حتما مطمئن بشید که مسیر ابزارها که در این فایل استفاده شده درست باشه و فایل‌ها موجود باشند. به دلیلی که نمی‌دونم چیه اگه مسیر استاندارد نباشه این ابزارها نه در مسیر جدید و نه در مسیر استاندارد ایجاد نمی‌شوند.

فایل تنظیم درست udev برای virtualbox هم به صورت زیر است:

اگه این فایل را پاک کنید و Virtual Box را مجدد نصب کنید این فایل ساخته می‌شه. (پیشنهاد من اینه که اول کامل پاک کنید و بعد مجدد نصب کنید)

البته فراموش نشه قبل از هر کاری کاربر شما به گروه vboxusers اضافه شده باشه. بدون اضافه شدن شما به این گروه امکان استفاده از usb در ماشین‌های مجازی را ندارید! همینطور Oracle VM VirtualBox Extension Pack را هم حتما نصب کنید 🙂

با apt-get خراب چه کنیم؟

امروز با مشکل عجیبی برخورد کردم.
اومدم بسته ntp را نصب کنم که پیام داد به دلیل یه Dependency امکانش نیست. تعجب کردم. گفتم لابد سری قبل توی update، یکی از مخازن دانلود نشده یا خراب شده. پس رفتم سراغ apt-get update.
با اجرای دستور apt-get update ماجرا عجیب‌تر شد. تعدادی خطای Not found 404 برای بخشی از مخازن اصلی Debian روبرو شدم.
بررسی فایل sources.list و تغییر آن‌ها هم تغییری در نتیجه ایجاد نمی‌کرد.

تنظیمات ترتیب انتخاب نوع فشرده‌سازی فایل‌های Package هم راه بجایی نبرد.

دیگه داشتم ناامید می‌شدم که به خودم گفتم این که دیگه کار نمی‌کنه برم اساسی هرچی از این پکیج‌ها توی سیستم Cache شده را پاک کنم فوق فوقش لازم شد از یکی دیگه از سیستم‌ها فایل‌ها را بر می‌دارم.

اگه نمی‌دونید بدونید که فایل‌های package توی دبیان/ابونتو در مسیر /var/lib/apt/lists/ ذخیره می‌شوند و کنار کش فایل‌های deb نیستند.

بعد با دستور

همه فایل‌های پکیج مونده توی سیستم پاک کردم.

بعد دستور apt-get update را اجرا کردم. به سادگی بدون مشکل اجرا شد و مشکل حل!

شاید بد نباشه هرازگاهی (بخصوص بعد از آپدگرید نسخه مثلا از Wheezy به Jessie یا تغییر mirror مورد استفاده) این پاکسازی را انجام بدین. پیش اومده که این فایل را که پاک کردم و دوباره apt-update زدم یه تعدادی فایل که از قبل مونده بوده و آپدیت نمی‌شده به لیست آپدیت‌ها اضافه شده.

مشکل شناخت نام هاست در آپاچی

کسایی که وب‌کارند و کد وب می‌زننند زیاد پیش میاد که روی سیستم لوکال‌شون آپاچی، این وب سرویس محبوب را نصب کنند تا کارهاشون را بتونند تست کنند. خیلی وقت‌ها میشه که بعد از نصب آپاچی و موقع شروع به کار اون این پیام را می‌بینیم:apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName.
دلیلش چیه؟ دلیلش اینه که تنظیمات FDQN سیستم‌تون درست نیست و سیستم نمی‌تونه FDQN سیستم را اتوماتیک شناسایی کنه.

راه حلش چیه؟
۱. توی تنظیمات آپاچی بگین اسم کامل سرور Default چیه.
۲. تنظیمات FDQNت را درست کنید. در ساده‌ترین حالت برین توی فایل etc/hosts/ و جلوی 127.0.0.1 اسم کامل هاست‌تون (شامل اسم هاست و نام دامنه مثلا sadeq.localdomain) را اضافه کنید. دقت کنید که اسم کامل هاست حتما باید اولین اسم بعد از IP باشه!

مشکل‌های مشابه برای چه ابزارهای دیگه‌ای ممکنه رخ بده؟ Exim که به عنوان MTA پیشفرض در Debian استفاده می‌شه هم ممکنه همین مشکل را داشته باشه و موقع شروع به کار پیام بده که نمی‌تونه FDQN سیستم را شناسایی کنه. روش ۲م این مشکل را هم حل می‌کنه.

پی‌نوشت: FDQN چیه؟ FDQN مخفف Fully Qualified Domain Name است و بعضی وقت‌ها به عنوان نام مطلق هم بهش گفته می‌شه. این اسم نام هاست را به صورت یکتا در سلسه مراتب DNS سرورها مشخص می‌کنه (در اینترنت یا اینترانت). این نام از یه اسم هاست و یه دامنه تشکیل شده. (اسم دامنه می‌تونه تک بخشی مثلا localdomain یا چند بخشی مثلا sadeq.ir باشه)

استخدام برنامه‌نویس php

شرکت ما به دنبال استخدام چند تا برنامه‌نویس php است. متن آگهی استخدام اینه:

شرکت درخشان صنعت ( www.dsi.ir ) برنامه‌نویس php استخدام می‌کند
مهارت‌های لازم:
* تسلط کامل به PHP و آشنایی با مبانی شی‌گرایی
* آشنایی با بانک اطلاعات MySQL

شرایط کاری:
* ساعت کار ۸:۰۰ لغایت ۱۷:۳۰، شنبه تا چهارشنبه
* محیط کاری چالشی

نشانی محل کار در غرب تهران است.

در صورت تمایل اطلاعات خود را به همراه رزومه در فرم http://job.ebtekar.info وارد و ارسال نمایید

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

تا یادم نرفته این را هم بگم که اهل php نیستید ولی توانایی خاصی تو تولید نرم‌افزار (غیر از php) دارین حتما کامنت بزارین یا تماس بگیرید.

فعال و غیرفعال کردن کاربر در لینوکس

در صورتی که نیاز دارید دسترسی یک کاربر خاص به لینوکس را غیرفعال کنید کافی‌است دستور زیر را اجرا کنید:

و برای فعال کردن مجدد کاربر می‌توانید دستور زیر را استفاده کنید:

این دستور یک ! به ابتدای کلمه عبور کاربر مورد نظر در فایل /etc/shadow اضافه می‌‌کند یا آن را حذف می‌کند.

در صورتی که بخواهید این کار به صورت خودکار و در زمان‌های خاص انجام شود می‌توانید از crontab‌ یا at‌ استفاده کنید. crontab برای کارهای تکراری و at برای انجام کار در تاریخ/زمان مشخص!
به همین سادگی به همین خوشمزگی!

و تو چه دانی که cURL‌ چیست؟

گنو/لینوکس مجموعه‌ای از ابزارهای خیلی کوچولو اما بسیار پرقدرت است. این ابزارها به سادگی با هم ترکیب می‌شوند و نتیجه‌اش این میشه که کارهای خیلی پیچیده را می‌شه به سادگی انجام داد.
یکی از این ابزاهای خیلی خوب curl‌ است. در معرفی curl آمده: ابزاری است برای ارسال داده «از» یا «به» سرور با پروتکل‌هایی که پشتیبانی میکنه (مثلا http, https, ftp, telnet‌ و …) این ابزار به نحوی طراحی شده است که بدون نیاز به ارتباط با کاربر وظیفه‌ش را انجام بده.

یک مثال:
سایتی به نام identi.ca که یک پیاده‌سازی از ابزار StatusNet برای Microbloggin (مشابه توییتر) است به شما این اجازه را می‌ده که با استفاده از API پست خودتون را ارسال/دریافت کنید.
روش ارسال به این نحو است که باید محتوی توییت خودتون را به نشانی http://identi.ca/api/statuses/update.xml پست کنید. البته شناسه کاربری و کلمه عبور باید از طریق http authentication به سرور اعلام کنید.
برای این کار یک دستور curl کافیه:

به همین سادگی.
اگه دوست داشته باشید می‌تونید مثلا این دستور را با یه دستور دیگه قاطی کنید که نتیجه اون دستور را dent کنه. مثلا من یه اعلام ساعت با استفاده از دستور date درست کردم که با استفاده از cron سر هر ساعت گذشت زمان را به من یادآوری می‌کنه:

خوبه نه؟

درختواره در لینوکس

کسایی که از سیستم عامل DOS استفاده کردن می‌دونند که یه دستور داشت به نام tree. کار این دستور این بود که لیست فایل‌ها و فولدرها را به صورت درختی نمایش می داد. توی لینوکس برای درست کردن اینجور چیزی دو راه وجود داره:
۱. استفاده از این دستور:

خروجی دستور شبیه‌سازی tree
یک خط دستور برای ایجاد خروجی شبیه به خروجی دستور tree در dos

۲. نصب بسته tree برای نصب بسته tree در توزیع‌های debian base‌ مثل ubuntu می‌توانید از این دستور استفاده کنید:

خروجی دستور tree در ubuntu

هر دوش به خوبی کار می‌کنه. اما من دومی را به دلیل داشتن کلی امکانات اضافی (مثلا نمایش رنگی، نمایش حجم فایل‌ها و …) ترجیح می‌دم