GNU autotools-ийн товч танилцуулга

Linux, Unix хэрэглэгчдийн дунд C/C++ дээр бичигдсэн програмыг соорсоос нь хөрвүүлэн суулгах, тохируулахтай холбоотой бэрхшээл маш их тохиолддог. Харин хөгжүүлэгчдийн дунд нэг програм бичээд бүх орчин дээр ажиллахаар хийхтэй холбоотой бэрхшээл маш их өргөн байдаг. Энэ бүгд чухам юунаас болдог вэ?

Эдгээр бэрхшээлийг бага ч гэсэн шийдвэрлэдэг болоход чухал хэрэгтэйн учир GNU autotools-ийн талаар товч дурдая гэж бодлоо.

Хэрэв миний энд бичихийг алгасан энэ багажуудыг бие даан судлахаар бол дараах 2 материалыг энд байгаа дарааллаар уншаарай. Мэдээж энгийн хэрэглэгчид бол уншаад хэрэггүй. Хөгжүүлэгчид, ситемийн админ гэх мэт техникийн мэргэжлийнхэн үзэж болно.

1. http://www.lrde.epita.fr/~adl/autotools.html

2. http://sourceware.org/autobook/autobook/autobook_toc.html#SEC_Contents

Дээрх материалуудын уншихаасаа өмнө юу болох тухай товч танилцуулга өөрийн хар үгээр товч тайлбар бичие. (Албан ёсны он сар, албан газар, хүний нэрсийг мэдээж санахгүй байгаа тул нарийвчилж уншцгаана биз)

Unix-ийг түүхийн хувьд аваад үзвэл анх 1969 онд манийг төрөхөөс өмнө бичигдсэн юм гэдэг. Энэ нь далаад онуудад худалдагдах нь зөвшөөрөгдөөгүй байх үедээ их сургуулиудад маш хямд үнээр түгж байж. Ингэж байтал наяаад оноос эхлээд худалдаалах эрхийг AT&T хамгийн анхлаад ар араас нь Sun, HP эдэр гэсэн акулууд худалдаалж эхэлснээс хойш Unix-ийн хувилбар хоорондоо ялгаатай болоод салбарлаж эхлэсэн байгаа юм. Гэхдээ хооронд нэгтгэсэн стандарт огт байхгүй байлаа. Дараа нь нэгтгэх зорилготой стандартартууд гарч. Яг үнэндээ одоо ч POSIX стандарт бүрэн зангидаж чадаагүй сунжирсаар л байгаагийн зэрэгцээгээр POSIX-рүү нийцүүлж байгаа хугацааны дарааллаар нэгэн ижил бишээр бага багаар цэгцэрч байгаа.

Энгийн жишээнүүд аваад үзэхэд strndup, strnlen, strsignal гэх мэт хамгийн энгийн функцүүд ч одоо HP-UX дээр нь байхгүй, Linux дээр байгаа гэх мэт. BSD дээр memcpy байхгүй ч байх шиг. PATH_MAX гэх мэт define зарим дээр нь байхгүй эсвэл header файл нь ондоо гэх мэт зовлонтой байдал одоо ч байсаар л байгаа.

Яг энэ асуудлаас болоод л C/C++ дээр програм бичихэд нэг кодоор аль дээр нь ч ажилладаг, суулгадаг програм хялбар бичигддэггүй. Хөгжүүлэгч тухайн үед аль нэг орчинд хийдэг харин түүнийгээ бүх орчинд тест хийж чаддаггүй. Чадах байлаа ч тухайлбал FreeBSD-ийн бүх хувилбар дээр шалгаж амждаггүй. Гэтэл FreeBSD нь зарим толгой файл, функцүүд нь POSIX стандартруу хэдийд аль хувилбараасаа нийцэж эхлэсэн гэх мэт нь хянах нь төвөгтэй. Цаашлаад C/C++ хэлний хөрвүүлэгчид ч олон, тэдгээрийн хэрэглэх арга нь ялгардагаас хамаараад хөрвүүлэх үйл ажиллагаа ч ялгаатай болдог. (Ямар хөрвүүлэгчөөр ямар орчинд хөрвүүлэхээс хамаараад биелэлт хурдны асуудал ч үнэндээ яригдах нь мэдээж ч энэ тусдаа дангаараа том сэдэв болох нь мэдээж хэрэг. Жишээ нь GNU хөрвүүлэгчийн хувьд cross буюу олон орчинд ажиллах хөрвүүлэлт болон C-с бусад хэлийг хөрвүүлдэг гээд л яриа үргэлжлэх байх)

