در این قسمت به بررسی تفاوتهای موجود بین FreeBSD و لینوکس میپردازیم.
محتویات
پوسته
افرادی که از لینوکس به FreeBSD مهاجرت میکنند، معمولاً از اینکه Bash پوسته پیش فرض FreeBSD نیست متعجب میشوند. در حقیقت Bash حتی در نصبِ پیش فرض هم وجود ندارد. در عوض، FreeBSD از پوسته ای به نام tcsh به عنوان پوسته پیش فرض استفاده میکند. هرچند شما میتوانید Bash و یا دیگر پوستههای مورد علاقه خود را از طریق پورت های FreeBSD نصب کنید.
اگر پوسته دیگری را نصب کردهاید، میتوانید با استفاده از دستور chsh پوسته پیشفرض کاربران را تغییر داده و پوسته مورد علاقه خود را به عنوان پوسته پیشفرض انتخاب کنید. با این حال توصیه میشود که پوسته پیشفرض کاربر root را تغییر ندهید. به این دلیل که پوستههایی که در نصب پیش فرض وجود ندارند، معمولاً در مسیرهای /usr/local/bin یا /usr/bin نصب میشوند. بنابراین در صورت بروز یک مشکل ممکن است این فایلسیستمها مونت نشوند و دسترسی به آنها ممکن نباشد. در این صورت، کاربر root به پوسته پیش فرض خودش دسترسی نخواهد داشت و قادر به وارد شدن به سیستم نخواهد بود. اگر واقعاً میخواهید پوسته پیش فرض کاربر root را تغییر دهید، یک کاربر root دوم به نام toor برای شما در نظر گرفته شده است. کاربر toor دقیقاً همان امتیازهای کاربر root را دارد و حتی UID آن نیز، است. بنابراین شما با خیال راحت میتوانید پوسته پیش فرض کاربر toor را تغییر داده و بدون اینکه نگران چیزی باشید از این کاربر برای انجام کارهای مدیریتی سیستم استفاده کنید. به صورت پیش فرض نمیتوان به عنوان کاربر toor به سیستم وارد شد؛ چون هیچ کلمه عبوری برای آن تعیین نشده است. بنابراین در صورتی که مایل به استفاده از این کاربر هستید، ابتدا باید با استفاده از کاربر root یک کلمه عبور دلخواه برای toor تعیین کنید.
نصب نرمافزارها
علاوه بر روش سنتی نصب نرمافزارها در UNIX (دانلود کدهای منبع، استخراج، ویرایش کدهای منبع و کامپایل)، FreeBSD دو روش برای نصب نرمافزارها به شما پیشنهاد میکند: بسته های باینری و پورتهای FreeBSD. لیست کاملی از بستهها و پورتهای موجود را میتوانید در اینجا مشاهده کنید.
بستهها
بستهها برنامههای از قبل کامپایل شده هستند. معادل بستهها در سیستمعاملهای مبتنی بر Debian GNU/Linux فایلهای .deb و در سیستمعاملهای مبتنی بر Red Hat فایلهای .rpm میباشد. بستهها با استفاده از دستور pkg_add نصب میشوند. به عنوان مثال دستور زیر وب سرور آپاچی را نصب خواهد کرد.
# pkg_add /tmp/apache-2.2.6_2.tbz
استفاده از گزینه -r باعث میشود تا pkg_add بسته مورد نظر به همراه تمام وابستگیهای آن را به صورت خودکار دانلود کرده و سپس نصب کند.
# pkg_add -r apache22 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache22.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8_1.tbz... Done. [snip] To run apache www server from startup, add apache22_enable="YES" in your /etc/rc.conf. Extra options can be found in startup script.
پورتها
دومین روش برای نصب نرمافزارها در FreeBSD استفاده از مجموعه پورت های FreeBSD است. در این روش برنامهها ابتدا از کدهای منبع کامپایل شده و سپس نصب میشوند. بنابراین این روش از سرعت کمتری برخوردار است اما به شما این امکان را میدهد تا برنامهها را سفارشی کنید. در هنگام نصب یک نرمافزار از طریق پورتها، سیستم کدهای منبع را دریافت کرده، وصلهها یا patch ها را بر روی آن اعمال میکند، سپس برنامه کامپایل شده و در آخر نصب میشود. (همین طور این کارها برای تمامی وابستگیها نیز انجام میشود.)
مجموعه پورت های FreeBSD که گاهی اوقات درخت پورت ها هم خوانده میشود در مسیر /usr/ports قرار دارد. برای نصب یک برنامه از طریق پورت ها میتوان به صورت زیر عمل کرد:
# cd /usr/ports/www/apache22 # make install clean
لطفا برای کسب اطلاعات بیشتر، نصب برنامهها از طریق Ports Collection را ببینید.
سطوح اجرایی
در FreeBSD سطوح اجرایی و فایل /etc/inittab وجود ندارند. در عوض راهاندازی سیستم توسط ابزار rc کنترل میشود. اسکریپت /etc/rc با خواندن فایلهای /etc/defaults/rc.conf و /etc/rc.conf تعیین میکند که چه سرویس هایی باید اجرا شوند. سپس این سرویس ها با استفاده از اسکریپتهای آغازینی که در مسیرهای /etc/rc.d یا /usr/local/etc/rc.d قرار گرفتهاند اجرا خواهند شد. این اسکریپتها شبیه به اسکریپتهای موجود در /etc/init.d در لینوکس هستند.
چرا اسکریپتهای آغازین در دو مسیر متفاوت قرار دارند؟
اسکریپهایی که در مسیر /etc/rc.d قرار دارند، بخشی از “پایه” سیستم هستند. (cron، sshd، syslog). اما اسکریپت هایی که در مسیر /usr/local/etc/rc.d قرار دارند، مربوط به برنامههای نصب شده توسط کاربر (مانند آپاچی، اسکوئید و …) هستند.
چه فرقی بین سیستم پایه و برنامههای نصب شده توسط کاربر وجود دارد؟
FreeBSD به عنوان یک سیستمعامل کامل توسعه داده میشود. به عبارت دیگر، هسته سیستمعامل، کتابخانههای سیستم و ابزارهای سطح کاربر مانند (ls، cat، cp و غیره) همگی با هم توسعه داده شده و انتشار مییابند. به همه این اجزا سیستم پایه گفته میشود. برنامههای نصب شده توسط کاربر برنامههایی هستند که جزء سیستم پایه به حساب نمیآیند. برنامههایی مانند Apache, X11, Mozilla Firefox از این قبیل هستند. این برنامهها معمولاً از طریق پورت ها یا بستههای FreeBSD نصب میشوند. برای مجزا کردن این برنامهها از سیستم پایه، آنها در مسیر /usr/local نصب میشوند. بنابراین باینریهای مربوط به این برنامهها در مسیر /usr/local/bin و فایلهای پیکربندی این برنامهها در مسیر /usr/local/etc قرار دارد.
برای فعال کردن سرویسها میتوان خطی به صورت ServiceName_enable=”YES” را به فایل /etc/rc.conf اضافه کرد. تنظیمات پیش فرض سیستم در مسیر /etc/defaults/rc.conf قرار دارد که می توان از طریق فایل /etc/rc.conf این تنظیمات را بی اثر کرد. همیشه بعد از نصب برنامهای جدید، مستندات آن برنامه را بررسی کرده تا با نحوه فعال کردن سرویسهای مربوط به آن آشنا شوید.
به عنوان مثال اضافه کردن خطوط زیر سرویس های SSH و آپاچی را فعال خواهد کرد. این سرویسها همیشه در هنگام شروع به کار سیستم به صورت خودکار اجرا خواهند شد.
# enable SSHD sshd_enable="YES" # enable Apache with SSL apache22_enable="YES" apache22_flags="-DSSL"
تنظیمات شبکه
لینوکس کارتهای شبکه را به صورت ethX نام گذاری میکند. مثلاً اسامی eth1 به اولین کارت شبکه و eth2 به دومین کارت شبکه اطلاق میشود. اما FreeBSD از نام درایور کارت شبکه به همراه یک عدد برای نامگذاری کارتهای شبکه استفاده میکند.
% ifconfig em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=b<RXCSUM,TXCSUM,VLAN_MTU> inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255 ether 00:50:56:a7:70:b2 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=b<RXCSUM,TXCSUM,VLAN_MTU> inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255 ether 00:50:56:a7:03:2b media: Ethernet autoselect (1000baseTX <full-duplex>) status: active
تنظیمات IP
برای اختصاص دادن یک آدرس IP به یک کارت شبکه میتوان از دستور ifconfig استفاده کرد. با این حال این تنظیمات موقت بوده و با راهاندازی مجدد سیستم از بین میروند. برای دائمی کردن این تنظیمات باید آنها را در فایل /etc/rc.conf وارد کرد. در مثال زیر نحوه تنظیم hostname، آدرس IP و default gateway نشان داده شده است:
hostname="server1.example.com" ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0" defaultrouter="10.10.10.1"
همین طور برای تنظیم با استفاده از یک DHCP Server میتوان به صورت زیر عمل کرد:
hostname="server1.example.com" ifconfig_em0="DHCP"
دیواره آتش
مشابه iptables در لینوکس، FreeBSD هم یک دیواره آتش سطح کرنل ارائه کرده است. عملاً سه دیواره آتش در FreeBSD وجود دارد:
IPFW PF IPF
۱. IPFW
IPFW یا IPFIREWALL دیواره آتشی است که توسط توسعه دهندگان FreeBSD توسعه داده شده و نگه داری میشود. IPFW میتواند با dummynet عجین شده و قابلیت Traffic Shaping و شبیهسازی انواع مختلف اتصالات شبکه را فراهم کند. یک مثال برای اجازه دادن به ترافیک SSH ورودی:
ipfw add allow tcp from any to me 22 in via $ext_if
۲. IPFILTER
IPFILTER دیواره آتشی است که توسط Darren Reed توسعه داده شده است. این فایروال مختص FreeBSD نبوده و به چند سیستمعامل مانند NetBSD ،OpenBSD ،Solaris و … پورت شده است.
یک مثال برای اجازه دادن به ترافیک SSH ورودی:
pass in on $ext_if proto tcp from any to any port = 22
۳. PF
آخرین دیواره آتش PF نام دارد که توسط پروٓه OpenBSD توسعه داده میشود. PF به عنوان جایگزینی برای IPFILTER ساخته شد. به همین دلیل سینتکس PF شباهت زیادی به IPFILTER دارد. PF هم میةواند با altq عجین شده تا قابلیتهای QoS را فراهم کند.
یک مثال برای اجازه دادن به ترافیک SSH ورودی:
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
به روزرسانی FreeBSD
سه روش برای به روزرسانی FreeBSD وجود دارد: از طریق کدهای منبع، به روش باینری و از طریق دیسکهای نصب.
به روزرسانی از کدهای منبع پیچیدهترین روش است اما انعطافپذیری بسیار زیادی دارد. در این روش ابتدا باید کدهای منبع FreeBSD را از یک سرور Subversion دریافت کرده و سپس سیستمعامل را از روی این کدها کامپایل کنید.
بروزرسانی به روش باینری همانند استفاده از yum و apt-get در سیستمعامل لینوکس است. دستور freebsd-update آخرین به روزرسانیها را دریافت کرده و سپس نصب میکند. در این روش میتوان با استفاده از cron به روزرسانی سیستم را زمانبندی کرد.
اگر از cron برای به روزرسانی سیستم استفاده میکنید، لطفاً در فایل crontab خود از دستور freebsd-update cron استفاده کنید تا احتمال اینکه کامپیوترهای زیادی بخواهند به صورت هم زمان عمل به روزرسانی را انجام دهند کاهش یابد.
۰ ۳ * * * root /usr/sbin/freebsd-update cron
آخرین روش به روزرسانی، به روزرسانی از طریق دیسکهای نصب است. کافی است سیستم خود را از روی دیسک نصب بوت کرده و گزینه update را انتخاب کنید.
Procfs
اگر کاربر لینوکس بودید، ممکن است برای فهمیدن اینکه آیا IP Forwarding فعال است یا نه فایل /proc/sys/net/ipv4/ip_forward را نگاه میکردید. در FreeBSD برای فهمیدن این مطلب و همین طور دیگر تنظیمات سیستم باید از دستور sysctl استفاده کنید. چون که procfs در نسخه های فعلی FreeBSD وجود ندارد. (هر چند دستور sysctl در لینوکس هم موجود است)
در مثال IP Forwarding، باید از دستور زیر برای تعیین کردن اینکه آیا IP Forwarding فعال است یا نه استفاده کنید:
% sysctl net.inet.ip.forwarding net.inet.ip.forwarding: 0
از گزینه -a میتوان برای نمایش لیستی از تمام تنظیمات سیستم استفاده کرد:
% sysctl -a kern.ostype: FreeBSD kern.osrelease: 6.2-RELEASE-p9 kern.osrevision: 199506 kern.version: FreeBSD 6.2-RELEASE-p9 #0: Thu Nov 29 04:07:33 UTC 2007 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC kern.maxvnodes: 17517 kern.maxproc: 1988 kern.maxfiles: 3976 kern.argmax: 262144 kern.securelevel: -1 kern.hostname: server1 kern.hostid: 0 kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 } kern.posix1version: 200112 ...
به این نکته توجه داشته باشید که برخی از مقادیر و پارامترهای sysctl به صورت فقط خواندنی بوده و قابل تغییر نیستند.
در بعضی موارد احتیاج به procfs دارید. مثلاً در هنگام اجرای برنامههای قدیمی، برای استفاده از truss، برای ردیابی فراخونهای سیستمی و اجرای باینریهای لینوکس (هر چند مورد آخر از procfs مخصوص به خود با نام linprocfs استفاده میکند.)
برای مونت کردن procfs خط زیر را به فایل/etc/fstab اضافه کنید:
proc /proc procfs rw,noauto 0 0
دستورات رایج
دستور لینوکس | معادل FreeBSD | کاربرد |
---|---|---|
yum install package / apt-get install package | pkg_add -r package | نصب یک نرمافزار از یک مخزن راه دور |
rpm -ivh package / dpkg -i package | pkg_add -v package | نصب یک بسته به صورت محلی |
rpm -qa / dpkg -l | pkg_info | نمایش تمام بستهّای نصب شده |
دستور لینوکس | معادل FreeBSD | کاربرد |
---|---|---|
lspci | pciconf | لیست دستگاههای PCI |
lsmod | kldstat | لیست ماژولهای فعال در هسته |
modprobe | kldload / kldunload | بارگذاری و باراندازی ماژولها در هسته |
strace | truss | ردیابی فراخوانهای سیستمی |
نکات پایانی
- هسته هر دو سیستمعامل به صورت ماژولار طراحی شده است. اما دستوراتی که برای نمایش/اضافه/حذف ماژولها استفاده میشود، متفاوت است. برای بارگذاری ماژول ها از kldload و برای حذف ماژول از kldunload و همین طور برای نمایش لیست ماژول های فعال در هسته از kldstat استفاده کنید.
- برای اینکه بتوانید با استفاده از دستور su به عنوان کاربر root وارد سیستم شوید، باید عضو گروهی به نام wheel باشید. از آنجا که security/sudo به صورت پیش فرض نصب نیست و کاربر root هم به صورت پیش فرض مجاز به ورود از طریق ssh نیست، شما باید عضو این گروه باشید.
- فایل سیستمهای مورد استفاده این دو سیستمعامل هم متفاوت است. لینوکس از فایلسیستمهای EXT3, EXT4 و … استفاده میکند اما FreeBSD از سیستمفایل UFS استفاده میکند.
- در FreeBSD فایلی به نام /etc/mtab وجود ندارد. برای دیدن لیست فایلسیستمهایی که در حال حاضر مونت شدهاند از mount و df استفاده کنید.
- ftp در نصب پیش فرض وجود ندارد. در عوض از fetch استفاده کنید.