Access Shared Folders in a VirtualBox Ubuntu Virtual Machine

دسترسی به Shared Folderهای تعریف شده در Oracle VirtualBox از Ubuntu

Shared Folderها پوشه هایی (فولدر هایی) هستند که بین PC شما و سیستم عامل مجازی که در ماشین مجازی نصب نموده اید به اشتراک گذاشته می شوند. به عنوان مثال، می خواهیم یک فایل بزرگ که اسمش X هست رو به سیستم عامل مجازیمون بفرستیم. در سیستم عامل خودمون فایل X را در پوشه ای که تعریف کردیم قرار میدیم و از اون طرف، در ماشین مجازیمون، فایل را از پوشه ای که در اونجا تعریف کردیم، برمیداریم. دقیقا مثل درایو های Share و Map شده در شبکه، که تو یکی از کامپیوتر ها، فایلی رو در پوشه Share شده میریزیم و در کامپیوتر دیگر، فایل را از پوشه Share شده بر میداریم.

شاید شما هم مثل من از Shared Folder در VMware خیلی استفاده کرده باشید. اما تعریف و استفاده از Shared Folder در Ubuntu نصب شده در Oracle VirtualBox زیاد ساده به نظر نمیرسه، برای همین مراحل کار را اینجا مینویسم.
 قبل از هر چیز این نکته رو باید عرض کنم که من از Light Ubuntu نسخه 13.04 استفاده می کنم. و در زیر نتیجه دستور lsb_release –a در Terminal اوبونتوی  من رو میبینید:
ahmad@lubuntu-vm:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 13.04
Release:    13.04
Codename:    raring

هدف اینه که من پوشه ای که در مسیر D:\Share در PC خودم دارم را در سیستم عامل مجازیم، یعنی همون LUbuntu ببینم و بتونم از اون استفاده کنم.

مراحل اشتراک گزاری:

انتخاب پوشه

برای شروع از منوی Devices ، Shared Folders رو انتخاب کرده و پوشه دلخواه خود را با نام دلخواه خود برای به اشتراک گذاری معرفی می نماییم. به عنوان مثال پوشه بنده در مسیر D:\Share قرار داره و با نام winshare معرفی نموده ام.

نصب Guest Additions

ابتدا باید بگم که Guest Additions  یک پکیج نرم افزاری هست که در زبان ساده میشه گفت که ارتباط بین سیستم عامل مجازیتون و Oracle VirtualBox رو تسهیل می بخشه و سرعت و یکپارچگی رو به ارمغان میاره. سه مورد از توانایی های Guest Additions رو برای مثال در ادامه مینویسم و شما میتونید همه توانایی های Guest Additions را در اینجا با توضیحات بخونید.
-    یکپارچگی موس و صفحه کلید بین سیستم عامل و ماشین مجازی.
-    پشتیبانی بهتر از کارت گرافیک
-    اشتراک پوشه بین سیستم عامل و ماشین مجازی
-    و ...
خوب برای نصب Guest Additions از منوی Devices ، Install Guest Additions را انتخاب می کنیم. با این عمل یک دیسک مجازی در لینوکسمان Mount خواهد شد. آدرس این دیسک در سیستم بنده به صورت زیر است:
/media/ahmad/VBOXADDITIONS_4.2.12_84980

در خط فرمان به پوشه مورد نظر رفته و فایل VBoxLinuxAdditions.run را اجرا می نماییم:
cd /media/cdrom
sudo ./ VBoxLinuxAdditions.run

خروجی دستور بالا در سیستم بنده به صورت زیر بود و همینطور که میبینید با خطا مواجه شده:
ahmad@ahmad-VirtualBox:~$ cd /media/ahmad/VBOXADDITIONS_4.2.12_84980
ahmad@ahmad-VirtualBox:/media/ahmad/VBOXADDITIONS_4.2.12_84980$ sudo ./VBOXLinuxAdditions.run
[sudo] password for ahmad:
Verifying archive integrity... All good.
Uncompressing VirtualBox 4.2.12 Guest Additions for Linux............
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox non-DKMS kernel modules ...done.
Building the VirtualBox Guest Additions kernel modules
The make utility was not found. If the following module compilation fails then
this could be the reason and you should try installing it.
The gcc utility was not found. If the following module compilation fails then
this could be the reason and you should try installing it.
Building the main Guest Additions module ...fail!
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions ...done.
Installing the Window System drivers
Installing X.Org Server 1.13 modules ...done.
Setting up the Window System to use the Guest Additions ...done.
You may need to restart the hal service and the Window System (or just restart
the guest system) to enable the Guest Additions.
Installing graphics libraries and desktop services components ...done.
ahmad@ahmad-VirtualBox:/media/ahmad/VBOXADDITIONS_4.2.12_84980$