Энэ бүх бэрхшээлийг шийдэх зорилгоор GNU autotools гэж нэрлэгдэх autoconf, automake, libtool, configure гэх мэт багажууд хийгдсэн байна. Энэ багажуудын зарим гол санаанаас хэлбэл:

1. Configure гэх bourne shell скрипт нь ямар орчин дээр ажиллах гэж байгаагаас хамаарч Makefile-уудыг тухайн орчинд нь тааруулж үүсгэдэг. Гэхдээ Makefile.in гэх файлуудыг оролтондоо авч үүсгэдэг.

2. Дээрх Makefile.in -ийг аваад үзвэл мөн л нилээн том файлууд болдог тул хөгжүүлэгчид гараараа үүсгэх нь бас л цагийг авсан хар ажил болдог. Иймээс энэ файлыг үүсгэдэг automake гэсэн багаж хийгдэж. Makefile.am гэсэн бичиглэлийг маш хөнгөвчилсөн хялбар файлыг бичээд тэндээсээ automake багажаар Makefile.in үүсгэдэг.

3. Configure скрипт нь гэтэл бас л нэг ерөнхий байдлаар бичих боломжгүй буюу хөгжүүлэгчид өөрийн хэрэгцээнд нийцүүлэн configure скриптийг өөрчлөх хэрэгтэй болдог. Гэтэл энэ скрипт нь олон жилийн турш хөгжиж ирсэн маш төвөгтэй томоохон скрипт юм. Иймээс хялбар үүсгэх аргыг бас л бодож олж. configure.ac гэх бичихэд хялбар файл бичээд эндээс autoconf багажаар configure.in болон configure скриптыг үүсгэдэг.

4. Дээрх 1,2,3-т дурдсанаас гадна нэгэнт бичигдсэн програм дотор орчноос хамаарсан зүйлс байгаа эсэхийг хайдаг багаж, тэндээсээ үндэслээд configure.ac файл ямархуу байхыг таамаглах багаж, энд дурдсан багажуудыг бүгдийг нь зөв дарааллаар нэг мөр ажиллуулдаг багаж гээд өөр зөндөө олон багажууд хийгдсэн байдаг тул хэрэглэхэд ихэд хялбар болсон байдаг.

5. Хөгжүүлэлтийн компьютер дээрээ gnu autotools-ийг суулгасан байхдаа дээрх configure скрипт болон Makefile.in файлуудыг үүсгэчихвэл дараа нь аль ч OS дээр нэг л аргаар хөрвүүлж суулгах боломжтой болдог.

Ингээд бэлэн болсон соорсыг эцсийн хэрэглэгч

configure

make

make install

гээд л хөрвүүлээд суулгах асуудал. Гэвч энэ нь бүх орчин дээр санасан зоргоор явагдахгүй тул configure скриптыг ажиллуулахдаа дамжуулах олон параметрээр зохицуулах ажилууд шаардлагатай болох нь бий. Жишээ нь: /usr/include дотор толгой файлууд нь байхгүй бол хаана байгаа газарыг нь INCLUDES хувьсагчид заахаас эхлэнэ. Цаашлаад link хийхтэй холбоотой зүйлс, хэрэглэгдсэн функц байгаа байхгүйгээс хамаараад орлуулалт хийх, суулгах байрлал, суулгах директорын бүтэц гээд л зөндөө зүйлсийг зааж болдог. Бүр цаашлаад эцсийн суулгах тархацуудыг ч үүсгэж болно.

