راه‌اندازی کلاینت Perl به همراه mariadba 10.1 در Debian 9

به نظر می‌رسه نصب client mysql/mariadb برای perl (DBD::mysql) در نسخه ۹ یا stretch دبیان (شاید نسخه‌های دیگه و توزیع‌های دیگه هم) مشکل دارد. نصب بسته libdbd-mysql-perl با استفاده از apt کار نمی‌کنه و وقتی ماژول mysql می‌خواد لود بشه پیام می‌ده که نمی‌تونه mariadbclient.so.18 را نمی‌تونه پیدا کنه.

برای بررسی بیشتر:

نصب هیچ پکیجی قرار نیست این مشکل را حل کنه. راهکار اینه که کلاینت mysql پرل را از سورس نصب کنید. برای نصبش اول فایلش را دانلود کنید: http://search.cpan.org/~michielb/DBD-mysql-4.042/lib/DBD/mysql.pm

در ضمن مطمئن بشید بسته libmariadbclient-dev (برای استفاده از mysql_config) و build-essential (برای استفاده از make) روی سیستم نصبه. فایل فشرده را باز کنید و برید داخلش.

بعد دستورات زیر را اجرا کنید:

 

مشکل حل شده است! و می‌تونید از mariadb توی perl استفاده کنید.

کد تست:

 

نکته: در صورتی که کاربر فعلی دسترسی به دیتابیس test در mariadb نداره، می‌تونید با پارامترهای در دستور زیر perl Makefile.PL یه دیتابیس و یوزر پسورد برای تست کردن در زمان build یا تست مشخص کنید:

  • testdb نام دیتابیس تست
  • testuser نام کاربر برای اتصال به mariadb
  • testpassowrd رمز کاربر برای اتصال به mariadb
  • پارامترهای testhost و testport هم برای مشخص کردن سرور mariadba

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

یه تنظیم اضافه شده است که امکان import کردن module از فولدر فعلی وجود نداشته باشد. برای رفع مشکل اسکریپ‌های مشکل‌دار می‌شه این تنظیم را غیرفعال کرد. توجه داشته باشید این تغییر به دلایل امنیتی انجام شده است پس تا مجبور نشدین تغییر ندین:

استفاده از پارامتر I جلوی perl در خط فرمان هم می‌تونه این مشکل را موقت حل کنه.

 

شناخته نشدن 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 زدم یه تعدادی فایل که از قبل مونده بوده و آپدیت نمی‌شده به لیست آپدیت‌ها اضافه شده.