от Beco(6-05-2006)

рейтинг (19)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Модулна поддръжка на XFS за Red Hat Enterprise Linux и дериватите му

Версия 1.0 (06 май 2006г.)

Copyright ©2006 Веселин Колев, Софийски Университет "Св. Климент Охридски"

Лиценз: CC Attribution-ShareAlike


  1. Въведение.
  2. Инсталиране на изходния код на модифицираното от Red Hat ядро.
  3. Създаване на дървото с модифицирания изходен код на ядрото.
  4. Изграждане на модула xfs.ko.
  5. Компилиране и инсталиране на инструментариума за поддръжка на XFS.

1. Въведение.

XFS е файлова система, оригинално разработена от компанията Silicon Graphics за основна файлова система в IRIX (UNIX дистрибуция на Silicon Graphics). Отличава се с висока стабилност, поддържа големи като размер дялове, големи като обем файлове и директории с голямо количество обекти (поддиректории и файлове) в тях. Лицензът, под който XFS е лицензирана е GPL.

В Linux, XFS се състои от два компонента: модул за ядрото и набор инструменти за създаване, управление и диагностика на вече изградените XFS локални файлови.

В рамките дистрибуцията Red Hat Enterprise Linux (това важи и за дериватите, като например CentOS), пакетът kernel не съдържа в себе си модула fs/xfs/xfs.ko, или казано с други думи, няма поддръжка на XFS по подразбиране в рамките на дистрибуцията. Единственият начин за прибавяне на тази поддръжка е да се компилира модула xfs.ko.

При прибавянето на тази поддръжка трябва да се използва само изходния модифициран от Red Hat код на текущата версия на ядрото. Това трябва да е постоянна практика при компилиране на модули в рамките на дистрибуцията, за да може да не се нарушават следствията от актуализацията с набора от кръпки, който Red Hat прилагат към изходния код на ядрото.

Компилацията на модула xfs.ko трябва да се извършва за всяка конкретна версия на ядрото. Примерите по-долу са базирани на използването на версия 2.6.9-34 на пакета kernel.

Не се препоръчва компилационният процес да се извършва върху системи в продукция. За нуждите на компилацията е добре да бъде използван специален хост - "изграждащ хост" ("build host"). Присъствието на компилатор и компилирането на изходен код върху системи в продукция е рисков фактор и трябва да бъде избягван винаги, когато това е възможно.

Авторът не носи отговорност за причинени щети, вследствие на използване на описаните тук действия и техники.

2. Инсталиране на изходния код на модифицираното от Red Hat ядро.

Преди да се извърши инсталацията на изходния код на модифицираното от Red Hat ядро, трябва да се провери дали са инсталирани локално в системата пакетите redhat-rpm-config и rpm-build. Това може да стане чрез команден ред от вида:

# rpm -q redhat-rpm-config rpm-build

Резултатът от изпълнението на този команден ред трябва да има вида:

# rpm -q redhat-rpm-config rpm-build
redhat-rpm-config-8.0.32.1-1
rpm-build-4.3.3-13_nonptl

ако пакетите са налични и инсталирани в системата. Ако те не са налични в системата, трябва да бъдат инсталирани. Това може да стане по два начина:

  • чрез инструмента up2date

# up2date redhat-rpm-config rpm-build

  • чрез инструмента yum (при дериватите като CentOS)

# yum install redhat-rpm-config rpm-build

Изтеглянето на изходния код на актуализираното от Red Hat ядро може да стане с инструмента up2date чрез следния команден ред, подобен на следния:

# up2date --get-source kernel

След приключването на изпълнението на горния команден ред, RPM пакетът с изходния код на модифицираното от Red Hat ядро, се намира в директория /var/spool/up2date. Инсталирането му може да стане по следния начин:

# rpm -ivh /var/spool/up2date/kernel*.src.rpm

Бинарният пакет kernel в съответната версия, спрямо която ще бъде изграждан модула xfs.ko трябва да бъде инсталиран, но не е задължително това ядро да е работното ядро към момента на изграждане на модула.