Ингээд соорсыг хөрвүүлж суулгах нь зарим орчин дээр бас л хялбар биш ажил болж хувирдаг. Хичнээн gnu autotools ашиглан gnu бүтэцтэй төсөл бичсэн байлаа ч зарим Unix дээр хөрвүүлэлт нь бас л төвөгтэй. Жишээлбэл HP-UX дээр харгалзах олон gnu төслүүд ирдэггүй. Хэдийгээр gnu төслүүдийг бүгдийг нь HP-UX дээр port хийж оруулсан depot файлууд байдаг ч гэлээ бүх багцийн хамаарлыг нь тооцож оруулах хар ажил нь хэрэглэгчийн ажил болж хувирдаг учир дутагдалтай.

Ингээд ямар орчинд суулгах хамаарлыг зохион байгуулах package management хэлбэррүү шилжиж хялбарчилсан байдаг. Дээрх gnu autotools ч гэсэн багцийн хамаарлыг шалгах боломжоор хангагдсан байдаг. Мөн gnu бүтцээр бичигдсэн төслөөс debian болон rpm багц үүсгэх нь тийм ч хэцүү биш байдаг тул package management-ийн талаар цаашид тусдаа дурдсан нь дээр байх.

Гэх мэтээр мэдээж хэрэг autotools-ийн тухай ярих нь хамрах хүрээ нилээн өргөн тул энд блогийн ганц бичлэгээр дурдахад хэцүү юм байна. Харин асуух зүйлс байвал ерөнхий болон нарийвчилсан асуулт аль ч байсан асуувал чөлөөтэй хариулах болно.

OBP: 2009 оны нээлт

2009 оны эхний Open Beer Party-г зарлаж байгаагаа энд биччихвэл яадаг юм бол? Ямар ч байсан 2009 оны 1-р сарын 14-ний Лхагва гарагийн оройны 7 цагт "Их Монгол" уушийн газар уулзацгаая. Линукс хэрэглэдэг, сонирходог, ер нь нээлттэй эхийн програм хангамжийн үзэл санааг дэмждэг хүн бүхнийг ирэхийг хүсч байна. Дөнгөж сая өөрийн блог дээрээ нэлээн дэлгэрэнгүй зарлал тавьчихсан болохоор дэлгэрэнгүй бичиж мэдээллийн давхардал үүсгэх нь илүүц боловч уу гээд http://dulmandakh.com/node/129 холбоосыг тавьчихъя. Урьж байна.

Алдагдсан партишнийг TestDisk ашиглаж сэргээх

Саяхан найзын маань Ubuntu системтэй нөөтбүк асаамагц grub нь алдаа заачихаад байгаа гэсэн сонсдов. Тэгэхээр нь мэддэг аргаа зааж өгөв:

  1. Эхлээд Ubuntu -гээ CD -нээс нь ачаална.
  2. Шэл дээр дараах командуудыг ажиллуулна.
    • # sudo grub
    • # find /boot/grub/stage1 <--Энэ командын гаралтыг дараахад ашигла.
    • # root (hd0, 1)
    • # setup (hd0)
    • # quit
  3. Restart хийнэ.
Тэгсэн ч бас л болдоггүй, setup команд дээр menu.lst олдохгүй байна гэсэн маягийн алдаа зааж байна гэв. Тэгэхээр нь үзсэн чинь үнэхээр тэгж байна. gparted нээгээд харсан чинь дискэн дээр нь ямар ч партишн харагддаггүй шүү!

Партишн сэргээдэг ямар програм байдаг юм бол гэтэл саяхан Бадаагийн блог дээрээс TestDisk гээд програм байдаг тухай уншсан санагдав. Шууд Ubuntu CD нээс бүүт хийчихсэн байгаа систем дээрээ

# sudo apt-get install testdisk

гээд үзтэл суучихаж байна(мэдээж хард дискэн дээр биш).

Ажиллууллаа.

# sudo testdisk

