Вопросы и ответы
Вопросы и ответы Q: Как узнать последнюю версию какого-либо софта и url его домашней странички? Мне нужна некая фича, но я не знаю, как называется соответствующий софт, что делать?
A: Попробуйте зайти на сайт http://www.freshmeat.net . Там есть все. А на http://www.opennet.ru есть целый комплекс средств для отслеживания версий софта ( http://www.opennet.ru/lastsoft/ — автоматическая система отслеживания, http://www.opennet.ru/news/ — ручная).
Q: Я достал новую версию ядра для Linux. Как мне произвести его компиляцию?
A: Для начала надо установить исходные тексты ядра. Если это пакет, типа rpm, то просто дать команду
rpm -i имя_пакета_с_файлами_ядра
Если же это просто tar.gz архив, то используем архиватор tar:
tar cvfz имя_пакета_с_файлами_ядра /usr/src
После этого надо убедиться, что ссылка /usr/src/linux показывает на каталог с установленными исходниками ядра, иначе подправить ссылку. Далее переходим в каталог /usr/src/linux.
Опции, с которыми компилируется ядро (тип процессора, драйверы, которые нужно включить (возможно в виде модулей) и еще сотни других вещей), задаются в файле /usr/src/linux/.config. Так вот, желательно не создавать его самому с нуля (особенно, если вы собираете ядро первый/второй/третий раз), а взять за основу .config, с которым было собрано старое, работающее ядро. Его можно взять из каталога с исходными текстами старого ядра, если этот файл там есть. Еще есть вероятность, что в каталоге с исходными текстами есть файл .oldconfig, который также содержит опции ядра. Этот файл используется, когда есть .config от другой (обычно, более старой) версии ядра и нужно просто получить точно такой же для текущей (возможно, ответив на пару вопросов о тех фичах, которых в старом не было), не отвечая заново на все три сотни вопросов. При этом вам, прежде всего, надо выдать команду make oldconfig. Затем выдайте make menuconfig и исправьте те опции, ради которых вы собственно и решили пересобрать ядро.
Если вы используете Red Hat или Red Hat-based дистрибутив и хотите воспользоваться теми .config, c помощью которых были собраны ядра в этом дистрибутиве, то возьмите их из пакета kernel-sources-*.i386.rpm на компакт-диске с дистрибутивом. Они лежат в каталоге /usr/src/linux/configs/ относительно самого пакета.
Затем даем следующие команды:
— make clean — эта команда удаляет все старые откомпилированные файлы, т.е. производит очистку. Команда нужна в том случае, когда вы уже компилировали ядро ранее;
— make dep — эта команда проверит все зависимости между файлами и создаст необходимые для компиляции ядра файлы;
— make bzImage — данная команда откомпилирует и создаст само ядро;
— make modules — эта команда создаст модули ядра;
Если у вас раньше стояла эта же версия ядра, то удалите старые модули от этого ядра (/lib/modules/версия). Команда make modules_install установит новые модули ядра.
Файл /usr/src/linux/arch/i386/boot/bzImage и есть свежесобранное ядро. Его теперь можно проинсталлировать на место старого. Хотя лучше сначала попробовать, работает ли оно. Нужно добавить в lilo.conf еще один выбор — например, linux.test, — который берет ядро прямо из /usr/src/linux/arch/i386/boot/bzImage.
Тем, кто отважился на сборку ядра лично под себя, советую обратить внимание на следующие факты:
— В начале ядерного Makefile (/usr/src/linux/Makefile) есть переменная EXTRAVERSION. Используя ее, можно получать ядра одной и той же версии, но с названиями, отличающимися суффиксом (например, 2.4.8-20 и 2.4.8-vasya). Это хорошо, поскольку позволяет сохранить экземпляр ядра, который заведомо умеет грузиться. Родное ядро, с которым ставилась система, лучше сохранить на случай всяких неприятностей. Hадо только не забыть добавить дополнительную запись в /etc/lilo.conf (достаточно иметь всего 2 записи: на родное ядро и на свежесобранное).
— В Red Hat и Red Hat-based дистрибутивах в /usr/src/linux для правильной установки есть команды make install и make modules_install. Ядро и модули копируются в нужное место и правильно настраиваются символические ссылки.
Причем, что приятно, это относится не только к ядрам, полученным в виде .src.rpm, но и если просто взять ядро с ftp.kernel.org, все заработает (эту правильную установку осуществляет редхатовский скрипт /sbin/installkernel, входящий в пакет с фирменным ядром редхата, поэтому перед make install желательно убедиться в наличии этого скрипта).
— Когда ядро собирается в дереве, в котором оно уже собиралось, очень рекомендуется после выполнять make clean. Во всяком случае, если какие-то части ядра были переселены в модули или обратно, надо делать это обязательно, иначе есть шанс собрать неправильное (не работающее) ядро.
Q: Я прочитал вашу статью про права доступа к файлам и попробовал устанавливать права сам. У меня возник вопрос: зачем нужны странные права доступа на каталогах, например, sticky или setgid bit?
A: Sticky bit (chmod +t) на каталоге означает, что файлы в этом каталоге могут стирать только их владельцы или суперпользователь. Обычно на /tmp и /var/tmp этот бит включен. Setgid бит (chmod +g) на каталоге означает, что файлы, созданные в этом каталоге, будут иметь ту же группу-владельца, что и сам этот каталог. Если в setgid-каталоге создаются другие каталоги, то они также будут иметь setgid-бит.
По словам Джея Бернстайна, "есть три метода задания групп-владельцев файлов: BSD-шный, бесполезный и SVR4-й. При BSD-шном методе файлы всегда получают ту же группу-владельца, что и каталог, в котором они были созданы. Это очень удобно с точки зрения администратора.
При бесполезном методе новые файлы принадлежат основной группе, на правах которой выполняется текущий процесс. Этот случай моментально приводит к настоящему кошмару. SVR4-й метод почти совпадает с бесполезным, но если на каталоге есть setgid-бит, то включается BSD-шный метод."
Заметьте, что с помощью флага монтирования bsdgroups можно включить BSD-шный метод работы с группами-владельцами. Подробности смотрите в руководстве по mount.
Q: Если не трудно, то объясните разницу между X-Server и X-Client.
A: В системе X Window понятия "клиент" и "сервер" кажутся перепутанными. В действительности, никакого противоречия тут нет. Весь вопрос лишь в том, что такое "cервер"? Возьмем, например, print-server или file-server. Это какое-то устройство для коллективного использования ресурса. Например, единственный print-server на организацию.
Так вот, лет 30 назад комплект из цветного дисплея и памяти на 256К был страшно дорогой игрушкой и обслуживал кучу программ.
Это и был display-server или, в комплекте с мышью и клавиатурой, X-server. Таким образом, X-server — это программа для управления Video-подсистемой, мышью и клавиатурой, выполняющая команды типа "нарисовать красную точку" или "вывести букву А фонтом Arial".
Существует куча X-Server-ов: свободные XFree86, коммерческие AcceleratedX, под MS Windows: eXceed, X-Win, под VAX VMS и даже в виде отдельных железок c дисплеем: NCD, Tatung (их еще называют X- Terminal).
Таким образом, пользовательские программы, например, Netscape — это "X-клиенты", которые обращаются к "X-серверу" для отображения и ввода. Связь между X-сервером и X-клиентом может быть по TCP/IP, по Unix-Socket, по IPX или даже по COM-порту. Поддержка конкретных способов связи зависит от реализации серверов и клиентских библиотек, например XFree знает только про первые два способа и еще DECNet.
Всякая X-программа ("X-клиент") сначала должна установить соединение с X-сервером. Его местонахождение X-клиент узнает через переменную окружения DISPLAY= или ключ в командной строке. Один X-сервер может обслуживать множество программ, работающих на разных хостах. Как наиболее простой случай, все они — и X-сервер, и Х-программы — работают на одном и том же компьютере.
Обычные, "консольные" (алфавитно-цифровые) программы тоже можно запустить под X, через эмулятор терминала (например, xterm, rxvt, eterm и другие). Это специальная X-программа, которая, с одной стороны, работает как эмулятор терминала, отрисовывает символы и отрабатывает ESC-последовательности, а с другой — представляется как обычный терминальный порт (через псевдотерминалы ptyXX).
Cледует заметить, что с точки зрения системы нет разницы между иксовыми и обычными программами. И те и другие используют один и тот же набор системных вызовов. Разница же упрятана в библиотеку XLib, с которой слинкованы иксовые программы, — именно она устанавливает связь с X сервером, посылает ему команды, принимает ответы и т.д. Кроме того, некоторые программы (emacs, например) могут работать как через X сервер, так и без него (через обычный терминал).
Очень часто на почту приходят вопросы типа "чем посмотреть/сыграть". Вот список наиболее подходящих для этого, на мой взгляд, программ:
— для AU, WAV, MP3 пригодятся консольные программы sox, mpg123, для X-Window подойдет программа xmms — полный аналог WinAmp, только круче;)
— для MIDI — playmidi, timidity;
— для AVI, MOV — xanim, DivX ( http://divx.euro.ru ) — не настолько стабилен, как xanim, но поддерживает больше форматов и развивается. Рекомендуется пользователям, имеющим Windows, так как использует от них некоторые dll;
— для MPEG, VideoCD — mtv, mtvp ( http://www.mpegtv.com ), xreadvcd +mtvp, smpeg ( http://www.lokigames.com/development/ ), mpeglib ( http://mpeglib.sourceforge.net );
— для JPEG, TIFF, GIF, PCX, BMP и много-го другого — gqview, gtksee, xloadimage, xv.
X-Stranger xstranger@tut.by
www.linux4u.narod.ru
(c) компьютерная газета
A: Попробуйте зайти на сайт http://www.freshmeat.net . Там есть все. А на http://www.opennet.ru есть целый комплекс средств для отслеживания версий софта ( http://www.opennet.ru/lastsoft/ — автоматическая система отслеживания, http://www.opennet.ru/news/ — ручная).
Q: Я достал новую версию ядра для Linux. Как мне произвести его компиляцию?
A: Для начала надо установить исходные тексты ядра. Если это пакет, типа rpm, то просто дать команду
rpm -i имя_пакета_с_файлами_ядра
Если же это просто tar.gz архив, то используем архиватор tar:
tar cvfz имя_пакета_с_файлами_ядра /usr/src
После этого надо убедиться, что ссылка /usr/src/linux показывает на каталог с установленными исходниками ядра, иначе подправить ссылку. Далее переходим в каталог /usr/src/linux.
Опции, с которыми компилируется ядро (тип процессора, драйверы, которые нужно включить (возможно в виде модулей) и еще сотни других вещей), задаются в файле /usr/src/linux/.config. Так вот, желательно не создавать его самому с нуля (особенно, если вы собираете ядро первый/второй/третий раз), а взять за основу .config, с которым было собрано старое, работающее ядро. Его можно взять из каталога с исходными текстами старого ядра, если этот файл там есть. Еще есть вероятность, что в каталоге с исходными текстами есть файл .oldconfig, который также содержит опции ядра. Этот файл используется, когда есть .config от другой (обычно, более старой) версии ядра и нужно просто получить точно такой же для текущей (возможно, ответив на пару вопросов о тех фичах, которых в старом не было), не отвечая заново на все три сотни вопросов. При этом вам, прежде всего, надо выдать команду make oldconfig. Затем выдайте make menuconfig и исправьте те опции, ради которых вы собственно и решили пересобрать ядро.
Если вы используете Red Hat или Red Hat-based дистрибутив и хотите воспользоваться теми .config, c помощью которых были собраны ядра в этом дистрибутиве, то возьмите их из пакета kernel-sources-*.i386.rpm на компакт-диске с дистрибутивом. Они лежат в каталоге /usr/src/linux/configs/ относительно самого пакета.
Затем даем следующие команды:
— make clean — эта команда удаляет все старые откомпилированные файлы, т.е. производит очистку. Команда нужна в том случае, когда вы уже компилировали ядро ранее;
— make dep — эта команда проверит все зависимости между файлами и создаст необходимые для компиляции ядра файлы;
— make bzImage — данная команда откомпилирует и создаст само ядро;
— make modules — эта команда создаст модули ядра;
Если у вас раньше стояла эта же версия ядра, то удалите старые модули от этого ядра (/lib/modules/версия). Команда make modules_install установит новые модули ядра.
Файл /usr/src/linux/arch/i386/boot/bzImage и есть свежесобранное ядро. Его теперь можно проинсталлировать на место старого. Хотя лучше сначала попробовать, работает ли оно. Нужно добавить в lilo.conf еще один выбор — например, linux.test, — который берет ядро прямо из /usr/src/linux/arch/i386/boot/bzImage.
Тем, кто отважился на сборку ядра лично под себя, советую обратить внимание на следующие факты:
— В начале ядерного Makefile (/usr/src/linux/Makefile) есть переменная EXTRAVERSION. Используя ее, можно получать ядра одной и той же версии, но с названиями, отличающимися суффиксом (например, 2.4.8-20 и 2.4.8-vasya). Это хорошо, поскольку позволяет сохранить экземпляр ядра, который заведомо умеет грузиться. Родное ядро, с которым ставилась система, лучше сохранить на случай всяких неприятностей. Hадо только не забыть добавить дополнительную запись в /etc/lilo.conf (достаточно иметь всего 2 записи: на родное ядро и на свежесобранное).
— В Red Hat и Red Hat-based дистрибутивах в /usr/src/linux для правильной установки есть команды make install и make modules_install. Ядро и модули копируются в нужное место и правильно настраиваются символические ссылки.
Причем, что приятно, это относится не только к ядрам, полученным в виде .src.rpm, но и если просто взять ядро с ftp.kernel.org, все заработает (эту правильную установку осуществляет редхатовский скрипт /sbin/installkernel, входящий в пакет с фирменным ядром редхата, поэтому перед make install желательно убедиться в наличии этого скрипта).
— Когда ядро собирается в дереве, в котором оно уже собиралось, очень рекомендуется после выполнять make clean. Во всяком случае, если какие-то части ядра были переселены в модули или обратно, надо делать это обязательно, иначе есть шанс собрать неправильное (не работающее) ядро.
Q: Я прочитал вашу статью про права доступа к файлам и попробовал устанавливать права сам. У меня возник вопрос: зачем нужны странные права доступа на каталогах, например, sticky или setgid bit?
A: Sticky bit (chmod +t) на каталоге означает, что файлы в этом каталоге могут стирать только их владельцы или суперпользователь. Обычно на /tmp и /var/tmp этот бит включен. Setgid бит (chmod +g) на каталоге означает, что файлы, созданные в этом каталоге, будут иметь ту же группу-владельца, что и сам этот каталог. Если в setgid-каталоге создаются другие каталоги, то они также будут иметь setgid-бит.
По словам Джея Бернстайна, "есть три метода задания групп-владельцев файлов: BSD-шный, бесполезный и SVR4-й. При BSD-шном методе файлы всегда получают ту же группу-владельца, что и каталог, в котором они были созданы. Это очень удобно с точки зрения администратора.
При бесполезном методе новые файлы принадлежат основной группе, на правах которой выполняется текущий процесс. Этот случай моментально приводит к настоящему кошмару. SVR4-й метод почти совпадает с бесполезным, но если на каталоге есть setgid-бит, то включается BSD-шный метод."
Заметьте, что с помощью флага монтирования bsdgroups можно включить BSD-шный метод работы с группами-владельцами. Подробности смотрите в руководстве по mount.
Q: Если не трудно, то объясните разницу между X-Server и X-Client.
A: В системе X Window понятия "клиент" и "сервер" кажутся перепутанными. В действительности, никакого противоречия тут нет. Весь вопрос лишь в том, что такое "cервер"? Возьмем, например, print-server или file-server. Это какое-то устройство для коллективного использования ресурса. Например, единственный print-server на организацию.
Так вот, лет 30 назад комплект из цветного дисплея и памяти на 256К был страшно дорогой игрушкой и обслуживал кучу программ.
Это и был display-server или, в комплекте с мышью и клавиатурой, X-server. Таким образом, X-server — это программа для управления Video-подсистемой, мышью и клавиатурой, выполняющая команды типа "нарисовать красную точку" или "вывести букву А фонтом Arial".
Существует куча X-Server-ов: свободные XFree86, коммерческие AcceleratedX, под MS Windows: eXceed, X-Win, под VAX VMS и даже в виде отдельных железок c дисплеем: NCD, Tatung (их еще называют X- Terminal).
Таким образом, пользовательские программы, например, Netscape — это "X-клиенты", которые обращаются к "X-серверу" для отображения и ввода. Связь между X-сервером и X-клиентом может быть по TCP/IP, по Unix-Socket, по IPX или даже по COM-порту. Поддержка конкретных способов связи зависит от реализации серверов и клиентских библиотек, например XFree знает только про первые два способа и еще DECNet.
Всякая X-программа ("X-клиент") сначала должна установить соединение с X-сервером. Его местонахождение X-клиент узнает через переменную окружения DISPLAY= или ключ в командной строке. Один X-сервер может обслуживать множество программ, работающих на разных хостах. Как наиболее простой случай, все они — и X-сервер, и Х-программы — работают на одном и том же компьютере.
Обычные, "консольные" (алфавитно-цифровые) программы тоже можно запустить под X, через эмулятор терминала (например, xterm, rxvt, eterm и другие). Это специальная X-программа, которая, с одной стороны, работает как эмулятор терминала, отрисовывает символы и отрабатывает ESC-последовательности, а с другой — представляется как обычный терминальный порт (через псевдотерминалы ptyXX).
Cледует заметить, что с точки зрения системы нет разницы между иксовыми и обычными программами. И те и другие используют один и тот же набор системных вызовов. Разница же упрятана в библиотеку XLib, с которой слинкованы иксовые программы, — именно она устанавливает связь с X сервером, посылает ему команды, принимает ответы и т.д. Кроме того, некоторые программы (emacs, например) могут работать как через X сервер, так и без него (через обычный терминал).
Очень часто на почту приходят вопросы типа "чем посмотреть/сыграть". Вот список наиболее подходящих для этого, на мой взгляд, программ:
— для AU, WAV, MP3 пригодятся консольные программы sox, mpg123, для X-Window подойдет программа xmms — полный аналог WinAmp, только круче;)
— для MIDI — playmidi, timidity;
— для AVI, MOV — xanim, DivX ( http://divx.euro.ru ) — не настолько стабилен, как xanim, но поддерживает больше форматов и развивается. Рекомендуется пользователям, имеющим Windows, так как использует от них некоторые dll;
— для MPEG, VideoCD — mtv, mtvp ( http://www.mpegtv.com ), xreadvcd +mtvp, smpeg ( http://www.lokigames.com/development/ ), mpeglib ( http://mpeglib.sourceforge.net );
— для JPEG, TIFF, GIF, PCX, BMP и много-го другого — gqview, gtksee, xloadimage, xv.
X-Stranger xstranger@tut.by
www.linux4u.narod.ru
(c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 31 за 2001 год в рубрике программирование :: разное