3. Създаване на дървото с модифицирания изходен код на ядрото.

След като са изпълнени стъпките в предишната точка, може да се премине към изграждането на файловото дърво, съдържащо модифицирания от Red Hat изходен код на ядрото:

# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=$(arch) kernel-2.6.spec

Вместо директното указване чрез "--target=$(arch)" на текущата за изграждащия хост архитектура, може да се използва конкретизация, например за i686, чрез указване на "--target=$i686", за x86_64, чрез указване на "--target=$x86_64" и т.н.

Следствие от изпълнението на горните команди, е създаването на файлово дърво с модифицирания от Red Hat изходен код на ядрото в директория /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.

След завършване на изгеждането на файловото дърво, всички конфигурационни файлове за дадената архитектура се намират в директория /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/configs/. Например, за архитектура i686, тя съдържа:

kernel-2.6.9-i686.config
kernel-2.6.9-i686-hugemem.config
kernel-2.6.9-i686-smp.config

За да може версията (vermagic) на модула xfs.ko да съвпада с версията на ядрото, за което той се изгражда, във файла Makefile, който се намира в директория /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/, трябва да се направи следната промяна. Намира се реда, който съдържа:

EXTRAVERSION = -prep

и се заменя с екстра версията на ядрото, за което модула xfs.ko ще бъде изграден. Например, за версия на ядрото 2.6.9-34.EL, екстра версията е 34.EL и следователно в Makefile ще бъде зададено:

EXTRAVERSION = -34.EL

Версията на ядрото може да бъде видяна чрез изпълнението на един от следните командни редове

# rpm -q kernel

# rpm -q kernel-smp

# rpm -q kernel-hugemem

в зависимост от типа на ядро.

4. Изграждане на модула xfs.ko.

Първата стъпка е изграждането на конфигурационен файл за компилацията на модула. Тази конфигурация зависи от типа на ядрото, което ще бъде изграждано:

  • базово ядро

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
# cp configs/kernel-2.6.9-i686.config .config

  • "smp" ядро

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
# cp configs/kernel-2.6.9-i686-smp.config .config

  • "hugemem" ядро

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
# cp configs/kernel-2.6.9-i686-hugemem.config .config

Следва указването на поддръжката на XFS в конфигурацията за изгражданите модули. За целта се изпълнява:

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
# make menuconfig

и следва влизане в менюто за настройки. В него има секция "File Systems". Там трябва да се избере поддръжката на XFS по следния начин:

XFS filesystem support
[ ] Realtime support (EXPERIMENTAL)
[*] Quota support
[*] Security Label support
[*] POSIX ACL support

След запазването на новата конфигурация следва процеса на компилация:

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
# make modules_prepare
# make SUBDIRS=fs/xfs modules

След успешното приключване на компилацията следва процеса на инсталация:

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
# make SUBDIRS=fs/xfs modules_install

По този начин в директория /lib/modules/"kernel-version"/kernel/fs/xfs е наличен модула xfs.ko. Последната стъпка, която трябва да се извърши е изграждането на зависимостите между модулите на ядрото:

# depmod

или конкретно за различните типове ядра (пример с kernel-2.6.9-34.EL):
  • базово ядро

# depmod 2.6.9-34.EL

  • "smp" ядро

# depmod 2.6.9-34.ELsmp

  • "hugemem" ядро

# depmod 2.6.9-34.ELhugemem

За да се провери дали модулът се зарежда и отзарежда успешно, може да се изпълнят следните командни редове:

# modprobe xfs
# rmmod xfs

5. Компилиране и инсталиране на инструментариума за поддръжка на XFS.

Инструментариумът за поддръжка на XFS служи за изграждане, редактиране и др. дейности свързани с дискови дялове, форматирани за работа с XFS. Той може да бъде изтеглен като RPM пакети с изходен код от адрес:

ftp://oss.sgi.com/projects/xfs/cmd_rpms/SRPMS/

Обикновено в този директория винаги се намира текущата (последна версия) на инструментите за поддръжа на XFS. За примера, пакетите във версиите им налични към датата на написване на този документ са следните:

acl-2.2.34-1.src.rpm
attr-2.4.28-0.src.rpm
dmapi-2.2.3-1.src.rpm
xfsdump-2.2.33-1.src.rpm
xfsprogs-2.7.11-1.src.rpm

В рамките на Red Hat Enterprise Linux и дериватите му има налични пакети acl и attr, следователно необходимите за изтегляне пакети с изходен код са само:

dmapi-2.2.3-1.src.rpm
xfsdump-2.2.33-1.src.rpm
xfsprogs-2.7.11-1.src.rpm

Всички тези файлове се копират на локалния диск в определена за целта директория (например /home/install) и след това се инсталират с помощта на инструмента rpm:

# rpm -ihv /home/install/dmapi-2.2.1-1.src.rpm
# rpm -ihv /home/install/xfsdump-2.2.30-1.src.rpm
# rpm -ihv /home/install/xfsprogs-2.7.3-1.src.rpm

Първо се компилира изходния код на xfsprogs:

# cd /usr/src/redhat/SPECS
# rpmbuild -ba xfsprogs.spec

След успешното приключване на компилацията и пакетирането, иницирани от rpmbuild по-горе, се получават следните RPM пакети:

/usr/src/redhat/RPMS/i386/xfsprogs-2.7.11-1.i386.rpm
/usr/src/redhat/RPMS/i386/xfsprogs-devel-2.7.11-1.i386.rpm
/usr/src/redhat/RPMS/i386/xfsprogs-debuginfo-2.7.11-1.i386.rpm

За да продължи по-нататък изграждането на останалите пакети, се налага да се инсталират RPM пакетите xfsprogs и xfsprogs-devel:

# rpm -ihv /usr/src/redhat/RPMS/i386/xfsprogs-2.7.11-1.i386.rpm /usr/src/redhat/RPMS/i386/xfsprogs-devel-2.7.11-1.i386.rpm

Следва изграждането на пакета с изходен код dmapi:

# cd /usr/src/redhat/SPECS
# rpmbuild -ba dmapi.spec

Като резултат от компилирането и пакетирането ще се получат следните RPM пакети:

/usr/src/redhat/RPMS/i386/dmapi-2.2.3-1.i386.rpm
/usr/src/redhat/RPMS/i386/dmapi-devel-2.2.3-1.i386.rpm
/usr/src/redhat/RPMS/i386/dmapi-debuginfo-2.2.3-1.i386.rpm

от които задължително трябва да се инсталират пакетите dmapi и dmapi-devel:

# rpm -ihv /usr/src/redhat/RPMS/i386/dmapi-devel-2.2.3-1.i386.rpm /usr/src/redhat/RPMS/i386/dmapi-2.2.3-1.i386.rpm

С цел компилиране на пакета с изходен код xfsdump, трябва да се извърши инсталацията на пакета libattr-devel:

  • чрез up2date:

# up2date libattr-devel

  • чрез yum:

# yum install libattr-devel

След успешното инсталиране на libattr-devel, може да се пристъпки към компилирането на xfsdump:

# cd /usr/src/redhat/SPECS
# rpmbuild -ba xfsdump.spec

При успешно привършване на компилацията и пакетирането, ще са налични следните RPM пакети:

/usr/src/redhat/RPMS/i386/xfsdump-2.2.33-1.i386.rpm
/usr/src/redhat/RPMS/i386/xfsdump-debuginfo-2.2.33-1.i386.rpm

За улеснение, получените пакети от показаните тук етапи на компилация, могат да бъдат поставени в yum форматно хранилище, което да се изгради с инструмента createrepo:

# mkdir -p /home/rhel/xfs-repo
# cd /home/rhel/xfs-repo
# cp /usr/src/redhat/RPMS/i386/{dmapi*,xfs*} .
# createrepo .

RPM пакетът createrepo може да бъде намерен в колекцията от пакети на Dag Wieers (http://apt.sw.be/).



<< Четци на карти на Texas Instruments | Работа с изгледи в BIND9 >>