Ингээд Analyze хийтэл бүр өмнө нь байж байгаад устгагдсан партишнуудыг хүртэл харуулж байна. Зарим партишнууд нь давхцаж байгаа тул partition table -ийг бичихээсээ өмнө сайн нягтлах хэрэгтэй. Олсон партишнууд дээр очоод "P" дарж доторхи директорийн бүтцийг нь харж үзэв. Жинхэнэ партишнуудын доторхи нь харагдаж байхад худлаа партишнуудынх ямар нэг алдаа хэлээд харагдахгүй. Ингэж зөв партишнуудаа сонгож идэвхжүүлээд бичилт хийв.

Одоо gparted дээр партишнууд харагдаж байна. Тэгэхээр өмнөх аргаар grub -ийг сэргээж болно гэсэн үг. Ямар ч байсан найзын компьютер хуучин хэвэндээ оров. Нэг л юм өөрчлөгдсөн нь partition table. Өмнө нь нэг том Logical Partition дотор "/", "/home", "swap" partition-ууд нь байсан бол сэргээхдээ 3 -ууланг нь тус тусдаа Primary partition болгож орхижээ.

Ямар нэг байдлаар partition table чинь эвдэрсэн бол энэ програм хэрэг болох болов уу гээд орууллаа. TestDisk нь Линукс, BSD, Виндөвс, MacOS, SunOS дээр ажиллана.

Сүлжээний дискийг залгах(маунт) хялбар аргачлал

ssh түлхүүр үүсгэж, машин хооронд хуулахгүйгээр хэрэг гарсан үед нь сүлжээн дэх дундын хавтас мэтийн зүйлийг хэрхэн хялбархнаар өөрийн лаптопт маунт хийх вэ? Дахин дахин нэр, нууц үг цохихоос төвөгшөөж байна уу? Тэгвэл нь smbfs, sshfs гэсэн хоёр програмыг үзээд алдвал нь ямарав? Олон хүн ордог серверт эдгээрийг хэрэглэх нь учир дутагдалтай ч, танаас өөр хүн ашигладаггүй лаптоп мэтийн хувьд болох байх а.


Энэ хоёр багц суугаагүй бол дараахи коммандыг бичиж болох нь:
sudo apt-get install smbfs sshfs

Виндовз share-ийг маунт хийх нь
Маунт эхлэх локаль хавтсыг аль нэг эвтэйхэн газар үүсгэе:
mkdir -p /mnt/win

Маунт хийе:
mount -t smbfs -o username=me,password=pass //win-server/path/to/remote_dir /mnt/win

cd /mnt/win && ls
Виндовз share маунт хийгдсэн байгааз?

Харин маунтыг болихдоо:
(санадаггүй э, кэкэ. юу билээ? хэн нэгэн нь хэлээд өгөөрэй)

*nix маунт
Юникс маунтыг дараахи байдлаар:
sshfs me@nix-server:/path/to/remote_dir /mnt/nix

Маунтыг болихдоо:
fusermount -u /mnt/nix

Маунт хийх үй түмэн багажаас хоёрыг нь л товч санал болголоо. Одоогоор миний хэрэгцээнд болоод л байна. Та бүхэн дэлгэрүүлж судлаарай.

Power Session with Screen

Сис админууд маань Linux сервер рүүгээ SSH -ээр гаднаас нэвтрэн орж ажилладаг шүү дээ. Зарим үед нэг серверээс нөгөөх рүү том хэмжээний файл хуулах, зөөх, том архив tar файлыг задлах, архивлах зэрэг удаан үргэлжилдэг ажиллагааны үед админуудын маань холболт тасрах үе гардаг. Энэ үед өнөөх л удаан ажиллагаагаа дахиад л эхнээс нь эхлүүлнэ дээ. Өмнө нь screen коммандыг гараагүй байхад nohup коммандыг ашигладаг байсан боловч энэ нь лог файл руу тухайн үр дүнг гаргадаг болохоос тухайн ажиллагаа яг юу болж байгааг мэдэх боломжгүй байснаараа дутагдалтай байв.

Одоо тэгвэл screen коммандыг ашиглахад таны серверт орсон холболт/connection тасарсан ч үйл ажиллагаа/session нь устахгүй цааш үргэлжилсэн хэвээр л байх бөгөөд та дахин серверт холбогдон орж өмнөх session -д холбогдох боломжтой нь маш давуу байдлыг олгоно.