اگر شما هم با خطای بالا برخورد کردید، میتونید بسته virtualbox-guest-x11 را نصب کنید تا خطا برطرف بشه:
sudo apt-get install virtualbox-guest-x11

البته این دستور هم در سیستم من با خطا مواجه شد و پیغام  Unable to locate package برای من نمایش داده شد. این خطا به خاطر این بود که من در هنگام نصب، اینترنت ماشین مجازی را قطع کرده بودم و Package Manager  و چند برنامه دیگه آپدیت نشده بود. پس برای برطرف کردن خطا اول از دستور sudo apt-get update استفاده کردم و بعد دستور بالا رو اجرا کردم.
خوب بعد از برطرف شدن خطا دوباره دستورات بالا را برای نصب Guest Additions اجرا می کنیم.
sudo ./VBoxLinuxAdditions.run

تخصیص دسترسی به کاربر

برای اینکه بتونیم پوشه خود را سوار (Mount) کنیم، ابتدا باید کاربری خود را در گروه vboxsf قرار بدیم. برای این کار از دستور زیر استفاده می کنیم:
sudo usermod -aG vboxsf ahmad

در این دستور به جای ahmad نام کاربری خود را وارد کنید.

سوار(Mount) کردن پوشه

برای مانت کردن پوشه ابتدا یک پوشه در مسیر /media ایجاد می نماییم و سپس پوشه خود را سوار می کنیم.
 sudo mkdir /media/vboxshared
sudo mount -t vboxsf winshare /media/vboxshared

winshare نام پوشه ای است که در ابتدای کار به پوشه خود نسبت داده ایم.
Vboxshared نام دلخواه ما برای نام پوشه در سیستم عامل اوبونتو می باشد.

حالا میتونید فایل ها و برنامه های مورد نظرتون رو در پوشه ای که در ویندوز به اشتراک گذاشتید بریزید (برای بنده همون پوشه D:\Share) و در سیستم عامل مجازیتون (اوبونتو) از مسیر /media/vboxshared اون ها رو ببینید.
\.Chehre

Migrate a project from Delphi 7 or Delphi XE2 to Delphi XE4

امروز می خواستم یک پروژه که از Delphi 7 به Delphi XE2 ارتقاء داده بودم رو به Delphi XE4 ارتقاء بدم. اما با خطای زیر مواجه شدم :
E2003 Undeclared identifier: ' ShortDateFormat'

خوب اینجور که از سایت شرکت Embarcadero معلوم هست، متغیر هایی مثل ShortDateFormat، DateSeparator، CurrencyString و ... در FormatSettings مجتمع شدن و برای استفاده از اون ها باید به شکل زیر در برنامه نوشته بشن:

FormatSettings.ShortDateFormat := 'dd/MM/yyyy';

اگر هنوز نرم افزارهایی دارید که از Delphi 7 برای برنامه نویسی اون ها استفاده می کنید و اگر در فکر ارتقاء اون ها هستید باید چند نکته رو بدونید:

  • در Delphi 2009 پشیبانی از Unicode به این زبان اضافه شده، و اگر با اون آشنایی ندارید، احتمالا به مشکل بر خواهید خورد. برای اطلاعات بیشتر یا از اینجا White Paper: Delphi and Unicode را دانلود کنید و بخونید و یا بخش اول کتاب Delphi 2009 Handbook رو مطالعه کنید. البته چند لینک مفید هم در آخر معرفی میکنم.
  • اگر از متغیر هایی مثل ShortDateFormat' استفاده می کردید، باید مثل مثال بالا ازشون استفاده کنید.
  • Namespace ها هم به دلفی اضافه شدن. مثلا به جای SysUtils باید و بهتره که بنویسید System.SysUtils و بهتر هست که از این قابلیت در کلاس ها و یونیت های خود استفاده کنید.
  • اگر در شرط هاتون از مجموعه ای از کاراکتر ها (Sets of Characters) استفاده میکردید، به خاطر اینکه قبلا کاراکتر ها Ansi بودن و هر کاراکتر نمایانگر یک بایت بوده میتونستید از شرط زیر استفاده کنید:
if C in ['a'..'z', 'A'..'Z'] then


اما الان چون کاراکتر ها WideChar تعریف شده اند، باید از دستور CharInSet به صورت زیر استفاده کنید:


if CharInSet(C, ['a'..'z', 'A'..'Z']) then

  • و در آخر اگر از کامپوننت های قدیمی استفاده می کنید، به احتمال قوی اون ها از Unicode و توابع جدیدی که به دلفی اضافه شدن، پشتیبانی  نمیکنن و اون ها رو باید ارتقاء بدید.

چند لینک درباره Unicode در دلفی:


\.Chehre

جستجو