Суулгах:
http://www.gnu.org/software/screen/ сайтаас эх код болон бусад бинари суулгацуудыг авч болно.
Debian GNU/Linux дээр бол мэдээж apt-get install screen гээд суучихна.

Хэрэглэх:
Шинээр session үүсгэхдээ screen mc буюу screen гэх мэт. Үүний дараа SSH холболт салсан ч өмнөх комманд хэвийн цааш ажиллана.

Холбогдох:
screen -ls коммандаар ажиллах байгаа session -ууд хараад

[root@gigan root]# screen -ls
There are screens on:
31619.ttyp2.gigan (Detached)
4731.ttyp2.gigan (Detached)
2 Sockets in /tmp/screens/S-root.

screen -r 31619.ttyp2.gigan гэх мэтээр тухайн session руу дахин холбогдож орно.

Холбоосууд:
http://www.rackaid.com/resources/tips/linux-screen.cfm
http://www.gnu.org/software/screen/

Дээр үеийн бичлэг боловч уг блогт орж ирдэг хүмүүст хэрэг болж магад гээд оруулчихлаа. ;)

Vim tricks

Зарим хүмүүст хэрэгтэй байж магадгүй гэж бодоод өөрийхөө ашигладаг vim трикүүдийг бичлээ.
Табийн шилжих уртыг тодорхойлох
:set tabstop=2

Таб дарахад white space-р шилжих.
:set expandtab
Өөрөөр хэлбэл энэ тохиргоо хийсний таб дарж 4 тэмдэгтээр шилжлээ гэж бодоход энэ нь 4 удаа space товч дарсантай адил.

Олон мөрийг зэрэгцүүлэх
Shift+V-гээр нэг мөрийг сонгодог. Дээш болон доош товчоор олон мөр сонгоод > буюу shift+. < буюу shift+ , товчуудаар сонгосон мөрүүдийг баруун зүүн тийш зөөдөг.
:set shiftwidth=2 командаар шилжих уртыг заана.


Tabbed Vim
Олон файлтай ажиллах үед терминал нэмж ажиллуулалгүйгээр Vim дээр таб үүсгээд ажиллаж болно.
:tabnew file_name Хэрэв файлын нэрийг заагаагүй бол шинэ файл үүсгэдэг.
:tabnext Дараагийн таб руу шилжих
:tabprevious Өмнөх таб руу шилжих
:tabclose Таб хаах
:tabfind Табыг нэрээр нь хайх
:tabend Хамгийн сүүлчийн таб
:tabfirst Хамгийн эхний таб
гэх мэт хэдэн командыг мэдэж байхад болоод явчихна. Командын горимд tab гэж бичээд табаа дарахад табтай ажилладаг командууд гараад байна.

Colorizing Vim
Юуны өмнө Vim өнгийн файл хэрэгтэй. Гүүглдээд .vim өргөтгөлтэй файлууд татаад авчихна. .vim файлаа ~/.vim/colors хавтсанд хуулсны дараа командын мөрт
:colorscheme vim_file (Файлын нэр таб дарахад гараад ирнэ.)
:syntax on
гэж бичээрэй.

Эцэст нь vim засварлагчийг нээх бүрдээ дээрх командуудыг бичих нь ядаргаатай учир vim тохиргооны файл бичээд хадгалчихна.
sudo vi /etc/vim/vimrc
Хамгийн доор
set tabstop=2
set expandtab
set shiftwidth=2
colorscheme wombat
syntax on

Ubuntu Хэрэгцээтэй программууд

Би Windows-д баяртай гэж хэлээд нэлээд удаж байна. Саяханаас Windows ийн хэрэг гараад партишингаа янзлаад суулгах гэж мунгинаж байсан ашгүй VirtualBox ийн талаар бичлэг гарч намайг аварсан. (Энийг мэдэгүй байсан бол. Хичнээн их ажил болох байсныг мэдэхгүй.)

Та бүхний хэргэлдэг авсаархан программуудын талаар сонирхох гэсиймаа.
Эхлээд өөрийнхийгээ бичих нь зүйтэй болов уу.

1. Интернэт хөтөчөөр: Firefox 3.
Тайлбар. Мэдээж өөр юм сонгох шаардлагагүй.
Харин сүүлийн үед зарим нэг өнгө будаг ихтэй сайтуудыг үзэх үед удаан ажилдаг болчоод байгаа.


2. Хөгжим тоглуулагчаар: Rhythmbox
Тайлбар: Хамт суучидаг болхоор нь ашиглаад байгаа.

3. Бичиг баримт боловсруулагч : Openoffice 2.4
Тайлбар : Хамт суучихдаг амар л даа. Харин сүүлд нэг 3.0 хувилбарыг нь суулгаад хэдэг зураг диаргамм зурах гэсэн чинь хэд хэд унаад бие нь тааруухан байхаар нь больцон.

4. Электрон захиа шалгагч : Thunderbird
Тайлбар : Ямар ч эргэлзээгүй. Найдвартай эд. Захиануудаа нөөцлөх зөөх эд нар нь амар санагдсан.

5. RSS уншигч : Liferea
Тайлбар : Нэлээд хайсан Ubuntu ийн forum аас хайж байгаад сонгоцон. Дажгүй л эд байлээ.

6. Календар : Evolution
Тайлбар : Бас л нэлээд хайсан. Эцэст мундаг гэдэгийг нь олж мэдсэн. Мундаг эд байлээ. Tasks , Appointments зэрэг модулууд нь таалагдаад байгаа.

7. Файл харьцуулагч : Meld
Тайлбар : Олон файл нэгтгэх нийлүүлэх ажил хийдэг бол энэ багаж их зүгээр. Text Файлыг тун сайн харьцуулана. Бүхэл хавтасаар нь хүртэл шалгаж болдог.

8. Диаграмм зурах : Dia
Тайлбар : Ажиллагаа нь хөнгөхөн авсаархан. Тун дажгүй.

9. Чатын программ : Pidgin
Тайлбар : Хамт суучихдаг. Нэлээл олон төрлийн протоколуудыг дэмжидэг. Сүүлд нэг асуудалтай байх шиг байсан. Чатлаж байхад уначаад байсан. Mail notice гэсэн ийг нь хасчихсан чинь гайгүй болцон.

10. ERD зурдаг багаж : DBDesigner 4
Тайлбар : Нэлээн дээрээс ашиглаад бараг дасчихаж. DB sync хийчихдэг, хөөрхөн тайлан гаргачихдаг эд нар нь их зүгээр. Хөгжүүлэлт нь нэлээд удаан зогсонг байснаа одоо үргэлжилэж байгаан байлээ. MySQL ийн нөхдүүл үргэлжилүүлэхээр болсон юм шин байлээ. Нөхдүүл үнэтэй болгох гээд байна уу үгүй юу. Дээрх боломжуудыг нь хаацан байсан. Бас өөр зөндөө программууд бас байдаг юм байлээ.

Хөгжүүлэлтэнд ашиглууштай программууд:
Bluefish - Авсаархан программ. HTML, Script хэлүүд дээр бичлэг бол ашиглуул зүгээр.
Geany - Авсаархан text файл засварлагч.
Eclipse - Ярих юмгүй мундаг эд.
Gambas - Линукс дээрх Visual Basic. Тун авсаархан. Install эд нарыг нь бэлдээд өгнө. VB6.0 дээр бичиж байна л гэсэн үг.

Бусад ашиглууштай программууд.
Freemind - Санал бодолоо цэгцтэйхэн буулгахад тун зүгээр программ.
Stardict - Толь бичиг. Очко ахын блог дээрээс монгол баазыг нь суулгаад ашиглаарай.
KeePassX - Нууц үгүүдээ мартчихгээд байгаа бол энэ программ руу оруулчих. Амар юм байлээ.


Өөрийн ашигладаг программуудаа бичлээ. Та бүхэн өөрсдийн ашигладаг гоё гоё программууд юу байна түүнийгээ хуваалцаарай.