The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа

Gentoo Linux

сборник статей











Версия 1.3 от 01.11.2007

























2007 г.



Оглавление

Gentoo Linux 1

Новое и измененное (changelog) 18

Составители: 20

Цели данного сборника 20

Вступительное слово 21

Вводная информация о Linux 22

UNIX 22

История 22

Стандарты 28

Канонические команды UNIX 29

GNU/Linux 30

Linux (ядро) 33

История 33

Версии 34

Поддержка 35

Стабильные версии 35

Архитектура 36

Совместимость 37

Лицензия 38

Символ 38

BSD 38

История BSD 38

GNU General Public License 40

Свобода 40

История 40

GPL v3 41

Схема GNU GPL 42

Linux не для идиотов: сборник рассказов и рецептов 43

Предисловие 43

Ядро и модули 43

Загрузка операционной системы 46

Организация памяти 47

System V shared memory 48

Файловая система 49

Права доступа 52

Журналируемые файловые системы 53

Отображенные в память файлы 53

Специальные файловые системы 54

Сетевые файловые системы 55

Создание файловых систем 55

Интерфейс sysctl 56

Статически и динамически собранные программы 56

Системная библиотека GNU libc 57

LD, Shared Library, SO и много страшных слов 58

Информация о процессах и файловая систем /proc 60

Создание процессов 60

Секреты /dev 61

Статическая организация каталога /dev 62

Что такое DevFS 63

Немного о UDEV 64

Блочные устройства 65

Распределение мажоров и миноров IDE дисков 67

Распределение мажоров и миноров для SCSI-дисков 68

Устройства SATA и переход с IDE на PATA 69

Logical Volume Manager 70

Sotware RAID 74

Device mapper 77

Host-RAID, или дешевых RAID-контроллеров не бывает 77

Сетевая подсистема 78

Маршрутизация IP и форвардинг 80

Фильтры пакетов 82

Стандартные таблицы и цепочки 82

Порядок применения стандартных таблиц и цепочек 83

Стандартные действия 84

Условия отбора 84

Примеры конфигураций iptables 85

Управление пользователями, NSS и PAM 87

X11 и все-все-все 89

Клиент-серверная архитектура X11 89

Графическая среда пользователя 90

Внутри X11. Упрощенная схема 90

Внутри X11. Растровые шрифты и их отображение 91

Внутри X11. FreeType и XFT 92

Внутри X11. Расширения 92

Внутри X11. Полезные утилиты 93

Внутри X11. Менеджер окон 93

Локализация 93

Файловые системы Linux 96

Создание файловых систем 96

Необходимое введение 96

Устройство файловых систем Unix-семейства 98

Файловые системы Linux 99

Ext2fs 99

О журналируемых файловых системах 99

ReiserFS 100

Ext3fs 101

XFS 102

Критерии выбора 102

Практические следствия 103

Библиография вопроса 105

Linux и файловые системы: еще раз о проблеме выбора 106

О Gentoo Linux 109

Что такое портежи? 109

Gentoo Linux 110

История Gentoo 110

Философия Gentoo 111

Советы пользователям Gentoo 113

Проект X.org 114

Основы Portage 114

Управление настройками Portage 115

Когда нужно использовать оверлеи? 115

Как часто нужно обновляться? 116

Деинсталляция пакетов 116

Удаление временных файлов 117

Gentoo Linux: установка и настройка 117

О Gentoo Linux 117

Получение дистрибутива 118

Установка - первый этап 123

Этап второй - подготовка к смене корня 125

Третий этап - внутри Gentoo 126

Этап четвертый: в недра ядра 128

Краткое руководство по установке Gentoo Linux x86 138

Установочный диск 138

Настройка сети 138

Подготовка дисков 138

Установка стадии 139

Установка базовой системы Gentoo 139

Настройка ядра 140

Настройка системы 140

Установка системных утилит 141

Настройка загрузчика 141

grub 141

# для пользователей genkernel 141

# для остальных пользователей (без initrd) 141

# только если вам нужна двойная загрузка 141

lilo 142

# для пользователей, не использующих genkernel 142

# для пользователей genkernel 142

# Для двойной загрузки 142

Окончание установки 142

Описание альтернативных способов установки Gentoo Linux 143

1. Об этом документе 143

2. Загрузка с установочного диска при помощи Smart BootManager 143

3. Установка при помощи Knoppix 144

4. Установка со Stage 1 без доступа в сеть 145

5. Бездисковая установка с загрузкой через PXE 146

6. Установка Gentoo из существующей Linux-системы 150

Полезные советы по установке Gentoo/x86 153

1. Вступление 153

2. Расширенная установка 153

3. Упрощение установки 156

4. Решение ошибок/проблем 157

Восстановление сбойной установки 157

Настольная книга Gentoo Linux x86 159

A. Установка Gentoo 162

1. Об установке Gentoo Linux 162

1.a. Введение 162

2. Выбор подходящего источника для установки 164

2.a. Аппаратные требования 164

2.b. Установочные компакт-диски Gentoo 164

2.c. Скачивание, запись и загрузка с установочного диска Gentoo 166

3. Настройка сети 170

3.a. Автоматическое подключение к сети 170

3.b. Автоматизированная настройка сети 171

3.c. Ручная настройка сети 173

Использование DHCP 174

Подготовка беспроводного доступа 175

Освоение сетевой терминологии 176

Использование ifconfig и route 177

4. Подготовка дисков 178

4.a. Общие сведения о блочных устройствах 178

4.b. Разработка схемы разбиения диска 179

4.c. Использование fdisk для создания разделов 180

4.d. Создание файловых систем 184

Файловые системы (сравнение !) 184

4.e. Монтирование 185

5. Установка установочных файлов Gentoo 186

5.a. Установка архива стадии 186

5.b. По умолчанию: использование файла стадии из интернета 187

5.c. Альтернатива: использование файла стадии с установочного диска 188

5.d. Установка дерева портежей 189

5.e. Настройка параметров компиляции 190

6. Установка базовой системы Gentoo 192

6.a. Изменение корневого каталога 192

6.b. Настройка Portage 194

Настройка переменной USE 196

7. Настройка ядра 197

7.a. Часовой пояс 197

7.b. Установка исходных кодов ядра 198

7.c. По умолчанию: ручная настройка 198

7.d. Альтернатива: использование genkernel 202

7.e. Модули ядра 203

8. Настройка параметров системы 204

8.a. Параметры файловых систем 204

Примечание (JohnBat26): пример моего /etc/fstab: 205

8.b. Параметры сети 205

8.c. Параметры системы 208

9. Установка нужных системных средств 209

9.a. Диспетчер устройств 209

9.b. Системные службы журналирования 209

9.c. Дополнительно: демон cron 210

9.d. Дополнительно: индексация файлов 210

9.e. Утилиты для обслуживания файловых систем 210

9.f. Сетевые средства 211

10. Настройка начального загрузчика 212

10.a. Выбор загрузчика 212

10.b. По умолчанию: использование GRUB 213

10.c. Альтернатива: использование LILO 217

10.d. Перезагрузка системы 219

11. Завершение установки Gentoo 219

11.a. Управление учетными записями 219

12. Чем заняться дальше? 220

12.a. Документация 220

12.b. Gentoo в интернете 221

B. Работа с Gentoo 221

1. Введение в Portage 221

1.a. Добро пожаловать в Portage 221

1.b. Дерево портежей 222

1.c. Обслуживание программного обеспечения 222

1.d. Когда Portage жалуется... 226

2. USE-флаги 230

2.a. Что такое USE-флаги? 230

2.b. Использование USE-флагов 231

2.c. USE-флаги отдельных пакетов 233

3. Возможности Portage 234

3.a. Возможности Portage 234

3.b. Распределенная компиляция 235

3.c. Кэширование компиляции 236

3.d. Поддержка двоичных пакетов 237

4. Сценарии инициализации 238

4.a. Уровни запуска 238

4.b. Использование rc-update 241

4.c. Настройка служб 242

4.d. Написание сценариев инициализации 242

4.e. Изменение поведения уровней запуска 245

5. Переменные среды 247

5.a. Переменные среды 247

5.b. Глобальное определение переменных 248

5.c. Локальное определение переменных 250

C. Работа с Portage 251

1. Файлы и каталоги 251

1.a. Файлы Portage 251

1.b. Хранение файлов 252

1.c. Сборка программного обеспечения 253

1.d. Ведение журнала 254

2. Настройка с помощью переменных 254

2.a. Настройка Portage 254

2.b. Параметры сборки 254

2.c. Защита конфигурационных файлов 255

2.d. Параметры скачивания 255

2.e. Настройка Gentoo 256

2.f. Поведение Portage 257

3. Смешение ветвей программного обеспечения 257

3.a. Использование одной ветви 257

3.b. Одновременное использование стабильной и тестовой ветвей 258

3.c. Использование заблокированных пакетов 258

4. Дополнительные средства Portage 259

4.a. etc-update 259

4.b. dispatch-conf 261

4.c. quickpkg 261

5. Отступление от официального дерева 261

5.a. Использование собственного дерева Portage 261

5.b. Добавление неофициального сборочного файла ebuild 262

5.c. Программы, поддерживаемые не Portage 263

6. Использование ebuild 263

6.a. Emerge и Ebuild 263

6.b. Ручная установка программ 263

6.c. Дополнительные возможности Ebuild 265

6.d. Дополнительная информация 266

D. Настройка сети в Gentoo 266

1. Начальная настройка 266

1.a. Приступаем к настройке 266

2. Расширенная настройка 268

2.a. Расширенная настройка 268

2.b. Сетевые зависимости 270

2.c. Имена и значения переменных 270

3. Модульное построение сети 271

3.a. Сетевые модули 271

3.b. Обработчики интерфейса 272

3.c. DHCP 272

3.d. Модем ADSL 274

3.e. APIPA (автоматическая частная IP-адресация) 274

3.f. Объединение интерфейсов 275

3.g. Образование моста (поддержка 802.1d) 275

3.h. MAC-адрес 276

3.i. Образование тоннеля 276

3.j. Виртуальные сети (поддержка 802.1q) 276

4. Беспроводная сеть 277

4.a. Введение 277

4.b. Запросчик WPA 277

4.c. Утилиты Wireless tools 279

4.d. Раздельная настройка сети по ESSID 283

5. Дополнительные возможности 283

5.a. Стандартные функции-обработчики 283

5.b. Функции-обработчики wireless tools 285

6. Управление сетью 286

6.a. Управление сетью 286

6.b. ifplugd 286

Настольная книга по безопасности Gentoo 287

Введение 287

A. Безопасность системы 287

1. Соображения перед началом установки 287

1.a. Физическая безопасность 287

1.b. Планирование демонов/служб 287

1.c. Схемы создания разделов 288

1.d. Пользователь root 288

1.e. Правила безопасности 289

2. Закручивание гаек 290

2.a. USE-флаги 290

2.b. Защита GRUB паролем 290

2.c. Защита LILO паролем 291

2.d. Ограничение доступа к консоли 291

3. Журналирование 292

3.a. Введение 292

3.b. Журналирование: Syslogd 292

3.c. Metalog 294

3.d. Syslog-ng 294

3.e. Анализ журналов с помощью Logcheck 296

4. Монтирование разделов 296

4.a. Монтирование разделов 296

5. Ограничения пользователей/групп 297

5.a. /etc/security/limits.conf 297

5.b. /etc/limits 297

5.c. Квоты 298

5.d. /etc/login.defs 299

5.e. /etc/login.access 299

6. Права доступа к файлам 300

6.a. Файлы, доступные по чтению для всех 300

6.b. Файлы, доступные по записи для группы или для всех 300

6.c. Файлы SUID/SGID 300

6.d. SUID/SGID-файлы и жесткие ссылки 301

7. PAM 302

7.a. PAM 302

8. Упаковщики TCP 303

8.a. Упаковщики TCP 303

9. Безопасность ядра 303

9.a. Удаление функциональности 303

9.b. Файловая система proc 304

9.c. Grsecurity 305

9.d. Kerneli 306

9.e. Другие заплатки к ядру 306

10. Безопасность служб 306

10.a. Apache 306

10.b. Bind 306

10.c. Djbdns 307

10.d. FTP 307

10.e. Mysql 307

10.f. Proftpd 308

10.g. Pure-ftpd 308

10.h. Vsftpd 309

10.i. Netqmail 309

10.j. Samba 309

10.k. ssh 310

10.l. Использование xinetd 311

10.m. X 312

11. Изменение корневого каталога и виртуальные серверы 313

11.a. Изменение корневого каталога 313

11.b. Пользовательский режим Linux 314

12. Межсетевые экраны 315

12.a. Межсетевой экран 315

12.b. Фильтрование пакетов 315

12.c. Прокси 316

12.d. Программный шлюз 316

12.e. Iptables 317

12.f. Squid 324

12.g. Изучено 328

13. Обнаружение вторжения 328

13.a. AIDE (Advanced Intrusion Detection Environment) 328

13.b. Snort 331

13.c. Обнаружение вредоносных программ с помощью chkrootkit 333

14. Регулярные обновления 333

14.a. Регулярные обновления 333

Обновление Gentoo Linux 336

Руководство по обновлению Gentoo 336

1. Gentoo и обновления 336

2. Гонка за новыми выпусками 337

3. Инструкции по обновлению профилей 338

HOWTO Полное обновление системы 340

Приведение в порядок /var/lib/portage/world 340

Обновление profile 340

USE-флаги 340

Запуск обновления системы (если не нужно обновлять toolchain) 340

Некоторые причины не использовать emerge -U вместо -u 341

Обновление одного из пакетов входящих в toolchain 341

Обновление безопасности. 342

Удаление неиспользуемых пакетов. 342

Обновление конфигов. 343

Руководство Gentoo Linux по обновлению GCC 344

1. Введение 344

2. Общие указания по обновлению 344

3. Переход с GCC-3.3 на 3.4 или более новый 345

4. Обновление GCC на новой установке 347

5. Обычные грабли 349

Gentoo и X.Org 350

Описание настройки МОНОЛИТНОГО X-сервера версий 6.X 350

1. Что такое X Window Server? 350

2. Установка Xorg 351

3. Настройка Xorg 352

4. Настройка xorg.conf 354

5. Ресурсы 356

Описание настройки МОДУЛЬНОГО X-сервера версий 7.X (Англ.) 357

Introduction 357

Preparation 357

Nvidia Drivers 357

Masking Xorg 7.1 (optional) 357

Backup 358

Restoring the backup 358

Uninstall old X.org 358

Emerge Modular X.org 359

Device Drivers 359

Installation 359

GL Issues 360

Configuration file locations have changed 362

Other problems and solutions 362

XkbOptions 363

Параметры "XkbOptions" 363

Пример 363

HOWTO Xorg and Fonts (Рус.) 364

Назначение этого HOWTO 364

Общие сведения 364

Замечание по поводу DPI 364

Замечание по поводу сравнения шрифтов на Windows/Mac и Linux 365

Получение необходимых пакетов 365

Информация о хинтинге (Hinting) 366

367

Изменение конфигурационных файлов 367

/etc/X11/xorg.conf 370

Файл: /etc/X11/xorg.conf (Список путей к шрифтам) 372

Перезагрузка служб 373

Mozilla Firefox and Thunderbird 373

Mozilla Firefox 1.0+ 373

Mozilla Thunderbird 0.7, 1.0.2 и выше 374

Проблемы с размерами шрифтов 375

Что делать, если Linux шрифт в Konsole не работает. 376

Что, если Ваши шрифты стали размытыми и не читаемыми 376

Ошибка при запуске startx 377

XEmacs 377

Полезные ресурсы 377

Смотрите также 377

Примечание (от JohnBat26), мой файл: ~/.fonts.conf: 378

Руководство по видеокартам nVidia в Gentoo Linux 380

1. Введение 380

2. Настройка карты 380

Конфигурирование ядра 380

Последующая настройка ядра 381

Установка подходящих драйверов 383

Настройка X-сервера 383

Добавление пользователей в группу video 384

Тестирование карты 384

Включение поддержки nvidia 385

Использование инструмента nVidia Settings 385

3. Проблемы 385

Работа 2D на компьютерах с ОЗУ 4 ГБ и более 385

Пытаясь загрузить модуль ядра, я в ответ получаю «no such device» 386

4. Настройка для опытных 386

Документация 386

Параметры модуля ядра 386

Расширенная настройка X-сервера 386

Распространенные вопросы об ATI в Gentoo Linux 388

1. Поддержка устройств 388

2. Установка 389

3. Дополнительные источники 390

HOWTO fbsplash 391

Введение 391

Что такое gensplash? 391

Что такое fbsplash (framebuffer splash)? 391

Что такое устройство frame buffer? 391

становка fbsplash и splashutils 392

Установка заплат ядра 392

Конфигурация ядра 392

Компиляция ядра (Вручную) 392

Конфигурация / компиляция ядра (Для пользователей genkernel) 393

Установка splashutils 393

Конфигурация / компиляция ядра (ручная работа) 393

Создание образа initramfs 393

Что такое initramfs? 393

Компиляция образа initramfs непосредственно в ядро 394

Загрузка образа initramfs динамически 394

Создание собственных тем для gensplash 395

Перевод тем bootsplash в темы gensplash 396

Использование собственных тем gensplash 396

Настройка загрузчика 397

Параметры ядра 397

Пример конфигурации Grub 397

Пример конфигурации Lilo 398

Добавление фона на все консоли 398

Gensplash для других дистрибутивов 398

Дополнительные шаги 399

Тут должно быть название пункта 3 399

Решение проблем 399

Если /usr на отдельном разделе 399

Установка фона во время загрузки 399

Ссылки 400

Hardware 3D Acceleration Guide (Англ.) 401

1. Introduction 401

2. Install Xorg and configure your kernel 402

3. Install X11-DRM and configure direct rendering 403

4. Test 3D acceleration 404

5. Using the CVS sources 404

6. Tweak your performance 405

7. Troubleshooting 406

8. Acknowledgments 407

9. References 407

HOWTO по настройке KDE 408

1. Что же такое K Desktop Environment? 408

2. Установка KDE 408

3. Настройка KDE 411

Руководство по настройке GNOME 413

1. Что такое GNOME? 413

2. Установка GNOME 413

Использование UTF-8 в Gentoo 415

1. Предупреждение или Напутствие переводчика 415

2. Кодировки 415

3. Включение UTF-8 в Gentoo Linux 417

4. Поддержка приложениями 419

Руководство по русской локализации Gentoo Linux 426

1. Введение 426

2. Базовая кириллизация консоли 427

3. Установка русской locale 430

4. Установка часового пояса 432

5. Локализация оконной системы X 433

Листинг 5.1: Варианты выбора переключателя латиница/кириллица 434

Руководство Gentoo Linux ALSA 437

1. Введение 437

2. Установка ALSA 437

3. Настройка/тестирование ALSA 442

ALSA и USE 445

4. Другие возможности ALSA 447

Руководство по настройке Java в Gentoo 451

1. Установка JDK/JRE 451

2. Конфигурирование вашей JDK/JRE 451

3. Дополнительные ресурсы 453

4. Предостережения 453

Gentoo и GPRS 454

GPRS через USB (Руководство) 454

Настройка GPRS в Linux 457

Введение 457

Подготовка 457

Сборка пакетов 457

Настройка 459

Установка соединения 460

Автоматическая установка соединения 460

Заключение 461

Экономим трафик, с помощью Toonel. (Linux) 461

Сжимаем трафик электронной почты. 462

GPRS через KPPP 463

GPRS через Bluetooth 465

HOWTO Соединение с Internet 466

Настройка VPN 466

Проверка параметров ядра 466

Установка пакетов 466

Настройка клиента 467

Настройка с помощью pptpconfig 467

Проверяем соединение 468

Через pppoe 469

Настройка выхода через DIAL-UP 470

Подключение модема 470

Последовательный порт 470

Подключение через USB 470

Win модемы 470

Для всех типов модемов 470

Проверка работоспособности, возможные грабли 471

Настройка программного обеспечения 471

Включение поддержки PPP в ядре 471

Установка необходимых пакетов 471

Настройка соединения с помощью chat-script 471

Обзор звонилок 472

chestnut-dialer 472

Настройка Call back 473

Настройка выхода через GPRS 473

Требуемая аппаратура 473

Подключение с помощью USB-кабеля 473

Подключение с помощью COM-кабеля 474

Подключение через Bluetooth 474

Подключение через IrDA 475

Настройка выхода через CDMA (SKYLINK) 476

Подключение аппаратуры 476

Настройка программного обеспечения 476

Power Management Guide (Англ.) 477

1. Introduction 477

2. Prerequisites 478

3. CPU Power Management 482

4. LCD Power Management 485

5. Disk Power Management 487

6. Power Management For Other Devices 489

7. Sleep States: sleep, standby, and suspend to disk 491

8. Troubleshooting 494

Руководство по udev в Gentoo 497

1. Что такое udev? 497

2. Как использовать udev в Gentoo 499

3. Известные проблемы 500

4. Ссылки на ресурсы и благодарности 502

Gentoo LDAP-DNS Guide (Англ.) 503

1. Introduction 503

2. Configuring LDAP-DNS 503

3. Configuring OpenLDAP 504

4. Testing the Installation 505

Руководство по настройке Samba в режиме PDC с использованием LDAP 506

Устанавливаемые пакеты 506

OpenLDAP 506

Конфигурирование OpenLDAP 506

Запуск сервера OpenLDAP 507

SAMBA 508

Миграция OpenLDAP 508

Конфигурация SAMBA 509

Настройка системы на авторизацию в LDAP 512

Управление пользователями 514

Создание пользователя 514

Изменение пароля 515

Модификация пользователя 515

Удаление пользователя 516

Управление пользователями в оффтопике 516

Источники 516

Создание виртуальной почтовой системы 517

1. Введение 517

2. Начальная настройка postfix 518

3. Courier-imap 519

4. Cyrus-sasl 520

5. SSL-сертификаты для Postfix и Apache 520

6. Добавим SSL и SASL поддержку в Postfix 521

7. MySQL 522

8. Apache и phpMyAdmin 523

9. Vmail-пользователь 524

10. Настройка MySQL авторизации и виртуальных доменов 525

11. Squirrelmail 528

12. Mailman 528

13. Фильтрация содержимого и Anti-Virus 530

14. Окончание 530

15. Troubleshooting 531

Виртуальная почтовая система на основе qmail/vpopmail. 533

1. Введение 533

2. qmail ("Разговаривая с собой") 533

3. vpopmail 535

4. Courier POP/IMAP 536

5. qmail (разговаривая с миром) 537

6. Веб клиент Horde / IMP 538

7. Дополнительные пакеты 539

8. Заключительные примечания 541

Руководство по электронной почте с использованием Mutt 542

1. Введение в E-Mail 542

2. Fetchmail 542

3. Procmail 543

4. Почтовый клиент Mutt 545

5. SMTP 547

Руководство по предварительному связыванию в Gentoo Linux 549

1. Введение 549

Что такое предварительное связывание (Prelink) и как оно может помочь мне? 549

Резюме 549

2. Инициализация предварительного связывания 550

Установка программ 550

Настройка 551

3. Предварительное связывание 551

Применение предварительного связывания 551

4. Известные проблемы и методы их решения 552

5. Заключение 554

Руководство по файловой системе для устройств 555

1. Что такое devfs? 555

Проблемы 556

Решения 556

2. Навигация через дерево устройств 557

3. Администрирование дерева устройств 558

4. Вопросы, относящиеся к правам доступа 559

Русское WIKI 562

Hастройка дисковой подсистемы 562

Тонкая настройка IDE дисков с помощью hdparm 577

Работа с CD/DVD 581

Создание DVD 585

Система Portage 592

Portage через NFS 592

Настройка Portage 596

Portage Overlay 600

Экономия трафика с помощью deltup 603

Обновление портежей без доступа в интернет непосредственно из системы 604

Обновление пакетов без доступа в интернет непосредственно из системы 605

Полное обновление системы 607

Сборка на другом компьютере 611

Прочее 612

Разделы MS Windows по-русски 612

Udev 615

Использование CFLAGS для оптимизации собранных программ 617

Редактор nano 620

Udev и автомонтирование носителей 621

Оптимизация glibc 624

Подключение USB-flash 629

Чтение-запись NTFS с использованием драйвера ntfs-3g 632

Сетевые сервисы 634

Установка Apache2 634

Настройка iptables для начинающих 639

Подробная настройка iptables 645

Установка почтовой системы 667

Настройка vsftpd 675

Jabber Server 678

Выделенный сервер Counter-Strike 679

Файл сервер Samba в домене Win2k 681

Руководство по настройке Samba в режиме PDC с использованием LDAP 685

Мониторинг работы системы 701

Настройка X 723

Настройка русских шрифтов в X 723

Настройка размера шрифтов в X 728

Xorg X11 и прозрачность 730

Xorg. Переключение раскладок 734

Установка Xgl 735

XGL 737

Автоматическое переключение раскладок 762

Cedega 5.1 763

Windows-эквиваленты 764

Ускорение загрузки системы 769

Секреты командной строки 773

Тонкость работы ccache с emerge 781

Keymap 781

Часто задаваемые вопросы 783

2. Введение 783

Как произносится слово Gentoo, и что оно означает? 783

Что делает Gentoo особенным? 783

3. Установка 783

Все работает очень нестабильно, мои флаги оптимизации "-O9 -ffast-math -fomit-frame-pointer". В чем проблема? 783

Как изменить пароль root (или любого другого пользователя)? 784

Как добавить обычного пользователя? 784

Почему пользователь не может получить права root командой su? 784

Как отключить devfs? 785

Могу ли я обновить Gentoo без переустановки? 785

Ядро не загружается (правильно), что мне теперь делать? 785

Мой прокси-сервер требует аутентификации, что делать? 786

Как записать ISO файл на компакт-диск? 786

Какой диск/стадию надо использовать с моим процессором? 787

Я не могу выйти в интернет после перезагрузки. В чем может быть дело? 787

Я хочу загрузить Windows из GRUB или LILO, но вижу только черный экран. Что делать? 788

Как установить Gentoo, используя файл Stage1 или Stage2? 789

4. Управление пакетами 789

В каком формате хранятся пакеты? 789

Я хочу выполнить сценарий ./configure сам. Возможно ли это? 790

Как использовать emerge, если я за межсетевым экраном? 790

Что делать, если rsync мне не подходит? 790

У меня дома лишь слабое модемное подключение. Могу ли я скачать исходные коды в другом месте, а затем добавить их в систему? 790

Исходные коды хранятся в /usr/portage/distfiles. Безопасно ли удалить их? 791

Что находится в /var/tmp/portage? Можно ли удалить файлы и каталоги из /var/tmp/portage? 791

5. Использование 791

Как установить международную раскладку клавиатуры? 791

Почему мой пользователь не может использовать свой файл crontab? 792

Как включить numlock при загрузке? 792

Как сделать очистку терминала при выходе? 792

Не удается запускать X приложения из-под root'а (после su) 793

6. Сопровождение 793

ReiserFS и порча файловых систем - как исправить, и т.п. 793

7. Разработка 793

Где оставлять сообщения об ошибках? 793

Как часто появляются новые стабильные выпуски? 793

Мой динамик орет как сумасшедший. Как выключить динамик в консоли? 794

8. Ресурсы 794

Где найти информацию о Gentoo Linux? 794

Могу ли я купить CD с Gentoo Linux? 794

В этом списке нет ответа на мой вопрос. Что делать? 795

Наивные вопросы юных линуксоидов 795

Вступление 795

Как ставить программы? 795

Что еще за тарболл? 796

А кто такой root и как им стать? 797

Основные команды 798

Команда man 798

Команда cd 798

Команда ls 799

Команда cp 799

Команда rm 799

Команда df 800

А как мне быть если путь или имя очень длинные? 800

Как сделать чтобы программа запущенная из терминала работала после его закрытия? 800

А как работать с буфером? 801

Как заставить иксы стартовать при загрузке? 801

Термины 802

Вики (WiKi) (от гавайского: быстрый) 802

ALSA, или Advanced Linux Sound Architecture 802

X сервер (или Иксы) - 802

ebuild- 803

Оверлей - 803

MAN (справки по командам) 814

Emerge 814

Примеры конфигурационных файлов 830

1.Мой make.conf 830

2. Файл xorg.conf для NVIDIA Geforce 832

3. Файл xorg.conf для ATI radeon: 836

4. Файл /etc/fstab 842

Важные команды Gentoo Linux 843


Полезные утилиты Gentoo Linux 844

Ресурсы с документацией 846

Ресурсы с программным обеспечением 846

Каналы IRC (freenode.net) 846



Новое и измененное (changelog)

Версия 1.1 от 15.07.2007

  1. По просьбе Mati_maniak (linuxforum.ru):

      a) emerge --depclean world - исправлено на emerge --depclean;

      b) --oneshot (-i) исправлено на --oneshot.

  2. Дополнительное форматирование текста.

  3. Добавлен сборник статей: Linux не для идиотов, автор: Артем Капитула (no-dashi, dalth & viking).

  4. Добавлен: список IRC каналов.

  5. Добавил: примеры моих конфигурационных файлов.



Версия 1.2 от 01.09.2007

  1. Полностью переработан раздел по обновлению Gentoo.

  2. Произведено значительное форматирование текста.

  3. Обновился раздел: Полезные утилиты Gentoo Linux

  4. Полностью оформлен и дополнен Handbook !

  5. По просьбе inhab (linuxforum.ru):

    добавлена статья: Настройка Samba в режиме PDC с использованием LDAP.

  6. Добавлено: Руководство по настройке GNOME.

  7. Добавлено: HOWTO fbsplash

Версия 1.3 от 01.11.2007

  1. Изменены цели написания данного сборника.

  2. Появилось вступительное слово. :)

  3. По просьбе MAA (http://linuxforum.ru) включена информация о Linux для новичков.

  4. Сборник "Linux не для идиотов" перенесён в начало сборника !

  5. Добавлен собственный перевод Wiki-статьи: HOWTO Xorg and Fonts.

  6. Оформлен новый раздел: "Gentoo и GPRS". Спасибо следующим авторам:

      - Nikoli (Linuxforum.ru).

      - Дмитрию a.k.a. doc (http://doc.3dn.ru).

      - Валентину Синицину.


  1. Перенесены XkbOptions.

  2. Оформлен раздел: "Gentoo и X.Org"

  3. Создан новый раздел: "Файловые системы Linux", состоящий из двух статей:

      - Создание файловых систем

      - Linux и файловые системы: еще раз о проблеме выбора

    Отдельное СПАСИБО Алексею Федорчуку (alv@linux-online.ru)

  4. Заново импортирована: "Настольная книга по безопасности Gentoo" т.к. безопасность это очень важный вопрос. Теперь на русском языке.

  5. Обновлены: "Примеры конфигурационных файлов"

  6. Обновлен и дополнен: "HOWTO Соединение с Internet"

  7. Продолжено форматирование текста.



Составители:

обо мне:




По материалам сайтов:

Версия: 1.3

Последняя редакция: 01.11.2007

Лицензия: GPL v2

Создано с помощью OpenOffice Writer 2.3.0. (Infra)


Цели данного сборника



Пожелания, участие в написании и критика приветствуются. :)

Просьба при копировании или дополнении данного сборника, согласовывать с:

  1. Авторами статей.

  2. Составителями данного сборника (см. вверху страницы).



Всем авторам статей: ОГРОМНОЕ СПАСИБО ЗА ВАШ ТРУД !!!

Вступительное слово

Автор: Батогов Е.В. a.k.a JohnBat26



Добро пожаловать всем, кто решил вступить на путь освоения операционной системы Linux (и Gentoo в особенности). Немного забегая вперед, хочется заметить, что путь предстоит не легкий, но очень интересный. Главное помните одну известную истину: "Лучше день подождать, а потом за 5 минут долететь!"


Расскажу немного из своего опыта использования Linux.

Когда 3 года назад мне надоело переустанавливать Windows по два и более раза в год, я стал искать альтернативу. Кто-то скажет сейчас, что мол я не умею использовать Windows, сразу отвечу, что работал в ней около 5 лет. Так как я являюсь человеком, который не может просто так сидеть и не проводить эксперименты с системой, то устанавливал более 200 программ, и это делало Windows очень медленной и нежизнеспособной (Сейчас у меня в Gentoo установлено > 1000 пакетов :)). Далее, в Windows, автоматически возникали проблемы обновления всего этого ПО. И это еще не говоря о вирусах...

Сначала я поставил SuSE Linux. В принципе все нравилось, НО это до необходимости совершения таких действий как, например, смена ядра, установка драйверов, обновление системы (хотя Smart в принципе, справлялся с этим).

Установка программ из RPM вызывала напряжение нервной системы, особенно когда не было хорошего интернета. Ох уж эти зависимости.... :((


Так как я являюсь человеком, который не остановится, пока не получит систему, близкую к идеальной, то мой взгляд, наконец-то, пал на Gentoo. Спустя год я уже установил Gentoo на 9 машин, из которых половина ноутбуки (Dell, Asus, Acer, Sony VAIO)! Процесс установки действительно захватывает тем, что ты полностью понимаешь, что полностью управляешь системой. Gentoo поразил меня следующим:


Еще ни одна ОС не вдохновляла меня на написание книги, пусть она и составлена из трудов многих хороших людей. В нашей Великой России такие сборники должны быть очень актуальны, т.к. не у всех есть постоянный доступ к сети (сам работал через GPRS в течение двух лет).

В заключении хочется пожелать всем удачи на пути освоения Gentoo Linux. Как говорится: "Дорогу осилит идущий !" Вперед !!!




Вводная информация о Linux

UNIX



Ссылка на оригинал: http://ru.wikipedia.org/wiki/UNIX

C версии: 1.3

UNIX (читается юникс) группа переносимых, многозадачных и многопользовательских операционных систем.

Первая система UNIX была разработана в конце 1960-х начале 1970-х годов в подразделении Bell Labs компании AT&T. С тех пор было создано большое количество различных UNIX-систем. Юридически лишь некоторые из них имеют полное право называться «UNIX»; остальные же, хотя и используют сходные концепции и технологии, объединяются термином «UNIX-подобные» (англ. Unix-like). Для краткости в данной статье под UNIX-системами подразумеваются как истинные UNIX, так и UNIX-подобные ОС.

Некоторые отличительные признаки UNIX-систем включают в себя:

В настоящее время UNIX используются в основном на серверах, а также как встроенные системы для различного оборудования. На рынке ОС для рабочих станций и домашнего применения UNIX уступили другим операционным системам, в первую очередь Microsoft Windows. UNIX-системы имеют большую историческую важность, поскольку благодаря им распространились некоторые популярные сегодня концепции и подходы в области ОС и программного обеспечения.

История



Предшественники

В 1957 году в Bell Labs была начата работа по созданию операционной системы для собственных нужд. Под руководством Виктора Высотского (русского по происхождению) была создана система BESYS. Впоследствии он возглавил проект Multics, а затем стал главой информационного подразделения Bell Labs.




Рис 1. Генеалогическое древо UNIX-систем.



В 1964 году появились компьютеры третьего поколения, для которых возможности BESYS уже не подходили. Высотский и его коллеги приняли решение не разрабатывать новую собственную операционную систему, а подключиться к совместному проекту General Electric и Массачусетского технологического института Multics. Телекоммуникационный гигант AT&T, в состав которого входили Bell Labs,


оказал проекту существенную поддержку, но в 1969 году вышел из проекта, поскольку он не приносил никаких финансовых выгод.



Первые UNIX

Первоначально UNIX была разработана в конце 1960-х годов сотрудниками Bell Labs, в первВ 1969 году Кен Томпсон, стремясь реализовать идеи, что были положены в основу MULTICS, но на более скромном аппаратном обеспечении (DEC PDP-7), написал первую версию новой операционной системы, а Брайан Керниган придумал для неё название UNICS (UNIplexed Information and Computing System) в противовес MULTICS (MULTIplexed Information and Computing Service). Позже это название сократилось до UNIX. В 1971 году вышла версия для PDP-11, наиболее успешного семейства миникомпьютеров 1970-х (в СССР оно известно как СМ ЭВМ). Эта версия получила название «первая редакция» (Edition 1) и была первой официальной версией. Системное время все реализации UNIX отсчитывают с 1 января 1970.

Первые версии UNIX были написаны на ассемблере и не имели встроенного компилятора с языка высокого уровня. Примерно в 1969 году Кен Томпсон при содействии Дениса Ритчи разработал и реализовал язык Би (B), представлявший собой упрощённый (для реализации на миникомпьютерах) вариант разработанного в 1966 языка BCPL. Би, как и BCPL, был интерпретируемым языком. В 19691973 годах на основе Би был разработан компилируемый язык, получивший название Си (C).

В 1973 году вышла третья редакция UNIX, со встроенным компилятором с Си. 15 октября того же года появилась четвёртая редакция, с переписанным на Си системным ядром (в духе системы Multics, также написанной на языке высокого уровня (ПЛ/1)), а в 1975 пятая редакция, полностью переписанная на Си. С 1974 года UNIX стал бесплатно распространяться среди университетов и академических учреждений. С 1975 года началось появление новых версий, разработанных за пределами Bell Labs, и рост популярности системы.

В том же 1975 году вышла шестая редакция, известная по широко разошедшимся комментариям Джона Лайонса (Lions' Commentary on UNIX 6th Edition, with Source Code, [1], [2]). К 1978 г. система была установлена более чем на 600 машинах, прежде всего, в университетах. Седьмая редакция была последней единой версией UNIX. Именно в ней появился близкий к современному интерпретатор командной строки Bourne shell.ую очередь Кеном Томпсоном, Денисом Ритчи и Дугласом МакИлроем.


Раскол

С 1978 года начинает свою историю BSD UNIX, созданный в университете Беркли. Его первая версия, была основана на шестой редакции. В 1979 выпущена новая версия, названная 3BSD, основанная на седьмой редакции. BSD поддерживал такие полезные свойства, как виртуальную память и замещение страниц по требованию. Автором BSD был Билл Джой.

В начале 1980-х компания AT&T, которой принадлежали Bell Labs, осознала ценность UNIX и начала создание коммерческой версии UNIX. Эта версия, поступившая в продажу в 1982 году, носила название UNIX System III и была основана на седьмой версии системы.

Важной причиной раскола UNIX стала реализация в 1980 г. стека протоколов TCP/IP. До этого межмашинное взаимодействие в UNIX пребывало в зачаточном состоянии наиболее существенным способом связи был UUCP (средство копирования файлов из одной UNIX-системы в другую, изначально работавшее по телефонным сетям с помощью модемов).

Было предложено два интерфейса программирования сетевых приложений: Berkley sockets и интерфейс транспортного уровня TLI (англ. Transport Layer Interface). Интерфейс Berkley sockets был разработан в университете Беркли и использовал стек протоколов TCP/IP, разработанный там же. TLI был создан AT&T в соответствии с определением транспортного уровня модели OSI и впервые появился в системе System V версии 3. Хотя эта версия содержала TLI и потоки, первоначально в ней не было реализации TCP/IP или других сетевых протоколов, но подобные реализации предоставлялись сторонними фирмами. Реализация TCP/IP официально и окончательно была включена в базовую поставку System V версии 4. Это, как и другие соображения (по большей части, рыночные), вызвало окончательное размежевание между двумя ветвями UNIX BSD (университета Беркли) и System V (коммерческая версия от AT&T). Впоследствии, многие компании, лицензировав System V у AT&T, разработали собственные коммерческие разновидности UNIX, такие, как AIX, HP-UX, IRIX, Solaris.

В середине 1983 года была выпущена версия 4.2BSD, поддерживающая работу в сетях Ethernet и Arpanet. Система стала весьма популярной. Между 1983 и 1990 в BSD были добавлено много новых возможностей, таких как отладчик ядра, сетевая файловая система NFS, виртуальная файловая система VFS, и существенно улучшены возможности работы с файловыми сетями.

Тем временем AT&T выпускала новые версии своей системы, названной System V. В 1983 была выпущена версия 1 (SVR1 System V Release 1), включавшая полноэкранный текстовый редактор vi, библиотеку curses, буферизацию ввода-вывода, кеширование inode. Версия 2 (SVR2), выпущенная в 1984, реализовывала монопольный доступ к файлам (file locking), доступ к страницам по требованию (demand paging), копирование при записи (copy-on-write). Версия 3 вышла в 1987 году и включала, среди прочего, TLI, а также систему поддержки удалённых файловых систем RFS. Версия 4 (SVR4), разработанная в сотрудничестве с фирмой Sun и вышедшая 18 октября 1988, поддерживала многие возможности BSD, в частности TCP/IP, сокеты, новый командный интерпретатор csh. Кроме того, там было много других добавлений, таких как символические ссылки, командный интерпретатор ksh, сетевая файловая система NFS (заимствованная у SunOS) и т. д.

Современные реализации UNIX, как правило, не являются системами V или BSD в чистом виде. Они реализуют возможности как System V, так и BSD.


Свободные UNIX-подобные операционные системы



В 1983 году Ричард Столлмэн объявил о создании проекта GNU попытки создания свободной UNIX-подобной операционной системы с нуля, без использования оригинального исходного кода. Большая часть программного обеспечения, разработанного в рамках данного проекта, такого, как GNU toolchain, Glibc (стандартная библиотека языка Си) и Coreutils играет ключевую роль в других свободных операционных системах. Однако работы по созданию замены для ядра UNIX, необходимые для полного выполнения задач GNU, продвигались крайне медленно. В настоящее время GNU Hurd попытка создать современное ядро на основе микроядерной архитектуры Mach всё ещё далека от завершения.

В 1991 году, когда Линус Товальдс опубликовал ядро Linux и привлёк помощников, использование инструментов, разработанных в рамках проекта GNU, было очевидным выбором. Операционная система GNU и ядро Linux вместе составляют ОС, известную, как GNU/Linux. Дистрибутивы этой системы (такие как Red Hat и Debian), включающие ядро, утилиты GNU и дополнительное программное обеспечение стали популярными как среди любителей, так и среди представителей бизнеса.

В результате урегулирования юридического дела, возбуждённого UNIX Systems Laboratories против университета Беркли и Berkeley Software Design Inc., было установлено, что университет может распространять BSD UNIX, в том числе и бесплатно. После этого были возобновлены эксперименты, связанные с BSD-версией UNIX. Вскоре разработка дистрибутива BSD была продолжена в нескольких направлениях одновременно, что привело к появлению проектов, известных как FreeBSD, NetBSD, OpenBSD, TrustedBSD и DragonFlyBSD.

В настоящий момент GNU/Linux и представители семейства BSD быстро отвоёвывают рынок у коммерческих UNIX-систем и одновременно проникают как на настольные компьютеры конечных пользователей, так и на мобильные и встраиваемые системы. Одним из свидетельств данного успеха служит тот факт, что, когда фирма Apple искала основу для своей новой операционной системы, она выбрала NEXTSTEP операционную систему со свободно распространяемым ядром, разработанную фирмой NeXT и переименованную в Darwin после приобретения фирмой Apple. Данная система относится к семейству BSD и основана на ядре Mach. Применение Darwin BSD UNIX в Mac OS X делает его одной из наиболее широко используемых версий UNIX.



Современность


После разделения компании AT&T, товарный знак UNIX и права на оригинальный исходный код неоднократно меняли владельцев, в частности, длительное время принадлежали компании Novell.

В 1993 году Novell передала права на товарный знак и на сертификацию программного обеспечения на соответствие этому знаку консорциуму X/Open, который затем объединился с Open Software Foundation, образовав консорциум The Open Group. Он объединяет ведущие компьютерные корпорации и государственные организации, в том числе IBM, Hewlett-Packard, Sun, NASA и многие другие. Консорциум занимается разработкой открытых стандартов в области операционных систем, самым важным из которых является Single UNIX Specification, ранее известный как POSIX. С точки зрения The Open Group, название UNIX могут носить только системы, прошедшие сертификацию на соответствие Single UNIX Specification.

В 1995 году Novell продала права на существующие лицензии и дальнейшую разработку System V компании Santa Cruz Operation. В 2000 году Santa Cruz Operation продала свой UNIX-бизнес компании Caldera, которая затем была переименована в SCO Group. Хотя это название похоже на аббревиатуру SCO, используемую Santa Cruz Operation, это две разные компании.

SCO Group заявила, что она также обладает правами на исходный код UNIX и развернула кампанию против различных пользователей и поставщиков UNIX-подобных систем, требуя выплаты лицензионных отчислений. Однако Novell утверждает, что права на исходный код не были переданы Santa Cruz Operation и, таким образом, не перешли к SCO Group, а остаются у Novell, что и подтвердил вердикт суда.



Влияние UNIX



Идеи, заложенные в основу UNIX, оказали огромное влияние на развитие компьютерных операционных систем. В настоящее время UNIX-системы признаны одними из самых исторически важных ОС.

Как и Multics, UNIX была написана на языке высокого уровня, а не на ассемблере (доминировавшем в то время).

Она содержала значительно упрощённую, по сравнению с современными ей операционными системами, файловую модель. Файловая система включала как службы, так и устройства (такие как принтеры, терминалы и жёсткие диски) и предоставляла внешне единообразный интерфейс к ним, но дополнительные механизмы работы с устройствами (такие как IOCTL и биты доступа) не вписывались в простую модель «поток байтов».

UNIX популяризовала предложенную в Multics идею иеархической файловой системы с произвольной глубиной вложенности. Другие операционные системы того времени позволяли разбивать дисковое пространство на каталоги или разделы, но число уровней вложенности было фиксировано и, зачастую, уровень вложенности был только один. Позднее все основные фирменные операционные системы обрели возможность создания рекурсивных подкаталогов, также заимствованную из Multics.

То, что интерпретатор команд стал просто одной из пользовательских программ, а в качестве дополнительных команд выступают отдельные программы, является ещё одной инновацией Multics, популяризированной UNIX. Язык командной оболочки UNIX используется пользователем как для интерактивной работы, так и для написания скриптов, то есть не существует отдельного языка описания заданий, как, например, в системе JCL фирмы IBM. Так как оболочка и команды операционной системы являются обычными программами, пользователь может выбирать их в соответствии со своими предпочтениями, или даже написать собственную оболочку. Наконец, новые команды можно добавлять к системе без перекомпиляции ядра. Новый, предложенный в командной строке UNIX, способ создания цепочек программ, последовательно обрабатывающих данные, способствовал использованию параллельной обработки данных.

Существенными особенностями UNIX были полная ориентация на текстовый ввод-вывод и предположение, что размер машинного слова кратен восьми битам. Первоначально в UNIX не было даже редакторов двоичных файлов система полностью конфигурировалась с помощью текстовых команд. Наибольшей и наименьшей единицей ввода-вывода служил текстовый байт, что полностью отличало ввод-вывод UNIX от ввода-вывода других операционных систем, ориентированного на работу с записями. Ориентация на использование текста для представления всего, что только можно, сделала полезными т. н. конвейеры (англ. pipelines). Ориентация на текстовый восьмибитный байт сделала UNIX более масштабируемой и переносимой, чем другие операционные системы. Со временем текстовые приложения одержали победу и в других областях, например, на уровне сетевых протоколов, таких как Telnet, FTP, SMTP, HTTP и других.

UNIX способствовала широкому распространению регулярных выражений, которые были впервые реализованы в текстовом редакторе ed для UNIX. Возможности, предоставляемые UNIX-программам, стали основой стандартных интерфейсов операционных систем (POSIX).

Широко используемый в системном программировании язык Си, созданный изначально для разработки UNIX, превзошёл UNIX по популярности. Си был первым «веротерпимым» языком, который не пытался навязать программисту тот или иной стиль программирования. Си был первым высокоуровневым языком, предоставляющим доступ ко всем возможностям процессора, таким как ссылки, таблицы, битовые сдвиги, приращения и т. п. С другой стороны, свобода Си приводила к ошибкам переполнения буфера в таких функциях стандартной библиотеки Си, как gets и scanf. Результатом стали многие печально известные уязвимости, например, та, что эксплуатировалась в знаменитом черве Морриса.

Первые разработчики UNIX способствовали внедрению принципов модульного программирования и повторного использования в инженерную практику.

UNIX предоставлял возможность использования протоколов TCP/IP на сравнительно недорогих компьютерах, что привело к быстрому росту Интернета. Это, в свою очередь, способствовало быстрому обнаружению нескольких крупных уязвимостей в системе безопасности, архитектуре и системных утилитах UNIX.

Со временем ведущие разработчики UNIX разработали культурные нормы разработки программного обеспечения, которые стали столь же важны, как и сам UNIX (см. Философия UNIX).

Стандарты



Большое количество разных вариантов системы UNIX привело к необходимости стандартизовать её, чтобы упростить переносимость приложений и избавить пользователя от необходимости изучать особенности каждой разновидности UNIX. С этой целью ещё в 1980 была создана пользовательская группа /usr/group. Самые первые стандарты были разработаны в 19841985 гг. В настоящее время наиболее важными являются следующие стандарты:



Все стандарты POSIX собраны в документе IEEE 1003.



В начале 1990-х годов The Open Group предложила другой, похожий на POSIX стандарт Common API Specification, или Spec 1170. Стандарт приобрёл большую популярность, чем POSIX, поскольку был доступен бесплатно, в то время как IEEE требовало немалую плату за доступ к своему стандарту.

В 1998 году были начаты работы по объединению данных стандартов. Благодаря этому в настоящее время данные стандарты почти идентичны. Совместный стандарт называется Single UNIX Specification Version 3 и доступен бесплатно в интернете [3].

В целях совместимости несколько создателей UNIX-систем предложили использовать ELF-формат систем SVR4 для двоичных и объектных файлов. Единый формат полностью обеспечивает соответствие двоичных файлов в рамках одной компьютерной архитектуры.

Структура каталогов некоторых систем, в частности, GNU/Linux, определена в стандарте Filesystem Hierarchy Standard. Однако во многих отношениях этот тип стандарта является спорным, и он, даже внутри сообщества GNU/Linux, далеко не универсален.



Канонические команды UNIX


Ниже приведён список 60 команд из раздела 1 первой версии UNIX:


ar, as, b, bas, bcd, boot, cat, chdir, check, chmod, chown, cmp, cp, date, db, dbppt, dc, df, dsw, dtf, du, ed, find, for, form, hup, lbppt, ld, ln, ls, mail, mesg, mkdir, mkfs, mount, mv, nm, od, pr, rew, rkd, rkf, rkl, rm, rmdir, roff, sdate, sh, stat, strip, su, sum, tap, tm, tty, type, un, wc, who, write








GNU/Linux



Ссылка на оригинал: http://ru.wikipedia.org/wiki/Линукс

C версии: 1.3



GNU/Linux (произносится «гну слэш линукс») свободная UNIX-подобная операционная система. Она основана на системных программах, разработанных в рамках проекта GNU, и на ядре Linux. Зачастую, по историческим причинам и для краткости, эту систему называют просто «Linux».

GNU/Linux работает на PC-совместимых системах семейства Intel x86, а также на IA-64, AMD64, PowerPC, ARM и многих других.

К операционной системе GNU/Linux также часто относят программы, дополняющие эту операционную систему, и прикладные программы, делающие её полноценной многофункциональной операционной средой.

В отличие от большинства других операционных систем, GNU/Linux не имеет единой «официальной» комплектации. Вместо этого GNU/Linux поставляется в большом количестве так называемых дистрибутивов, в которых программы GNU соединяются с ядром Linux и другими программами. Наиболее известными дистрибутивами GNU/Linux являются Slackware, Red Hat, Fedora, Mandriva, SuSE, Debian, Gentoo, Ubuntu. Из дистрибутивов российских разработчиков наиболее известны ALT Linux и ASPLinux.

В отличие от Microsoft Windows, Mac OS (Mac OS X) и коммерческих UNIX-подобных систем, GNU/Linux не имеет географического центра разработки. Нет и организации, которая владела бы этой системой; нет даже единого координационного центра. Программы для GNU/Linux результат работы тысяч проектов. Некоторые из этих проектов централизованы, некоторые сосредоточены в фирмах, но большинство объединяют программистов со всего света, которые знакомы только по переписке. Создать свой проект или присоединиться к уже существующему может любой и, в случае успеха, результаты работы станут известны миллионам пользователей. Пользователи принимают участие в тестировании свободных программ, общаются с разработчиками напрямую, что позволяет быстро находить и исправлять ошибки и реализовывать новые возможности.


Именно такая гибкая и динамичная система разработки, невозможная для проектов с закрытым кодом, определяет исключительную экономическую эффективность GNU/Linux. Низкая стоимость свободных разработок, отлаженные механизмы тестирования и распространения, привлечение людей из разных стран, обладающих разным видением проблем, защита кода лицензией GPL всё это стало причиной успеха свободных программ. [1]


Конечно, такая высокая эффективность разработки не могла не заинтересовать крупные фирмы, которые стали открывать свои проекты. Так появились Mozilla (Netscape, AOL), OpenOffice.org (Sun), свободный клон Interbase (Borland) Firebird, SAP DB (SAP). IBM способствовала переносу GNU/Linux на свои мейнфреймы.


С другой стороны, открытый код значительно снижает себестоимость разработки закрытых систем для GNU/Linux и позволяет снизить цену решения для пользователя. Вот почему GNU/Linux стала платформой, часто рекомендуемой для таких продуктов, как Oracle Database, DB2, Informix, SyBase, SAP R3, Domino.

Сообщество GNU/Linux поддерживает связь посредством групп пользователей Linux.

Именно такая гибкая и динамичная система разработки, невозможная для проектов с закрытым кодом, определяет исключительную экономическую эффективность GNU/Linux. Низкая стоимость свободных разработок, отлаженные механизмы тестирования и распространения, привлечение людей из разных стран, обладающих разным видением проблем, защита кода лицензией GPL всё это стало причиной успеха свободных программ. [1]


Конечно, такая высокая эффективность разработки не могла не заинтересовать крупные фирмы, которые стали открывать свои проекты. Так появились Mozilla (Netscape, AOL), OpenOffice.org (Sun), свободный клон Interbase (Borland) Firebird, SAP DB (SAP). IBM способствовала переносу GNU/Linux на свои мейнфреймы.

С другой стороны, открытый код значительно снижает себестоимость разработки закрытых систем для GNU/Linux и позволяет снизить цену решения для пользователя. Вот почему GNU/Linux стала платформой, часто рекомендуемой для таких продуктов, как Oracle Database, DB2, Informix, SyBase, SAP R3, Domino.

Сообщество GNU/Linux поддерживает связь посредством групп пользователей Linux.






Рис. 2 Развитие дистрибутивов GNU/Linux



Linux (ядро)



Ссылка на оригинал: http://ru.wikipedia.org/wiki/Linux_(ядро)

C версии: 1.3



Linux (Линукс) ядро операционной системы, разработка которого была начата финским студентом Линусом Торвальдсом в 1991 году.

В большинстве своём код написан на Си с некоторыми расширениями GNU C и на ассемблере (с использованием синтаксиса GNU Assembler AT&T).

Распространяется свободно на условиях GNU General Public License.

Торговая марка Linux зарегистрирована на Линуса Торвальдса.


История



Начало проекту было положено в 1991 году с публикации сообщения в новостной группе Usenet comp.os.minix] следующего содержания[1]:

Привет всем, кто использует миникс Я делаю (бесплатную) операционную систему (всего лишь хобби, не будет большой и профессиональной как gnu) для клонов 386 (486) AT

К тому времени проект GNU уже создал множество составляющих для свободной операционной системы, но их ядро GNU Hurd ещё не было готово. BSD-системы в то время не могли быть использованы по юридическим причинам, связанным с использовавшимися лицензиями. Поэтому пустующее место ядра для свободной ОС занял Linux и, несмотря на ограниченную функциональность ранних версий, привлёк к себе множество разработчиков и пользователей.

Linux это название только ядра, а не операционной системы. Часто системы, основанные на ядре Linux, называют просто Linux, но большинство из них на самом деле называются GNU/Linux, так как состоят из ядра Linux и множества системных библиотек и программ, написанных в рамках проекта GNU.



Хронология



* Апрель 1991 21-летний Линус Торвальдс начал работу над некоторыми механизмами операционной системы. Он начал с эмулятора терминала и планировщика задач.

* 25 августа 1991 Линус поместил следующее сообщение (русский перевод оригинального сообщения[1] на английском):


From: torvalds@klaava.Helsinki.Fi (Линус Бенедикт Торвальдс)

Newsgroups: comp.os.minix

Subject: Маленький опрос о моей новой операционной системе

Message-ID:<1991Aug25.205708.9541@klaava.Helsinki.Fi>

Date: 25 Aug 91 20:57:08 GMT

Organization: Хельсинский Университет


Привет всем, кто использует миникс - Я делаю (бесплатную) операционную систему (всего лишь хобби, не будет большой и профессиональной как gnu) для клонов 386 (486) AT. Она ваялась с апреля, и скоро будет готова. Я хочу отзывов о том, что людям нравится/не нравится в миниксе, ибо моя система на неё похожа(такое же устройство файловой системы(по практическим соображениям) среди всего прочего).

Я уже включил bash (1.08) и gcc (1.40), и похоже всё работает. Это значит, что что-то полезное появится через несколько месяцев, и я хотел бы узнать, чего люди хотят. Любые советы принимаются, но я не обещаю, что всё исполню :-)


Линус (torvalds@kruuna.helsinki.fi)


PS. Да, у неё никакого миниксового кода, и многозадачная фс. Она НЕ переносима (применяет переключение задач 386-го, итп.), и скорее всего будет поддерживать только AT-винчестеры, так как это всё, что у меня есть :-(








Версии



Торвальдс продолжает выпускать новые версии ядра, объединяя изменения, вносимые другими программистами, и внося свои. В дополнение к официальным версиям ядра существуют альтернативные ветки, которые могут быть взяты из различных источников. Как правило, разработчики дистрибутивов GNU/Linux поддерживают свои собственные версии ядра Linux, например, включая в них драйвера устройств, которые ещё не включены в официальную версию.


Нумерация версий



Номер версии ядра Linux в настоящее время содержит четыре числа, следуя недавнему изменению в долго используемой до этого политике схемы версий, основанной на трёх числах. Для иллюстрации допустим, что номер версии составлен таким образом: A.B.C[.D] (например 2.2.1, 2.4.13 или 2.6.12.3).


* Число A обозначает версию ядра. Оно изменяется наименее часто и только тогда, когда вносятся значительные изменения в код и концепцию ядра. Оно изменялось дважды в истории ядра: в 1994 (версия 1.0) и в 1996 (версия 2.0).


* Число B обозначает старшую версию ревизии ядра. Чётные числа обозначают стабильные ревизии, то есть те, которые предназначены для промышленного использования, такие как 1.2, 2.4 или 2.6. Нечётные числа обозначают ревизии для разработчиков, такие как 1.1 или 2.5. Они предназначены для тестирования новых улучшений и драйверов до тех пор, пока они не станут достаточно стабильными для того, чтобы быть включёнными в стабильный выпуск.


* Число C обозначает младшую версию ревизии ядра. В старой трёхчисловой схеме нумерации, оно изменялось тогда, когда в ядро включались заплатки связанные с безопасностью, исправления ошибок, новые улучшения или драйвера. С новой политикой нумерации, однако, оно изменяется только тогда, когда вносятся новые драйвера или улучшения; небольшие исправления поддерживаются числом D.


* Число D впервые появилось в случае, когда смертельная ошибка, которая требовала незамедлительного исправления, была обнаружена в коде ядра 2.6.8, связанного с NFS. Однако, было недостаточно других изменений, для того чтобы это послужило причиной для выпуска новой младшей ревизии (которой должна была стать 2.6.9). Поэтому была выпущена версия 2.6.8.1 с единственным исправлением в виде исправления для этой ошибки. С ядра 2.6.11, эта нумерация была адаптирована в качестве новой официальной политики версий. Исправления ошибок и заплатки безопасности теперь управляются с помощью четвёртого числа, тогда как большие изменения выполняются в изменениях младшей версии ревизии ядра (число C).



Поддержка



В то время как Торвальдс продолжает выпускать новые экспериментальные версии, руководство «старыми» стабильными версиями передаётся другим лицам:

Версии Сопроводители

2.0 Дэвид Виенхал

2.2 Марк-Кристиан Петерсон (раньше Элан Кокс)

2.4 Марчело Тозатти

2.6 Эндрю Мортон / Линус Торвальдс


Другими программистами ядра Linux являются Роберт Лав и Инго Молнар. (См. Список сопроводителей Linux (англ.)).



Стабильные версии



* Версия 1.0 в марте 1994 поддерживала только однопроцессорные i386-машины.

* Версия 1.2 в марте 1995 добавлена поддержка процессоров Alpha, SPARC и MIPS.

* Версия 2.0 в июне 1996 добавлена поддержка других процессоров, а также многопроцессорных систем.

* Версия 2.2 в январе 1999 [2](англ.).

* Версия 2.4 в январе 2001 добавлена поддержка ISA Plug and Play, процессоров PA-RISC, шин USB и PC-Card (PCMCIA). Поддержка для процессоров Axis Communications ETRAX CRIS и файловой системы InterMezzo были добавлены чуть позже. [3](англ.)

* Версия 2.6 от 17 декабря 2003:

o встроен uClinux (для микроконтроллеров);

o добавлена поддержка для процессоров Hitachi серии H8/300, NEC v850, процессоры для встроенных систем Motorola m68k, новая архитектура доступа к памяти NUMA, поддержка NCR Voyager, технологии Intel hyperthreading и PAE;

o добавлено:

+ поддержка файловой системы XFS SGI;

+ улучшена поддержка APIC;

+ увеличено максимальное количество пользователей и групп с 65 000 до более 4 млрд;

+ увеличено максимальное количество процессов с 32 000 до 1 млрд;

+ увеличено максимальное количество типов устройств (major device) с 255 до 4095 и максимальное количество устройств каждого типа (minor device) с 255 до более миллиона;

+ улучшена поддержка 64-битных систем и поддержка файловых систем размером более 16 Тбайт;

+ улучшено время реакции для процессов реального времени;

+ переписана реализация потоков под использование Native POSIX Thread Library (NPTL);

+ улучшен загрузчик модулей;

+ добавлена новая служебная файловая система sysfs;

+ интеграция User-mode Linux;

+ и др.



Архитектура

Ядро Linux поддерживает многозадачность, виртуальную память, динамические библиотеки, отложенную загрузку, производительную систему управления памятью и многие сетевые протоколы.

На сегодняшний день Linux монолитное ядро с поддержкой загружаемых модулей. Драйверы устройств и расширения ядра обычно запускаются на «кольце 0», с полным доступом к оборудованию. В отличие от обычных монолитных ядер, драйвера устройств легко собираются в виде модулей и загружаются или выгружаются во время работы системы.

То, что архитектура Linux не является микроядерной, вызвало обширнейшие прения между Линусом Торвальдсом и Эндрю Таненбаумом в конференции comp.os.minix(англ.) в 1992 г.



Совместимость



Не задуманный изначально как многоплатформенное ядро, Linux на данный момент портирован на очень широкий круг архитектур, запускается на широком спектре оборудования от iPAQ (карманный компьютер) до IBM S/390 (высокопроизводительный мейнфрейм). Linux используется как ядро операционной системы на суперкомпьютере Blue Gene (англ.) фирмы IBM.

Изначально Linux разрабатывался для 32-битных x86-совместимых ПК; на сегодняшний день Linux запускается на следующих процессорных архитектурах:


* ARM

o Acorn: Archimedes, A5000, RiscPC

o StrongARM, Intel XScale и т. п.

o HP iPAQ

* Axis Communications CRIS

* DEC Alpha

* HP PA-RISC

* Hitachi: SuperH (SEGA Dreamcast), H8/300

* IBM S/390

* IBM zSeries-мэйнфреймы

* Intel 80386 и выше: IBM PC и совместимые с процессорами:

o 80386, 80486, а также AMD, Cyrix, TI и IBM-варианты;

o серия Pentium;

o Core, Core2 Duo в 32 и 64-х битных версиях.

o AMD Am5x86, K5, K6, Athlon (все 32-битные версии), Duron;

o AMD64: 64-битная технология AMD (также известная как x86-64);

o Cyrix 5x86, 6x86 (M1), 6x86MX и MediaGX (National/AMD Geode) серия;

o VIA C3 (англ.) и последующие процессоры;

o поддержка Intel 8086, 8088, 80186, 80188 и 80286 процессоров находится в разработке (см. проект ELKS(англ.));

o Microsoft Xbox (Pentium III).

* Intel IA-64

* MIPS

o Silicon Graphics, Inc.;

o Cobalt Qube, Cobalt Raq;

o Sony PlayStation 2, PlayStation 3;

o DECstation;

o некоторые другие.

* Motorola 68020 и выше:

o более новые Amiga: A1200, A2500, A3000, A4000

o Apple Macintosh II, LC, Quadra, Centris и ранняя серия Performa

o рабочие станции Sun Microsystems серии 3 (экспериментальная, с использование Sun-3 MMU)

* NEC v850e

* Renesas M32R

* PowerPC и IBM POWER:

o все новые компьютеры Apple (все оснащённые PCI Power Macintoshes, ограниченная поддержка NuBus Power Macs)

o клоны PCI Power Mac, разработанные Power Computing, UMAX и Motorola

o IBM RS/6000, iSeries- и pSeries-системы

o Pegasos I и II системы

o некоторые встроенные системы PowerPC

* SPARC и UltraSparc: Sun 4-series, SPARCstation/SPARCserver, Ultra-, Blade- и Fire-серии рабочих станций и серверов







Лицензия



Linux распространяется на условиях лицензии GNU General Public License, то есть свободно. Эту лицензию выбрал Линус Торвальдс практически сразу после того, как стало понятно, что его хобби начало получать распространение по всему миру. Обладателем торговой марки Linux является Линус, а помогает следить за соблюдением его прав и условий GPL Фонд свободного программного обеспечения.

Символ



Официальным cимволом Linux является пингвин по имени Tux, отличающийся от «обычных» пингвинов жёлтым цветом клюва и лап.



BSD

Ссылка на оригинал: http://ru.wikipedia.org/wiki/BSD

C версии: 1.3



BSD (англ. Berkeley Software Distribution) система распространения программного обеспечения в исходных кодах, созданная для обмена опытом между учебными заведениями. Особенностью пакетов ПО BSD была специальная лицензия BSD, которую кратко можно охарактеризовать так: весь исходный код собственность BSD, все правки собственность их авторов.

В данный момент термин BSD чаще всего употребляется как синоним BSD-UNIX общего названия вариантов UNIX, восходящих к дистрибутивам университета Беркли.

К семейству BSD относятся: NetBSD, FreeBSD, OpenBSD, DragonFly BSD, PC-BSD, DesktopBSD, Darwin (ядро Mac OS X).

Отличия от «классической» системы UNIX состоят в отсутствии переключения уровней выполнения, системе печати, файловой системе и командного процессора. Пользовательские команды практически идентичны.

История BSD



В начале 1978 года аспирант UCB Билл Джой (Bill Joy) начал создание дистрибутива программ Беркли (Berkeley Software Distribution BSD). Первая лента (360м, ценой около $50) содержала систему Pascal для UNIX и редактор ex; распространено около 30 копий. До конца 1978 года распространялся пакет 2BSD, продано около 75 копий. Приблизительно тогда же компания Interactive Systems выпускает первую коммерческую версию UNIX, а фирма Whitesmiths первый клон системы UNIX Idris.


Версия UNIX 7 была первой переносимой операционной системой. Однако её производительность была хуже, чем в версии шесть. После многих доработок в январе 1982 года вышла в свет модель 2.8.1BSD.



Впоследствии вышли версии:



* 4BSD октябрь 1980

* 4.1BSD июнь 1981

* 4.1a, 4.1b и 4.1c (19821983)

* 4.2 сентябрь 1983 действительно сильно переработанная система, включавшая поддержку сетей (протокол TCP/IP, новую файловую систему и возможность использования сигналов.

Последней университетской версией была 4.4BSD(июнь 1993). После суда права на BSD были переданы компании BSDI (Berkeley Software Design, Inc).

На базе BSD-UNIX существуют несколько операционных систем с открытыми исходными текстами:

* NetBSD

* FreeBSD

* OpenBSD

* DragonFlyBSD

* PC-BSD

* DesktopBSD





GNU General Public License

Ссылка на оригинал: http://ru.wikipedia.org/wiki/GNU_General_Public_License

C версии: 1.3



GNU General Public License (Универсальная общедоступная лицензия GNU или Открытое лицензионное соглашение GNU) возможно, наиболее популярная лицензия на свободное программное обеспечение, созданная в рамках проекта GNU в 1988 г. Её также сокращённо называют GNU GPL или даже просто GPL, если из контекста понятно, что речь идёт именно о данной лицензии (существует довольно много других лицензий, содержащих слова «general public license» в названии). Вторая версия этой лицензии была выпущена в 1991 году, третья версия, после многолетней работы и длительной дискуссии в 2007 году. GNU Lesser General Public License (LGPL) это модифицированная версия GPL, предназначенная для некоторых библиотек ПО.

Цель GNU GPL предоставить пользователю права копировать, модифицировать и распространять программы (что по умолчанию запрещено законом об авторских правах), а также гарантировать, что и пользователи всех производных программ получат вышеперечисленные права. Принцип «наследования» прав называется «копилефт» (транслитерация английского «copyleft») и был придуман Ричардом Столлмэном. По контрасту с GPL, лицензии собственнического ПО очень редко дают пользователю такие права и обычно, наоборот, стремятся их ограничить, например, запрещая восстановление исходного кода.

Свобода

GPL предоставляет получателям компьютерных программ следующие права, или «свободы»:

История



GPL была написана Ричардом Столлмэном для использования с программами как часть проекта GNU. Она базируется на сходных лицензиях, использовавшихся для ранних версий GNU Emacs, GDB (отладчика GNU) и Коллекции компиляторов GNU (GCC), унифицирует и обобщает их.

Лицензии-прототипы содержали части, подобные частям GPL, но были специфичными для каждой программы. Целью Столлмэна являлось создание единой лицензии, которая могла бы использоваться для любого проекта, делая таким образом возможным совместное использование кода различными программами. Такой лицензией и стала первая версия GNU GPL, выпущенная в январе 1989 года.

В 1990 году стало очевидным, что требуется менее ограничивающая лицензия, которая могла бы использоваться для некоторых библиотек ПО; когда версия 2 GPL была выпущена в июне 1991 года, вместе с ней была введена в обращение GNU Library General Public License, также получившая номер 2, для обозначения того, что эти две лицензии являются взаимодополняющими. Номера версий разошлись в 1999 году, когда была выпущена LGPL версии 2.1, которая была переименована в Lesser General Public License для уточнения её местоположения в философии GNU.



GPL v3



В 2005 году Эбен Моглен и Ричард Столлмэн написали черновик GPL версии 3. В разгоревшейся затем 7 апреля 2005 года дискуссии в Филадельфии, Столлмэн сделал несколько заявлений, касающихся патентов на ПО и DRM.

В 2006 году Free Software Foundation начал двенадцатимесячную консультацию о возможных изменениях в GPL. Этот процесс координируется Фондом свободного программного обеспечения, Правовым центром свободы программного обеспечения и Европейским Фондом свободного программного обеспечения. Целью консультаций является создание новой версии лицензии с учётом рекомендаций и опыта всех заинтересованных сторон, но с сохранением приверженности принципам свободного ПО.



Первый черновик был опубликован 16 января 2006 года.



Тем не менее, 25 января 2006 года Линус Торвальдс публично заявил, что ядро Linux, скорее всего, будет по-прежнему распространяться по лицензии GPL версии 2. (В отличие от многих других GPL-программ, Linux распространяется на условиях только второй версии GPL, а не «версии 2 или более поздней»).


В своём сообщении в почтовую рассылку для Linux-разработчиков Линус Торвальдс, автор ядра Linux, говорит о том, что ОС Solaris может инициировать переход Linux-ядра на новую готовящуюся версию лицензии на свободное программное обеспечение GNU GPLv3.


«Если Sun действительно собирается выпустить OpenSolaris под GPLv3, это может стать хорошей причиной» для перехода Linux на новую лицензию, заявил Торвальдс.[1]


«Не думаю, что GPLv3 такая же хорошая лицензия, как и GPLv2, но с другой стороны, я прагматик, и, если мы можем избежать ситуации с существованием двух ядер, распространяющихся под разными лицензиями, и с вызванными этим разногласиями, я по крайней мере вижу причину для перехода на GPLv3», пояснил свою позицию главный разработчик Linux-ядра.


До этого Торвальдс уже выражал своё недовольство новой версией лицензии GNU GPL, однако после появления последнего чернового варианта GPLv3 стал лучше относиться к этому проекту. Несмотря на это, сам он до сих пор отдаёт предпочтение GPLv2.

Компании, распространяющие GPLv3-ПО, не могут предъявлять судебные претензии к пользователям GPLv3-продуктов.

Окончательная версия GPLv3 была опубликована 29 июня 2007. Черновой вариант перевода можно прочитать тут.

Схема GNU GPL



Текст GNU GPL состоит из нескольких пронумерованных разделов. Ниже приведена схема версии 2.0 лицензии. Эта схема не имеет никакой юридической силы и служит только для краткого ознакомления.


0. Определения

* (первый абзац) Определение термина «программа»

* (второй абзац) Область действия лицензии

1. Право на копирование и распространение

2. Изменение программы

* (первый абзац) Право на изменения при соблюдении следующих условий:

o a) добавление информации об изменении в модифицированных файлах;

o b) лицензирование модифицированных версий на условиях GNU GPL;

o c) условное требование интерактивного вывода информации об авторских правах и отсутствии гарантии.

* (абзацы 24) Уточнение термина «производная работа»

3. Требование предоставления исходного кода

* (первый абзац) Возможные варианты распространения исполнимого кода:

o a) распространение вместе с исходным кодом, или

o b) распространение с гарантией предоставления исходного кода, или

o c) (для некоммерческого использования) распространение вместе с такой гарантией, полученной от третьего лица.

* (второй абзац) Определение термина «исходный код»

* (третий абзац) Достаточность одинакового доступа для копирования исполнимого и исходного кодов

4. Прекращение действия лицензии при нарушении её условий

5. Акты, означающие принятие лицензии

6. Запрещение дополнительных ограничений при дальнейшем распространении

7. Внешние ограничения не снимают обязательства выполнять условия лицензии

8. Возможность географических ограничений

9. Будущие версии GNU GPL

10. Запросы на исключения из правил

11. Отказ от предоставления гарантий

12. Отказ от ответственности












Linux не для идиотов: сборник рассказов и рецептов



Ссылка на оригинал: http://myfotomx.com/dalth/linuxbook.odt

Автор: Артем Капитула (no-dashi, dalth & viking).

Скачано с http://myfotomx.com/dalth: 15.07.07

C версии: 1.1

Предисловие

Я много лет работал с Linux, и, общаясь со многими единомышленниками, сделал один странный вывод: нам катастрофически не хватает документации. Причем не инструкций вида «сделайте так и вот так» и не справочных руководств, а некоторого «мостика» между новичком, который видел только графическую оболочку подобную GNOME или KDE, и профессионалом, который может скомпилировать необходимый ему драйвер, даже если этот драйвер упорно сопротивляется.

Соответственно, я попытался сделать попытку написать книжку (хотя на книгу этот материал не тянет, скорей на методичку), которая позволила бы сравнительно просто перейти с пользовательского уровня знакомства с Linux на более высокий уровень, не проходя по типичным ошибкам, и за сравнительно короткое время.

Некоторое время я использовал фрагменты этой книги также как часть учебного курса в Челябинском Государственном университете (ЧелГУ) для того, чтобы мои студенты могли ориентироваться в системе несколько лучше, чем на уровне команд ls/ps/exit. Конечно, если честно как учебное пособие эта маленькая книга непригодна, но, как мне кажется, она неплохо подходит как дополнительная литература.

Если у вас есть пожелания и дополнения пишите мне почтой на dalt74@gmail.com, я постараюсь учесть ваши замечания в следующей редакции. Большое спасибо всем тем кто участвовал в рецензировании и помогал советами и замечаниями.



Искренне ваш, Артем Капитула (no-dashi, dalth & viking)



P.S. если вы будете распечатывать или выкладывать это пособие пожалуйста, указывайте ссылку на автора и оригинальный источник, договорились?



P.P.S. пока что есть следующий to-do list: основы DNS, базовые настройки серверов и рабочих станций под типичные нужды. Ориентировочный срок следующей редакции через три месяца.

Ядро и модули

Ядро Linux является единственным процессом, имеющим непосредственный доступ к аппаратуре все остальные процессы обращаются к устройствам только через ядро. В ядре Linux можно выделить несколько важных подсистем: подсистему управления памятью; планировщик задач; подсистему VFS виртуальную файловую систему и драйверы.

Подсистема управления памятью управляет распределением оперативной памяти между задачами, а также обслуживает файл подкачки, планировщик задач управляет разделением процессорного времени между задачами (процессами и нитями), подсистема VFS предназначена для обслуживания файловых операций.

Драйверы предназначены для управления устройствами и поддержки различных протоколов. Существует две разновидности драйверов статически подключенные в ядро драйверы и загружаемые модули; первые всегда загружены, вторые могут быть загружены при необходимости и выгружены, когда необходимость в них отпала. Каждый модуль и само ядро содержат сигнатуру версии специальную метку, которая описывает версию ядра и некоторые опции, использованные при компиляции ядра. Кроме того, ядра версии 2.6 могут поддерживать цифровую подпись модулей. Это было сделано для повышения надежности системы по умолчанию ядро не будет загружать и использовать драйверы, предназначенные для другой версии ядра, или собранные с другими опциями, поскольку это может привести к возникновению проблем. Версию ядра можно узнать с помощью команды uname:

[dalth@inferno dalth]$ uname -r

2.6.8.1

В принципе, утилиты для работы с модулями поддерживают возможность загрузки модулей, собранных для другого ядра но пользоваться этой возможностью следует с крайней осторожностью, поскольку это может привести к непредсказуемым последствиями от ошибок ядра (kernel panic) и вплоть до странных потерь данных и непонятных ошибок, взявшихся на пустом месте.

В большинстве дистрибутивов образ ядра располагается в каталоге /boot, а загружаемые модули ядра располагаются в /lib/modules/<версия_ядра>, там же располагается таблица зависимостей модулей, поскольку некоторые модули могут нуждаться для своей работы в других модулях (например, драйвер поддержки SCSI-дисков нуждается в драйвере поддержки SCSI как следствие этого, если объекты какого-либо модуля используются другим драйвером, такой модуль невозможно выгрузить). Следующий листинг демонстрирует достаточно типичное содержание каталога модулей для ядер линейки 2.6:

[root@viking dev]# ls -l /lib/modules/2.6.8.1/

total 616

lrwxrwxrwx 1 root root 18 Авг 27 15:36 build -> /usr/src/linux

drwxr-xr-x 10 root root 4096 Окт 1 13:55 kernel

-rw-r--r-- 1 root root 108680 Окт 1 13:56 modules.alias

-rw-r--r-- 1 root root 69 Окт 1 13:56 modules.ccwmap

-rw-r--r-- 1 root root 153967 Окт 1 13:56 modules.dep

-rw-r--r-- 1 root root 73 Окт 1 13:56 modules.ieee1394map

-rw-r--r-- 1 root root 357 Окт 1 13:56 modules.inputmap

-rw-r--r-- 1 root root 16658 Окт 1 13:56 modules.isapnpmap

-rw-r--r-- 1 root root 85093 Окт 1 13:56 modules.pcimap

-rw-r--r-- 1 root root 68078 Окт 1 13:56 modules.symbols

-rw-r--r-- 1 root root 150781 Окт 1 13:56 modules.usbmap

lrwxrwxrwx 1 root root 18 Окт 1 13:22 source -> /usr/src/linux

[root@viking dev]# find /lib/modules/2.6.8.1/kernel -type f | head -20

/lib/modules/2.6.8.1/kernel/arch/i386/kernel/cpuid.ko

/lib/modules/2.6.8.1/kernel/arch/i386/kernel/microcode.ko

/lib/modules/2.6.8.1/kernel/arch/i386/kernel/msr.ko

/lib/modules/2.6.8.1/kernel/crypto/blowfish.ko

/lib/modules/2.6.8.1/kernel/crypto/deflate.ko

/lib/modules/2.6.8.1/kernel/crypto/md5.ko

/lib/modules/2.6.8.1/kernel/crypto/twofish.ko

/lib/modules/2.6.8.1/kernel/drivers/acpi/fan.ko

/lib/modules/2.6.8.1/kernel/drivers/acpi/processor.ko

/lib/modules/2.6.8.1/kernel/drivers/acpi/thermal.ko

/lib/modules/2.6.8.1/kernel/drivers/base/firmware_class.ko

/lib/modules/2.6.8.1/kernel/drivers/block/cryptoloop.ko

/lib/modules/2.6.8.1/kernel/drivers/block/loop.ko

/lib/modules/2.6.8.1/kernel/drivers/block/nbd.ko

/lib/modules/2.6.8.1/kernel/drivers/block/paride/epat.ko

/lib/modules/2.6.8.1/kernel/drivers/block/paride/paride.ko

/lib/modules/2.6.8.1/kernel/drivers/block/paride/pd.ko

/lib/modules/2.6.8.1/kernel/drivers/block/paride/pg.ko

/lib/modules/2.6.8.1/kernel/drivers/bluetooth/bcm203x.ko

/lib/modules/2.6.8.1/kernel/drivers/bluetooth/bfusb.ko

[root@viking dev]#

Бинарные файлы модулей содержатся в подкаталоге kernel, и имеют расширение .o для ядер линейки 2.4 и расширение .ko для ядер линейки 2.6. В файлах modules.***map перечисляются символы (функции и переменные), экспортируемые модулями.

Часто в одном каталоге с модулями содержатся ссылки на каталоги, в которых хранились исходные тексты ядра и в котором производилась сборка ядра (это ссылки source и build, соответственно). Эти ссылки, как правило, используются для того, чтобы скомпилировать модули или программы, которые зависят от версии ядра (например, эти ссылки используются при инсталляции модуля поддержки видеокарт nvidia).

Учет взаимосвязей между загруженными модулями производится с помощью счетчика ссылок модуль увеличивает свой счетчик ссылок как только какой-либо его объект начинает использоваться другими драйверами. Когда объекты модуля освобождаются, счетчик ссылок уменьшается. Модуль может быть выгружен, если число ссылок на него станет равно 0. В ядрах версии 2.6 существует возможность произвести принудительную выгрузку модуля даже если он используется, но этим пользоваться без крайней необходимости не рекомендуется, поскольку очень возможно возникновение ошибок.

Ядро содержит множество переменных и функций, которые используются различными драйверами, и соответственно, если какой-либо драйвер должен обратиться к такому объекту, он должен знать его адрес. Некоторые драйверы также содержат переменные и функции, которые должны быть доступны другим драйверам, и адреса таких объектов тоже размещаются в специальной таблице. При загрузке модуля ядро и программа загрузки модулей устанавливает адреса всех объектов, в которых нуждается загружаемый модуль, и только после этого модуль может начать инициализацию.

Загрузка модулей и их выгрузка осуществляются утилитами modprobe, insmod и rmmod. Программы modinfo и depmod предназначены для получения служебной информации о загружаемых модулях. В процессе своей работы эти утилиты опираются на конфигурационные файлы /etc/modprobe.conf (для ядер 2.6.X) или modules.conf (для ядер 2.4.X).

Загрузка операционной системы

Для компьютеров архитектуры x86 последовательность загрузки хорошо описана в специализированной литературе, но мы все-таки кратко ее повторим. После включения компьютера первым загружается BIOS. Он тестирует аппаратуру и инициализирует устройства. После этого BIOS прочитывает начальный сектор загрузочного жесткого диска (MBR), убеждается что он содержит код первичного загрузчика, и передает управление прочитанному коду. Кроме кода первичного загрузчика, начальный сектор также может содержать таблицу разделов жесткого диска.

В задачи первичного загрузчика входит чтение основного кода загрузчика операционной системы и передача управления ему, после чего основная часть загрузчика может считать конфигурационный файл, загрузить ядро операционной системы, установить параметры для ядра и передать ядру управление. Ядро инициализирует драйверы, проверяет параметры и, опираясь на параметры, пытается смонтировать корневую файловую систему, после чего (если не было проинструктировано об ином) запускает программу /sbin/init. Дальнейшая работа init подробно описана во множестве книг и статей.

В настоящий момент в мире Linux наиболее распространен загрузчик GRUB. Этот загрузчик состоит из нескольких частей первичного загрузчкиа, собственно основного кода который организует интерфейс пользователя, и набора мини-драверов различных файловых систем, позволяющих прочесть необходимые файлы с файловой системы в момент когда операционная система еще недоступна. Каждая из этих компонент работает на одноим из двух этапов загрузки. Рассмотрим эти этапы:

Этап 0 здесь срабатывает первичный загрузчик GRUB. Он компактен и умещается в один блок жесткого диска, что позволяет при желании разместить его в MBR. В задачи кода stage_0 входит прочтение кода необходимого на следующем этапе (собственно кода загрузчика и мини-драйвера файловой системы где расположены основные файлы загрузчика), и передача управления прочитанному коду.

Этап 1 это на этом этапе первичным загрузчиком в память уже загружен основной код загрузчика, а также мини-драйвер файловой системы, на которой расположены конфигурационные файлы загрузчика, ядро и необходимые драйверы. Основной код, используя функции мини-драйвера, прочитывает конфигурационный файл и организует диалог с пользователем. В зависимости от выбора пользователя, используя мини-драйвер файловой системы, с диска прочитываются файлы ядра и необходимых драйверов, после чего управление передается ядру. Как вариант, пользователь может отказаться от загрузки Linux и инструктировать GRUB прочесть загрузочный сектор некоторого раздела жесткого диска и передать управление ему.

Первичный загрузчик из состава GRUB может быть расположен как в MBR, так и в загрузочном секторе какого-либо раздела жесткого диска или даже храниться в файле и быть вызван из другого загрузчика (например NTLOADER).

Нередко случаются ситуации, когда корневая файловая система располагается на устройстве, чей драйвер скомпилирован в виде модуля, или драйвер корневой файловой системы скомпилирован в виде модуля. Получается замкнутый круг чтобы смонтировать корневую файловую систему систему, необходимо прочесть драйвер, а чтобы прочесть драйвер нужно смонтировать корневую файловую систему. Чтобы разорвать этот порочный круг, в Linux была введен поддержка initrd INITial RamDisk.

Initial ramdisk это файл, который прочитывается загрузчиком ОС и загружается в память вместе с ядром. Ядро интерпретирует фрагмент памяти, куда загружен этот файл, как блочное устройство с помощью специального драйвера, статически вкомпилированного в ядро. После инициализации статически скомпилированных драйверов ядро монтирует файловую систему, хранящуюся в initrd и загружает с нее драйверы и запускает программы, необходимые для монтирования корневой файловой системы.

Обычно файл с образом ядра хранится в каталоге /boot и называется vmlinuz-<версия>, там же располагается файл initrd-<версия>.img, содержащий образ файловой системы initrd. Для каждой версии ядра необходим свой образ initrd, в который включены модули для этой версии ядра. В большинстве случаев образ initrd поставляется в бинарном пакете вместе с ядром, или автоматически создается в процессе построения ядра из исходных текстов в момент выполнения команды make install, если же возникает ситуация, когда необходимо повторно собрать образ initrd (например, в сервере сменили SCSI-контроллер), можно воспользоваться специальной командой mkinitrd, позволяющей произвести повторную генерацию initrd:

[root@viking dalth]# mkinitrd /tmp/initrd-2.4.8.1.img 2.6.8.1

[root@viking dalth]# cp /tmp/initrd-2.4.8.1.img /boot

[root@viking dalth]# reboot

Для Linux существует два основных загрузчика LILO и GRUB. Второй является более поздней разработкой и немного удобней в использовании, а LILO используется по историческим или личным причинам (например, он нравится системному администратору), либо в некоторых случаях, когда требуются специфичные для LILO функции. Для более подробной справки лучше обратиться к справочному руководству (man grub, man lilo).

Из интересных особенностей GRUB и LILO следует отметить то, что и оба этих загрузчика, и ядро оперируют термином корневой файловой системы но если с точки зрения ядра эта та файловая система, которая содержит программу /sbin/init, то с точки зрения обоих загрузчиков корневой файловой системой является та, которая содержит образ ядра и файл initrd.

Организация памяти

Подсистема виртуальной памяти управляет распределением оперативной памяти между задачами (процессами). Каждая задача считает, что ей выделен непрерывный участок памяти максимального размера, поддерживаемого на соответствующей архитектуре (для архитектуры x86 это 4GB). Из них последний гигабайт резервируется для себя ядром, часть отдается под код программы и разделяемые библиотеки (оба этих фрагмента ядром защищаются), а оставшееся пространство отдается собственно программе под ее данные но это только то, как видит это все программа.

На самом же деле программа занимает только тот объем памяти, с которым она реально работает. Большинство памяти существует только на бумаге, т.е. будет предоставлена программе в тот момент, когда она обратится в эту область. Ядро распределяет память страницами фиксированного размера. Процедура, когда страница оперативной памяти объявляется частью адресного пространства процесса, называется отображением этой страницы в адресное пространство процесса.

Соответственно, ядро отображает реально используемые страницы в виртуальное адресное пространство процесса. Когда процесс обращается к некоторой странице своего адресного пространства, ядро проверяет, имеет ли он право на доступ к этой странице, и если проверка пройдена и доступ получен, то ядро переадресовывает обращение на реальный адрес этой страницы. Если это первое обращение к странице, ядро попытается найти свободную страницу и в случае успеха отобразит ее в адресное пространство соответствующего процесса. Размер страницы фиксирован архитектурой процессора, и для x86 ее размер составляет 4096 байт.

Если случается ситуация, когда свободных страниц больше нет, но существует файл подкачки, ядро может убрать одну из наиболее долго не использовавшихся страниц в файл подкачки, и освободившуюся физическую страницу отдать запросившему память процессу. Если же нет ни незанятого пространства в файле подкачки, ни свободных страниц RAM, то развитие событий может быть следующим: либо запросивший память процесс прерван и убит системой, либо какой-то другой из процессов (это определяется специфическими алгоритмами) будет убит ядром, и освободившаяся память будет передана запросившему память процессу.

На самом деле большинством действий занимается одна из подсистем процессора, называемая MMU Memory Management Unit, и в действительности ядро просто полагается на его работу и вмешивается в нее только для проведения операций пейджинга (подгрузки/выгрузки страниц в SWAP-файл), или когда возникает ошибка доступа к странице.

Ограничение адресного пространства в 4GB не означает, что система не сможет адресовать более этого объема памяти. На платформе x86 ядро Linux может использовать до 64GB, а ограничение в 4GB накладывается лишь на размер адресного пространства процесса.

System V shared memory

Linux поддерживает стандартную для всех UNIX-подобных операционных систем организацию разделяемой памяти. Пользовательские приложения могут создавать сегменты разделяемой памяти, которые могут быть присоединены к некоторому фрагменту адресного пространства процесса. Любой процесс, имеющий достаточные права доступа, может присоединиться к сегменту разделяемой памяти, и отобразить его в свое адресное пространство, начиная с некоторого адреса.









Если в приведенной схеме любой из процессов изменит содержимое памяти в области, занимаемой отображением одного из сегментов, то же самое изменение произойдет в адресном пространстве другого процесса, поскольку соответствующий сегмент существует в одном экземпляре и отображен в адресное пространство обоих процессов.

Кроме System V IPC ядро Linux также поддерживает другие объекты IPC, в частности семафоры и очереди сообщений. Каждый объект System V IPC идентифицируется уникальным ключом. Просмотреть список всех объектов IPC можно командой ipcs. Команда ipcrm позволяет удалять объекты IPC, которые по каким-либо причинам остались не освобожденными после завершения создавшего их процесса например, такая ситуация может возникнуть после аварийного завершения работы СУБД Oracle, Informix или DB2.

Соответственно, перед перезапуском процесса системный администратор с помощью команды ipcrm должен освободить неиспользуемые объекты IPC, поскольку стартующее приложение не сможет их повторно создать и не будет корректно работать.

Для каждого объекта IPC система устанавливает права доступа, как если бы это был файл (т.е. для каждого объекта IPC можно устанавливать набор прав ugo/rwx, но в отличие от обычных файлов сменить права доступа для IPC-объектов можно только вызывая специализированные функции, предназначенные для работы с такими объектами.

[dalth@viking dalth]$ ipcs


------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x00000000 0 oracle 640 4194304 10

0x00000000 32769 oracle 640 20971520 10

0x00000000 65538 oracle 640 29360128 10

0x0d3c24a0 98307 oracle 640 29360128 50

0x00000000 13697028 root 777 49152 1

0x00000000 13729797 root 777 16384 1

0x000004d2 13795334 dalth 666 1008 2

0x00000000 14286866 root 644 790528 2 dest

0x00000000 21823507 dalth 600 393216 2 dest

0x00000000 21921814 root 644 122880 2 dest

0x00000000 14516249 root 644 151552 1 dest


------ Semaphore Arrays --------

key semid owner perms nsems

0x0b4f657c 262147 oracle 640 154

0x000004d2 458756 dalth 666 1


------ Message Queues --------

key msqid owner perms used-bytes messages


[dalth@viking dalth]$

Поддержка System V IPC позволяет сравнительно легко переносить на Linux приложения, написанные для других UNIX-систем.

Файловая система

VFS и драйверы файловых систем являются одной из важнейших составляющих ядра. Для того, чтобы получить доступ к файлам, хранящимся на каком-либо устройстве хранения данных, необходимо, чтобы в ядро был загружен драйвер соответствующей файловой системы, и файловая система была смонтирована. Драйвера всех файловых систем поддерживают набор стандартных функций: открыть файл по имени, записать данные в файл, прочитать данные из файла, закрыть файл, удалить файл и т.д.

Уточним, что драйвера файловых систем не занимаются кэшированием, этим занимается VFS.

При первоначальной загрузке драйвер файловой системы регистрирует в VFS имя файловой системы и те функции, которые предназначены для выполнения стандартных файловых операций. Впоследствии при обращении к файлу на какой-либо файловой системе VFS будет переадресовывать обращение на соответствующую функцию, если таковая была зарегистрирована драйвером. Посмотреть список обслуживаемых ядром файловых систем можно в файле /proc/filesystems:

[dalth@viking proc]$ cat /proc/filesystems

nodev sysfs

nodev rootfs

nodev bdev

nodev proc

nodev sockfs

nodev usbfs

nodev usbdevfs

nodev futexfs

nodev tmpfs

nodev pipefs

nodev eventpollfs

nodev devpts

ext2

nodev ramfs

nodev hugetlbfs

iso9660

nodev devfs

nodev mqueue

ext3

nodev rpc_pipefs

nodev nfsd

nodev smbfs

Операция монтирования предназначена для того, чтобы сделать доступной файловую систему, расположенную на каком-либо блочном устройстве. Суть операции монтирования заключается в том, что ядро ассоциирует некоторый каталог (называемый точкой монтирования) с блочным устройством и драйвером файловой системы. Для этого оно передает ссылку на блочное устройство драйверу файловой системы, и в случае, если драйвер успешно проидентифицировал эту файловую систему, ядро заносит в специальную таблицу монтирования информацию о том, что все файлы и каталоги, чей полный путь начинается с указанной точки монтирования, обслуживаются соответствующим драйвером файловой системы и расположены на указанном блочном устройстве.

Некоторые файловые системы не нуждаются в блочном устройстве, поскольку хранят свои данные исключительно в памяти, например файловая система procfs, через файлы которой можно получить доступ к различным системным параметрам и таблицам.

Очень часто при монтировании файловой системы системный администратор имеет возможность задать опции монтирования. Опции монтирования это специальные параметры, которые влияют на работу драйвера файловой системы, когда он работает с файловой системой на соответствующем блочном устройстве например, с помощью опций монтирования можно управлять режимом кэширования данных, преобразованиями имен файлов и данных, включать и отключать поддержку ACL и т.д.

Посмотреть таблицу примонтированных файловых систем можно через файл /proc/mounts:

[dalth@viking proc]$ cat /proc/mounts

rootfs / rootfs rw 0 0

/dev/root / ext3 rw 0 0

none /dev devfs rw 0 0

/proc /proc proc rw,nodiratime 0 0

/sys /sys sysfs rw 0 0

none /dev/pts devpts rw 0 0

usbdevfs /proc/bus/usb usbdevfs rw 0 0

/dev/chimera/var /var ext3 rw 0 0

/dev/chimera/temp /tmp ext3 rw 0 0

/dev/chimera/usr /usr ext3 rw 0 0

/dev/chimera/home /home ext3 rw 0 0

/dev/chimera/opt /opt ext3 rw 0 0

none /dev/shm tmpfs rw 0 0

Виртуальная файловая система Linux различает несколько типов файлов: каталоги, обычные файлы, именованные каналы, символьные ссылки, сокеты и специальные файлы. Каждая из этих разновидностей обрабатывается своим собственным образом:

В некоторых файловых системах, которые изначально проектировались для UNIX-подобных систем, есть возможность создавать кроме символьных ссылок еще и жесткие ссылки. Фактически, жесткая ссылка это второе имя для файла. Жесткие ссылки возможно создавать только в пределах одной файловой системы.

Из-за того, что в VFS присутствует понятие кэширования, перед отключением системы необходимо делать обязательный сброс изменений на диск. Сброс кэша на диск осуществляется в момент размонтирования файловой системы. Кроме того, с помощью команды sync можно в любой момент принудительно сбросить на диск все закэшированные изменения в файловой системе (например, системные администраторы часто делают sync перед загрузкой нового драйвера). Размонтировать файловую систему можно только тогда, когда ни один процесс не удерживает в открытом состоянии файлов с этой файловой системы, а также не находится ни один процесс не имеет рабочим каталогом каталога с размонтируемой файловой системы. При невыполнении этого условия размонтировать файловую систему не удастся:

[root@viking dalth]# umount /home/ftp/pub/linux/fedora/cd1

umount: /home/ftp/pub/linux/fedora/cd1: device is busy

umount: /home/ftp/pub/linux/fedora/cd1: device is busy

[root@viking dalth]#

Некоторые файловые системы поддерживают специальные опции, позволяющие принудительно синхронизировать файловую систему при каждой операции чтения или записи. Обычно опции, влияющие на синхронизацию файловой системы, содержат в своем названии слово sync, например приведенная ниже команда инструктирует операционную систему примонтировать некоторый раздел в режиме принудительной синхронизации:

[root@viking dalth]# mount -t ext3 -o sync,dirsync /dev/hda9 /home

Следует учесть, что принудительная синхронизация это удар по производительности операций записи для файловой системы, смонтированной в таком режиме, поэтому использовать такой его следует осторожно.

Права доступа

Кроме стандартных наборов прав доступа к файлам некоторые файловые системы Linux поддерживают т.н. POSIX ACL списки контроля доступа POSIX. Эта возможность позволяет гибко управлять доступом к файлу, не ограничиваясь классическим набором ugo/rwx. Для того, чтобы использовать на файловой системе POSIX ACL, необходимо смонтировать файловую систему с опцией acl:

[root@inferno root]# mount -t ext3 -o acl /dev/inferno/opt /opt

Возможно также настроить соответствующий параметр для файловой системы, чтобы она поддерживала POSIX ACL по умолчанию:

[root@inferno root]# tune2fs -o acl /dev/inferno/opt

После установки соответствующей опции можно приступать к работе с POSIX ACL. Для работы с ними существует две базовых утилиты: getfacl для получения списка дополнительных атрибутов доступа, и setfacl для установки расширенных атрибутов контроля доступа. Если в выводе команды ls вы видите символ + рядом со списком стандартных прав доступа, это означает, что для файла также установлены расширенные атрибуты контроля доступа:

[root@inferno root]# ls -l /home/dalth/.bash_???????

-rw-r-----+ 1 dalth dalth 20034 Окт 11 22:48 /home/dalth/.bash_history

-rw-r--r-- 1 dalth dalth 191 Авг 23 21:51 /home/dalth/.bash_profile

[root@inferno root]#

Для просмотра значений расширенных атрибутов можно воспользоваться утилитой getfacl. Жирным шрифтом выделен дополнительный атрибут контроля доступа, позволяющий пользователю kiki получить доступ на чтение к файлу .bash_history:

[root@inferno dalth]# getfacl .bash_history

# file: .bash_history

# owner: dalth

# group: dalth

user::rw-

user:kiki:r--

group::---

mask::r--

other::---

Добавим пользователю oracle права на чтение и запись файла .bash_history с помощью команды setfacl, и затем отберем дополнительные права на доступ к указанному файлу у пользователя kiki:

[root@inferno dalth]# setfacl -m u:oracle:rw .bash_history

[root@inferno dalth]# setfacl -x u:kiki .bash_history

[root@inferno dalth]# getfacl .bash_history

# file: .bash_history

# owner: dalth

# group: dalth

user::rw-

user:oracle:rw-

group::---

mask::rw-

other::---

Последним шагом сбросим все расширенные атрибуты с файла с файла .bash_history:

[root@inferno dalth]# setfacl -b .bash_history

[root@inferno dalth]# ls -l .bash_history

-rw------- 1 dalth dalth 20034 Окт 11 22:48 .bash_history

Расширенные атрибуты позволяют гибко контролировать доступ к файловых объектам, обходя стратегию ugo/rwx пришедшую из классического UNIX. Права доступ на файловые объекты могут быть выданы не только пользователю, но и группе.

К сожалению, далеко не все утилиты и файловые системы поддерживают ACL, поэтому при резервном копировании или восстановлении файлов необходимо проверять корректность установки расширенных атрибутов и правильность их переноса.

Журналируемые файловые системы

Для обеспечения сохранности данных и обеспечения целостности файловых систем при неожиданных сбоях были разработаны журналируемые файловые системы. Как правило, у этих файловых систем существует специальная область данных, называемая журналом. Все изменения, которые необходимо произвести с файловой системой, сначала записываются в журнал, и уже из журнала попадают в основную часть файловой системы.

В большинстве случаев журналируются только метаданные файловых систем (служебная информация, обеспечивающая целостность структуры файловой системы например, изменения в каталогах или служебных таблицах размещения файлов). Некоторые файловые системы позволяют журналировать не только метаданные, но и данные файлов такой шаг позволяет повысить надежность, но уменьшает скорость записи данных на файловую систему, поскольку каждый блок данных записывается на диск дважды сначала в журнал, и затем из журнала в основную область файловой системы..

В большинстве случаев, журналируемые файловые системы способны решить проблемы с надежностью при неожиданных сбоях без тех потерь производительности, к которым может привести использование опции sync при монтировании.

В частности, к журналируемым файловым системам, например, относятся EXT3, ReiserFS, XFS, JFS и некоторые другие.

Отображенные в память файлы

Объединение кэширования файлов и разделяемой памяти позволяет реализовать такое действие, как отображение файла в память. Для простоты можно представить, что файл загружается в кэш, и страницы кэша отображаются в адресное пространство процесса, и в результате любое изменение в том фрагменте адресного пространства, которое занято отображением файла, автоматически попадает в закэшированные данные файла. Когда файл закрывается, закэшированные изменения сбрасываются на диск, изменяя сам файл. Кроме того, в свободное время ядро также постепенно сбрасывает изменившиеся кэшированные данные на диск.








На самом деле, механизм отображения файлов в память куда хитрее - при обращении по записи к странице, которая является отображением некоторого файла, ядро перехватывает обращение, производит запись в файл (в подавляющем большинстве случаев эта операция попадает в кэш). При обращении по чтению к такой странице ядро опять же перехватывает обращение и производит чтение из файла в большинстве случаев это чтение производится из кэша. Для наших же целей проще будет считать, что страницы кэша отображены в память процесса.

Такая методика часто используется для загрузки разделяемых библиотек, когда выполняемый код библиотек и исполняемого кода программы хранится в кэше и через отображение файла в память становится виден в адресном пространстве процесса:

[dalth@viking dalth]$ cat /proc/1/maps

08048000-08050000 r-xp 00000000 03:01 75813 /sbin/init

08050000-08051000 rw-p 00008000 03:01 75813 /sbin/init

08051000-08072000 rw-p 08051000 00:00 0

40015000-40016000 rw-p 40015000 00:00 0

4c8ee000-4c903000 r-xp 00000000 03:01 92869 /lib/ld-2.3.3.so

4c903000-4c904000 r--p 00014000 03:01 92869 /lib/ld-2.3.3.so

4c904000-4c905000 rw-p 00015000 03:01 92869 /lib/ld-2.3.3.so

4c907000-4ca1c000 r-xp 00000000 03:01 92857 /lib/tls/libc-2.3.3.so

4ca1c000-4ca1e000 r--p 00115000 03:01 92857 /lib/tls/libc-2.3.3.so

4ca1e000-4ca20000 rw-p 00117000 03:01 92857 /lib/tls/libc-2.3.3.so

4ca20000-4ca22000 rw-p 4ca20000 00:00 0

4d201000-4d20f000 r-xp 00000000 03:01 92965 /lib/libselinux.so.1

4d20f000-4d211000 rw-p 0000d000 03:01 92965 /lib/libselinux.so.1

bfffd000-c0000000 rw-p bfffd000 00:00 0

ffffe000-fffff000 ---p 00000000 00:00 0

На самом деле, драйверы любого устройства и любой файловой системы могут по-своему реализовывать операцию mmap, но большинство драйверов файловых систем полагаются в этом на VFS.

Специальные файловые системы

Некоторые типы файловых систем являются специальными и предназначаются для выполнения или реализации специфических задач операционной системы. К таким файловым системам относятся файловые системы procfs и sysfs, предоставляющие доступ к различным параметрам системы и системным объектам, живущим в ядре.

Файловая система sysfs в основном предоставляет доступ к объектам ядра и отображает взаимосвязи между ними. Файловая система procfs предоставляет доступ к различным параметрам ядра и драйверов и к пользовательским процессам, позволяя тем самым реализовать такие команды как ps или sysctl. Большинство файлов в sysfs двоичные, в procfs текстовые.

Драйверы файловых системы ramfs, tmpfs и shmfs очень похожи, и после монтирования файловой системы такого типа на ней можно создавать файлы, хранящиеся в памяти и отличаются в основном небольшими особенностями работы (например, страницы, используемые ramfs под данные файлов, не вытесняются в swap-файл в отличие от shmfs и tmpfs). В ядре 2.6 shmfs была заменена на tmpfs.

Сетевые файловые системы

Сетевые файловые системы предназначены для получения доступа к файловым системам других компьютеров с использованием сетевых протоколов.

Наиболее часто используются сетевые файловые системы NCPFS (для доступа к серверам Novell NetWare), SMBFS (для доступа к серверам Windows) и NFS (для доступа к файловым системам других UNIX-систем).

Как правило, процедура монтирования сетевых файловых систем схожа с процедурой монтирования обычных файловых систем на блочных устройствах с тем отличием, что вместо блочного устройства указывается адрес сервера, чья файловая система монтируется, и имя монтируемого ресурса. Для примера рассмотрим процедуры монтирования ресурсов, доступных по SMB и по NFS:

# mount -t smbfs -o username=usr,workgroup=tst //server/share_name /mnt/smb_target

Password: ********

# mount -t nfs -o timeout=4 server:/export/home /mnt/nfs_target

В данном примере опция -t команды mount указывает тип файловой системы, опция -o позволяет задать дополнительные параметры для монтирования для SMB мы задаем, например, имя пользователя, с правами которого производится подключение к серверу и имя рабочей группы или домена, для NFS мы указываем таймаут, по истечении которого операция ввода/вывода считается неудавшейся. Вместо блочного устройства мы указываем адрес сервера, ресурс которого хотим использовать, и имя ресурса на сервере. Последним параметром идет точка монтирования.

Создание файловых систем

Для создания файловых систем в Linux используется команда mkfs:

[root@inefrno root]# mkfs -t ext3 /dev/hda6

На самом деле, mkfs является просто оберткой к реальным программам создания файловых систем, которые обычно именуются как mkfs.<имя_ФС>, например mksf.ext2 или mkfs.reiserfs.

В большинстве случаев программы группы mkfs просто инициализируют специальную область раздела, называемую суперблоком файловой системы. Суперблок содержит ссылки на все значимые элементы файловой системы (например, ссылку на оглавление корневого каталога, ссылку список свободных блоков, ссылку на список файлов и т.д.)

Наличие суперблока (который практически всегда содержит в своем теле некоторое характерное значение) позволяет производить монтирование файловых систем без указания их типа. К сожалению, некоторые файловые системы вследствие своей архитектуры не содержат суперблока (в частности, FAT и большинство ее разновидностей) и для блочных устройств, содержащих такие файловые системы, автоматическое определение типа файловой системы затруднено.

Интерфейс sysctl

Ядро содержит очень много параметров, от которых зависит его производительность и которые могут изменять алгоритмы его работы. Для того, чтобы иметь возможность узнавать и изменять эти параметры, в UNIX был разработан интерфейс sysctl.

Виртуальная файловая система procfs содержит каталог sys с деревом подкаталогов и файлов. Содержимое каждого из этих файлов можно прочесть, например, командой cat, или записать в такой файл новое значение командой echo:

[root@inferno root]# cat /proc/sys/kernel/shmmax

33554432

[root@inferno root]# echo 67108864 >/proc/sys/kernel/shmmax

[root@inferno root]# cat /proc/sys/kernel/shmmax

67108864

[root@inferno root]#

Команда sysctl предназначена для того, чтобы избежать необходимости использовать прямой доступ к этим файлам, и предоставить возможность автоматизации установки таких параметров при загрузке системы. На самом же деле, команда sysctl просто читает или записывает значения в файлы из каталога /proc/sys, т.е. если системный администратор устанавливает с помощью команды sysctl значение некоторого параметра, фактически он просто записывает это значение в соответствующий файл. Существует однозначное соответствие между именем параметра и именем файла, через который его можно изменить: если посмотреть вывод sysctl -a, можно увидеть, что параметры в большинстве своем именуются несколькими мнемоническими аббревиатурами, разделенными точками:

[root@inferno root]# sysctl -a | grep mem

net.ipv4.tcp_rmem = 4096 87380 174760

net.ipv4.tcp_wmem = 4096 16384 131072

net.ipv4.tcp_mem = 24576 32768 49152

net.ipv4.igmp_max_memberships = 20

net.core.optmem_max = 10240

net.core.rmem_default = 108544

net.core.wmem_default = 108544

Если в имени параметра заменить точки на символ разделителя пути (символ /), и к началу получившейся строки добавить /proc/sys/ - то мы получим имя файла, через который можно изменить или прочесть значение соответствующего параметра.

Если системному администратору необходимо при каждой загрузке изменять некоторые параметры через интерфейс sysctl, то список параметров и их значений можно записать в конфигурационный файл /etc/sysctl.conf, который прочитывается при каждой загрузке системы.

Статически и динамически собранные программы

В Linux исполняемые файлы можно условно поделить на две группы те, которые содержат в себе весь код, необходимые для работы, и те, которым необходимы разделяемые библиотеки. Первые называют статически собранными бинарными файлами, вторые называют динамически собранными исполняемыми файлами.

Статически собранные программы характеризуются тем, что могут корректно функционировать в любых условиях, и не зависят от наличия или отсутствия разделяемых библиотек, что может оказаться полезным в ситуациях, когда возникают конфликты версий разделяемых библиотек, или когда системные библиотеки повреждены или недоступны (например во время восстановления операционной системы после серьезного сбоя). К недостаткам таких исполняемых файлов следует отнести то, что они имеют значительный размер и для обновления программы необходимо полностью заменить ее исполняемый файл например, если несколько статически собранных программ, которые работают с архивами ZIP, содержат ошибку, то для исправления ошибки необходимо заменить все эти программы, что может быть затруднено (например, будет трудно точно установить, какие именно программы содержат ошибочный код и нуждаются в обновлении). Кроме того, статически собранные программы не умеют совместно использовать совпадающие участки кода, что ведет к излишнему расходу системных ресурсов.

Динамически собранные исполняемые файлы для корректной работы требуют наличия файлов разделяемых библиотек, и соответственно при их отсутствии/повреждении не могут корректно функционировать, но зато для обновления программы и исправления ошибки часто оказывается достаточным просто заменить соответствующую разделяемую библиотеку, после чего ошибка исчезает во всех программах, которые эту библиотеку используют динамически. Динамически связанные программы также значительно меньше по объему, чем статически связанные, и код разделяемых библиотек может использоваться одновременно многими программами что позволяет экономить системные ресурсы.

Подавляющее большинство программ в современных дистрибутивах Linux являются динамически собранными. Определить тип исполняемого фала (статический ли он либо с динамическим связыванием) можно, например, с помощью команды ldd:

[dalth@viking dalth]$ ldd /bin/su

linux-gate.so.1 => (0xffffe000)

libpam.so.0 => /lib/libpam.so.0 (0x4ce08000)

libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x4cb3c000)

libcrypt.so.1 => /lib/libcrypt.so.1 (0x4e3a2000)

libdl.so.2 => /lib/libdl.so.2 (0x4ca49000)

libc.so.6 => /lib/tls/libc.so.6 (0x4c907000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x4c8ee000)

[dalth@viking dalth]$ ldd /sbin/devlabel

not a dynamic executable

[dalth@viking dalth]$

В данном случае мы видим, что исполняемый файл /bin/su использует динамическое связывание, а исполняемый файл /sbin/devlabel собран статическим образом.

Системная библиотека GNU libc

Основная системная библиотека, которая так или иначе используется практически всеми программами, называется glibc (GNU libc). Основными задачами glibc являются обеспечение взаимодействия между ядром и пользовательскими процессами, поддержка локализации и многие другие распространенные действия.

На нижнем уровне прикладные процессы могут обратиться к функциям ядра посредством системных вызовов (syscall). Фактически syscall это вызов прерывания 80h с установленными параметрами, описывающими параметры для этого системного вызова. Те функции glibc, которые должны обратиться к ядру, в большинстве случаев просто устанавливают параметры для соответствующего системного вызова и вызывают int80h.

Большинство программ используют динамически загружаемую библиотеку glibc, но некоторые приложения, которые должны работать вне зависимости от наличия файловой системы, где расположена динамически загружаемая реализация libc, используют статическое связывание, когда весь программный код, необходимый для их работы, содержится в исполняемом файле программы. В основном к таким программам относятся утилиты, используемые при загрузке системы совместно с initrd например, статические варианты утилит insmod, lvm или devlabel, а также командные оболочки для первичной зарузки или восстановления системы например sash standalone shell, часто используемый при восстановлении системы после серьезного сбоя или nash, используемый при выполнении сценариев загрузки после монтирования initrd, но до монтирования корневой файловой системы, когда разделяемая версия glibc еще недоступна.

LD, Shared Library, SO и много страшных слов

Существует набор базовых действий, которые практически любая программа выполняет одинаково открытие файла, чтение и запись данных и тому подобное. Разделяемые библиотеки предназначены для того, чтобы предоставить прикладным программам готовые интерфейсы функций для выполнения каких-либо более-менее стандартных действий. Разделяемая библиотека, как понятно из названия, может использоваться множеством программ. В настоящий момент стандартным форматом для разделяемых библиотек в Linux является ELF (Executable Linked Format).

Каждый файл ELF имеет заголовок, в котором описывается, какие секции содержит этот файл. Секции объединяют однотипные данные, и их детальное описание можно прочитать в справочном руководстве [man elf]. Мы же выделим следующую информацию: каждая библиотека содержит список имен переменных и функций, которые она содержит и предоставляет другим (экспортирует) и список переменных и функций, которые необходимо взять в других библиотеках, а также секции инициализации и деинициализации. Экспортируемые и импортируемые объекты (переменные и функции) называют символами библиотеки.

Большинство исполняемых файлов программ также имеют формат ELF, и на самом деле отличаются от библиотек в основном тем, что не имеют экспортируемых функций. Загрузчик ELF (он же dl, dynamic linker и dynamic loader) умеет загружать в память код ELF-файла, анализировать его структуру для определения списков экспортируемых и импортируемых символов и загружать необходимые для работы программы библиотеки.

Когда пользователь пытается запустить какуюлибо программу, первым начинает работу загрузчик ELF. Он загружает в память процесса бинарный файл и выделяет, какие символы и из каких библиотек необходимо догрузить в память. После дозагрузки каждой библиотеки загрузчик связывает символы (проставляет реальные адреса) из загруженной библиотеки и повторяет цикл анализа на предмет того, какую библиотеку нужно загрузить. Когда все нужные библиотеки загружены, загрузчик передает управление коду инициализации каждой из загруженных библиотек в порядке, обратном загрузке, после чего передает управление коду программы. По завершении программы загрузчик снова проходится по всем библиотекам и вызывает их функции деинициализации. Если на этапе загрузки какой либо библиотеке возникает ошибка, загрузчик сообщит об этом пользователю. Наиболее типичные ошибки dl это не найденный файл библиотеки или неразрешимый символ (символ не был найден в библиотеке, в которой ожидался).

Вполне естественно, что загрузчик ищет библиотеки не по всей файловой системе, а только в определенных каталогах. Это каталоги /lib, /usr/lib и те, которые были перечислены системным администратором в файле /etc/ld.so.conf. Уточним, что этот файл на самом деле используется только системной утилитой ldconfig, сам же загрузчик использует кэш-файл /etc/ld.so.cache. Обновить этот кэш-файл можно путем простого запуска ldconfig без параметров. Следствием этого является то, что если вы установили в систему новые библиотеки, не мешает вызвать ldconfig.

В некоторых дистрибутивах есть возможность включать в ld.so.conf дополнительные файлы без его изменения. Для этого в ld.so.conf включается специальная строка вида:

include ld.so.conf.d/*.conf

Это приводит к тому, что каталоги, перечисленные в файлах с расширением conf, расположенных в каталоге /etc/ld.so.conf.d будут использованы для поиска разделяемых библиотек:

[root@viking dalth]# cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/lib/mysql

/usr/X11R6/lib

/usr/lib/qt-3.3/lib

[root@viking dalth]# ls /etc/ld.so.conf.d/

oracle

[root@viking dalth]# cat /etc/ld.so.conf.d/oracle

/opt/oracle/9i/lib

[root@viking dalth]#

Нередко возникает ситуация, когда пользователю необходимо запустить какую-либо программу, которая не находится в каталогах, описанных в /etc/ld.so.conf. В таких ситуациях можно воспользоваться специальным люком, оставленным разработчиками dl специально для таких случаев: дело в том, что кроме загрузки библиотек с использованием данных из ld.so.cache загрузчик проверяет факт наличия библиотеки с указанным именем в каталогах, перечисленных в переменной среды LD_LIBRARY_PATH.

Разработчики часто используют еще одну возможность ld: если файл некоторой разделяемой библиотеки указан в переменной LD_PRELOAD, эта библиотека принудительно загружается и ее символы считаются более приоритетными и перекрывают одноименные символы, если таковые существуют в других библиотеках, загружаемых ld при запуске на выполнение бинарного файла ELF.

Попробуем рассмотреть примеры использования указанных возможностей dl: пусть есть некоторый программный продукт, в состав которого кроме собственно исполняемых программ входят разделяемые библиотеки (например, таковы практически все продукты, разработанные с помощью Borland Kylix). Если мы установим такой пакет, например, в /opt/program, его исполняемые файлы в /opt/program/bin а разделяемые библиотеки в /opt/program/lib, то программа, скорее всего, не будет запускаться, поскольку не сможет загрузить необходимых библиотек. Для того, чтобы программы пакета начали запускаться, мы должны объяснить ld где именно искать библиотеки. Рассмотрим возможные способы, которыми мы можем воздействовать на ld чтобы добиться нужного нам результата.

Первый способ указать каталог с библиотеками перед запуском программы и уже затем запустить программу (ld воспользуется значением переменной для того, чтобы попытаться найти библиотеки по указанному пути):

$ export LD_LIBRARY_PATH=/opt/program/lib
$
/opt/program/bin/filename

Второй способ добавить каталог /opt/program/lib в файл /etc/ld.so.conf и запустить ldconfig, решив проблему с невозможностью нахождения этих библиотек для всех программ сразу:

$ su -

# echo /opt/program/lib >>/etc/ld.so.conf
# ldconfig
# exit
$ /opr/program/bin/filename

Можно также воспользоваться возможностью принудительной загрузки тех библиотек, которые необходимы программе для запуска:

$ export LD_PRELOAD=/opt/program/lib/*
$
/opr/program/bin/filename

Большая часть кода разделяемых библиотек находится в кэше и становится доступна процессам через отображение файла в память. Это отображение делается с правами доступа только чтение, что защищает код библиотек от переписывания его неправильно работающими или просто злонамренными программами.

Информация о процессах и файловая систем /proc

Ядро и его подсистемы очень важны, но большинство пользы приносят прикладные задачи, поэтому мониторинг состояния задач (процессов) очень важная часть работы системного администратора. В Linux получить информацию о процессах можно через файлы и каталоги файловой системы procfs, как правило монтируемой к каталогу /proc.

Каждому процессу сопоставляется в /proc отдельный каталог, имя которого совпадает со значением PID процесса. Файлы в этом каталоге предоставляют информацию о соответствующем процессе. Таблица приводит список файлов и их назначение:

Имя файла

Формат

Назначение

cmdline

строка, разделенная символами \0

Представляет командную строку, которой был запущен процесс. параметры командной строки отделяются друг от друга символами \0

environ

строка, разделенная символами \0

Представляет список переменных окружения для указанного процесса

exe

символьная ссылка

Ссылается на исполняемый файл процесса

maps

несколько строк

Список отображенных в память процесса файлов

mem

бинарный

Прямой доступ к адресному пространству процесса

mounts

несколько строк

Список примонтированных файловых систем, доступных процессу

stat

строка числовых значений

Статистика активности процесса

statm

строка числовых значений

Статистика по использованию памяти процессом

cwd

символьная ссылка

Ссылается на каталог, который является текущим для процесса

fd/*

символьные ссылки

Имена файлов подкаталога fd соответсвуют открытым процессом дескрипторам файлов. Символьные ссылки указывают на соответствующие файлы

root

символьная ссылка

Ссылается на каталог, который процесс считает корневым

status

несколько строк

Описание состояния процесса

Все указанные данные полностью соответствуют тому, что показала бы программа ps, будучи запущеной в тот момент, когда просматривается соответствующий файл, поскольку утилита ps на самом деле просто читает данные из соответствующих файлов в /proc.

Создание процессов

Linux на самом деле поддерживает только один внутренний механизм создания процессов механизм fork+exec. Любой процесс, который хочет создать еще один процесс, должен сначала создать свою копию с помощью системного вызова fork, после чего порожденный процесс, который является полной копией предыдущего за исключением нескольких параметров, таких как PID (Process ID) и PPID (Parent Process ID) использует системный вызов exec для того, чтобы загрузить в свое адресное пространство код новой программы и начать его выполнение. Соответственно, все процессы организуют дерево, когда у каждого процесса есть родительский процесс (исключение составляет процесс init, запущеный ядром на этапе загрузки).

Когда процесс завершается, код его завершения возвращается родительскому процессу. До тех пор, пока код завершения процесса не будет прочитан родительским процессом, запись об этом процессе продолжает существовать в таблице процессов в ядре. Такой процесс (уже завершившийся, но еще числящийся в таблице процессов) называют процессом зомби (zombie process). Завершить zombie process может родительский процесс, прочтя код его завершения. Если у вас в системе появилось множество зомби процессов, это скорее всего означает ошибку в программе, породившей этот процесс. Удалить процесс зомби можно только удалив его родительский процесс.

Нередко бывает, что родительский процесс завершается раньше, чем дочерний, и тогда для дочернего процесса объявляется родительским процесс init, и поэтому в системе никогда не бывает процессов-сирот, т.е. тех, кто не имеет родителя и чей код завершения некому прочесть.

Секреты /dev

Ядро Linux реализует поддержку двух типов устройств символьных и блочных. Основное их отличие в том, что для блочных устройств операции ввода вывода осуществляются не отдельными байтами (символами), а блоками фиксированного размера.

В Linux вся работа с устройствами ведется через специальные файлы, которые обычно расположены в каталоге /dev. Специальные файлы не содержат данных, а просто служат точками, через которые можно обратиться к драйверу соответствующего устройства. У каждого специального файла есть три характеристики тип устройства (character или block), старший номер устройства (major number) и младший номер (minor number). Для примера, посмотрим на содержимое каталога /dev:

[dalth@viking proc]$ ls -lL /dev/hd* /dev/ttyS*

brw------- 1 root root 3, 0 Окт 1 20:16 /dev/hda

brw------- 1 root root 3, 1 Окт 1 20:16 /dev/hda1

brw------- 1 root root 3, 2 Окт 1 20:16 /dev/hda2

brw------- 1 dalth disk 22, 0 Янв 1 1970 /dev/hdc

crw------- 1 root root 4, 64 Янв 1 1970 /dev/ttyS0

crw------- 1 root root 4, 65 Янв 1 1970 /dev/ttyS1

crw------- 1 root root 4, 66 Янв 1 1970 /dev/ttyS2

Как видно, в листинге присутствует описание семи устройств, четырех блочных и трех символьных. Для каждого файла можно увидеть его тип (первая буква в списке прав доступа), пользователя-владельца, группу-владельца, major number, minor number, дату модификации и имя файла.

Для поддержки работы с устройствами в ядре хранятся две таблицы, одна для списка символьных устройств, другая для списка блочных устройств. Каждая строка таблицы сопоставлена какой-то разновидности устройств соответствующего типа например, для типа символьные устройства можно выделить следующие разновидности: COM-порты, LPT-порты, PS/2-мыши, USB-мыши и т.д., для типа блочные устройства можно выделить SCSI-диски, IDE-диски, SCSI-CD-приводы, виртуальные диски которыми представляются RAID-контролеры и т.п.

Каждая ячейка в этих системных таблицах сопоставляется конкретному экземпляру устройства. Таким образом, с точки зрения ядра каждое устройство оказывается однозначно проидентифицировано тремя параметрами типом устройства (блочное или символьное) и двумя числами номерами строки и номером столбца таблицы, в которой хранится ссылка на драйвер этого устройства.

Пример таблицы символьных и устройств


0

1

...

63

64

65

66

...

175

...

4





COM1

COM2

COM3




6

LPT1

LPT2









10


Мышь PS/2


Диспетчер томов LVM





Слот AGP


14

Микшер первой зв. карты










195

Первая видеокарта NVidia










Пример таблицы блочных устройств


0

1

2

...

16

...

64

65

...

3

IDE Primary Master

Раздел 1 на IDE Primary Master

Раздел 2 на IDE Primary Master


Раздел 16 на IDE Primary Master


IDE Primary Slave

Раздел 1 на IDE Primary Slave


13

SCSI диск 1

Раздел 1 на SCSI-диске 1

Раздел 2 на SCSI-диске 1


SCSI диск 2


SCSI диск 4

Раздел 1 на SCSI-диске 4


При попытке обращения к такому специальному файлу ядро переадресует обращение через нужный драйвер на устройство в соответствии с теми данными, которые указаны в таблице устройств, причем конкретная таблица устройств будет выбрана в зависимости от типа устройства, строка из таблицы будет выбрана по major number, и столбец будет выбран по minor number. Если мы посмотрим на примеры наших таблиц, то увидим, что обращение на специальный файл /dev/ttyS1, который представляет символьное устройство со старшим номером 4 и младшим номером 65 будет адресовано на последовательный порт COM2, а обращение к файлу /dev/hda2 (блочное устройство со старшим номером 3 и младшим номером 2) будет адресовано на 2-й раздел жесткого диска IDE, работающего в режиме primary master.

Статическая организация каталога /dev

В настоящее время существует два подхода к организации /dev статическая организация и динамическая организация. В первом случае в каталоге /dev заранее создаются специальные файлы для всех возможных устройств вне зависимости от того, загружен драйвер соответствующего устройства или нет. Во втором случае специальные файлы в /dev создаются по мере инициализации устройств и загрузки драйверов, и удаляются при выгрузке соответствующего драйвера или удалении устройства.

Процесс работы со статическим /dev особых проблем не вызывает системный администратор при необходимости просто создает отсутствующие файлы командой mknod или MAKEDEV. В том случае, когда какая-либо программа обращается к устройству, чей драйвер не загружен (или загружен, но ни одного соответствующего устройства не было обнаружено), операционная система возвращает ошибку при попытке открытия файла такого неверного устройства. Ниже приведен пример создания специального файла, соответствующего блочному устройству с мажором 8 и минором 33 и попытка его использования (отметим, что этот специальный файл соответствует разделу на жестком диске, который не существует на тестовой машине, где выполнялись эти команды):

[root@viking root]# cd /dev

[root@viking dev]# ls -l /dev/hda33

ls: /dev/hda33: No such file or directory

[root@viking dev]#

[root@viking dev]# mknod hda33 b 8 33

[root@viking dev]#

[root@viking dev]# ls -l hda33

brw-r--r-- 1 root root 8, 33 Окт 11 09:27 hda33

[root@viking dev]#

[root@viking dev]# dd if=hda33 of=/dev/null

dd: opening `hda33': No such device or address

[root@viking dev]#

Сообщение No such device or address как раз и означает, что записи для данного устройства в таблице блочных устройств не существует.

Ядро Linux совместно с некоторыми системными утилитами поддерживает такую интересную возможность, как загрузка драйверов по требованию. Реализуется это следующим образом в момент, когда какая-либо программа пытается открыть специальный файл, не связанный ни с каким драйвером, ядро делает попытку подобрать соответствующий драйвер самостоятельно. Необходимый драйвер для каждого специального файла определяется в файле /etc/modules.conf путем задания специального алиаса (alias) для модуля. Для активизации автоматической загрузки драйвера какого-либо символьного устройства в большинстве случаев достаточно просто записать в /etc/modules.conf строку следующего вида:

alias char-major-X-Y имя_драйвера

Для блочных устройств соответствующая запись слегка меняет свою форму:

alias block-major-X-Y имя_драйвера

X и Y это major и minor специального файла, попытка открыть который должна активизировать автоматическую загрузку драйвера. Владельцы видеокарт на чипе nVidia могут увидеть этот подход в действии программа инсталляции драйвера nVidia автоматически прописывает в modules.conf запись для загрузки «по требованию» той части драйвера, которая работает в режиме ядра.

Вместо X или Y может также быть подставлен символ * , означающий любое число. Например, пусть в modules.conf будет написан следующий текст:

alias char-major-81-* bttv

Тогда при обращении к любому символьному устройству с major number равным 81 и которое не ассоциировано ни с каким драйвером, система попытается загрузить драйвер bttv (драйвер TV-тюнера на основе чипа bt848).

Эта возможность обеспечивает Linux возможность плавной загрузки и эффективного использования ресурсов драйвер не загружается, пока в нем не возникнет необходимости. К сожалению, за простоту этой схемы приходится платить большим количеством специальных файлов в /dev.

Что такое DevFS

Для того, чтобы избавить администратора от ручного создания специальных файлов и для уменьшения количества файлов в /dev был реализован второй способ организации /dev динамическое создание специальных файлов процессе загрузки драйверов. Реализовано это было следующим образом:

Ядро монтирует к каталогу /dev специальную файловую систему, называемую devfs эта файловая система хранится целиком в оперативной памяти и не занимает никакого места на диске. Когда какой-либо драйвер в процессе загрузки или работы обнаруживает обслуживаемое им устройство, он регистрирует это устройство и сообщает о нем драйверу devfs. Драйвер devfs создает специальный файл, который виден прикладным программам и может быть корректно открыт. При выгрузке же драйвер устройства сообщает devfs о том, что соответствующее устройство уже не активно, и драйвер devfs удаляет запись о соответствующем специальном файле из файловой системы devfs.

Файловая система devfs отличается тем, что как правило специальный файл для устройства создается с длинным путем например, для раздела на scsi-диске путь может выглядеть примерно так: /dev/scsi/host1/bus1/target3/lun4/partition2

Эта особенность является весьма важным плюсом devfs, поскольку она позволяет адресовать дисковые устройства путем указания логического пути их подключения и избежать смены имен SCSI-дисков в некоторых случаях (об этих случаях будет рассказано позднее).

Для того, чтобы организовать более прозрачную структуру каталогов и файлов устройств, используется специальный демон devfsd. Он взаимодействует с драйвером devfs и ядром и в процессе активизации и деактивизации устройств он создает и удаляет символьные ссылки вида /dev/disks/disc0 или /dev/hda1.

Надо отметить, что схема динамического /dev в некотором смысле близка к той организации каталога /dev, которая используется некоторыми коммерческими UNIX-системами (например, в Solaris), когда есть виртуальная файловая система /devices, и на ее файлы создаются ссылки из /dev, только в Linux роль программы cfgadm играет демон devfsd, и все изменения в состав /dev вносятся автоматически.

С помощью devfsd файловая система devfs также реализует автоматическую загрузку модулей, но в этом случае выбор модуля идет не через комбинацию type/major/minor, а путем указания имени запрошенного файла когда приложение пытается открыть несуществующий файл устройства, devfs передает имя запрошенного файла демону devfsd, и последний загружает необходимые модули, например такой код в файле modules.devfs:

alias /dev/nvidia* nvidia

Приведет к тому, что при попытке обращения к любому файлу, чей полный путь начинается строкой /dev/nvidia, будет произведена попытка загрузить драйвер nvidia.o (для ядра 2.6 nvidia.ko)

В принципе, на сегодняшний день выбор того, каким именно образом необходимо организовывать /dev, остается за пользователем и создателем дистрибутива. Например, в Mandrake Linux используется devfs, а в RedHat, Fedora и SUSE каталог /dev организован статическим образом, а опытные пользователи часто меняют способ организации /dev в зависимости от своих предпочтений.

Немного о UDEV

В современных дистрибутивах и ядрах поддержка devfs/devfsd отключена, и на смену этой паре пришел специальный демон, называемый udev. В отличие от devsfd, который требовал поддержки со стороны ядра, udev такой поддержки не требует. При инициализации устройства ядро подает сигнал через файловую систему sysfs, и демон udevd, получив сигнал об этом событии, самостоятельно создает соответствующий специальный файл устройства в каталоге /dev в соответствии с правилами, описанными в его конфигурационных файлах. При необходимости в этих файлах можно указать например вызов некоторой внешней программы, создание символьной ссылки и так далее.

Например, если некоторое устройство после подключения перед началом работы требует дополнительной настройки с использованием внешних программ, можно создать соответствующее правило для udev, в котором будет указано какую программу вызвать и какие параметры ей необходимо передать в частности, это может потребоваться для data-кабелей к некоторым мобильным телефонам Nokia, для устройств которым для корректной работы требуется firmware, или для сохранения или восстановления текущих настроек устройства.

Тем не менее, несмотря на внешние отличия между статической организацией /dev, devfs и udev, следует помнить что это всего лишь способ заполнения каталога /dev, и во всех случаях в конечном итоге на файловой системе создаются те же самые файлы символьных и блочных устройств.

Блочные устройства

Любое устройство, подключенное к компьютеру, имеет свое назначение, и блочные устройства в большинстве своем предназначаются для хранения информации. Как организована работа с блочными устройствами в Linux?

Во-первых, следует определиться с типами блочных устройств. Их следует поделить на две категории: к первой отнесем логические (виртуальные) устройства (loop-устройства, software RAID-устройства, устройства Volume Management, поддержка различных таблиц разделов), ко второй категории - физические устройства (SCSI диски и CD-ROM'ы, IDE-диски, USB-storage, RAM-диск).

Виртуальные устройства являются на самом деле просто оберткой, дополнительным слоем. В реальности драйверы логических устройств не работают с периферийными устройствами напрямую, они лишь переадресовывают запросы на драйверы других логических или физических устройств.

Драйверы физических устройств работают совместно с драйверами контроллеров, позволяя производить доступ к соответствующим устройствам на блочном уровне и предоставляя тем самым фактически прямой доступ к носителю но, поскольку в большинстве случаев дисковые устройства имеют значительный объем, они часто делятся на разделы. Раздел является постоянным непрерывным фрагментом дискового пространства, местоположение которого на жестком диске записано в специальной области диска таблице разделов.

Существует множество различных форматов разбиения диска на разделы например, DOS partition table, BSD disklabels, UnixWare slices и многие другие. Как правило, во всех случаях соответствующая спецификация предусматривает возможность перечисления ограниченного количества разделов путем указания номеров первой и последней дорожек, занимаемых каждым из разделов. Каждый раздел видится как отдельное блочное устройство.

По традиции имена блочных устройств, соответствующих IDE-дискам и созданным на них разделам начинаются с hd и имеют вид /dev/hd<N>[<M>] где N это буква, зависящая от контроллера и канала IDE, к которому подключено устройство, и режима устройства (master/slave). M это некоторое число от 1 до 63 (фактически номер раздела на диске). Если число не указано, подразумевается весь диск. SCSI-дискам в /dev присваиваются имена sda, sdb, sdc и т.д. Ниже приводится небольшая таблица соответствия устройств и имен специальных файлов для IDE-дисков:

Контроллер

Канал

Режим


Имя файла

1

1

master

primary master

hda

1

1

slave

primary slave

hdb

1

2

master

secondary master

hdc

1

2

slave

secondary slave

hdd

2

1

master

tertiary master

hde

2

1

slave

tertiary slave

hdf

2

2

master

quaternary master

hdg

2

2

slave

quaternary slave

hdh

Когда драйвер блочного устройства, поддерживающего разбиение на разделы, в процессе загрузки или работы обнаруживает обслуживаемое им устройство, он считывает с него таблицу разделов, определяет ее разновидность и составляет таблицу разделов, запоминая начало и конец каждого из разделов. Впоследствии, если какая-либо программа производит обращение не непосредственно к физическому устройству, а к разделу на этом устройстве, драйвер с использованием построенной таблицы разделов определяет реальный адрес блока, над которым нужно произвести запрошенную операцию ввода/вывода.

Особой разновидностью раздела можно назвать расширенный (extended) раздел DOS. Расширенный разделы DOS может быть разбит на произвольное количество вложенных разделов, но в настоящий момент без использования LVM ядро Linux поддерживает до 63 разделов на IDE-диске и до 15 разделов на SCSI-диске. Такое ограничение связано с распределением мажоров и миноров блочных устройств.

Когда используется разбиение диска на разделы с использованием таблицы разделов DOS, следует помнить, что на жестком диске может быть не более 4 первичных разделов. Если администратору нужно, чтобы на жестком диске было более 4 разделов, необходимо объявить один из первичных разделов как расширенный раздел. Первичные разделы при использовании таблицы разделов DOS нумеруются от 1 до 4, логические разделы нумеруются начиная с 5, вне зависимости от количества первичных разделов. Только один из первичных разделов может быть объявлен расширенным.

Рассмотрим вывод команды fdisk, которая обычно используется в Linux для разбиения диска на разделы:

[root@stend root]# fdisk /dev/hda -l


Disk /dev/hda: 6442 MB, 6442450944 bytes

16 heads, 63 sectors/track, 12483 cylinders

Units = cylinders of 1008 * 512 = 516096 bytes


Device Boot Start End Blocks Id System

/dev/hda1 * 1 203 102280+ 83 Linux

/dev/hda2 204 2032 921816 83 Linux

/dev/hda3 2033 3072 524160 82 Linux swap

/dev/hda4 3073 12483 4743144 f W95 Ext'd (LBA)

/dev/hda5 3073 4088 512032+ 83 Linux

/dev/hda6 4089 12483 4231048+ 83 Linux


[root@stend root]#

Как видно, на жестком диске IDE созданы 6 разделов, из них 4 первичных (разделы с номерами от 1 до 4) и два логических раздела с номерами 5 и 6, созданных внутри extended-раздела hda4.

Таблица разделов диска не может быть изменена в том случае, если хотя-бы один из разделов этого диска используется. В этом случае ядро продолжает использовать старую разметку (с которой оно работало до изменения), а изменения записываются на диск и вступают в силу после перезагрузки компьютера.

Если нет возможности запустить программу fdisk, то для получения данных о разметке блочных устройств на разделы и о состоянии блочных устройств, доступных в настоящий момент, можно использовать некоторые файлы из файловой системы /proc:

[dalth@viking dalth]$ cat /proc/partitions

major minor #blocks name


3 0 78150744 hda

3 1 1084356 hda1

3 2 77063805 hda2

253 0 1048576 dm-0

253 1 1048576 dm-1

253 2 10485760 dm-2

253 3 10485760 dm-3

253 4 1048576 dm-4

253 5 41943040 dm-5

253 6 360448 dm-6

253 7 258048 dm-7

253 8 258048 dm-8

253 9 258048 dm-9

253 10 53248 dm-10

7 0 651884 loop0

7 1 650198 loop1

7 2 653336 loop2

7 3 198962 loop3

Например, эти данные могут быть использованы для восстановления таблицы разделов, если системный администратор по ошибке ее исправил.

Интересной особенностью таблицы разделов диска является то, что она не всегда изменяема. Это приводит к тому, что во многих случаях невозможно изменить размер какого-либо раздела или внести какие-либо другие изменения в таблицу разделов без перезагрузки т.е. системный администратор может делать любые изменения, но они вступят в силу только после перезагрузки системы.

Распределение мажоров и миноров IDE дисков

IDE-диски в настоящее время наиболее часто используются в офисных и домашних компьютерах, поэтому знать особенности распределения мажоров и миноров для этих типов устройств достаточно важно. IDE-устройства отличаются низкой ценой и неплохой скоростью передачи данных, но у этой шины есть архитектурные недостатки например, все устройства работают со скоростью самого медленного из них, на один шлейф (на один канал) можно подключить только 2 устройства.

Всем устройствам, находящимся на одном канале IDE, присвоен один мажор. В настоящий момент ядро Linux выделяет для каждого устройства 64 минора, из которых первый минор зарезервирован для всего диска, и 63 минора остается для идентификации разделов. Таким образом, для IDE-дисков мажор идентифицирует канал, а по минору можно определить номер устройства на канале (режим master/slave) и номер раздела. Более детально это можно увидеть в следующей таблице:

Распределение номеров устройств для IDE-дисков

Канал

Устройство

Раздел

Major number

Minor number

Имя в /dev

1

1

Весь диск

3

0

/dev/hda

Раздел 1

1

/dev/hda1

Раздел 2

2

/dev/hda2

Раздел 3

3

/dev/hda3

Раздел 4

4

/dev/hda4

...



Раздел 63

63

/dev/hda63

2

Весь диск

64

/dev/hdb

Раздел 1

65

/dev/hdb1

Раздел 2

66

/dev/hdb2

Раздел 3

67

/dev/hdb3

...



Раздел 63

127

/dev/hdb63

2

1

Весь диск

22

0

/dev/hdc

Разделы

1-63

/dev/hdc[1..63]

2

Весь диск

64

/dev/hdd

Разделы

65-127

/dev/hdd[1..63]

По таблице становится видно, что на каждый 64-й минор происходит смена физического диска. Драйвер IDE в текущей версии ядра Linux поддерживает до четырех каналов IDE т.е. до 8 устройств, по два устройства на канал..

Рекомендации, которую можно дать владельцам компьютеров с интерфейсом IDE: устройства по возможности рекомендуется держать на разных каналах. Если нет свободных каналов, то быстрые устройства лучше подключать на один канал, медленные на другой.

Распределение мажоров и миноров для SCSI-дисков

Шина SCSI свободна от некоторых недостатков IDE, например количество устройств на одном канале может быть 15 (на самом деле 16, но одним устройством считается сам контроллер), все SCSI устройства работают на своей максимальной скорости, и ограничены только возможностями шины и контроллера но SCSI-устройства и дороже, и поэтому шина SCSI используется в основном на серверах и рабочих станциях. Для SCSI-дисков ситуация немного меняется мажоры не привязаны к контроллерам (т.е. один major number может использоваться дисками с разных хост-адаптеров). На каждом SCSI-диске система поддерживает до 16 разделов, а нумерация дисков производится в порядке их подключения по схеме, аналогичной IDE-дискам но только переход на следующий диск происходит на каждом 16-м миноре (т.е. разделы на SCSI-дисках нумеруются от1 до 15). Увидеть это можно в следующей таблице и листинге /dev:

Распределение номеров устройств для SCSI-дисков

Номер диска в порядке подключения

Major number

Minor number

Раздел

Имя файла

1

8

0

Весь диск

sda

1

Первый первичный

sda1

2

Второй первичный

sda2

3

Третий первичный

sda3

4

Четвертый первичный

sda4

5

Первый логический

sda5

...



15

Одиннадцатый логический

sda15

2

8

16

Весь диск

sdb

17

Первый первичный

sdb1

18

Второй первичный

sdb2

19

Третий первичный

sdb3

20

Четвертый первичный

sdb4

21

Первый логический

sdb5

...



31

Одиннадцатый логический

sdb15

В текущей версии ядро Linux поддерживает до 4096 SCSI-дисков и для абсолютного большинства компьютеров этого должно быть достаточно. Очень важной особенностью SCSI-дисков является то, что мажор устройства, соответствующего физическому диску, не зависит от контроллера. В результате, если у вас есть 3 диска SCSI, то они всегда именуются sda, sdb и sdc, и если вы выключите компьютер и отключите первый диск, то после перезагрузки второй диск (который ранее назывался sdb) станет называться sda, а третий диск (который назывался sdc) станет называться sdb, поэтому при работе со SCSI-устройствами можно использовать devfs (которая позволяет адресовать диски через путь их подключения), либо использовать специализированные средства управления дисковым пространством, которые помечают носители и впоследствии правильно их идентифицируют даже после переименования устройств - например, средства md (software RAID) или LVM. Надо заметить, что в свете удаления devfs из основной ветви ядра, использование LVM стало фактически обязательным на серверах.

Устройства SATA и переход с IDE на PATA

SATA, «осовремененная» версия интерфейса IDE, по своей структуре приблизилась к подсистеме SCSI. Поэтому в целях унификации подсистемы ввода-вывода в ядре Linux поддержка SATA была реализована через интерфейс SCSI., соответственно SATA-диски и контроллеры видятся ядром (и пользователем) как SCSI-устройства.

В новейших ядрах линейки 2.6 также появилась возможность работы с IDE-дисками через подсистему SCSI., и в новых дистрибутивах, таких как Fedora 7, даже обычные Parallel ATA (они же IDE) диски и контроллеры представляются как SCSI-устройства, что привело к унификации подсистемы дискового ввода-вывода, и теперь все диски и CD/DVD приводы для пользователя представляются как /dev/sdX или /dev/scdX. Драйверы для обычных контроллеров IDE, которые работают по новой схеме, начинаются с префикса pata, например: pata_via это драйвер IDE-контроллеров с чипсетом VIA, а pata_piix - это дарйвера для IDE-контроллеров Intel, работающие через подсистему SCSI.

А говоря проще, это означает следующее если у вас новый дистрибутив или имеются SATA-диски, вы можете смело работать со всеми дисками как со SCSI-устройствами.

Logical Volume Manager

Использование таблиц разделов для управления дисковым пространством достаточно часто используемое решение. К сожалению, оно не свободно от определенных недостатков например, нет возможности расширить раздел или уменьшить его размер, нет возможности создать один раздела на нескольких дисках и т.д. Решить эту задачу призван LVM (Logical Volume Manager).

LVM работает следующим образом: пользователь может пометить какие-либо блочные устройства как разделы, используемые LVM. Каждое из таких помеченых блочных устройств (их называют физическими томам,и или physical volumes) может быть присоединено к какой либо группе логических томов (logical volume groups). Внутри групп логических томов могут создаваться уже собственно логические тома (logical volumes). Дисковое пространство любого физического тома из некоторой группы может быть выделено любому логическому тому из этой группы. Реализовано это через так называемые экстенты (extents) дискового пространства. Физические тома LVM разбиваются на экстенты, после чего из экстентов и составляются логические тома. Именно за счет этого можно динамически менять конфигурацию дискового пространства экстент может быть удален из одного тома, и добавлен к другому. Каждый объект LVM будь то логический том, физический том или группа томов, имеет свой уникальный идентификатор.

Осуществляется это комплексно драйвером device mapper и специализированными программами из пакета lvm2. Эти программы читают файлы конфигурации и служебную информацию из заголовков физических томов, и на основании этой информации сообщают драйверу инструкции о том, из каких фрагментов каких блочных устройств каким именно образом должны быть скомбинированы логические тома, после чего драйвер для каждого логического тома создает отдельное блочное устройство. При обращении к такому блочному устройству device mapper определяет, на основании ранее переданных параметров к какому блоку какого блочного устройства на самом деле должен быть переадресован запрос, и запрашивает соответствующее блочное устройство для окончательного выполнения операции, после чего возвращает результат выполнения операции (прочитанные данные, сообщение об ошибке, код завершения операции) обратившейся программе.

Использование LVM позволяет гибко управлять распределением дискового пространства и избежать ограничений, связанных с классическим распределением дискового пространства путем создания разделов на жестких дисках. Единственное правило, которое я бы советовал соблюдать при использовании LVM не создавать корневой раздел системы на логическом томе LVM: инициализации тома LVM, на котором находится корневая файловая система, необходимо вмешательство некоторых утилит, которые находятся на еще не смонтированной корневой файловой системы. Это решаемая проблема, но она потребует некоторого опыта.

Ниже идет пример создания и инициализации физического тома, группы томов и примеры нескольких операций с логическими томами. На первом фрагменте протокола продемонстрирована инициализация таблицы разделов для использования LVM. Порядок действий для использования LVM в общем случае следующий: один или несколько разделов жесткого диска с помощью fdisk помечаются как разделы LVM. Затем эти разделы инициализируются и передаются в группы томов, после чего их дисковое пространство можно использовать для создания логических томов:

[root@inferno dalth]# fdisk /dev/hdb


The number of cylinders for this disk is set to 79408.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)


Command (m for help): p


Disk /dev/hdb: 40.9 GB, 40982151168 bytes

16 heads, 63 sectors/track, 79408 cylinders

Units = cylinders of 1008 * 512 = 516096 bytes


Device Boot Start End Blocks Id System

/dev/hdb1 1 79408 40021600+ 8e Linux LVM


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.

[root@inferno dalth]#

В приведенном выше выводе fdisk видно, что на IDE-диске primary slave создан один раздел типа LVM (код типа раздела 0x8E). В следующем листинге показан процесс инициализации физического тома и создания группы томов aurora, в которую включается инициализированный командой pvcreate физический том /dev/hdb1:

[root@inferno dalth]# pvcreate /dev/hdb1

No physical volume label read from /dev/hdb1

Physical volume "/dev/hdb1" successfully created

[root@inferno dalth]# vgcreate aurora /dev/hdb1

Volume group "aurora" successfully created

[root@inferno dalth]#

Третий фрагмент демонстрирует создание нескольких томов и изменение размеров томов, проделанное с помощью LVM. В этом примере создается логический том размеров в 20GB, затем размер этого тома увеличивается до 30GB, создается еще один логический том, и после этого оба созданных логических тома удаляются.

[root@inferno dalth]#

[root@inferno dalth]# lvcreate -L 20G -n ftpdata aurora

Logical volume "ftpdata" created

[root@inferno dalth]#

[root@inferno dalth]# lvscan

ACTIVE '/dev/aurora/ftpdata' [20,00 GB] next free (default)

[root@inferno dalth]#

[root@inferno dalth]# lvresize -L +10G /dev/aurora/ftpdata

Extending logical volume ftpdata to 30,00 GB

Logical volume ftpdata successfully resized

[root@inferno dalth]#

[root@inferno dalth]# lvscan

ACTIVE '/dev/aurora/ftpdata' [30,00 GB] next free (default)

[root@inferno dalth]# lvcreate -L 8G -n home_dirs aurora

Logical volume "home_dirs" created

[root@inferno dalth]#

[root@inferno dalth]# lvscan

ACTIVE '/dev/aurora/ftpdata' [30,00 GB] next free (default)

ACTIVE '/dev/aurora/home_dirs' [8,00 GB] next free (default)

[root@inferno dalth]#

[root@inferno dalth]# lvremove /dev/aurora/ftpdata

Do you really want to remove active logical volume "ftpdata"? [y/n]: y

Logical volume "ftpdata" successfully removed

[root@inferno dalth]#

[root@inferno dalth]# lvremove /dev/aurora/home_dirs

Do you really want to remove active logical volume "home_dirs"? [y/n]: y

Logical volume "home_dirs" successfully removed

[root@inferno dalth]#

Еще один фрагмент демонстрирует удаление группы томов и очистку физического тома:

[root@inferno dalth]# vgremove aurora

Volume group "aurora" successfully removed

[root@inferno dalth]# pvremove /dev/hdb1

Labels on physical volume "/dev/hdb1" successfully wiped

[root@inferno dalth]#

Каждый логический том LVM имеет свой собственный minor number, а major number для всех томов LVM равен 253. Для доступа к томам LVM можно создавать блочные устройства с помощью команды mknod, а можно воспользоваться возможностями, предоставляемыми утилитой devlabel. Эта утилита создает символьные ссылки и каталоги внутри подкаталога /dev, причем для каждой группы томов в /dev создается каталог с именем этой группы, а логические тома представляются символьными ссылками из этих каталогов на блочные устройства, обслуживаемые драйвером device mapper, и тогда любой том LVM можно адресовать следующим путем: /dev/<имя_группы>/<имя_тома>. На листинге ниже показан пример того, как можно распределить дисковое пространство с помощью LVM:

[root@viking root]#

[root@viking root]# ls -la /dev/chimera

lr-xr-xr-x 1 root root 23 Окт 8 13:53 opt -> /dev/mapper/chimera-opt

lr-xr-xr-x 1 root root 24 Окт 8 13:53 swap -> /dev/mapper/chimera-swap

lr-xr-xr-x 1 root root 24 Окт 8 13:53 temp -> /dev/mapper/chimera-temp

lr-xr-xr-x 1 root root 23 Окт 8 13:53 usr -> /dev/mapper/chimera-usr

lr-xr-xr-x 1 root root 23 Окт 8 13:53 var -> /dev/mapper/chimera-var

[root@viking root]#

[root@viking root]# lvscan

ACTIVE '/dev/chimera/swap' [1,00 GB] next free (default)

ACTIVE '/dev/chimera/temp' [1,00 GB] next free (default)

ACTIVE '/dev/chimera/usr' [10,00 GB] next free (default)

ACTIVE '/dev/chimera/opt' [10,00 GB] next free (default)

ACTIVE '/dev/chimera/var' [1,00 GB] next free (default)

[root@viking root]#

[root@viking root]# mount | grep chimera

/dev/mapper/chimera-var on /var type ext3 (rw)

/dev/mapper/chimera-temp on /tmp type ext3 (rw)

/dev/mapper/chimera-usr on /usr type ext3 (rw)

/dev/mapper/chimera-opt on /opt type ext3 (rw)

[root@viking root]#

Таким образом, возможности LVM позволяют системному администратору максимально эффективно использовать дисковое пространство, оперативно реагируя на меняющиеся условия эксплуатации. Еще одной интересной возможностью LVM является так называемый multipath I/O. В случае активации соответствующей опции в ядре device mapper знает о том, что физический том с некоторым UUID может быть доступен через несколько контроллеров, и в случае отказа одного контроллера динамически происходит переключение ввода-вывода на другой. Опытные системные администраторы также оценят такую возможность, как создание снимка (snapshot) логического тома: при создании снимка создается моментальная копия логического тома, которая начинает «жить» независимо от того тома, на основе которого она была создана:

# xfs_freeze /home

# lvcreate -s -L 10G -n home_snapshot /dev/chimera/home

# xfs_freeze -u /home

# dd if=/dev/chimera/home_snapshot of=/dev/st0

# lvremove /dev/chimera/home_snapshot

В приведенном примере системный администратор «замораживает» файловую систему XFS, при этом драйвер XFS сбрасывает все закэшированные операции на диск, и после этого блокирует все процессы, которые пытаются писать на «замороженную» файловую систему. Затем системный администратор создает снимок тома home из группы томов chimera, на котором «живет» файловая система /home, и этот снимок называет home_snapshot, при этом на удержание копии измененных данных выделяется 10 гигабайт дискового пространства. После создания снимка файловая система /home размораживается, но каждый раз, когда будет переписываться какой-либо блок логического тома home, первоначальная версия изменяемого блока будет копироваться в те 10GB дискового пространства, которые мы выделили под снимок тома, и мы можем считать содержимое тома home_snapshot неизменным, и скопировать его на ленту. В процессе чтения, если читаемый блок не изменялся с момента создания снимка, то он читается из исходного тома (home), если же блок менялся с момента создания снимка, то используется его копия, хранимая в зарезервированном при создании снимка пространстве. После окончания копирования мы удаляем снимок командой lvremove.

Sotware RAID

Ядро Linux содержит средства для организации software raid (программных RAID-устройств). Эта возможность поддерживается драйвером устройств md. В отличие от device mapper, драйвер md умеет работать в самостоятельном режиме, получая конфигурацию из параметров, которые пользователь указал ядру при загрузке системы, что позволяет организовывать загрузку системы с RAID-устройств. Все устройства md имеют мажор 254 и миноры от 0 и до 16383.

В отличие от LVM, основной задачей которого является динамическое распределение дискового пространства (деление разделов на фрагменты и построение из фрагментов новых блочных устройств), задачей подсистемы RAID является построение новых блочных устройств путем объединения существующих.

Каждое из устройств, входящих в создаваемый дисковый массив, может определенным образом помечаться. Впоследствии эти метки (их также называют array superblocks) используются для повторной сборки массива. В частности, например, суперблок массива содержит его уникальный идентификатор, который можно использовать при сборке ранее созданного массива после перезагрузки. Если программный RAID-массив был помечен в процессе создания (т.е. на нем был создан суперблок массива), это дает возможность автоматической сборки массива вне зависимости от того, поменялся или нет порядок следования устройств. Например, такая необходимость может возникнуть в ситуации, когда порядок нумерации блочных устройств изменился например, один из SCSI-дисков, участвовавших в построении массива, был удален.

Естественно, суперблок не является обязательным то есть можно создавать массивы без суперблока, но управления ими может быть затруднено вследствие необходимости «руками» контролировать корректность указания устройств при переконфигурации массива.

Из интересных особенностей драйвера md стоит отметить то, что он поддерживает разбиение md-устройств на разделы, при этом минорные номера присваиваются разделам аналогично тому, как они присваиваются разделам на дисках IDE, т.е на каждом RAID-устройстве можно создать до 63 разделов. Определить минор раздела, созданного на RAID-устройстве, можно с помощью вычисления значения следующего выражения: 64 * N + M, где N это номер массива (номер RAID-устройства) из диапазона 0 ... 255, а M это номер раздела из диапазона 1 ... 63.

Следует сказать, что по умолчанию в большинстве дистрибутивов специальные файлы для разделов на md-устройствах не создаются, и их необходимо создать вручную командой mknod. В настоящий момент оптимальным, наверное, следует считать комбинирование использования LVM и md, что позволяет достигнуть надежности за счет дублирования данных средствами md, и гибкости распределения дискового пространства за счет возможностей LVM.

Драйвер md хорошо подходит для создания RAID-устройств уровней 0, 1 или 0+1, но не будет являться оптимальным вариантом в случае использования, например RAID уровня 5 (чередование данных по устройствам с вычислением контрольной суммы и кодом исправления ошибок), поскольку это создаст значительную нагрузку на процессор при большом объеме передаваемых данных. Возможно, что в таких случаях стоит подумать о приобретении аппаратного контроллера RAID - например, HP NetRaid (сделан на основе AMI MegaRAID) или Compaq Smart Array (сейчас называется HP Smart Array).

На листинге демонстрируется пример создания, активизации и остановки программных RAID-устройств уровня 0 и уровня 1 средствами драйвера md и системной утилиты mdadm. Утилита mdadm имеет конфигурационный файл /etc/mdadm.conf, но для того, чтобы проделать некоторые тесты и демонстрационные примеры нет необходимости его изменять.

В первом примере будем считать, что на жестком диске hdb создано два раздела, с которыми мы и будем экспериментировать. Для начала необходимо произвести инициализацию md-устройства. Соответственно, для успешной необходимо указать тип RAID-массива, специальный файл md-устройства, которое мы хотим инициализировать, и список блочных устройств, на которых будет располагаться получившийся массив:

[root@inferno dalth]#

[root@inferno dalth]# mdadm --create \

> /dev/md0 --level=0 \

> --raid-devices=2 /dev/hdb1 /dev/hdb2

mdadm: array /dev/md0 started.

[root@inferno dalth]#

[root@inferno dalth]# mdadm -Q /dev/md0

/dev/md/d0: 983.25MiB raid0 2 devices, 0 spares.

[root@inferno dalth]#

[root@inferno dalth]# mdadm S /dev/md0

[root@inferno dalth]#

[root@inferno dalth]# mdadm --create \

> /dev/md0 --level=1 \

> --raid-devices=2 /dev/hdb1 /dev/hdb2

mdadm: array /dev/md0 started.

[root@inferno dalth]#

[root@inferno dalth]# mdadm -Q /dev/md0

/dev/md0: 491.63MiB raid1 2 devices, 0 spares.

[root@inferno dalth]#

[root@inferno dalth]# mdadm S /dev/md0

[root@inferno dalth]#

[root@inferno dalth]# mdadm assemble /dev/md0 /dev/hdb1 /dev/hdb2

mdadm: /dev/md0 has been started with 2 drives.

[root@inferno dalth]#

Последняя команда демонстрирует активизацию массива путем указания имени md-устройства и нескольких блочных устройств, на которых оно базируется. Все остальные параметры (размеры блоков, разновидность RAID и т.д.) утилита mdadm извлекла из суперблока массива. Как уже отмечалось, суперблок массива содержит еще и уникальный идентификатор массива, что дает возможность проидентифицировать каждое исходное блочное устройство на предмет его принадлежности к какому-либо массиву. Ниже приведен пример вывода утилиты mdadm, демонстрирующий как можно получить некоторые полезные данные о массиве, а строка, содержащая UID массива выделена жирным текстом:

[root@viking root]# mdadm -Q -D /dev/md0

/dev/md0:

Version : 00.90.01

Creation Time : Fri Oct 8 14:29:21 2004

Raid Level : raid1

Array Size : 102336 (99.94 MiB 104.79 MB)

Device Size : 102336 (99.94 MiB 104.79 MB)

Raid Devices : 2

Total Devices : 2

Preferred Minor : 0

Persistence : Superblock is persistent


Update Time : Fri Oct 8 14:32:22 2004

State : clean, no-errors

Active Devices : 2

Working Devices : 2

Failed Devices : 0

Spare Devices : 0


Number Major Minor RaidDevice State

0 253 24 0 active sync /dev/hdb1

1 253 25 1 active sync /dev/hdb2

UUID : 8696ffc0:52547452:ba369881:d1b252d0

Events : 0.3

[root@viking root]#

Впоследствии этот идентификатор может быть использован в файле конфигурации для утилиты mdadm. В конфигурационном файле /etc/mdadm.conf можно указать список устройств и правила их построения, после чего описанные в нем md-устройства будут автоматически собираться и разбираться без указания списка исходных устройств:

[root@viking root]# cat /etc/mdadm.conf

MAILADDR root

ARRAY /dev/md0 UUID=8696ffc0:52547452:ba369881:d1b252d0

DEVICE /dev/hdb*

[root@viking root]#

В листинге видно, что устройство массив md0 имеет указанный идентификатор, а также указано, что для построения массивов могут быть использованы все раделы диска hdb. В этом примере если системный администратор напишет команду mdadm assemble /dev/md0, то mdadm просканирует все файлы устройств с именами, совпадающими с шаблоном /dev/hdb* и подключит к массиву md0 те из них, на которых будет найдена суперблок массива с тем идентификатором, который указан в параметре ARRAY для устройства /dev/md0.

Системный администратор, который хочет расположить корневую файловую систему на md-устройстве, должен указать ядру при загрузке какие именно физические блочные устройства должны входить в md-устройство, на котором содержится корневая файловая система. Обычно это делается путем загрузки ядра командной строкой с опциями следующего вида:

linux md0=0,/dev/hdb1,/dev/hdb2 root=/dev/md0

Данный пример приведен скорее как иллюстративный, поскольку в зависимости от опций, использованных при создании RAID-устройства, на котором расположена корневая файловая система, командная строка ядра может меняться. В современных дистрибутивах при необходимости инициализации md-устройств для загрузки системы, как правило код и утилиты инициализации устройства помещаются в initrd.

Суперблок массива записывается не в начале блочного устройства, а ближе к его середине или концу. Сделано это было для того, чтобы можно было создать RAID-массив с boot-сектором, который сможет быть прочитан не только ядром Linux с драйвером md, но и базовым загрузчиком BIOS, вследствие чего можно объединить в RAID-массив не разделы жестких дисков, а непосредственно физические диски. Тогда загрузчик, установленный в начало RAID-устройства, окажется установленным в начало жесткого диска, после чего можно использовать при загрузке ядра следующую командную строку:

linux md0=d0,/dev/hda,/dev/hdb root=/dev/md_d0p1

Драйвер md также поддерживает возможность задания hotswap-устройств для массивов, т.е. резервных устройств, которые могут быть активизированы в при сбое одного из основных устройств в массиве.

Поддержка устройств software RAID в Linux дает возможность создавать серверы с высокой отказоустойчивостью и быстродействием.

Device mapper

В ядрах линейки 2.6 появилась еще одна подсистема по некоторым функциям аналогичная подсистеме MD, и называемая device-mapper. Это модульная компонентная подсистема, позволяющая с помощью специальных команд создать одно блочное устройство из нескольких кусков других блочных устройств, а также определить правила, по которым производится запись на эти «нижележащие» блочные устройства.

LVM работает именно через подсистему device mapper, и на самом деле все утилиты LVM на самом деле просто передают инструкции о том из каких фрагментов каких блочных устройств состоит какой том LVM в драйвер device mapper, в каком порядке осуществляется запись и чтение данных, и впоследствии при записи на том LVM или чтении с него, работа на самом деле ведется с устройствами, обслуживаемыми драйвером device mapper, который и делает всю работу.

Данная многоуровневая архитектура позволяет значительно упростить и таким образом значительно повысить стабильность работы системы, поскольку реализация нескольких небольших узкофункциональных компонентов в общей сложности содержит меньше ошибок, чем реализация всех этих функций в одной подсистеме.

Host-RAID, или дешевых RAID-контроллеров не бывает

Сегодня даже для дешевых современных материнских плат фирмы-производители часто декларируют «аппаратную поддержку RAID» и у многих пользователей этот факт вызывает недоумение как же так, мой Linux не умеет работать с RAID?! На самом деле все проще задекларированная и разрекламированная поддержка RAID-массивов на материнских платах для офисных и домашних компьютеров это миф.

Вся поддержка RAID в таких «контроллерах» на самом деле представляют собой просто небольшое расширение в BIOS и без специальных драйверов в 32/64-битных операционных системах не работают, а все функции RAID для них выполняются драйвером. Если в Windows для каждого из таких контроллеров фирма-производитель пишет драйвер, то в Linux ситуация немного иная.

Для реализации возможности работы с такими псевдо-RAID контроллерами (иногда называемыми fake-RAID) была разработана утилита dmraid. При запуске она сканирует жесткие диски в поисках специальных блоков (функционально аналогичных суперблокам уже знакомых нам md-устройств), записываемых такими fake-RAID контроллерами, и если ей удалось распознать формат этого специального блока, то dmraid инструктирует подсистему device-mapper о том, в каком порядке следует считывать блоки с жестких дисков.

После этого device-mapper создает блочное устройство, при записи или чтение данных с которого данные автоматически читаются и пишутся так, как сделал бы это драйвер от производителя материнской платы или контроллера.

Сетевая подсистема

Ключевым (с нашей точки зрения) объектом сетевой подсистемы Linux является интерфейс. Сетевой интерфейс в Linux это абстрактный именованный объект, используемый для передачи данных через некоторую линию связи без привязки к ее (линии связи) реализации. Конечно, сказано мудрено но попробуем объяснить «на пальцах».

Например, если в системе существует интерфейс eth0, то в большинстве случаев на современных компьютерах он сопоставлен Ethernet-адаптеру, встроенному в материнскую плату. Интерфейс с именем ppp0 отвечает за некоторое соединение «точка-точка» с другим компьютером. Интерфейс с именем lo является виртуальным и представляет как бы замкнутый сам на себя (вход непосредственно подключен к выходу) сетевой адаптер.

Основная задача интерфейса абстрагироваться от физической составляющей канала. То есть программы и система будут использовать один и тот же метод «отправить пакет» для отправки данных через любой интерфейс хоть lo, хоть ethX, хоть pppY, и точно так же использовать один и тот же метод «принять пакет» - то есть создается унифицированный API передачи данных, независимый от носителя.

Для того, чтобы ознакомиться с интерфейсами, можно воспользоваться командой ifconfig:

$ ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:11:2F:A8:DE:A4

inet addr:172.23.2.114 Bcast:172.23.2.255 Mask:255.255.255.0

UP BROADCAST MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

Interrupt:11 Base address:0x4000


lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:60 errors:0 dropped:0 overruns:0 frame:0

TX packets:60 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:4707 (4.5 KiB) TX bytes:4707 (4.5 KiB)


В данном случае мы видим в системе два активных интерфейса, eth0 и lo, а также некоторую информацию об их состоянии, настройках и параметрах и состоянии аппаратуры для интерфейса eth0. В частности, поле Link encap характеризует тип интерфейса, HWAddr аппаратный адрес устройства (например, MAC-адрес для Ethernet), MTU максимальный размер передаваемого пакета. Также могут представлять интерес поля статистики они сообщают, какой объем данных был передан и получен через соответствующий интерфейс.

Наиболее часто встречающиеся типы интерфейсов:

Команда ifconfig может также использоваться для остановки или активации интерфейса, а также изменения его параметров, связанных с протоколом IP:

# ifconfig eth0 down

# ifconfig eth0 up

# ifconfig eth0 inet 192.168.2.210 netmask 255.255.255.0

# ifconfig eth0 mtu 296

Для управления параметрами других протоколов используются другие команды например, ipx_config для управления параметрами, связанными с протоколом IPX. Рассмотрим также картинку, на которой приведена приблизительная схема взаимодействия различных драйверов и сетевых подсистем ядра:





























Предположим, что приложение пытается отправить пакет. Перед отправкой через системные вызовы группы socket (bind, connect и пр.) приложение настраивает специальный файловый дескриптор. После окончания настройки каждый записанный в этот дескриптор пакет должен быть отправлен по сети получателю. Как движется пакет в нашей системе? Прежде всего, пакет попадает в драйвер протокола. Этот драйвер определяет через какой интерфейс должна производиться отправка, дописывает к пакету необходимые заголовки и отдает пакет на обработку соответствующему интерфейсу (точнее, ставит пакет в очередь, связанную с этим интерфейсом).

Что драйвер сделает с пакетом, это уже его дело. Например, драйвер интерфейса loopback этот пакет вынет из очереди и сразу поставит в очередь «принятых», откуда его впоследствии заберет драйвер протокола (левая цепочка на схеме). Драйвер интерфейса eth0 допишет к пакету заголовки Ethernet и передаст пакет драйверу сетевого адаптера, и уже тот непосредственно проинструктирует сетевой адаптер, откуда взять и как отправить пакет (правая цепочка). В средней же цепочке мы видим схему работы PPP, когда пакет помещается в очередь интерфейса ppp0, откуда его заберет демон pppd. Демон допишет в пакет нужные заголовки, и через символьный специальный файл /dev/ttyS0 передаст пакет драйверу COM-порта, а тот непосредственно будет работать с аппаратурой. Соответственно, при приемке данных цепочки проходятся в обратном порядке.

Маршрутизация IP и форвардинг

Маршрутизация транзитных IP-пакетов (не предназначенных для этого компьютера), или IP-форвардинг, является опциональной возможностью IP-стека Linux. По умолчанию функция форвардинга не активируется, и система не пересылает транзитные пакеты через свои интерфейсы, а только обрабатывает адресованные ей пакеты. Включение форвардинга IP-пакетов производится через параметр net.ipv4.ip_forward интерфейса sysctl. Если значение этого параметра равно 0, то форвардинг отключен, если же значение параметра не равно 0, форвардинг включен:

[dalth@viking dalth]$ sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 0

[dalth@viking dalth]$

Кроме того, возможно разрешать или запрещать участие в форвардинге для каждого интерфейса индивидуально:

[dalth@viking dalth]$ sysctl -a | grep forward | grep v4

net.ipv4.conf.vmnet1.mc_forwarding = 0

net.ipv4.conf.vmnet1.forwarding = 0

net.ipv4.conf.eth0.mc_forwarding = 0

net.ipv4.conf.eth0.forwarding = 0

net.ipv4.conf.lo.mc_forwarding = 0

net.ipv4.conf.lo.forwarding = 0

net.ipv4.conf.default.mc_forwarding = 0

net.ipv4.conf.default.forwarding = 0

net.ipv4.conf.all.mc_forwarding = 0

net.ipv4.conf.all.forwarding = 0

net.ipv4.ip_forward = 0

[dalth@viking dalth]$

По умолчанию форвардинг включается и выключается для всех интерфейсов одновременно, но для отдельных интерфейсов возможно сменить флаг участия в форвардинге. Изменять параметры форвардинга может только системный администратор или пользователь, который имеет право записи в необходимые файлы интерфейса sysctl. Следующий листинг демонстрирует включение форвардинга через все интерфейсы путем вызова программы sysctl:

[root@viking dalth]# sysctl -w net.ipv4.ip_forward=1

net.ipv4.ip_forward = 1

[root@viking dalth]# sysctl -a | grep forward | sort

net.ipv4.conf.all.forwarding = 1

net.ipv4.conf.all.mc_forwarding = 0

net.ipv4.conf.default.forwarding = 1

net.ipv4.conf.default.mc_forwarding = 0

net.ipv4.conf.eth0.forwarding = 1

net.ipv4.conf.eth0.mc_forwarding = 0

net.ipv4.conf.lo.forwarding = 1

net.ipv4.conf.lo.mc_forwarding = 0

net.ipv4.conf.vmnet1.forwarding = 1

net.ipv4.conf.vmnet1.mc_forwarding = 0

net.ipv4.ip_forward = 1

[root@viking dalth]#

В процессе маршрутизации для выбора интерфейса и следующего узла для доставки пакета (next hop) ядро использует таблицу маршрутизации. Эта таблица представляет список критериев, в соответствии с которыми выбирается следующий узел. В частности, в таблице маршрутизации фигурируют следующие условия: адрес сети получателя пакета, маска подсети получателя пакета, IP-адрес следующего узла, метрика маршрута и служебные поля (например, тип и возраст записи). Таблица маршрутизации используется не только в IP-форвардинге, но и даже при простой отсылке IP-пакета для выбора интерфейса, через который будет производиться отсылка пакета.

Запись о сети с адресом 0.0.0.0 и маской подсети 0.0.0.0 называют маршрутом по умолчанию, или default route. Узел, чей адрес указан в поле gateway для маршрута по умолчанию, называют маршрутизатором по умолчанию, или default gateway или default router. В системе может быть произвольное количество маршрутов по умолчанию, но они должны быть как минимум с разными метриками. Для просмотра таблицы маршрутизации можно воспользоваться командой route. Эта команда позволяет оперировать с таблицей маршрутов, добавляя и удаляя из нее записи.

[root@inferno dalth]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.80.1.113 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

0.0.0.0 10.80.1.113 0.0.0.0 UG 0 0 0 ppp0

[root@inferno dalth]# route del default

[root@inferno dalth]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.80.1.113 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

[root@inferno dalth]# route add default dev ppp0

[root@inferno dalth]#

В данном выводе таблица упорядочена по маске подсети, что соответствует порядку ее просмотра ядром. Столбцы Destination и Genmask содержат адрес и маску сети получателя пакета, столбец Metric фактически указывает приоритет маршрута (маршрут с меньшей метрикой более приоритетен), поле Gateway указывает IP-адрес следующего узла для передачи пакета. Некоторые типы интерфейсов (в частности, интерфейсы типа точка-точка, или point-to-point) подразумевают, что на принимающем конце линии связи всегда находится не более одного узла, и поэтому в этой ситуации IP-адрес следующего узла можно не указывать. В данном случае мы видим, что в приведенном примере некоторые узлы доступны через интерфейс ppp0 типа точка-точка. В частности, именно из-за этого свойства приведенная выше таблица оказывается эквивалентна следующей ниже. Жирным шрифтом помечена измененная строка, демонстрирующая точечную природу PPP-соединения:

[root@inferno dalth]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.80.1.113 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0

Специфика использования протокола PPP (обычно используемого при модемых соединениях) такова, что любой PPP-интерфейс является интерфейсом типа точка-точка, более того PPP и расшифровывается как Point-to-Point Protocol. Также интерфейсами точка-точка являются интерфейсы SLIP (Serial Line IP) и практически все разновидности туннельных интерфейсов.

При деактивизации интерфейса из таблицы маршрутизации автоматически исключаются все маршруты, для которых в поле Iface был указан отключившийся интерфейс. Для некоторых типов интерфейсов при активизации в таблице маршрутизации также создаются служебные записи о маршрутах, которые нельзя удалить.

В большинстве случаев таблица маршрутизации имеет не слишком большой размер, но в некоторых ситуациях (в частности, на шлюзовых машинах в больших сетях) таблица может иметь весьма значительный размер и изменяется не вручную с помощью команды route, а специальными программами демонами поддержки протоколов динамической маршрутизации. С некоторыми упрощениями алгоритм работы этих демонов можно описать следующим образом: демон слушает приходящие пакеты для обслуживаемых протоколов динамической маршрутизации, и по получении (или неполучении) такого пакета отдает ядру команду на изменение таблицы маршрутизации.

Следует также заметить, что команда route в режиме вывода таблицы маршрутизации фактически просто фильтрует и форматирует данные, содержащиеся в специальном файле, называемом /proc/net/route, используемом для доступа к таблице маршрутизации, ведущейся ядром.

Фильтры пакетов

Возможность инсталляции фильтров пакетов является очень интересной возможностью, предоставляемой стеком TCP/IP ядра Linux. Не углубляясь в детали просто отметим, что IP-стек Linux позволяет различным модулям установить ловушки (hooks) для пакетов. При этом каждый пакет, попадающий в такую ловушку, передается для обработки драйверу, установившему эту ловушку. Драйвер, в свою очередь, может проанализировать пакет, проделать какие-либо действия с пакетом, после чего вернуть код обработки, инструктируя таким образом ядро о том, что следует делать с пакетом дальше вернуть ли отправителю сообщение об ошибке, прервать ли обработку и уничтожить пакет, либо продолжать обработку пакета обычным образом.

В настоящее время для фильтрации пакетов наиболее часто используются средства iptables. iptables это название утилиты, которая позволяет настроить множество драйверов сетевой подсистемы NETFILTER ядра Linux, позволяющих осуществить анализ, произвести преобразование, или изменить обработку IP-пакетов. Основным объектом в iptables является цепочка правил (chain). Каждое правило в цепочке содержит набор условий совпадения (condition matches) и действие (action). Цепочки сгруппированы в таблицы (tables).

Действий есть две разновидности прерывающие обработку пакета в цепочке, например действия DROP или ACCEPT, и не прерывающие обработку пакета цепочкой например, LOG или MARK.

Цепочки используются для проверки пакетов то есть пакет поочередно последовательно сравнивается с каждым из правил цепочки, и если он удовлетворяет всем условиям в правиле, к пакету применяется действие, указанное в этом правиле. Если действие является прерывающем, то на этом обработка пакета этой цепочкой заканчивается, если действие не прерывающее, то пакет продолжает проверяться этой же цепочкой.

Стандартные цепочки также содержат специальное неявное действие по умолчанию, называемое политикой цепочки (chain policy). Действие, указанное как политика цепочки, применяется ко всем пакетам, которые не попали ни под одно правило с прерывающим действием.

Стандартные таблицы и цепочки

Подсистема пакетного фильтра содержит три таблицы, в каждой из которых содержатся несколько цепочек (наборов правил). Кроме того, администратор может создавать собственные цепочки правил. Ниже перечисляются стандартные таблицы и цепочки:

Таблица

Назначение

Цепочки

Назначение

mangle

Модификация пакетов

PREROUTING

Модификация всех пришедших пакетов

INPUT

Модификация пакетов, пришедших на адрес компьютера

FORWARD

Модификация пакетов, которые должны быть отмаршрутизированы (пересланы на другой хост)

OUTPUT

Модификация пакетов, сгенерированных процессами данного хоста

POSTROUTING

Модификация всех переданных пакетов

filter

Фильтрация пакетов принятие решения об их дальнейшей обработке или отказе от обработки)

INPUT

Фильтрация адресованных этому компьютеру пакетов

OUTPUT

Фильтрация сгенерированных этим компьютером пакетов

FORWARD

Фильтрация маршрутизируемых (транзитных) пакетов

nat

Трансляция адресов

PREROUTING

Трансляция адресов всех принимаемых пакетов

FORWARD

Трансляция адресов транзитных пакетов

POSTROUTING

Трансляция адресов всех передаваемых пакетов

Таблица nat обладает двойственным действием, т.е. если вы включите преобразование для входящих пакетов, исходящие пакеты также будут модифицироваться, и наоборот. Таблицы mangle и nat изменяют пакеты, но mangle не ведет список изменений, т.е. является однонаправленной таблицей.

Порядок применения стандартных таблиц и цепочек

Рассмотрим, какой путь проходит пакет в цепочках и таблицах iptables. Для входящих пакетов (адресованных компьютеру, на котором активизирована поддержка iptables) верна следующая последовательность применения цепочек:

1. mangle.PREROUTING

2. nat.PREROUTING

3. mangle.INPUT

4. filter.INPUT

Для пакетов, отправляемых с компьютера, реализуется следующая цепочка обработки:

1. filter.OUTPUT

2. mangle.OUTPUT

3. nat.POSTROUTING

4. mangle.POSTROUTING

Пакеты, являющиеся транзитными (маршрутизируемыми), т.е. не адресованные фильтрующему компьютеру и не сгенерированные фильтрующим компьютером, проходят по следующей последовательности цепочек и таблиц:

1. mangle.PREROUTING

2. nat.PREROUTING

3. mangle.FORWARD

4. filter.FORWARD

5. nat.FORWARD

6. nat.POSTROUTING

7. mangle.POSTROUTING

Стандартные действия

Каждое правило в любой цепочке может ссылаться на одно из стандартных или дополнительных действий, либо на какую-либо пользовательскую цепочку. Основное различие между стандартными и дополнительными действиями в том, что стандартные действия могут указываться в правилах любых цепочек любых таблиц, а дополнительные действия можно указывать только для некоторых цепочек некоторых таблиц. Перечислим стандартные действия:

ACCEPT

Прервать проверку пакета цепочкой и перейти к следующей в порядке обработки пакета стандартной цепочке

DROP

Прервать обработку пакета, сам пакет удалить

RETURN

Прервать проверку пакета цепочкой и вернуться к проверке вышестоящей цепочкой, а если действие встретилось в одно из стандартных цепочек, поступить с пакетом так, как предписано в политике цепочки (chain policy)

QUEUE

Передать пакет некоторому процессу для дальнейшей обработки

Интересной особенностью также является то, что существуют так называемые target extensions, которые реализованы как модули и также могут использоваться для указания проводимого над пакетом действия. В частности, к таким действиям, например, относятся действия LOG запротоколировать факт получения пакета, MASQUERADE подменить IP-адрес отправителя пакета, MARK пометить пакет и многие другие. Некоторые действия могут встречаться не во всех цепочках, а только в некоторых цепочках некоторых таблиц.

Еще одним специфическим действием можно назвать переход к пользовательской цепочке. При этом, если пакет в процессе обработки попадает под действие правила, у которого в качестве действия указан переход к другой цепочке, то пакет начинает проверяться ее правилами. Это часто используется, чтобы сходным образом обрабатывать некоторые виды пакетов.

Условия отбора

Условия отбора делятся на две группы стандартные условия, которые применимы ко всем пакетам, и расширенные условия, называемые также match extensions. Расширенные условия могут применяться не для всех пакетов, а только для некоторых из них например, дополниетельные условия для протокола UDP включают в себя адреса портов отправителя и получателя, а для ICMP тип и код ICMP-сообщения.

Примеры конфигураций iptables

Попробуем рассмотреть несколько простых примеров, достаточно часто используемых в реальных конфигурациях. Стоит заметить, что самостоятельная конфигурация пакетного фильтра требует некоторых (точнее, достаточно значительных) знаний сетевых протоколов, поскольку в конфигурации необходимо задавать множество критериев, которые сильно зависят от ситуации и от используемых сервисов.

Пример 1: простейшая конфигурация iptables для домашнего компьютера, подключенного к Internet. В этой конфигурации мы запретим все входящие соединения, а также все исходящие пакеты UDP кроме тех, которые необходимы для нормальной работы в Internet с использованием PPP-соединения. В этой конфигурации мы разрешаем передачу всех пакетов в рамках локальной машины, разрешаем исходящие TCP-пакеты, разрешаем входящие пакеты TCP для уже установленных соединений, и разрешаем передачу и прием UDP-пакетов для службы DNS и пакетов автоматической конфигурации соединения PPP (пакетов DHCP). Кроме того, следует разрешить прием управляющих пакетов ICMP и отправку запросов и прием ответов PING:

# iptables -P INPUT DROP

# iptables -A INPUT -j ACCEPT -i lo

# iptables -A INPUT -j ACCEP -p tcp ! --syn

# iptables -A INPUT -j ACCEPT -p udp --source-port 53

# iptables -A INPUT -j ACCEPT -p udp --source-port 67 --destination-port 68

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type destination-unreachable

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type time-exceeded

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type parameter-problem

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type echo-reply

# iptables -P OUTPUT DROP

# iptables -A OUTPUT -j ACCEPT -p tcp

# iptables -A OUTPUT -j ACCEPT -p udp --destination-port 53

# iptables -A OUTPUT -j ACCEPT -p udp --destination-port 67 --source-port 68

# iptables -A OUTPUT -j ACCEPT -p icmp --icmp-type echo-request

Пример 2: то же самое, что в примере 1, но все отбитые пакеты протоколируются. Для того, чтобы добиться такого эффекта, нужно создать дополнительную цепочку, которая будет протоколировать и удалять пакеты. Эту цепочку мы назовем KILLER вполне обоснованно, не так ли? Кроме того, мы исправим политики стандартных цепочек так, чтобы запрещенные пакеты не удалялись, а забрасывались в созданную нами цепочку KILLER, а нашей основной цели (сначала протоколировать, потом удалить пакет) можно добиться просто указав два действия сначала LOG, затем DROP. Поскольку действие LOG не является прерывающим обработку, мы получим требуемый нам эффект:

# iptables -N KILLER

# iptables -A KILLER -j LOG

# iptables -A KILLER -j DROP

# iptables -P INPUT KILLER

# iptables -A INPUT -j ACCEPT -i lo

# iptables -A INPUT -j ACCEP -p tcp ! --syn

# iptables -A INPUT -j ACCEPT -p udp --source-port 53

# iptables -A INPUT -j ACCEPT -p udp --source-port 67 --destination-port 68

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type destination-unreachable

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type time-exceeded

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type parameter-problem

# iptables -A INPUT -j ACCEPT -p icmp --icmp-type echo-reply

# iptables -P OUTPUT KILLER

# iptables -A OUTPUT -j ACCEPT -p tcp

# iptables -A OUTPUT -j ACCEPT -p udp --destination-port 53

# iptables -A OUTPUT -j ACCEPT -p udp --destination-port 67 --source-port 68

# iptables -A OUTPUT -j ACCEPT -p icmp --icmp-type echo-request

Пример 3: маскарад пакетов. Маскарадом называют преобразование IP-адресов проходящих пакетов так, чтобы они выглядели как отправленные с системы-маршрутизатора, а не с какого-либо узла за маршрутизатором. Достигается это путем изменения IP-адреса (и, возможно, номера порта) в транзитных пакетах. Собственно преобразование задается путем указания действий SNAT замена адреса отправителя, DNAT замена адреса получателя, или MASQUERADE функционально аналогично SNAT, но без указания конкретного IP-адреса (IP-адресом для замены назначается IP-адрес интерфейса через который уходит пакет, со всеми отсюда вытекающими например, если интерфейс меняет IP-адрес или просто деактивируется все «маскированные» через него соединения сбрасываются). Предположим, что наш внешний интерфейс имеет адрес 193.267.14.6, а внутренняя сеть имеет адрес 192.168.0.0/24. Тогда для того, чтобы дать всем компьютерам нашей сети доступ по протоколу TCP наружу, мы должны подать примерно следующую команду:

# iptables -A POSTROUTING -t nat -j SNAT -o ppp0 \

> --to-source 193.267.14.6 -p tcp \

> --source 192.168.0.0/24 \

> --destination ! 192.168.0.0/24

Если у нас внешний адрес динамический, а не статический (мы работаем по dialup соединению), то мы можем использовать динамический маскарад без привязки к внешнему адресу ну или с использованием динамической привязки, кому как больше нравится:

# iptables -A POSTROUTING -t nat -j MASQUERADE -o ppp0 \

> --source 192.168.0.0/24 \

> --destination ! 192.168.0.0/24

Действие SNAT более эффективно, MASQUERADE проще в использовании, но обладает рядом существенных недостатков (не вдаваясь в подробности, просто заметим, что на системе с несколькими интерфейсами и сложной таблицей маршрутизации проблемы почти наверняка будут). Особое внимание нужно обратить на указание -o ppp0, то есть действие применяется ТОЛЬКО для пакетов, отправляемых через интерфейс ppp0. Еще вы можете увидеть, что мы указываем это правило только один раз, и обратного к нему правила не строим - об этом позаботится функция connection tracking (отслеживание состояния соединений), и обратная замена адресов в отправляемых в ответ на наши запросы пакетах будет произведена системой автоматически.

Пример 4: проброс пакетов во внутреннюю сеть. Обычно это используется, если мы хотим перебросить пакеты, пришедшие на адрес маршрутизатора, на какую-либо из машин внутренней сети (например, так можно предоставить доступ ко внутреннему WWW-серверу). Достигается это использованием действия DNAT (destination NAT). В нашем случае мы перебрасываем все TCP-пакеты, пришедшие на интерфейс маршрутизатора ppp0 на порт 80, на порт 85 компьютера с адресом 192.168.0.6:

# iptables -A PREROUTING -t nat -j DNAT -i ppp0 \

> --to-destination 192.168.0.6:85 -p tcp --destination-ports 80

Конечно, приведенными примерами возможности iptables не исчерпываются, скорее даже наоборот это лишь малая часть того, что умеет эта подсистема. Приведенные же примеры демонстрируют наиболее простые случаи, позволяющие составить некоторое представление об iptables и возможностях этой технологии.

В системах, основанных на RedHat Linux и его вариациях, есть специальный стартовый сценарий загрузки, также называемый iptables. Расположен он как правило в каталоге /etc/rc.d/init.d/. Этот сценарий при загрузке системы инсталлирует правила, созданные администратором, и его можно использовать для сохранения конфигурации iptables. В процессе конфигурации системный администратор задает конфигурацию подсистемы iptables, используя утилиту /sbin/iptables, а после окончания настройки дает команду /etc/rc.d/init.d/iptables save, после чего текущая конфигурация сохраняется в файл /etc/sysconfig/iptables. Существует также множество фронтендов для настройки iptables, которые могут использоваться начинающими пользователями и не слишком опытными администраторами, но ручной способ настройки все-таки предпочтительней, поскольку позволяет очень точно настроить подсистему iptables.

Управление пользователями, NSS и PAM

Linux система многопользовательская. По умолчанию, большинство дистрибутивов используют «классический» набор файлов в которых хранится информация о пользователях и группах: /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow. Во многих ситуациях этого вполне достаточно, но иногда возникает необходимость в интеграции Linux в более или менее чужеродное, либо просто распределенное окружение, и именно в этот момент к нам на помощь приходят такая интересная подсистема, как NSS Name Service Switch. Основная задача NSS создать модульное окружение для управления пользователями. Реализовано это посредством загружаемых библиотек. Основные вызовы NSS реализованы в библиотеке libc, а libc в свою очередь загружает и вызывает бакэнды

NSS:














При инициализации программы, так или иначе связанной с NSS, загружаются основная библиотека libc.so, которая считывает конфигурацию из файла /etc/nsswitch.conf, после чего также загружаются те библиотеки NSS, которые указаны в этом файле.

Впоследствии при работе программы, если программе требуется работать с именованными сущностями, соответствующие вызовы функций glibc будут обращаться к функциям NSS и использовать в те источники данных, которые указаны в nsswitch.conf.

В частности, через NSS можно разрешать (определять) имена и идентификаторы протоколов, номера портов служб (сервисов), имена и идентификаторы пользователей и групп, IP-адреса и имена компьютеров и некоторые другие данные.

Пример файла nsswitch.conf:

[viking@alpha etc]$ cat /etc/nsswitch.conf

passwd: files ldap

shadow: files ldap

group: files ldap

hosts: files dns

bootparams: nisplus [NOTFOUND=return] files

ethers: files

netmasks: files

networks: files

protocols: files

rpc: files

services: files

netgroup: nisplus

publickey: nisplus

automount: files nisplus

aliases: files nisplus

[viking@alpha etc]$

В данном примере указано, что для определения имен пользователей и групп используются сначала текстовые файлы и затем LDAP, для определения имен компьютеров и IP-адресов используются сначала текстовые файлы и затем DNS, для определения алиасов и настроек автоматического монтирования каталогов используются сначала текстовые файлы и затем служба NIS+.

Библиотеки бакэндов системы NSS хранятся в файлах libnss_XXX.so, где XXX это имя бакэнда. Например libnss_files.so это бакэнд NSS использующий в качестве источника данных текстовые файлы, libnss_db.so бакэнд использующий файлы BerkleyDB, libnss_ldap.so бакэнд позволяющий хранить данные в каталоге LDAP. Как правило, каждый бакэнд имеет свои дополнительные конфигурационные файлы.

Как следствие, если у вас возникла необходимость использовать вашу Linux-систему в сетевом или чужеродном окружении и обеспечить ее интеграцию с ним, вы можете воспользоваться NSS и получить доступ к информации через соответствующий бакэнд например, для интеграции в среду Solaris, вы можете воспользоваться бакэндом NIS/NIS+, для интеграции в ActiveDirectory бакэндом LDAP.

При этом модульность NSS позволяет вам объединять различные источники данных например, использовать текстовые файлы и DNS для определения имен компьютеров, NIS для определения имен протоколов и сервисов, и текстовые файлы и LDAP для определения имен и идентификаторов пользователей и групп.

Подсистема PAM (Pluggable Authentification Modules) идейно очень схожа с NSS, но отличается от нее назначением. Основная задачам PAM аутентификация пользователей (проверка паролей, прав доступ, ограничений и так далее). Как и NSS, PAM состоит из набора основных библиотек и бакэндов, причем необходимые бакэнды, порядок их вызова и некоторые опциональные параметры определяются в конфигурационных файлах PAM, обычно они расположены в каталоге /etc/pam.d. Главным отличием PAM от NSS (кроме естественно назначения) является то, что PAM является не составной и неотъемлемой частью libc, а отдельным множеством библиотек.

Основная часть стандартных утилит UNIX для управления пользователями и группами и получения информации о них, в большинстве дистрибутивов Linux общего назначения, адаптирована и собрана с поддержкой NSS и PAM. К таким утилитам относятся passwd, chsh, chfn, id, who и другие. NSS также используется даже такими утилитами как ls, find, ps то есть всеми теми программами, которые отображают имя пользователя. Соответственно, если программа запрашивает у пользователя пароль скорее всего она использует и NSS, и PAM (например XDM или GDM). Большинство программ в чьи функции входит обработка почты также используют NSS. Соответственно, можно уверенно говорить что подсистемы NSS и PAM и базовые знания об их предназначении на сегодняшний день являются необходимыми для администратора Linux-систем.

X11 и все-все-все

Большинство нынешних дистрибутивов по умолчанию устанавливают для пользователя графическую среду X11 (X11 Windows System), под управлением которой и выполняются все графические приложения. Как «внутри» устроена X11? Прежде всего, X11 это распределенная модульная среда, состоящая из двух основных компонентов: X-сервера и X-клиента.

Клиент-серверная архитектура X11

X-сервер это программа, которая организует работу с устройствами ввода/вывода, производит отрисовку видимых элементов, запущена у пользователя и предоставляет свои ресурсы (те же самые устройства ввода-вывода) для X-клиентов. X-сервер загружает драйверы устройств (например видеокарты, мыши или клавиатуры), он же управляет переключением раскладок клавиатуры и т.п. Кроме того, X-сервер частично берет на себя функции работы со шрифтами. Задача использования аппаратного ускорения для отрисовки также является прерогативой X-сервера.

В современных дистрибутивах как правило используется открытый свободно распространяемый X-сервер называющийся Xorg. Его конфигурационный файл называется xorg.conf и расположен в каталоге /etc/X11. В конфигурационном файле описываются все устройства ввода, которые будет использовать X-сервер, настройки клавиатуры, драйвер видеокарты и многое другое. Более подробную информацию можно получить из справочного руководства [man Xorg, man xorg.conf].

X-клиент это собственно пользовательская программа браузер, почтовый клиент, видеоплеер, клиент мгновенных сообщений, игры, графические редакторы и просмотрщики и т.д.

Когда пользователь запускает графическое приложение, оно соединяется с X-сервером по стандартному протоколу X11, получает от X-сервера события о перемещении мыши, нажатиях кнопок клавиатуры и соответственно на них реагирует. Когда необходимо провести отрисовку, X-клиент отправляет соответствующие инструкции X-серверу, и уже X-сервер производит непосредственную отрисовку используя драйвер видеокарты. Команды протокола X11 могут передаваться как через разделяемую память или локальное соединение (если X-клиент и X-сервер запущены на одном компьютере), так и по сети при этом X-клиент и X-сервер могут быть запущены на разных компьютерах.

X-сервер никаким образом не отвечает за внешний вид окна X-клиента он отрисовывает все в точности так, как это указал клиент, более того сам по себе X-сервер он не отрисовывает ни обрамлений окон, ни каких либо управляющих элементов, не обрабатывает никаких горячих клавиш то есть он занимается только отрисовкой картинки присланной X-клиентом, а также чтением данных из устройств ввода и передачей соответствующих событий X-клиенту.

Обрамление окон, иконки рабочего стола, панели и кнопки это все отрисовывается X-клиентами. Рассмотрим пример окна некоторого приложения (в нашем случае файлового менеджера Nautilus из состава среды GNOME):



На этой картинке на самом деле показан результат работы двух X-клиентов: собственно файлового менеджера nautilus (именно он управляет отрисовкой меню, строки статуса, панелей, иконок и так далее). Второй X-клиент менеджер окон (window manager) под названием metacity нарисовал рамку окна и кнопки на этой рамке. При этом горячие клавиши для закрытия окна, сворачивания, перемещения и других операций с окном отрабатывает именно metacity, а горячие клавиши копирования файла, перехода по каталогам, навигации по меню, подсвечивание иконок и тому подобное отрабатывает уже сам nautilus.

Графическая среда пользователя

Графической средой мы будем называть набор программ, для пользователя для выполнения им повседневных функций. Каждая из этих программ как правило является самостоятельным X-клиентом и может работать сама по себе, даже без своих «коллег по окружению», но будучи собранными вместе, они начинают предоставлять пользователю цельный и органичный интерфейс. Достигается это обычно следующим образом:

  1. Все программы данного графического окружения используют одну и ту же библиотеку для отрисовки своих элементов управления

  2. В графическое окружение включается какой-либо менеджер окон

  3. Все программы для данного окружения разрабатываются с соблюдением определенных общих требований

  4. В состав окружение включаются самостоятельные программы для выполнения базовых функций - текстовые и табличные процессоры, графический редактор, браузер, IM-клиент и другие

  5. В состав окружения включаются служебные программы, предоставляющие пользователю возможность вызова других программ например, приложение которое отрисовывает панель, на которой размещается кнопка для вызова меню со списком установленных программ и список окон

  6. В состав окружения включают утилиты для настройки оборудования и дополнительных функций

В результате внешний вид окружения становится единообразным, а тот факт что оно состоит из множества небольших программ делает графическую среду гибкой в настройке и стабильной в работе. В то же время обширный набор программ для различных функций делает повзволяет графическому окружению удовлетворить большинство потребностей пользователя, а привычная вам картина GNOME или KDE, которую вы видите на экране в процессе работы, является результатом совместной работы множества X-клиентов соответствующего окружения... Или нескольких окружений одновременно.

Наиболее распространенные графические среды в Linux это GNOME и KDE. И та и другая среда имеют свою библиотеку для отрисовки элементов управления внутри окна (для GNOME это GTK, для KDE это Qt), включают в свой состав почтовый клиент, браузер, мультимедиа-проигрыватель, клиент мгновенных сообщений и графический редактор, файловый менеджер (он же по совместительству отрисовывает иконки на рабочем стол и отвечает за фон рабочего стола), программу которая отрисовывает боковые панели и набор маленьких программ-апплетов, которые встраиваются при необходимости в панели, игры, программы управления для настройки окружения и менеджер окон.

Некоторые X-клиенты не входят в состав какого-либо окружения например, браузеры Firefox и Opera, медиапроигрыватель Mplayer, офисный пакет OpenOffice.Org. Самое главное что следует запомнить что графическое окружение, или графическая среда это всего лишь набор программ, а не одна большая программа вида «все-в-одном», и вы можете, работая в основном в одном окружении, абсолютно спокойно использовать программы другого.

Внутри X11. Упрощенная схема

X11 система многослойная, но внутренне логичная и понятная. Схематически ее можно изобразить следующим образом:

















Когда приложение отрисовывает что-либо, оно обращается к своей базовой библиотеке, она в свою очередь переадресовывает вызов (или уже цепочку вызовов) в библиотеку libX11, которая использую X11 Core Protocol передает команды на X-сервер. X-сервер интерпретирует команды и передает их на отрисовку драйверам устройств вывода. Воздействие же пользователя на устройства ввода считываются X-сервером через драйвера устройств ввода, через X11 Core Protocol передаются X-клиенту, libX11 переводит команды протокола в события и передает события в тулкит, и уже тулкит передает события программе для того чтобы та на них отреагировала.

То как приложение выглядит то есть внешний вид строк ввода, полос скроллинга, панелей и кнопок за все это отвечает библиотека-тулкит. Два наиболее распространенных на сегодняшний день тулкита, Qt и GTK, примерно равны по возможностям они обеспечивают переносимость приложений, поддержку «тем» внешнего вида, предоставляют программисту объектно-ориентированный интерфейс и некоторый набор служебных функций и возможностей.

Базовая библиотека X11 (libX11, или Xlib) позволяет программе абстрагироваться и не связываться с низкоуровневыми функциями протокола X11, и таким образом обеспечивает сетевую прозрачность X11, то есть позволяет программам работать как с локальным X-сервером, так и с находящимся на другом компьютере, причем делается это незаметно для программы.

Внутри X11. Растровые шрифты и их отображение

С момента разработки в среде X11 отображение шрифтов управлял X-сервер. Приложение, когда ему необходимо вывести некоторый текст, просто инструктировало X-сервер «отобрази вот этот текст вот таким шрифтом в указанном месте». В ответ на это X-сервер выбирал из своей базы шрифтов наиболее подходящий, и использовал его для выполнения инструкций клиента, причем изначально эти шрифты были растровыми, то есть фактически содержали наборы заранее отрисованых глифов (символов).

Эта технология, называемая X Core Fonts, поддерживается в X11 и сейчас, поэтому в наборе пакетов любого дистрибутива всегда можно встретить наборы широко распространенных семейств растровых шрифтов fixed, hevetica, times, courier. При этом каждый шрифт представляется множеством файлов, для различных сочетаний размера, ширины и начертания например, если шрифт имеет десять вариантов размеров (от 8 до 18), две ширины (обычный и жирный) и два начертания (стандартное и курсив), то он будет представляться 40 файлами по одному файлу для каждого из сочетаний размера, начертания и ширины.

Поскольку количество файлов получается очень большим, чтобы не устанавливать все эти шрифты на все компьютеры где запущены X-серверы, в систему X11 был введен такой объект как сервер шрифтов (font server). Системный администратор может настроить и запустить один сервер шрифтов для всей локальной сети, и указать X-серверу при запуске использовать шрифты с соответствующего сервера, что позволяет поддерживать на всех серверах один и тот же набор шрифтов с минимальными усилиями и избежать ситуации когда шрифт есть на одном компьютере, но его нет на другом.

В большинстве дистрибутивов Linux сервер шрифтов включен в поставку X11 по умолчанию, и называется xfs. Его конфигурационный файл как правило находится в каталоге /etc/X11/fs. В конфигурационном файле сервера шрифтов перечисляются каталоги с растровыми шрифтами, а в конфигурационном файле X-сервера указано, что основным источником шрифтов является сервер шрифтов,запущеный на этом же компьютере.

Такая методика позволяла добиться достаточно качественного отображения шрифта в большинстве случаев, но в то же время такие она имеет определенные недостатки как известно, растровые шрифты очень плохо «вращаются» на угол не кратный 90 градусам, и плохо масштабируются, а с появлением устройств высокой четкости (LCD-мониторов) возникла необходимость еще и отрисовывать шрифты в «сглаженном» виде, с мягкими переходами цвета, чего растровые шрифты также предоставить не могли.

Наиболее распространенное приложение, использующее методику X Core Fonts это графический эмулятор терминала xterm, который есть в составе всех дистрибутивов, или простейший менеджер графического входа в систему XDM.

Внутри X11. FreeType и XFT

Для устранения этого недостатка растровых шрифтов была разработана специальные библиотеки XFT и FreeType, которые обеспечивают отображение векторных шрифтов и реализацию таких возможностей как сглаживание шрифтов, их поворот на произвольный угол и хинтинг (подгонку символов шрифта друг к другу оптимальным для данного шрифта способом). Поскольку данная методика плохо согласовывалась с уже сложившейся шрифтовой архитектурой X11, отображение векторных шрифтов было возложено на X-клиента.

При этом схема отображения шрифта меняется: X-клиент не передает на X-сервер запрос на вывод текста указанным шрифтом, а самостоятельно отрисовывает необходимы глифы шрифта использую функции FreeType и XFT, и передает на X-сервер уже сформированную картинку, которую X-сервер и отображает. Вполне логично, что при использовании этой методики X-клиент должен иметь доступ к оригиналу векторного шрифта (обычно это файл) поэтому современные дистрибутивы также содержат еще и наборы векторных шрифтов PostScript и TrueType.

Новые версии тулкитов GTK и QT используют именно эту методику, но поскольку существуют еще и устаревшие тулкиты, такие как Motif или Xview (OpenLook) и значительное количество приложений на них основанных, да и с точки зрения необходимой полосы пропускания сети технология поддержки растровых шрифтов имеет явное преимущество пред XFT и FreeType, поддержка технологии растровых шрифтов по-прежнему входит в X11 и будет оставаться в ней еще долго.

Внутри X11. Расширения

Протокол X11 не является замершим в своем развитии, но его развития ведется не путем изменения самого протокола, а путем внесения в протокол расширений то есть дополнительных опциональных наборов команд и инструкций. Например, для поддержки непрямоугольных окон было введено расширение XShape, для поддержки проигрывания видеороликов введено расширение XVideo, для поддержки OpenGL было введено расширение GLX и так далее.

Внутри X11. Полезные утилиты

В штатную поставку X11 входит множество полезных программ, позволяющих получать служебную информацию об ваших настройках среды X11. Перечислим некоторые из них:

xterm эмулятор терминала

xfontsel интерактивный просмотр растровых шрифтов

xdpyinfo вывод информации о ваших настройках среды X11 и задействованных расширениях

xwininfo просмотр информации об указанном окне (положение, размер, класс окна и т.п.)

xwd моментальный «снимок» окна

xwud показ результатов работы xwd

xhost управление контролем доступа X-клиентов к X-серверу

Внутри X11. Менеджер окон

Существует особая разновидность X-клиентов, называемых менеджерами окон. Их основная функция обеспечивать управление другими окнами перемещением, изменением размеров, сворачиванием и разворачиванием окон, отрисовкой обрамлений окон, управление передачей фокуса от окна к окну а также управление Z-порядком размещения окон. Соответственно, в один момент времени для одного экрана может быть использован только один менеджер окон.

GNOME и KDE имеют свои собственные менеджеры окон это metacity и kwin. Менеджеры окон являются взаимозаменяемыми то есть вы можете выбрать и использовать тот из них, который вам больше нравится или кажется более удобным. Еще один распространенный (то есть наличествующий почти на всех UNIX-системах) менеджер окон это twm. Крайне простой и примитивный, он тем не менее предоставляет пользователю базовые функции управления окнами и доступ к меню приложений.

Локализация

Широкое распространение UNIX-систем привело к необходимости введения системы локализации поддержки предпочитаемых пользователем стандартов на запись даты и времени, формата чисел, языка сообщения программ, обозначений национальной валюты и так далее.

В Linux стандартом на методику локализации является спецификация i18n. Не вдаваясь в подробности, мы попытаемся получить некоторое представление о том как это выглядит для пользователя.

Как конечные пользователи, мы можем ознакомиться с текущими настройками своей локали используя команду locale:

$ locale

LANG=ru_RU.UTF-8

LC_CTYPE="ru_RU.UTF-8"

LC_NUMERIC="ru_RU.UTF-8"

LC_TIME="ru_RU.UTF-8"

LC_COLLATE="ru_RU.UTF-8"

LC_MONETARY="ru_RU.UTF-8"

LC_MESSAGES=en_US

LC_PAPER="ru_RU.UTF-8"

LC_NAME="ru_RU.UTF-8"

LC_ADDRESS="ru_RU.UTF-8"

LC_TELEPHONE="ru_RU.UTF-8"

LC_MEASUREMENT="ru_RU.UTF-8"

LC_IDENTIFICATION="ru_RU.UTF-8"

На самом деле, программа locale в корректно настроенной системе просто выведет вам значение соответствующих переменных окружения. Каждая из этих переменных отвечает за свой собственный аспект локализации, перечислим наиболее важные:

LANG локаль по умолчанию, ее значение для различных аспектов может быть перекрыто путем установки отдельных переменных в нужное вам значение

LC_CTYPE отвечает за классификацию символов и различия в их регистре

LC_NUMERIC отвечает за представление и форматирование чисел

LC_TIME отвечает за формат даты

LC_COLLATE определяет настройки сравнения строк и символов, влияет на сортировку

LC_MONETARY отвечает за представление национальной валюты

LC_MESSAGES определяет язык сообщений и интерфейса

В примере мы видим что локалью по умолчанию через переменную LANG выбрана локаль ru_RU.UTF-8 (русский язык, соответствие российским стандартам, кодировка символов UTF-8), а в качестве языка интерфейса назначен английский язык в варианте используемом в США. Фактически это означает что все программы будут иметь английский интерфейс, но показывать дату, валюту, десятичную точку и сортировать строки они должны так как это принято в России.

В отличие от мира Windows, где язык сообщений программы как правило жестко забит в ресурсах, а ресурсы включены в исполняемый файл, в UNIX и Linux сообщения как правило содержатся в отдельных файлах и программа загружает текстовые строки для сообщений интерфейса основываясь на значениях переменных LANG и LC_MESSAGES. Это дает возможность обеспечить работу пользователей из разных стран на привычных им языках, не прибегая к установке нескольких копий операционной системы или нескольких экземпляров программы, каждый для своего языка.

Системному администратору Linux достаточно обеспечить наличие файлов сообщений нужной локали для используемых пользователем программ, и правильно установить переменные окружения, после чего пользователь оказывается в привычной для него языковой обстановке и работать с привычными форматами даты, валюты, в привычных единицах измерения и т.д.

Более того можно установить значение некоторых переменных окружения в нужные значения непосредственно перед запуском программы и тогда эта программа примет будет использовать указанные настройки локали только для этого запуска, например:

[viking@alpha ~]$

[viking@alpha ~]$ LC_MESSAGES=ru_RU.UTF-8 ls -l something

ls: невозможно получить доступ к something: Нет такого файла или каталога

[viking@alpha ~]$

[viking@alpha ~]$ LC_MESSAGES=en_US.UTF-8 ls -l something

ls: cannot access something: No such file or directory

[viking@alpha ~]$

[viking@alpha ~]$ LC_MESSAGES=fr_CA.UTF-8 ls -l something

[viking@alpha ~]$

ls: ne peut accéder something: Aucun fichier ou répertoire de ce type

[viking@alpha ~]$

Таким образом, в Linux-системе возможно обеспечить одновременную работу пользоваетелей в разных языковых окружениях, изменяя только изменение значений переменных окружения. В системах RedHat/Fedora общесистемные настройки локали хранятся в файле /etc/sysconfig/i18n, а пользователь может самостоятельно перекрыть их путем записи соответствующих значений в файле ~/.i18n:

[viking@alpha ~]$

[viking@alpha ~]$ cat /etc/sysconfig/i18n

LANG="ru_RU.UTF-8"

SYSFONT="latarcyrheb-sun16"

[viking@alpha ~]$ cat /homed/viking/.i18n

LC_MESSAGES="en_US"

[viking@alpha ~]$

В данном примере системная локаль ru_RU.UTF-8, но пользователь viking предпочитает работать в англоязычном интерфейсе, что и записал в своем персональном файле настроек локали.





Файловые системы Linux



Создание файловых систем



Ссылка на оригинал: http://linuxshop.ru/unix4all/?cid=&id=160

Автор: Алексей Федорчук (alv@linux-online.ru)

C версии: 1.3



Создание файловых систем на дисковых разделах (или, в терминах DOS/Windows, форматирование последних) - второй этап подготовки диска к инсталляции Linux. Само по себе это действо - не из самых сложных, однако осознанное его выполнение требует некоторой подготовки.

Необходимое введение

Термин "файловая система" - один из самых многозначных в компьютерной терминологии вообще, и в литературе, связанной с ОС Unix и ее клонами (а Linux именно к таковым и относится) - в особенности: больше значений имеет, пожалуй, только просто слово "система". Так сложилось исторически, и потому значение термина приходится определять по контексту. Мне таких значений известно как минимум пять, и нет уверенности, что это - все возможные значения.

Во-первых, файловой системой или, иногда, подсистемой, называют часть ядра, которая управляет организацией файлов и операциями над ними: в этом аспекте в одном ряду с файловой системой выступают система управления процессами и система ввода/вывода. Впрочем, именно это значение мы пока рассматривать не будем.

Во-вторых, и это специфично для Unix и Unix-подобных ОС, файловая система - универсальный интерфейс доступа ко всем ресурсам, как локальной машины, так и компьютеров, объединенных в сеть любого рода - от модемного подключения до спутникового канала. Собственно говоря, именно задействование такого интерфейса в некоей ОС и являет собой один из поводов для отнесения ее к семейству Unix-подобных.

Во-третьих, файловая система - это способ описания некоего физического устройства (обычно - дискового раздела). Именно это значение используется в термине "идентификатор типа файловой системы", о котором говорилось в статье о дисковых разделах. Он обычно специфичен для конкретной ОС, и потому здесь уместны термины: DOS-раздел, расширенный (Extended) раздел DOS, раздел Linux native и так далее. Хотя большинство всамделишних операционных систем способны тем или иным образом опознавать "неродные" для них идентификаторы и обращаться к данным на них. А в Linux в качестве "родных" (native) рассматривает дисковые разделы, идентифицированные целым рядом файловых систем в третьем понимании термина - от истинно родного Linux native до Extended DOS, включая логические тома (LVM) о которых говорилось в соответствующей статье, и программные RAID-массивы.

Здесь следует отметить, что помимо файловых систем физических (то есть надстраивающих реальные дисковые устройства, почему в этом контексте нередко фигурирует выражение - disk based file system), существуют и виртуальные файловые системы различных типов. К ним относятся и файловая система устройств - devfs, и временная файловая система в оперативной памяти - tmpfs, и procfs - система, ответственная за представление в виде файловой системы (уж простите за тавтологию) процессов. Иногда используются и файловые системы промежуточного типа, например, виртуальные диски (RAM-диски). Подобно tpmfs, они существуют только в оперативной памяти, однако в остальном ведут себя также, как и файловые системы disk-based.

В четвертых, под файловыми системами понимается внутренняя управляющая структура, позволяющая хранить, идентифицировать и отыскивать данные, ну и, конечно, манипулировать ими. Такие структуры, с одной стороны, специфичны для операционных систем, как FAT16 (со всеми ее вариациями типа VFAT или FAT32) для DOS, UFS для FreeBSD или Ext2fs - для Linux. С другой же - структуры управления файлами в ряде операционок строятся по близким принципам, чему ярким примером служат файловые системы Unix- и Unix-подобных ОС . И потому они могут быть объединены в одно семейство, противопоставляемое FAT-семейству, например.

Кроме того, Linux в настоящее время способен работать с управляющими структурами различных типов - от Ext3fs, являющей собой надстройку над традиционной Ext2fs, до XFS и JFS, разработанных первоначально для версий Unix от SGI и IBM, соответственно, а также ReiserFS. Нет запрета и на размещение Linux'а на файловой системе типа FAT (хотя и резонов к тому - нет также).

Добавлю, что в списке из предыдущего абзаца перечислены только файловые системы, способные нести базовые компоненты Linux, отвечающие за ее запуск и минимальную функциональность. Что же касается обмена данными - таковой возможен из Linux'а практически со всеми известными файловыми системами, хотя с некоторыми из них (например, NTFS или HPFS) - только в режиме чтения.

Наконец, в пятых, файловая система в Unix - это и логическая структура каталогов и файлов, которая объединяет и физические, и виртуальные файловые системы самых различных типов (например, дисковые разделы с файловыми системами Ext2fs и FAT16, виртуальные procfs, devfs и tmpfs), причем не только на локальной машине, но и и на любой удаленной. Структура эта - иерархическая, или древовидная, начинающаяся с корневого каталога, родительского по отношению ко всем прочим, от которого ответвляются отдельные файлы и дочерние каталоги, которые, в свою очередь, могут выступать как родительские по отношению к подкаталогам более глубоких уровней вложенности.

Положение дел в настоящий момент таково, что в Linux структура файловой системы обычно специфична для конкретного дистрибутива или их группы, связанной единством происхождения. Поэтому нередко можно столкнуться с такими выражениями, как файловая система Red Hat или Debian. Собственно, именно исторически сложившиеся различия в иерархии каталогов являются одним из критериев обособления нескольких линий дистрибутивов Linux. Как, впрочем, и потенциальной причиной их несовместимости. Однако можно надеяться, что усилиями стандартизирующих организаций, таких, как Linux Standard Base и Filesystem Hierarchy Standard, русский перевод стандарта - на сайте Виктора Костромина), увенчаются успехом, и можно будет говорить о единой логической файловой системы Linux, подобно тому, как это имеет место в ОС линии BSD.

В контексте настоящей статьи нас интересует только четвертый аспект файловых систем, то есть создание управляющих файлами структур, базируемых на дисках (вернее, их разделах).

Устройство файловых систем Unix-семейства

В этом разделе будет говориться о предметах, общих для всех Unix. Все файлы в Unix физически состоят из двух частей, реально локализованных в различных блоках дискового накопителя, но обязательно находящихся в одном дисковом разделе, первичном или логическом.

Первая часть файла - его т.н. метаданные, которые содержат файловый дескриптор (это просто некое уникальное число), сведения о его атрибутах (принадлежности, правах доступа, времени модификации и т.д.), а также информацию о том, в каких блоках дискового раздела (которые так и называются - блоки данных) физически размещено содержимое файла - те самые последовательности байтов, которые образуют доступный пользователю ASCII-текст или исполняемый модуль программы.

Метаданные каждого файла записаны в специальной области диска, называемой суперблоком, где образуют т.н. inodes (от information nodes - информационные узлы). Каждому существующему файлу соответствует свой inode, и именно он однозначно идентифицируется файловым дескриптором. А сам по себе список inodes, соответствующих как существующим файлам, так и свободным блокам дискового раздела, и определяет границы файловой системы, то есть сколько файлов может быть в ней создано.

Так вот, суть процесса создания файловой системы на дисковом разделе (или, в понимании DOS/Windows, его форматирования) - в создании на нем суперблока (или, в некоторых файловых системах, нескольких его копий), списка inodes и отведении дискового пространства под блоки данных (а также загрузочного блока, о котором будет сказано ниже), а устройством этих дисковых областей определяются различия между файловыми системами различных типов. В результате на новом разделе образуется единственный файл - каталог корневого (для данной файловой системы) раздела (в некоторых случаях создается еще и каталог /lost+found, предназначенный для хранения нарушенных файлов).

Возникает вопрос, почему такой, казалось бы неотъемлемый, атрибут файла, как его имя, не обнаруживается ни в его метаданных, ни, тем более, среди его данных. Ответ прост: в Unix имя являет собой атрибут не файла, но файловой системы (в пятом, логическом, понимании термина). И для хранения имен файлов предназначены файлы особого типа - каталоги (в Unix есть и другие типы файлов, например, упомянутые выше файлы устройств). Они представляют собой просто списки файловых дескрипторов идентификаторов и соответствующих им имен файлов. Поэтому идущая от MacOS и активно используемая в Windows метафора каталога как папки с документами - в Unix только затемняет суть дела: здесь это скорее именно каталожный ящик в библиотеке.

Не смотря на столь простое устройство, роль каталогов в файловой системе Unix трудно переоценить: имена файлов, через которые они включаются в файловую систему (и через которые пользователь получает доступ к их содержимому), фигурируют только в составе каталога, к которому файл приписан - и больше нигде в системе. Так что удаление имени файла (или подкаталога) из списка, представляющего собой данные его родительского каталога (который, конечно, также имеет свой inode и файловый дескриптор, приписанный к каталогу, расположенному уровнем выше в иерархии файловой системы, и так далее) равносильно тому, что метаданные файла становится недоступными, а приписанные к его inode блоки данных помечаются как свободные. Именно так осуществляется удаление файла командой rm или файловым менеджером типа Midnoght Commander.

Нас, однако, сейчас интересует прямо противоположное - сделать файловую систему доступной. Из сказанного понятно, что для этого она со всем ее содержимым (суперблоком, списком inode, блоками данных) должна быть включена в состав какого-либо из существующих каталогов, называемого точкой монтирования. Именно это и составляет суть процесса монтирования. Результат же для монтируемой файловой системы - в том, что ее корневой каталог (до сих пор безымянный) получает имя каталога - точки монтирования (mount point), содержимое которого отныне составляет список имен ее файлов и подкаталогов. Обратный процесс - размонтирование, следствием чего является отсоединение от точки монтирования дерева смонтированной файловой системы. Кроме того, в inode ее корневого каталога устанавливается т.н. бит чистого размонтирования (clean bit). Впрочем, вопросам монтирования и размонтирования файловых систем будет посвящена специальная статья. Пока же рассмотрим особенности файловых систем, используемых в Linux'е.

Файловые системы Linux

Ext2fs

До недавнего времени список истинно родных (native) файловых систем для Linux ограничивался единственной - ext2fs (правда, Linux способен загрузиться и работать с FAT-раздела, но об этом мне даже не хочется говорить). Название это расшифровывается как "вторая расширенная файловая система"; "расширенная" она - по сравнению с файловой системой ОС minix, послужившей прототипом Linux, "вторая" - потому что ранние версии Linux базировались на Extfs с более ограниченными возможностями.

О файловой системе Ext2fs написано немало (см. дополнительные источники). Поэтому замечу только, что по способу организации хранения данных она - типичная представительница файловых систем Unix. Отличительная ее особенность - наличие нескольких копий суперблока, что повышает надежность хранения данных. Кроме того, для характерен очень эффективный механизм кэширования дисковых операций, что обеспечивает замечательное их быстродействие - едва ли не рекордное среди известных мне файловых систем. Оборотная сторона чего, однако, - относительно слабая устойчивость при аварийном завершении работы (вследствие мертвого зависания или отказа питания), поскольку отложенность записи изменений файлов делает весьма высокой вероятность нарушения связи между их inodes и блоками данных.

Конечно, времена, когда некорректный останов Linux-машины грозил полным разрушением файловой системы, остались в далеком прошлом. Однако в любом случае останов системы без штатного размонтирования файловых систем приводит к тому, что в них не устанавливается упомянутый выше "бит чистого размонтирования". А без этого утилиты обслуживания диска (такие, как программа проверки fsck) при перезагрузке не воспринимают их как целостные и начинают проверку, которая при современных объемах дисков может занять немалое время.

О журналируемых файловых системах

Проблема нарушения целостности файловой системы при некорректном завершении работы в большей или меньшей мере характерна для всех ОС семейства Unix. И потому с давних пор в них разрабатываются т.н. журналируемые файловые системы. Журнал -- это нечто вроде log-файла дисковых операций, в котором фиксируются не выполненные, а только предстоящие манипуляции с файлами, вследствие чего оказывается возможным самовосстановление целостности файловой системы после сбоя.

Во избежание недоразумений следует подчеркнуть, что журналирование направленно на обеспечение целостности файловой системы, но ни в коем случае не гарантирует сохранность пользовательских данных как таковых. Так, не следует ожидать, что журналирование волшебным образом восстановит не сохраненные перед сбоем изменения документа, загруженного в текстовый редактор.

Более того, в большинстве журналируемых файловых систем фиксируются грядущие операции только над метаданными изменяемых файлов. Обычно этого достаточно для сохранения целостности файловой системы и, уж во всяком случае, предотвращения долговременных их проверок, однако не предотвращает потери данных в аварийных ситуациях. В некоторых из файловых систем возможно распространение журналирования и на область данных файла. Однако, как всегда, повышение надежности за счет этого оплачивается снижением быстродействия.

Текущие версии ядра Linux поддерживают в качестве нативных четыре журналируемые файловые системы: ReiserFS и Ext3fs, специфичные для этой ОС, XFS и JFS - результаты портирования в Linux файловых систем, разработанных первоначально для рабочих станций под ОС Irix (SGI) и AIX (IBM), соответственно. Правда, широкое признание получили только три первых, так что о JFS я пока говорить не буду.

ReiserFS

Файловая система ReiserFS оказалась для Linux исторически первой из журналируемых - она поддерживается каноническим ядром c http://www.kernel.org, начиная с первых версий ветви 2.4.x (в настоящее время существуют патчи, позволяющие использовать ее и с версиями ветви 2.2.xx). И была единственной, разработанной "с нуля" специально для этой ОС Хансом Райзером и его фирмой Namesys. Как и в большинстве рассмотренных, в ReiserFS осуществляется журналирование только операций над метаданными файлов. Что, при определенном снижении надежности, обеспечивает высокую производительность: по моим наблюдениям, на большинстве типичных пользовательских задач она лишь незначительно уступает Ext2fs. А на такой, достаточно обычной, операции, как копировании большого количества мелких файлов, существенно ее опережает.

Кроме этого, ReiserFS обладает уникальной (и по умолчанию задействованной) возможностью оптимизации дискового пространства, занимаемого мелкими, менее одного блока, файлами (а следует помнить, что в любой Unix-системе такие файлы присутствуют в изобилии): они целиком хранятся в своих inode, без выделения блоков в области данных - вместе с экономией места это способствует и росту производительности, так как и данные, и метаданные (в терминах ReiserFS - stat-data) файла хранятся в непосредственной близости и могут быть считаны одной операцией ввода/вывода.

Вторая особенность ReiserFS - то, что т.н. хвосты файлов, то есть их конечные части, меньшие по размеру, чем один блок, могут быть подвергнуты упаковке. Этот режим (tailing) также включается по умолчанию при создании ReiserFS, обеспечивая около 5% экономии дискового пространства. Что, правда, несколько снижает быстродействие, и потому режим тайлинга можно отменить при монтировании файловой системы. Однако упаковка хвостов автоматически восстанавливается после перекомпиляции ядра - что, как будет сказано чуть ниже, требует внимательного отношения.

ReiserFS не совместима с Ext2fs на уровне утилит обслуживания файловой системы. Однако соответствующий инструментарий, объединенный в пакет reiserfsprogs, уже давно включается в штатный комплект современных дистрибутивов (или, в крайнем случае, может быть получен с сайта Namesys).

Более серьезная проблема с совместимостью - в том, что распространенные загрузчики Linux (и Lilo, и GRUB - хотя и по разным причинам) часто не способны загрузить ядро Linux с раздела ReiserFS, оптимизированного в режиме тайлинга. А поскольку, будучи отключен, этот режим обладает свойством самовосстановления, пользователь может столкнуться с тем, что после пересборки ядра система просто откажется загружаться. Именно поэтому выше я упоминал, что создание раздела под каталог /boot может быть необходимым.

Ext3fs

В отличие от ReiserFS, Ext3fs - не более чем журналируемая надстройка над классической Ext2fs, разработанная Стивеном Твиди в компании Red Hat и поддерживаемая ядром Linux, начиная с версии 2.4.16. Как следствие такого происхождения, она сохраняет со своей прародительницей полную совместимость, в том числе и на уровне утилит обслуживания (начиная с версии 1.21 объединяющего их пакета e2fsprogs). И переход от ext2fs к ext3fs может быть осуществлен простым добавлением файла журнала к первой, не только без переформатирования раздела, но даже и без рестарта машины.

Из этого вытекает первое преимущество ext3fs, особенно весомое в случае большого парка компьютеров. Второе же - чуть ли не максимальная надежность: ext3fs является единственной системой из рассматриваемых, в которой возможно журналирование операций не только с метаданными, но и с данными файлов.

В Ext3fs предусмотрено три режима работы - полное журналирование (full data journaling), журналирование с обратной записью (writeback), а также задействуемое по умолчанию последовательное (ordered).

Режим полного журналирования, как легко догадаться из названия, распространяется и на метаданные, и на данные файлов. Все их изменения сначала пишутся в файл журнала и только после этого фиксируются на диске. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние. Этот механизм практически гарантирует от потерь данных, однако является наиболее медленным.

В режиме отложенной записи, напротив, в файл журнала записываются только изменения метаданных файлов, подобно всем рассмотренным ниже файловым системам. То есть никакой гарантии сохранности данных он не предоставляет, однако обеспечивает наибольшее (в рамках Ext3fs) быстродействие.

В последовательном режиме также физически журналируются только метаданные файлов, однако связанные с ними блоки данных логически группируются в единый модуль, называемый транзакцией (transaction). И эти блоки записываются перед записью на диск новых метаданных на диск, что, хотя и не гарантирует сохранности данных, весьма последней способствует. Причем - при меньших накладных расходах по сравнению с полным журналированием, обеспечивая промежуточный уровень быстродействия.

Однако, по моим наблюдениям Ext3fs ни в одном из режимов не может похвастаться высокой производительностью при решении настольных пользовательских задач. А в режиме полного журналирования возможны ситуации, вызывающие на некоторое время полный паралич машины.

XFS

Файловая система XFS, в отличие от молодых ReiserFS и ext3fs, развивается для фирмой SGI на протяжении почти десяти лет - впервые она появилась в версии Irix 5.3, вышедшей в 1994 г. Но в Linux она была портирована лишь недавно (текущая ее версия - 1.1, свободно доступна с сайта SGI's XFS page - http://oss.sgi.com/projects/xfs) и по сию пору не поддерживается официальным ядром.

XFS - единственная 64-разрядная файловая система из рассмотренных. Однако уникальность ее - не только в этом. Особенностями XFS являются:

В результате XFS предстает как очень сбаллансированная файловая система: она почти столь же надежна, как Ext3fs, и не очень уступает ReiserFS в быстродействии на большинстве файловых операций. А при манипуляциях с (очень) большими файлами XFS - просто вне конкуренции: как легко догадаться по имени фирмы-разработчика, она ориентирована на работу с мультимедийными приложениями с их огромными потоками данных. Не отмечалось для нее и проблем с совместимостью.

Все сказанное позволяет сделать вывод, что XFS - оптимальная файловая система для Linux. Однако следует учесть: в отличие от ReiserFS и ext2fs, поддержка которых является штатными опциями ядра Linux, XFS по сию пору (текущая версия - 2.4.19) не поддерживается каноническим ядром Линуса Торвальдса (тем, которое можно получить с http://www.kernel.org). Хотя недавнее включение такой поддержки в разрабатываемую ветвь ядра (версии 2.5.X) позволяют надеяться, что скоро эта функция станет штатной.

Возможность работы с XFS обеспечивает специальный патч (xfs-2.4.1X-all-i386.bz2), который можно получить с сайта SGI вместе с соответствующими утилитами поддержки: традиционные средства e2fsprogs, для XFS не пригодны. Утилиты поддержки для XFS объединены в несколько пакетов, из которых абсолютно необходимым является xfsprogs. Обо всем этом следует помнить при предварительной разметке диска.

Критерии выбора

Таким образом, каждая из четырех рассмотренных файловых систем имеет свою уникальную положительную особенность (даже Ext2fs - как бы то ни было, лидером по суммарному быстродействию остается она), и как минимум один недостаток (который, тем не менее, не служит препятствием к ее использованию). Так что выбор файловой системы должен определяться задачами пользователя и характером преобладающих его данных.

Кроме этого, если, как рассказывалось в статье про LVM, максимально разгрузить корневую файловую систему, выделив в логические тома отдельные ее ветви, возможно и комбинированное использование файловых систем. То есть подбор для каждого из дисковых разделов наиболее подходящей к его содержанию управляющей структуры.

Так, ранее неоднократно говорилось, что Ext2fs - наиболее подходящий выбор для загрузочного раздела (а при использовании в качестве загрузчика GRUB - это почти обязательное требование). Кроме того, Ext2fs вполне подходит для таких ветвей, как /tmp или /var. Для первого, по определению, устойчивость к сбоям не критична. Для второго же определяющим требованием является быстродействие (так, в Source Based дистрибутивах типа Gentoo /var задействуется для хранения временных продуктов компиляции, и быстродействие файловых операций в нем несколько способствует ускорению сборки пакетов). Наконец, на настольной машине Ext2fs можно применить и для корневой файловой системы - ведь при дробном разбиении диска в корне остается минимум редко изменяемых компонентов.

С другой стороны, корень - наиболее критичный в отношении устойчивости элемент файловой системы. И потому оптимальным для него представляется файловая система Ext3fs, как наиболее устоявшаяся. Кроме того, в экстремальных ситуациях она может быть без проблем смонтирована как Ext2fs. Для разделов типа /usr и /usr/local Ext3fs также видится вполне подходящим вариантом.

Наиболее важная часть файловой системы настольной машины с точки зрения пользователя - его, пользовательские, данные, то есть каталог /home (ибо систему можно переустановить, а вот потеря данных может быть невосполнимой). Однако это - и наиболее изменяемая ее часть, что предъявляет высокие требования к быстродействию файловых операций. И поэтому Ext3fs - не лучшее (ИМХО) решение для каталога /home, более целесообразно разместить здесь какую-либо из "быстрых" журналируемых файловых систем, ReiserFS или XFS. Выбор между ними определяется личными предпочтениями и характером данных (пользуясь случаем, замечу, что быстродействие JFS, по моим наблюдениям над типичными пользовательскими манипуляциями, оставляет желать лучшего).

Очевидно, что быстродействие XFS при работе с файлами (очень) большого размера делает ее предпочтительной, если речь идет об обработке изображений, мультимедийном контенте, картографической информации и т.д. В то же время преимущества ReiserFS сказываются в основном при работе с файлами (очень) маленького размера (менее блока файловой системы), каковых среди пользовательских данных обычно бывает мало. И потому мое личное мнение однозначно - и высказывается в пользу XFS. К тому же собственный опыт общения с ReiserFS был неблагоприятен, особенно в сочетании с технологией LVM. XFS же, напротив, по моим впечатления идеально с ней гармонирует.

Подведем итог - оптимальной мне видится следующее сочетание файловых систем:

Повторяю, это лишь мое мнение, основанное на опыте настольного применения Linux - для серверов различного рода оно силы не имеет.

Практические следствия

Надеюсь, предыдущий раздел дал достаточно информации для выбора файловой системы, наиболее подходящей к конкретным условиям. И потому далее вкратце рассмотрим последовательность действий после того, как выбор осуществлен.

Обычно при установке Linux создание файловых систем - компетенция инсталлятора, который осуществляет его с некоторыми опциями по умолчанию. В контексте рассмотренного в предыдущем разделе ясно, что опции эти не всегда будут лучшими с точки зрения пользователя. Изменить же характеристики, определенные для файловой системы при ее создании, невозможно без повторного выполнения этого процесса (и, соответственно, потери данных). Однако все SB-дистрибутивы допускают ручное вмешательство в процедуру создания файловой системы, а в Gentoo, например, это - просто единственный способ ее выполнения.

Файловая система Ext2fs может быть создана любой из следующих команд - /sbin/mke2fs, /sbin/mkfs, /sbin/mkfs.ext2 с указанием файла устройства в качестве аргумента, например:

$ /sbin/mke2fs /dev/hd?#

Каждая из этих команд (а /sbin/mkfs.ext2 - обычно символическая ссылка на /sbin/mke2fs) имеет ряд опций, как то: -b для определения размера блока файловой системы (возможные значения - 1024, 2048 или 4096 байт, по умолчанию принято последнее),-c для проверки испорченных участков диска, -N и -i для задания числа inodes и количества байт на один узел, соответственно; с деталями можно ознакомиться на соответствующей man-странице, например, man (8) mke2fs.

Для создания файловой системы ext3fs можно применить ту же команду mke2fs с опцией -j, при этом случае она получит некоторые "умолчальные" характеристики. Определить же их вручную позволяет следующая форма этой команды:

$ /sbin/mke2fs -J опции_журналирования /dev/hd?#

Возможные значения опций журналирования - size=размер, задающая объем журнального файла в мегабайтах, и device=внешний_журнал подключения новой файловой системы к журналу, ранее созданному на другом дисковом разделе.

Можно использовать и специальную команду /sbin/mkfs.ext3 - возможности ее идентичны таковым /sbin/mke2fs (ибо она ни что иное, как символическая на нее ссылка). Но самое интересное - возможность преобразования существующей ext2fs в ext3fs простым добавлением журнала, не только без потери данных, но и без перезапуска системы (и даже без размонтирования). Делается это командой

$ tune2fs -j /dev/hd?#

Она просто добавляет файл журнала /.journal в корневом каталоге модифицируемой файловой системы (если последняя не была размонтирована), или задействует для журнала скрытый inode (если перед модификацией файловая система была размонтирована). Добавлю, что обратное преобразование - еще проще, и осуществляется командой монтирования (о чем будет говориться в следующей статье).

Файловая система ReiserFS создается специально предназначенной для этого командой - /sbin/mkreiserfs из пакета reiserfsprogs. Для нее доступны многочисленные опции (-s для задания размера журнала, -f для принудительного переформатирования ранее существовавшей файловой системы иного типа, и т.д.), с которыми можно ознакомиться посредством man (8) mkreiserfs. И во избежание неожиданностей напомню: если корневой раздел форматируется как ReiserFS, не лишним будет предусмотреть небольшой раздел под каталог /boot для размещения на нем файловой системы ext2fs.

Для создания XFS также существует собственная команда mkfs.xfs (из пакета xfsprogs). В ней предусмотрено несколько опций, каждая из которых имеет ряд субопций, принимающих численные значения. Важнейшие из них:

При использовании mkfs.xfs для достижения максимальной производительности рекомендуется в явном виде задать количество allocation groups - иначе оно будет определяться автоматически, что ведет к непроизводительным расходам ресурсов. Это делается из расчета - одна allocation group на 4 Гбайт дискового пространства. Далее можно установить размер файла журнала - здесь рекомендованное значение составляет 32 Мбайт. То есть для дискового раздела объемом в 20 Гбайт команда приобретет вид

$ mkfs.xfs -d agcount=5 -l size=32m /dev/hda1

Кроме всех перечисленных, команда mkfs.xfs имеет опцию -f (от force) - принудительное создание файловой системы XFS поверх любой существующей. Ее достаточно, если последняя была ext2fs (и, исходя из общих соображений, ext3fs, хотя я этого не проверял). Если же XFS создается поверх ReiserFS - после этого возможны ошибки при монтировании новой файловой системы. Впрочем, то же относится и к обратной процедуре (замене XFS на ReiserFS), а также, если любая из этих "продвинутых" файловых систем заменяется на разделе системой ext2fs. Они связаны с тем, что команда монтирования может распознать новосозданную XFS как дефектную ReiserFS, и наоборот.

Во избежание этого перед таким замещением приходится прибегать к несколько шаманскому приему - обнулению начальных областей раздела (хранящего метаданные файловой системы) командой

$ dd if=/dev/zero of=/dev/hd?#

Ждать заполнения нулями всего устройства не обязательно - достаточно дать этой команде поработать секунд 10-20, после чего прервать ее комбинацией клавиш Control+D и перейти к созданию новых файловых систем.

И последнее, о чем следует сказать - о swap-разделе, созданном на этапе разбиения диска. Хотя файловой системы как таковой он не несет, но нуждается в определении, что достигается командой

$ mkswap имя_устройства

к которой следует подходить со вниманием - применение ее к обычному разделу уничтожит на нем все данные.

Библиография вопроса

Многие сложные вопросы устройства файловых систем в этой статье были затронуты лишь вскользь. За более подробной информацией по ним следует обратиться к дополнительным источникам. Так, общая организация файловой системы Unix рассматривается во многих руководствах по этой операционной системе, например: С. Д. Кузнецов. Операционная система UNIX.

Устройство файловой системы ext2fs подробно описано в статье Виктора Хименко "Файлы, файлы, файлы" (Мир ПК, 2000, часть 1 - #2; часть 2 - #3,).

Подробное описание современных журналируемых файловых систем, используемых в Linux, дано в цикле статей Дэниела Роббинса, русский перевод которого, выполненный Владимиром Холмановым, доступен на сайте Ярославской группы пользователей Linux.



Linux и файловые системы: еще раз о проблеме выбора



Ссылка на оригинал: http://citkit.ru/articles/381/

Автор: Алексей Федорчук (alv@linux-online.ru)

Дата: 15.03.2007 г.

C версии: 1.3



Весна наступила... Индо взопрели озимые, солнышко рассупонилось. Старик Ромуальдыч начал к своей портянке принюхиваться - оттаяла, видать. Податтаяли и пользователи - на форумы потянулись, вопросы задавать, да ответы получать...

Одним из популярных вопросов в нынешнем сезоне оказался такой: как разбить диск и какую файловую систему выбрать.

Общий ответ на первую половину вопроса дать невозможно, а варианты решения этой проблемы обсуждались столько раз, что повторять их было бы скучно. А потому перейдем сразу ко второй половине - о дисковой разметке я вскользь скажу в самом конце.

В качестве "родных" для Linux (то есть тех, на которые он может быть установлен и с которых способен стартовать) рассматриваются следующие файловые системы: ext2fs, ext3fs, ReiserFS, XFS, JFS. Именно они обычно и предлагаются на выбор при установке подавляющего большинства дистрибутивов. Конечно, существуют и способы установки Linux на файловые системы FAT/VFAT/FAT32, но это - только для тех медам и мсье, которые понимают толк в извращениях, и о них я говорить не буду.

Исключу из рассмотрения также JFS - по следующим причинам:

Основными критериями при выборе файловой системы являются обычно надежность и быстродействие. В некоторых случаях приходится учитывать также фактор совместимости - в данном случае под ней понимается способность других операционок обращаться к той или иной файловой системе.

Начну рассмотрение с ReiserFS - потому что поводом к сочинению этой заметки послужил вопрос: а что следует считать маленькими файлами? Ведь общеизвестно, что именно эффективность работы с мелкими файлами является сильной стороной этой файловой системы.

Так вот, под мелкими файлами понимаются файлы размером меньше логического блока файловой системы, который в Linux в большинстве случаев равен четырем килобайтам, хотя и может задаваться при форматировании в некоторых пределах (зависящих от конкретной FS). Таких мелких файлов в любой Unix-подобной ОС - бессчетное количество. Типичным примером являются файлы, составляющие дерево портов FreeBSD, портежей Gentoo и тому подобных портообразных систем.

В большинстве файловых систем для таких минирофайлов существует как свой inode (информационный узел, содержащий метаинформацию о файле), так и блок данных, что приводит как к расходу дискового пространства, так и снижению быстродействия файловых операций. В частности, именно в этом причина катастрофической задумчивости файловой системы FreeBSD (как старой, UFS, так и новой, UFS2) при работе с собственной же системой портов.

В файловой системе ReiserFS в таких случаях отдельные блоки под данные не выделяются - она умудряется запихать данные файла непосредственно в область его же inode. За счет этого и дисковое пространство экономится, и быстродействие возрастает - буквально в несколько раз по сравнению со всеми прочими FS.

Такое обращение с мелкими файлами ReiserFS послужило причиной возникновения легенды о ее ненадежности. Действительно, при крахе файловой системы (то есть разрушении служебных областей) данные, размещенные совместно со своими inodes, вместе с ними же и пропадают - причем безвозвратно. Тогда как в тех файловых системах, где inodes и блоки данных всегда разобщены пространственно, последние теоретически можно восстановить. Так, для ext2/ext3 даже существуют средства, позволяющие это сделать.

Однако, как и всякая легенда, эта лишь производит впечатление достоверности. Во-первых, безвозвратная потеря данных относится лишь к очень маленьким файлам. Среди пользовательских таковых практически не бывает, а все прочие же легко восстанавливаются из дистрибутива.

Во-вторых, говоря о возможности восстановления данных из блоков, утуративших привязку к своим inodes, я не случайно употребил слово "теоретическая". Потому что на практике это занятие чрезвычайно трудоемкое, не дающее гарантированного результата. Каждый, кому приходилось этим заниматься, согласится, что предаться ему можно только от полной безысходности. И это относится ко всем файловым системам Linux. Так что этим аспектом при выборе файловой системы можно пренебречь.

По суммарному быстродействию ReiserFS однозначно быстрее всех остальных журналируемых FS, а по некоторым показателям превосходит и ext2. С результатами сравнения скорости выполнения некоторых распространенных файловых файловых операций можно ознакомиться здесь.

А вот с совместимостью у ReiserFS дело обстоит несколько хуже. Доступ к ней из ОС семейства Windows, насколько мне известно, невозможен. В некоторых операционках семейства BSD (DragonFlyBSD, FreeBSD) реализована поддержка этой файловой системы, но в режиме только для чтения. Даже вероятность того, что произвольный Linux LiveCD прошлых лет не имеет поддержку ReiserFS, не нулевая.

И тут впору вспомнить об ext3fs. Преимущество ее вовсе не в большей надежности - это такая же легенда, как и неустойчивость ReiserFS. О случаях краха ext3fs я слышал не меньше, чем об аналогичных происшествиях с ReiserFS. Самому мне не удавалось порушить ни ту, ни другую. Разве что с ext2 получалось - но и то очень давно, во времена ядра 2.2 (или даже еще 2.0).

Нет, главное преимущество ext3fs в ее совместимости - она с гарантией будет прочитана любой Linux-системой. Например, при восстановлении с какого-нибудь древнего подручного LiveCD - ситуация, практически не столь уж невероятная, мне приходилось в нее попадать. Опять же, большинство BSD-систем легко понимают ext3fs (хотя и без журналирования). Для Windows также имеются, насколько я знаю, всякого рода драйверы и plug-ins к распространенным файловым менеджерам (типа Total Commander), обеспечивающие доступ к разделам с ext2fs/ext3fs.

В отношении производительности ext3fs оставляет противоречивое впечатление. Во-первых, быстродействие ее очень зависит от режима журналирования, каковых предусмотрено три: с полным журналированием данных, частичным их журналированием и журналированием только метаданных. В каждом из режимов она показывает различную производительность на разных типах файловых операций. Впрочем, ни в одном случае быстродействие не является рекордным, в чем можно убедиться, пройдя по указанной выше ссылке.

Впрочем, если требование быстродействия ставится на первое место, то тут вне конкуренции оказывается ext2fs - правда, в этом случае придется смириться с отсутствием журналирования вообще. И, следовательно, с длительными проверками файловой системы при любом некорректном завершении работы - а при объемах современных дисков это может затянуться ой как надолго...

Относительно XFS можно сказать следующее. В плане совместимости к ней относится все то же самое, что написано для ReiserFS - более того, до некоторого времени она не поддерживалась стандартным ядром Linux. С точки зрения быстродействия она XFS она также не блещет, выступая суммарно примерно на одном уровне с ext3fs. А на операции удаления файлов вообще демонстрирует удручающую медлительность.

По моим наблюдениям, использование XFS оправдывает себя при работе не просто с большими, а с очень большими файлами - каковыми являются фактически только образы DVD и видеофайлы.

Возвращаюсь к вопросу о надежности. Банальное выключение питания в ходе обычной пользовательской работы, как правило, безболезненно переносят все журналируемые файловые системы (и ни одна из них не обеспечивает сохранности незаписанных на диск пользовательских операций - спасение утопающих и тут остается делом рук самих утопающих). Правда, для любой файловой системы можно смоделировать ситуацию, в ходе которой выключение питания приведет к более или менее серьезным ее повреждениям. Однако в реальной жизни возникновение таких ситуаций маловероятно. А полностью исключить их пожно приобретением источника бесперебойного питания - он придаст больше уверенности в сохранности данных, чем тип файловой системы. Ну а гарантией восстановления разрушенных данных в любом случае может быть только их регулярное резервное копирование...

Думаю, изложенной выше информации достаточно для осознанного выбора. Мой личный выбор в течении последних нескольких лет - ReiserFS. Изредка, на системах, где оправданно вынесение за пределы корневого раздела всего, чего только можно, целесолобразно использование ext3fs для корневой файловой системы и ReiserFS - для всех остальных.

Если предусматривается отдельный раздел под каталог /boot (а это рекомендуется при использовании загрузчика GRUB его разработчиками) - для него никакая другая файловая система, кроме ext2fs, не оправданна, какое-либо журналирование тут смысла не имеет. Наконец, если создается отдельный раздел под всякого рода мультимедийные материалы - тут можно подумать и о XFS.

В заключение добавлю, что более подробные сведения обо всех рассмотренных здесь материях можно получить из цикла статей Дэниеля Роббинса.



О Gentoo Linux

Ссылка на оригинал: http://gentoo.ru/about

C версии: 1.0

Gentoo английское название вида пингвинов Pygoscelis papua (русские варианты названия: субантарктический пингвин, папуанский пингвин, ослиный пингвин). Согласно Книге рекордов Гиннеса 98 этому виду пингвинов принадлежит рекорд скорости плавания (27км/ч).

Gentoo Linux дистрибутив, который может быть автоматически оптимизирован и приспособлен для применения практически в любой области в соответствии с вашими требованиями. Наивысшая производительность, настраиваемость и высококлассное сообщество пользователей и разработчиков вот отличительные черты Gentoo.

Благодаря технологии портежей, Gentoo Linux станет идеальным защищенным сервером, рабочей станцией разработчика, профессиональной настольной системой, системой для игр, встроенной системой или чем-либо другим всем, чем вы пожелаете. Из-за практически неограниченной способности дистрибутива подстраиваться под нужды пользователя, мы называем Gentoo Linux "метадистрибутивом".



Что такое портежи?



Portage сердце Gentoo Linux, выполняющее множество ключевых функций. Например, portage это система распространения программного обеспечения Gentoo Linux. Для того, чтобы получить доступ к последним версиям программ, в Gentoo Linux достаточно набрать всего одну команду: emerge --sync (emerge; средство установки/удаления программ (дословно: emerge - выяснять, всплывать, появляться)). Эта команда заставляет Portage обновить локальное дерево портежей вашей системы через интернет. В локальном дереве портежей содержится полная коллекция сценариев, которые используются для сборки и установки последних версий пакетов Gentoo. Сейчас в нашем дереве Portage более 10000 пакетов, а обновления и новые пакеты добавляются каждый день.

Portage также является системой сборки и установки пакетов. Желая установить пакет, нужно просто набрать: emerge имя_пакета, при этом Portage автоматически соберет вариант пакета «на заказ» в точности по вашим указаниям, оптимизируя его под ваше оборудование и гарантируя, что нужные вам дополнительные возможности включены, ненужные нет.

Portage также следит за тем, чтобы ваша система не устаревала.

Команда: emerge -u world всего одна команда позаботится о том, чтобы все нужные именно вам пакеты в системе автоматически обновились.

Gentoo Linux



С помощью портежей можно обновлять систему Gentoo Linux при малейшем желании. Поэтому опытные пользователи Gentoo не обращают особого внимания на «новые версии» Gentoo Linux: в конце концов, свежайшую версию Gentoo Linux всегда можно получить, набрав команду: emerge --sync. Нет необходимости ждать несколько месяцев выпуска «новой версии» дистрибутива, поскольку Gentoo Linux непрерывно обновляется и улучшается, а все изменения немедленно становятся доступны пользователям.



Безусловно, мы издаем официальные выпуски Gentoo Linux на компакт-дисках, чтобы вновь устанавливаемые системы с самого начала были как можно свежее. Вот краткий обзор того, что включено в самый свежий выпуск Gentoo Linux:



Если вас привлекли мощь, гибкость и скорость Gentoo Linux, обязательно испытайте его в деле. Мы уверены: вы не разочаруетесь!



История Gentoo



Все началось с Лишнего Времени. Времени на изучение, Времени на исследования, Времени на эксперименты... Именно так создатель Gentoo Дэниел Роббинс шагнул в мир Linux. Он начал с Debian Linux, настроил пару приложений, изучил Linux от «А» до «Я», а затем, как поступает большинство пользователей Linux, перепробовал еще парочку дистрибутивов, принявшись помогать дистрибутиву под названием Stampede Linux. И вскоре, погрузившись в разработку Stampede, он уже работал над их системой управления пакетами. Через некоторое время, по определенным причинам, он пошел дальше и решил создать свой собственный дистрибутив.

Так родился «Енох». Дэниел хотел, чтобы Енох стал чрезвычайно быстрым дистрибутивом, способным полностью автоматизировать процесс создания и обновления пакетов. Вскоре появился канал #enoch на irc.freenode.net и 10 разработчиков, участвующих в создании дистрибутива. По прошествии времени, когда Енох подрос, им показалось, что дистрибутиву нужно новое имя. Они нарекли его Gentoo Linux. И как раз в то время, когда выход Gentoo 1.0 был на носу, Дэниел купил новую быструю машину. В материнской плате оказался дефектный чип, из-за которого Linux при простое зависал, и из-за этого разработка Gentoo полностью встала.

С тех пор чего только не происходило с Gentoo... Дэниел переключился на FreeBSD. Увиденное ему понравилось. Особенно система портов. И он вернулся в мир Linux. При поддержке других разработчиков, таких как Аким Готтингер, Gentoo снова вышел в путь и стремительно рванулся вперед. Система управления пакетами подверглась полной переработке и получила название Portage. С тех пор год за годом Gentoo пребывает в активной разработке, с постоянным добавлением массы новых возможностей. Команды добровольцев помогают удерживать Gentoo на самом переднем крае, одновременно обеспечивая максимальную безопасность и стабильность.

Модель разработки Gentoo дополнилась полностью проектно-ориентированным подходом, где каждый проект разрабатывается независимо, но в сотрудничестве с другими проектами Gentoo. Регулярные совещания ведущих («менеджеров проектов») поддерживают быстрый темп разработки. Чтобы позаботиться о финансовых вопросах, обеспечить юридическую защиту и удержать разработку Gentoo в рамках общественного договора, создан фонд Gentoo.

В апреле 2004 Дэниел решил оставить пост разработчика Gentoo. Мы все весьма благодарны Дэниелу за его вклад в Gentoo, и желаем ему всего наилучшего.

Сейчас Gentoo продолжает расти, развиваться и улучшаться: появляются новые проекты, присоединяются новые разработчики, каждый день добавляются свежие пакеты. Но, безусловно, наивысшая ценность Gentoo это сообщество разработчиков и пользователей Gentoo!

Философия Gentoo



Ссылка на оригинал: http://gentoo.ru/philosophy

С версии: 1.0

Автор: Daniel Robbins - изначальный разработчик Gentoo

Перевод: Логинов Игорь

Я начал работу над Gentoo, потому как не мог найти дистрибутива, который бы меня устраивал. Во всех Linux-дистрибутивах я заметил одну неприятную деталь - инсталляционные утилиты, управляющие установкой ПО в системе, предназначались для упрощения работы, однако на практике лишь мешали администрированию системы.

Поэтому я и создал Gentoo с её собственной системой портэжей (т.н. Portages), более совершенной, чем все системы управления ПО, существовавшие до этого. Система портэжей отличается большой гибкостью и даёт возможность пользователю успешно использовать её для решения конкретных задач независимо от поставленных целей.

Например, если вы хотите посмотреть подробности сборки пакета, вы можете посмотреть файл ebuild.

ebuild - сборочный файл (вероятно, авторское сокращение от emerge build file)

и получить всю необходимую информацию оттуда. Чтобы настроить параметры установки, можно воспользоваться переменной USE. Чтобы добавить новый пакет, можно просто создать новый файл ebuild для дерева портэжей. Вы также можете установить требуемый пакет командой emerge - система автоматически проследит за установкой всех необходимых пакетов, от которых зависит нужное вам приложение.

Linux-сообщество оценило новую систему портэжей, и Gentoo начал стремительно развиваться. Дистрибутив получил известность как "дистрибутив исходников", однако сутью Gentoo является вовсе не принцип "from source" (из исходников). Конечно, это важный, ключевой принцип дистрибутива, но не основной. Основным здесь является технология, позволяющая пользователю делать с системой всё что угодно, без каких либо ограничений.

Работая над этой технологией, я представлял себе произвольного пользователя ОС Linux. Что он (или она) хотел бы сделать с системой?



Философия Gentoo - дистрибутив, дающий возможность делать с системой всё что угодно.

Камнем преткновения для появления Gentoo было отсутствие простого метода автоматической установки ПО из исходников, ориентированного на пользователей, с подробными инструкциями. На данный момент мы решили эту задачу практически полностью. Частично реализована поддержка прекомпилированных пакетов, хотя, с другой стороны, с момента своего появления система портэжей Gentoo поддерживала установку бинарников.

Реализация поддержки бинарных пакетов очень важна, т.к. большое количество ПО распространяется именно в бинарниках (например, в виде пакетов RPM - прим. переводчика). Если бы Gentoo не поддерживал бинарные пакеты, мы бы не смогли бы назвать его удобным дистрибутивом, позволяющим пользователю делать с системой всё, что ему придёт в голову. Впрочем, помимо "философских" причин для поддержки бинарников есть много причин практических.

Философию Gentoo можно сформулировать в нескольких предложениях:



Другими словами, философия Gentoo также заключается в разработке корректного ПО. Когда утилита выполняет свои и только свои обязанности, но выполняет их в полной мере, вы можете забыть о её присутствии (что, впрочем, соответствует философии Unix вообще как таковой - прим. переводчика). Она не помешает, не попытается взаимодействовать с вами, пока вы сами не захотите этого.

В настоящее время в перспективы Gentoo входит поддержка и создание ПО, близкого к идеалу - мощных и простых в использовании утилит, способных обеспечить выполнение множества различных задач. Разве не прекрасно иметь возможности найти ПО, делающее именно то, что вы от него хотите? Разве это не вызывает чувство эстетического наслаждения? Наша задача - донести это чувство до как можно большего числа людей.

Советы пользователям Gentoo



Ссылка на оригинал: http://ylsoftware.com/?action=news&na=viewfull&news=130

C версии: 1.0

Автор: MooSE 2006-11-22 16:35:01



Gentoo - один из самых трудных для изучения дистрибутивов. Хотя многие старые пользователи скажут что огромное сообщество и обширная документация могут здорово помочь новичкам. В этой статье приведён ряд подсказок, которые помогут новым пользователям быстрее освоить Gentoo.


Для начала приготовьтесь прочитать огромное количество документации. Вы не сможете установить Gentoo не изучив внимательно Handbook (Главное руководство Gentoo- см. ниже: Настольная книга пользователя).


Gentoo имеет графический инсталлятор, но новичкам не стоит его использовать. Установка Gentoo "традиционным" способом вынуждает читать документацию, и способствует лучшему понимаю системы. Так же инсталлятор Gentoo не так хорош при установке и настройке драйверов как инсталляторы других дистрибутивов.


Handbook содержит основную информацию о Gentoo. Дополнительная информация (например о настройке X и ALSA) может быть найдена на странице документации или на Gentoo Wiki.


Вики (WiKi) (от гавайского: быстрый) гипертекстовая среда (обычно Веб-сайт) для сбора и структуризации письменных сведений (в программировании: документации, советов, часто задаваемых вопросов(FAQ), мини-руководств(HOWTO)).

Характеризуется следующими признаками:


Для создания вики-среды необходимо особое ПО движок вики. Это частный вид системы управления сайтом, довольно простой в своём устройстве и функциональности, ибо почти все действия по структуризации и обработке сведений делаются пользователями вручную. Главная особенность посетители сайта могут сами редактировать содержимое этих страниц и создавать новые. Wiki сделаны так, чтобы редактировать страницы было просто; для редактирования ничего кроме программы веб-броузера не нужно.

ALSA, или Advanced Linux Sound Architecture продвинутая Звуковая Архитектура Linux, обеспечивает аудио- и MIDI- (Musical Instrument Digital Interface Цифровой Интерфейс Музыкальных Инструментов) функциональность в операционной системе Linux. ALSA является основной звуковой подсистемой в ядрах 2.6, заменившей собой OSS (Open Sound System - Открытая Звуковая Система), которая использовалась в ядрах 2.4

X-сервер (или просто Иксы)- обычного пользователя могут испугать мысли о необходимости печатать в командной строке. Почему бы ему не прокладывать свой путь на территории свободы выбора Gentoo (и Linux вообще), просто «водя мышкой»? Ну, конечно, вы сможете это сделать :-). В Linux предлагается широкое разнообразие пользовательских интерфейсов и сред, которые можно установить поверх установленной у вас системы.


Это один из самых больших сюрпризов, с которым сталкиваются новички: графический интерфейс пользователя это всего лишь прикладная программа, выполняемая в системе. Он не является частью ядра Linux или каких-либо других компонентов системы. Это мощный инструмент, позволяющий полностью задействовать графические возможности вашего компьютера.


Так как стандартизация очень важна, для организации прорисовки и перемещения окон по экрану, взаимодействия пользователя с мышью и клавиатурой, а также других важных базовых аспектов, был создан стандарт под названием X Window System, сокращённо X11 или просто X. Он используется в Unix, Linux и других Unix-подобных операционных системах во всем мире.


Приложение, которое дает пользователям Linux возможность запускать графические интерфейсы пользователя и использует стандарт X11, называется Xorg-X11, ответвление проекта XFree86. Проектом XFree86 было решено использовать лицензию, возможно, несовместимую с лицензией GPL, поэтому рекомендуется использовать Xorg. Пакет XFree86 больше не поддерживается в официальном дереве портежей.


Проект X.org


Проектом X.org создана и поддерживается бесплатно распространяемая реализация системы X11 с открытым исходным кодом. Это открытая инфраструктура рабочей станции, основанная на X11.


Xorg обеспечивает интерфейс между устройствами вашего компьютера и нужными вам графическими программами. Кроме того, Xorg является полностью сетевым, то есть вы можете запускать программу на одной системе, а отображать ее на другой.


Если у вас возник специфический вопрос, не освещённый в документации - попробуйте спросить на форуме или в IRC.


Основы Portage


Одно из фундаментальных отличий Gentoo от других дистрибутивов - его система управления пакетами, названная Portage, ориентированная в первую очередь на установку программ из исходных текстов. Это позволяет иметь множество настроек и точек контроля для одного пакета там, где пользователи бинарных дистрибутивов имеют несколько пакетов с разными опциями и зависимостями (фактически это тоже самое, только управление различными опциями сборки не такое гибкое). С Portage вы можете установить так называемые USE-флаги для настройки опций одного пакета или даже всей системы.


Например если вы хотите включить поддержку KDE и выключить поддержку GNOME вам нужно добавить к строке USE в файле /etc/make.conf флаги "kde -gnome". Для получения более подробной информации о USE-флагах смотрите Gentoo Handbook.


Для работы с Portage используется команда emerge. Например для установки пакета moo достаточно набрать команду: emerge moo. Portage проверит зависимости, скачает все необходимые архивы с исходниками, соберёт пакет и установит его. Вся необходимая информация сохранена в базе, состоящей из ebuild'ов, каждый из которых представляет собой специальный скрипт. Все ebuildнаходятся в папке /usr/portage.


Управление настройками Portage


Первое правило Gentoo - нужно внимательно следить за флагами USE. Почему при установке Midnight Commander устанавливается X.Org - потому что у вас разрешён флаг X. Почему нет KPDF в KDE? - Потому что KDE был собран без флага pdf (не спрашивайте почему всё же собрался KGhostScript).


Всегда устанавливайте новые пакеты командной emerge --ask --verbose (или emerge -av) для просмотра USE-флагов перед началом компиляции. Установите пакет gentoolkit (emerge gentoolkit) - среди множества полезных вещей он содержит утилиту euse, которая существенно упрощает управление флагами USE*. Выполните euse -i flag для получения информации о флаге "flag". Так же просмотрите man-страницу euse (не волнуйтесь. она короткая :-)).


Если вы хотите изменить USE-флаги только для одного пакета не пытайтесь собирать его командой USE="some flags" emerge moo. Это конечно сработает, но при обновлении системы пакет будет пересобран со старыми флагами. Лучше прописывайте USE-флаги в /etc/portage/package.use, для этого выполните echo "category/moo some flags" >> /etc/portage/package.use перед установкой пакета.


Тоже относится и к ACCEPT_KEYWORDS - используйте /etc/portage/package.keywords. В Portage 2.1 вы можете использовать папки package.use и package.keywords вместо файлов для более простого управления.


Когда нужно использовать оверлеи?

Оверлей - набор ebuild'ов, которые вы хотите добавить к официальной базе данных (дереву) Portage


Иногда возникает необходимость установить пакет, отсутствующий в Portage. Например вы можете захотеть установить пакет, удалённый из дерева Portage. Тогда вам нужно взять его ebuild из архива Portage CVS. Или например вы захотите установить новый пакет, взяв ebuild в bugzilla. Возможна ситуация, когда вы просто захотите немного подправить официальный ebuild.


В любом случае вам нужно в такой ситуации поместить ваш ebuild в локальный оверлей. Оверлей - набор ebuild'ов, которые вы хотите добавить к официальной базе данных (дереву) Portage.




Не храните свои ebuild'ы внутри официального дерева (/usr/portage), поскольку при обновлении они будут удалены.


Создайте каталог для оверлея, и создайте в нём структуру подкаталогов, аналогичную /usr/portage. Поместите туда ваш ebuild. Добавьте PORTDIR_OVERLAY="/path/to/local/overlay" в ваш файл /etc/make.conf.


Обычное место для оверлеев - /usr/local/overlays. Таким образом местом для вашего ebuild'а будет /usr/local/overlays/local. Что же ещё может находиться в /usr/local/overlays.


Во многих случаях, когда вы ищите пакеты, не включённые в официальное дерево, вы находите не только ebuild'ы, но и оверлеи. Например один из самых популярных оверлеев xgl-coffee содержит всё, что нужно для работы XGL. Вы можете установить его в /usr/local/overlays/xgl-coffee что не смешивать с другими оверлеями и обновлять его через SVN.


Вы можете найти подробную информацию относительно использования оверлеев на Gentoo Wiki. Там же вы найдёте список неофициальных оверлеев и описание процесса синхронизации с ними.


Как часто нужно обновляться?


Вам нет смысла обновляться чаще чем раз в сутки. Можно даже реже. Вы можете следить за вашими любимыми пакетами периодически посещая сайты packages.gentoo.org или gentoo-portage.com (или подписавшись на RSS).


Сохраните мир чистым !


Каждый раз, когда вы выполняете emerge some-package, имя пакета записываете в файл /var/lib/portage/world. Когда вы обновляете систему командой emerge --update --deep world - используется список из этого файла. Поэтому этот файл должен быть по возможности короче. В нём должны быть только необходимые пакеты.


Если какой-то пакет является всего лишь зависимостью другого - не стоит держать его в файле world.


Например, если вы устанавливаете пакет, использующий библиотеку wxWidgets, то эта библиотека устанавливается как зависимость и не добавляется в файл world. Если вы деинсталлируете все пакеты использующие эту библиотеку - она перестанет обновляться при выполнении emerge --update (...) world, и будет удалены после вызова emerge --depclean. Единственный случай когда стоит добавить wxWidgets в world - если вы разрабатываете приложения на основе этой библиотеки.


Существует скрипт, помогающий очистить world от всего лишнего. Для установки пакета без занесения его в world используйте опцию --oneshot. Эта опция так же будет хорошем решением при временной установке какого-либо пакета.


Деинсталляция пакетов


Все ваши действия с emerge записываются в файл /var/log/emerge.log. Если вы хотите знать какой пакет собирается в настоящее время - выполните tail /var/log/emerge.log. Утилита genlop (emerge genlop) позволяет извлечь множество различной информации из этого файла. Например genlop -c покажет вам какой пакет собирается в данный момент и попытается предсказать сколько времени осталось до конца сборки.


Удаление временных файлов


Когда сборка пакета завершается с ошибкой - остаётся каталог с временными файлами в /var/tmp/portage. Если вы устраняете проблему и пакет нормально собирается - файлы удаляются. Если же нет - вы можете очистить каталог /var/tmp/portage вручную.


После обновления вы можете удалить устаревшие файлы из /usr/portage/distfiles. Для этого воспользуйтесь утилитой eclean из пакета gentoolkit. Она поможет удалить ненужные файлы. Эта утилита может работать как с исходниками, так и с бинарными пакетами. (просто вызовите её как eclean-dist или eclean-pkg соответственно). Прочитайте страницу man для получения полного списка опций.


Gentoo предоставляет вам огромные возможности по настройке вашей системы. Автор статьи надеется что после прочтения этих строк вы сможете воспользоваться этими возможностями и испытать чувство глубокого удовлетворение от возможности управления любыми аспектами системы. Вам понравиться это ощущение.



Gentoo Linux: установка и настройка*



Ссылка на оригинал: http://posix.ru/distro/gentoo_old/

Автор: Алексей Федорчук (alv@linux-online.ru)

С версии: 1.0


О Gentoo Linux


Gentoo Linux - один из типичных представителей т.н. Source Based дистрибутивов. То есть систем, основанных не на прекомпилированных бинарных пакетах, а собираемых непосредственно из исходных текстов. Gentoo относительно молод, но известностью сравнялся с такими ветеранами дистростроения, как Red Hat или Debian.


Gentoo создан в 2001 г. Дэниелем Роббинсом. Официальный сайт проекта http://www.gentoo.org.(Русский: http://gentoo.ru)


С самого начала Gentoo являл собой синтез наиболее передовых технологий Linux с традиционными достижениями BSD-систем (в первую очередь - FreeBSD). В частности, в нем приняты сценарии начальной загрузки системы в BSD-стиле - большинство популярных дистрибутивов Linux наследуют схему инициализации системы, унаследованную от Unix System V (именно она была принята за основу Линусом Торвальдсом при создании своего ядра).


Главная особенность Gentoo также идейно унаследована от FreeBSD. В последней, как известно, только базовые компоненты (т.н. Distribution) устанавливаются из прекомпилированных пакетов. Для установки же пользовательских приложений предназначена т.н. система портов. Это - набор средств для автоматизированного получения из Сети (с мастер-сайтов разработчиков или их официальных зеркал) исходных текстов программ, их конфигурирования, компиляции, установки и регистрации в специальной базе данных. Конечно, и FreeBSD поставляется с наборами прекомпилированных пакетов (packages), однако роль их сугубо вспомогательная.


В Gentoo концепция портов (именуемых здесь портежами - Portages) проводится еще более последовательно, чем во FreeBSD. Поскольку здесь этим путем можно установить (или - обновить) не только прикладные программы, но и все базовые компоненты системы, вплоть до ядра, компилятора gcc и главной системной библиотеки glibс.


Система портежей Gentoo позволяет:

  1. очень гибкое конфигурирование системы, с подбором только необходимых (и осознанно выбираемых) приложений;

  2. открыть путь для оптимизации системы не только под различные архитектуры (а на данный момент дистрибутивом поддерживаются, кроме i86, также Sparc, PowerPC и Alpha), но и под конкретные типы процессоров;

  3. средства генерации бинарных пакетов (аналог packages FreeBSD), которые могут быть установлены на целевую платформу, отличную от host-машины;

  4. оптимизировать пакеты с учетом особенностей целевой (например, более слабой) машины.


Дополнительным плюсом дистрибутива Gentoo является его прекрасная документированность. На сайте проекта доступны Gentoo Handbook и множество более частных источников информации, ряд из которых переведен на русский язык.


Название дистрибутива (произносится как "джен-ту") может показаться несколько странным. Но объясняется просто - это один из видов пингвина (научное название Pygoscelis papua), обитающий на Циркум-Антарктических островах (Фолклендских, Кергелен, Южная Георгия).


В специальной литературе можно прочитать, что джен-ту отличается небольшим размером и стремительностью. Именно эти его качества и воплощены в дистрибутиве Gentoo.


Получение дистрибутива


Все версии дистрибутива Gentoo доступны на основном сервере проекта и на ряде его зеркал. Скачивание - по протоколам http и ftp, разумеется, свободно и бесплатно. Конечно, за некоторую сумму можно заказать и CD-вариант, но в наших условиях это не актуально.


Процесс получения Gentoo имеет некоторые особенности, отличающие его от получения (приобретения) любого пакетного дистрибутива. Если для последнего достаточно скачать iso-образы CD-дисков и записать их на соответствующие носители, продуктивное использование Gentoo требует выхода в Интернет. Правда, не обязательно с той же машины, на которую он устанавливается - вполне допустима ситуация, когда необходимые компоненты получаются, например, по рабочему каналу, а сама система устанавливается дома.


Итак, первое, что необходимо для установки - скачать образ инсталляционного диска. Объемы образов - достаточно скромны, обычно около 200 Мбайт (в зависимости от версии). Образы эти являют собой Live CD - то есть фактически полноценную Linux-систему, запускаемую с компакт-диска. И включающую набор не только системных утилит, но и пользовательских приложений.


Образ инсталляционного диска обычно содержит все необходимое для установки. Однако в некоторых версиях его оказывается недостаточно - потребуется еще три архива (*.tar.bz2), содержащие (в прекомпилированном виде) компоненты базовой системы. Первый из них (файл stage1-*, объемом около 10 Мбайт) специфичен для архитектуры (i86, PowerPC, Sparc и т.д.). Два других тарбалла (stage2-* и stage3-*, около 50 и 80 Мбайт, соответственно), кроме этого, для PC-архитектуры представлены в нескольких вариантах, оптимизированных под конкретные процессоры: от i486 до Pentium-4 (включая и Athlon). Ясно, что скачиванию подлежат только тарбаллы, соответствующие реалиям пользователя.


Далее, для установки пре-релиза потребуется скачать архив системы портежей - один из файлов вида portage-200XXXXX.tar.bz2, расположенных в каталоге ~/gentoo/snapshots (в стабильной версии текущий архив портежей размещен на установочном диске). Как легко понять, цифры в имени файла соответствуют дате создания архива (а обновляется система портежей чуть ли не ежедневно), и лучше выбирать последний по времени.


И наконец, при установке на машину без выхода в сеть неплохо заблаговременно скачать архивы исходных текстов базовых компонентов системы - об их составе я скажу несколько позже. И не обязательно с сайта разработчика: исходники всех портированных в Gentoo программ можно найти на сайте проекта в каталоге ~/gentoo/distfiles (или ~/gentoo/gentoo-sources, содержание их идентично). Наличие их очень упростит жизнь, однако, как будет показано ниже, обойтись без них можно.


А вот без чего никак не обойтись - это без одного из дополнительных носителей, на котором будут размещены скачанные компоненты. При установке на "чистую" машину ими могут быть: второй CD (при наличии двух приводов, например, пишущего и читающего) или Zip (как нетрудно подсчитать - желательно 250-мегабайтного объема, иначе их придется менять в процессе установки). Можно также временно подцепить дополнительный винчестер с уже существующим разделом и какой-либо файловой системой (из числа поддерживаемых) на нем. Ну и заблаговременно переписать на эти носители все требуемые файлы - тарбаллы stage2-*, stage3-* и portage-* - обязательно, прочие - по возможности и желанию.


К слову сказать, на тот же носитель хорошо поместить и инструкцию по установке с сайта Gentoo (добавлю, и все прочие файлы документации - тоже, отнюдь не повредят). Или, по крайней мере, держать ее распечатку под рукой - зело способствует. И можно приступать к установке.


Помещать тарбаллы базовой системы и системы портежей, а также документацию, можно где угодно - хоть в корне файловой системы дополнительного накопителя. А вот под архивы исходников лучше создать на нем отдельный каталог, например, src - ниже будет ясно, почему.

Загрузка системы и первые шаги


Редкий инсталляционный диск Linux-дистрибутива ныне не является загрузочным. И Gentoo тут - не исключение: чтобы загрузиться с любого из вышепоименованных образов, достаточно поместить диск в привод, нажать на Reset, выставить соответствующие опции в Setup BIOS и подождать некоторое время, по возможности вникая в появляющиеся сообщения об имеющемся оборудовании (впрочем, все эти сведения можно будет получить и потом - командой dmesg.


Ожидание завершается выводом приглашения на ввод пользовательского имени (login), ответом на что служит волшебное слово root, а затем и пароля - на это отвечаем просто нажатием клавиши Enter. За этим появляется приглашение командной строки - и можно приступить к дальнейшим действиям.


Они не вполне тривиальны. Еще одна отличительная особенность дистрибутива Gentoo, о которой я не упомянул ранее - полное отсутствие какого-либо инсталлятора, все манипуляции по установке осуществляются прямыми директивами из командной строки и прямым редактированием конфигурационных файлов в текстовом редакторе. Что начинающего (да и не очень начинающего) пользователя может просто обескуражить.


Однако все не так страшно. Во-первых, в нашем распоряжении - вышеупомянутая подробная, буквально пошаговая, инструкция по установке. А во-вторых (и об этом также говорилось ранее), установочный диск Gentoo - не просто загрузочный, а так называемый Live CD. То есть просто-напросто загружающий полноценную рабочую Linux-среду с корневой файловой системой в оперативной памяти (способной монтировать в себя файловые системы любых устройств). И потому в процессе установки в руках пользователя - вся мощь ОС Linux, включая командную оболочку bash и 6 виртуальных консолей (авторизоваться в любой из них можно точно так же, как и в первой - вводом имени root без пароля). Ну а в третьих - загружаемое с CD Linux-ядро собрано с поддержкой абсолютно всех опций, которые могут потребоваться при установке (встроенной в ядро или модульной).


И потому первое действие после старта системы - загрузка всех необходимых модулей. Это будут модули поддержки:


При этом возможно, что многие из перечисленных устройств (в частности, сетевые карты) будут корректно определены при загрузке системы и соответствующие модули загрузятся автоматически, что проверяется командой

$ modprobe имя_модуля


В остальных случаях это придется сделать вручную, командой

$ insmod имя_модуля


Имена поддерживаемых модулей можно посмотреть (авторизовавшись в следующей виртуальной консоли) в соответствующих подкаталогах каталога /lib/modules/2.6.XX.X/kernel/ - ведь наша корневая система пока находится в оперативной памяти.


Следующий шаг - настройка сетевого соединения (при постоянном подключении). Если машина использует динамически выделяемый IP-адрес, назначаемый через DHCP-сервер (а в большинстве случаев это так и есть), делается это элементарно просто, командой

$ dhcpcd eth0


Все остальное происходит почти автоматически. При статическом IP-адресе потребуется ручная настройка, но на этом я останавливаться не буду (все вопросы конфигурирования сети очень подробно рассмотрены в руководстве).


При отсутствии постоянного подключения необходимо смонтировать носитель со скачанными ранее архивными файлами. Для этого в каталоге /mnt создаем соответствующую ситуации точку монтирования, например,

$ mkdir /mnt/zip


для Zip-диска, или

$ mkdir /mnt/cd2


для второго CD (каталог для установочного CD - /mnt/cdrom, - там уже имеется, и диск этот в него уже смонтирован). А теперь даем команду монтирования. Для zip-диска "из коробки" она будет выглядеть так:

$ mount /dev/hdd4 -t msdos /mnt/zip


где, кроме явного указания файловой системы, обращаю внимание, что файл устройства - именно /dev/hdd4: при фабричной разметке на zip-дисках создается один, но четвертый, первичный раздел. И еще одна тонкость: вследствие особенностей реализации файловой системы devfs в дистрибутиве Gentoo, zip-диск должен находиться в приводе в момент старта системы - иначе соответствующий файл устройства просто не будет создан.


Аналогичны и действия по монтированию второго CD или дискового раздела. Единственно, что в этом случае может не потребоваться явного указания на тип файловой системы (хотя и вреда от него, конечно, не будет).


Завершив монтирование носителя установочных файлов, следует перво-наперво активизировать еще одну виртуальную консоль и вывести на нее инструкцию по инсталляции - дабы сверять с ней все дальнейшие шаги, как со Священным писанием:

$ lynx /mnt/mount_point/build.html


При наличии модемного подключения к Сети можно настроить и его - даже если все требуемые файлы, включая исходники базовой системы, размещены на смонтированном носителе, не исключено, что в процессе их синхронизации может потребоваться какой-либо специфичный для Gentoo патч, скачать который по модему - дело пары минут, а то и секунд. Хотя должен предупредить, что установить базовую систему чисто по модему (что вполне реально, скажем, для FreeBSD) - не то что невозможно, но, скажем так, весьма долго и накладно для кармана.


Для настройки модемного соединения проще всего использовать программу wvdial, находящуюся на Live CD (в каталоге /usr/bin). Подгрузив модули поддержки протокола ppp (общий, ppp_generic, и асинхронного соединения, ppp_async), запускаем программу

$ wvdialconf /etc/wvdial.conf


Она автоматически определит порт, к которому подключен модем, определит его скорость и создаст строку инициализации, занеся все эти сведения в файл, указанный в качестве аргумента. В результате содержание его примет вид, подобный следующему:


[Dialer Defaults]

Modem = /dev/ttyS0

Baud = 115200

Init1 = ATZ

Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0

ISDN = 0

Modem Type = Analog Modem


Пользователю остается только добавить туда строку, определяющую способ дозвона. По умолчанию он - тоновый, тогда как в наших условиях, скорее всего, потребуется импульсный дозвон:


Dial Command = ATDP


Остальное же - обычная информация: телефон провайдера


Phone =


имя пользователя и его пароль


Username =

Password =


Теперь, проследив, чтобы в файле /etc/hostname наличествовала единственная строка


localhost


подкорректируем содержимое файла /etc/resolv.conf: значение строки nameserver должно соответствовать реальному IP-адресу DNS-сервера провайдера. И теперь при необходимости для дозвона можно использовать команду


$ wvdial


А больше на этапе установки нам ничего и не требуется - все остальное сделает система портежей.


Возникает вопрос: а каким образом редактировать все вышепоименованные конфигурационные файлы (и те файлы, которые потребуется редактировать в дальнейшем)? Этой цели в дистрибутиве Gentoo штатно служит текстовый редактор nano - очень простой в освоении и обращении, снабженный встроенной справкой и обеспечивающий достаточные базовые функции редактирования. Нужно только не забывать запускать его в форме

$ nano -w имя_файла


где опция -w отключает режим переноса строк - конфигурационные файлы на это, как правило, реагируют болезненно. Поскольку редактор понадобится нам за время установки неоднократно, резонно было бы сразу определить псевдоним:


$ alias nano='nano -w'


благо, как уже говорилось, в нашем распоряжении полнофункциональная оболочка bash.

Установка - первый этап


Вот теперь подготовительные мероприятия закончены - можно начинать собственно установку, начальный этап которой происходит внутри корневой файловой системы Live CD. Первый шаг на этом этапе - создание дисковых разделов и файловых систем на них. Эти вопросы были предметом детального рассмотрения в моей статье, подготовленной к печати (Открытые системы, #11, 2002) и потому здесь я на них остановлюсь лишь вкратце.


Для первой операции можно использовать одну из программ - fdisk, cfdisk, parted, все они имеются на Live CD. А созданию файловых систем служат специфичные для них утилиты: mkefs для ext2fs, mkfs.xfs - для XFS, mkswap - для раздела подкачки, и так далее. Рекомендуемая в руководстве схема разбиения для одного диска (первого на первом IDE-канале) приведена в табл. 1.


Таблица 1. Рекомендуемая схема разбиения диска для установки Gentoo


Раздел Размер Тип Устройство

Загрузочный 100 Мбайт ext2fs или ext3fs /dev/hda1

Раздел подкачки 128 Мбайт=<2*RAM=<2 Гбайт Linux swap /dev/hda2

Корневой раздел 1,5 Гбайт минимум XFS, ext3 /dev/hda3



Разумеется, эта рекомендация - приблизительна. Так, 1,5 Гбайт для корневого раздела - лишь абсолютно необходимый минимум. При интенсивном использовании системы портежей цифру эту нужно увеличить в два-три раза, а то и более. Или выделить файловую систему /usr в отдельный раздел. Кроме того, на мой взгляд, абсолютно необходимо создать отдельный раздел под файловую систему /home - для домашних каталогов пользователей. А в некоторых случаях целесообразно выделение и каталогов /var и /tmp.


Если под установку Gentoo предполагается задействовать более одного физического диска, можно прибегнуть к таким современным технологиям, как программные RAID-массивы или система управления логическими томами (LVM - Logical Volumes Manager). Рассмотрение их далеко выходит за рамки настоящей статьи. Скажу только, что первая технология способствует повышению быстродействия дисковых операций или (иногда - и) сохранности данных. А система LVM позволяет достичь непревзойденной гибкости в управлении уже созданными и смонтированными файловыми системами (в частности, динамического перераспределения занимаемого ими дискового пространства). И, разумеется, на установочном Live CD содержится весь необходимый инструментарий для работы с программными RAID-массивами и системой LVM. Впрочем, нет препятствий и к использованию дисков, подключенных к аппаратному контроллеру IDE-RAID, хотя это потребует некоторых дополнительных действий (детали - в руководстве по установке).


Следующий шаг - монтирование созданных файловых систем в структуру корневой системы (напомню, она - в оперативной памяти). Но сначала - активизируем раздел подкачки:

$ swapon /dev/hda2


что будет способствовать быстродействию при всех дальнейших манипуляциях, особенно при не очень большом объеме ОЗУ.


Теперь необходимо создать точку монтирования для той файловой системы, которая в дальнейшем станет корневой:

$ mkdir /mnt/gentoo


и смонтировать в нее соответствующий раздел:

$ mount /dev/hda3 /mnt/gentoo


Если создавались отдельные разделы под каталоги /boot, /usr, /home - они тоже потребуют своих точек монтирования, теперь уже относительно каталога /mnt/gentoo:

$ mkdir /mnt/gentoo{/boot,/usr,/home}


и выполнить для них команды монтирования:

$ mount /dev/hda1 /mnt/gentoo/boot


и так далее. Теперь командой

$ cd /mnt/gentoo/


переходим в будущий корневой каталог Gentoo и вспоминаем наконец о наших архивных файлах. Разворачиваем тарбалл первой очереди, находящий на инсталляционном CD:

$ tar -xvjpf /mnt/cdrom/nocompress/stage1-x86-*.tar.bz2


Здесь и далее следует обратить внимание на опцию -p в командной строке: она необходима для сохранения оригинальных атрибутов доступа к файлам, извлекаемым из архива. По самой же команде разворачивается иерархия каталогов в дереве /mnt/gentoo (/mnt/gentoo/etc, /mnt/gentoo/proc и т.д.) и устанавливается некий минимум прекомпилированных программ, необходимых для дальнейшей инсталляции, в том числе и ftp-клиент wget. И действительно, при постоянном подключении к Сети более ничего не потребуется - можно переходить к подготовке смены корневого каталога. Однако тем, кто не может им похвастаться, предварительно придется распаковать два оставшихся тарбалла, stage2* и stage3*.


Делается это точно так же, как и развертывание первого, только пути к соответствующим файлам нужно указать те, что соответствуют их реальному расположению, например:

$ tar -xvjpf /mnt/zip/stage2*.tar.bz2


и так далее. После этого мы имеем в каталоге /mnt/gentoo тот самый набор прекомпилированных библиотек, утилит и приложений, который объединяется понятием base Linux. И, соответственно, морально готовы к тому, чтобы сделать каталог /mnt/gentoo корневым.

Этап второй - подготовка к смене корня


Однако этот ответственный шаг требует некоторых подготовительных мероприятий - ведь после него все остальные ветви нынешнего корневого каталога станут недоступными. Правда, только с текущей, первой, консоли - во всех прочих сеансах корневым останется каталог в оперативной памяти.


Для начала, чтобы не делать двойную работу, скопируем настроенные нами конфигурационные файлы - ведь и они пока существуют только виртуально:

$ cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

$ cp /etc/hostname /mnt/gentoo/etc/hostname

$ cp /etc/wvdial.conf /mnt/gentoo/etc/wvdial.conf


Теперь воспользуемся замечательным свойством современных ядер Linux - возможностью доступа к одной и той же файловой системе через разные точки монтирования. И смонтируем таким образом файловую систему процессов (она, как ясно из названия, представляет протекающие в системе процессы в виде файлов):

$ mount -o bind /proc /mnt/gentoo/proc


К слову сказать, таким же образом можно поступить и с тем носителем, на котором у нас размещены архивы системы портежей и исходников (если последние мы туда помещали). А можно, просто размонтировав его (доступ к ним из виртуального корня Live CD больше не обязателен), смонтировать заново - но уже относительно будущего нового корня:

$ mount /dev/hdd4 /mnt/gentoo/mnt


Ведь в нем развернута собственная корневая система, имеющая все положенные компоненты. Правда, в этом случае мы потеряем доступ к инструкции по установке - а она нам еще потребуется. Вообще говоря, обойтись с этим носителем можно самыми разными способами - например, не перемонтируя его, просто обращаться с других виртуальных консолей. Я опишу самый, на мой взгляд, удобный.


Не предпринимая никаких размонтировочных действий, переходим в каталог /mnt/gentoo/usr (таковой ведь у нас тоже имеется). И из него разворачиваем архив портежей, точно так же, как мы это делали для основных тарбаллов:

$ tar -xvjpf /mnt/zip/portage*.tar.bz2


Если исходников на вспомогательном носителе нет - можно оставить его в покое, нужды в нем больше не возникнет. Если же исходники имеются - создаем в новообразованном каталоге /mnt/gentoo/usr/portage подкаталог distfiles и копируем в него все наши архивы исходных текстов:

$ cp /mnt/zip/src/* /mnt/gentoo/usr/portage/distfiles


Теперь они находятся именно там, где их ожидает встретить система портежей, прежде чем обращаться к Сети (и выдавать сообщение об ошибке при отсутствии подключения). А дополнительный носитель оставляем смонтированным - чтобы подсматривать в документацию через другой виртуальный терминал.


Теперь все готово к волнующему моменту - смене корневого каталога. Итак, командой

$ chroot /mnt/gentoo /bin/bash


объявляем каталог /mnt/gentoo корнем, одновременно запуская новый экземпляр командной оболочки (уже из нового источника). Теперь пересчитываем пути к системным библиотекам

$ env-update


ответом на что будет сообщение

Regenerating /etc/ld.so.cache...


И устанавливаем для нового экземпляра оболочки переменные окружения:

$ source /etc/profile


Все, мы - внутри системы Gentoo Linux, причем уже очень даже реальной, не имеющей никакого отношения к виртуальной системе, загруженной с Live CD. И далее все пути к файлам в абсолютной форме (типа /usr/portage) будут указываться с учетом того, что отныне наш / - это не что иное, как /mnt/gentoo.

Третий этап - внутри Gentoo


Итак, мы уже как бы установили операционную систему Gentoo Linux (без перезагрузки, прошу обратить внимание). И вот тут-то и начинается самый охмурежь - рядом планомерных и последовательных действий мы можем после перезагрузки (ну куда же без нее) получить не просто полнофункциональную и аккуратно настроенную, но, не побоюсь громких слов, - идеально оптимизированную систему.


Требуемые к тому действия описываются в предположении: а) установки всех трех тарбаллов и системы портежей, б) помещения в каталог /usr/portage/distfiles (уже относительно нового корня - /mnt/gentoo) некоторого набора минимально необходимых исходников, и в) хоть какого-то соединения с Интернетом (на крайний случай). Без последнего можно, как я неоднократно говорил, и обойтись - но тут уж потребуется ювелирная точность в выборе предварительно скачанных (и ныне помещенных в /usr/portage/distfiles) архивов исходников.


В чем смысл этих действий? Да ни много, ни мало, как в полной пересборке базовой системы (те, кто имел дело с FreeBSD, неизбежно вспомнят тут make world) и доустановки необходимых компонентов. Поскольку это - не apt-get, и не установка прекомпилированных пакетов, все требуемое извлекается непосредственно из исходников. И потому первое, что нам потребуется - настройка условий компиляции.


Глобальные параметры сборки посредством системы портежей описываются в файле /etc/make.conf. Вызываем его в редакторе nano (не забыв про опцию -w, если не решили этот вопрос разом - определением псевдонима) и начинаем действовать.


Первое, что бросается в глаза после открытия вышеупомянутого файла - переменная USE. Смысл ее - в определении условий предкомпиляционного конфигурирования исходников. То есть, она эквивалента опциям --enable/disable или --with/without скрипта ./configure, с исполнения которого начинается ручная сборка любой программы. И, задав значения этой переменной (несложно догадаться, что указав

USE="gpm"


мы включаем поддержку службы консольной мыши во всех собираемых через портежи программах (разумеется, тех, где это имеет физический смысл). А задав значение

USE="-gpm"


таковую отключаем раз и навсегда (на самом деле - не совсем навсегда, но это тема отдельной беседы).


Список включенных по умолчанию значений переменной USE можно подсмотреть в файле /usr/portage/profiles/default-x86-XX/make.defaults. А полный (и логично классифицированный) список доступных значений можно найти в файле документации - use-howto.html. Мы ведь списали его на дополнительный носитель? Да? - тогда можем вызвать с очередной виртуальной консоли...


Следующая переменная файла /etc/make.conf -

CHOST='i686-pc-linux-gnu'


Она указывает на архитектуру машины, на которой будут собираться программы. И ее, при необходимости, нужно будет привести в соответствие с реалиями оной. Правда, ныне такая необходимость возникнет редко - разве что поменять первую шестерку на пятерку в случае Pentium-просто...


А вот следующая строка,

CFLAGS="*"


очень важна. Ею задаются именно те флаги оптимизации, передаваемые компилятору для оптимизации под конкретный процессор. Вдаваться в детали опять же не буду - и это тема особого, и очень подробного, разговора. Достаточно помнить, что флаг -O3 (а именно он указан здесь по умолчанию) устанавливает самый высокий уровень оптимизации, а оба флага -mcpu=* и -march=* указывают, под какой именно процессор оптимизировать следует. Различие между ними - в том, что программа, собранная с флагом -mcpu=i686, будучи оптимизирована под класс процессоров Pentium Pro и выше (а с формальной точки зрения, и P-II, и P-III, и даже P-4 принадлежат к нему), теоретически способна запуститься и на Pentium-100, тогда как флаг -march=athlon-xp потребует именно того процессора, который указан - даже на просто Athlon'е скомпилированная с ним программа работать не будет.


Смысл переменной

CXXFLAGS=


аналогичен - только для программ, написанных не на Си, а на Си++. И ее имеет смысл определить просто, через переменную CFLAGS=

CXXFLAGS="${CFLAGS}"


как это и сделано в example-файле. Остальные строки которого определяют условия скачивания (в частности, ftp-клиента по умолчанию). Менять их на данном этапе - оснований не вижу, кроме разве что идиосинкразии к wget, используемому по умолчанию.


Определившись с условиями, можно начинать перестройку. Для этого меняем каталог

$ cd /usr/portage


и запускаем сценарий

$ scripts/bootstrap.sh


Он производит сборку пакетов binutils, gcc, gettext и glibc (замещая установленные из тарбаллов прекомпилированные их варианты), а после сборки glibc - пересборку binutils, gcc и gettext. Достигая, таким образом, их идеальной оптимизации... Хотя и ценой временных затрат - процесс даже на мощной машине вполне может занять часок-другой.


Теперь можно полюбоваться на список пакетов, установленных в нашей системе - ибо это и есть тот самый base Linux с очень небольшими коррективами. Для этого даем команду

$ emerge -p system


Если есть желание, время, а главное - полный набор исходников в /usr/portage/distfiles, можно завершить пересборку базовой системы командой

$ emerge system


Здесь без постоянного коннекта с очень большой вероятностью рано или поздно последует сообщение об ошибке - о невозможности получить пакет имя_рек с такого-то адреса. Если имеется модем, к подбору исходников мы подошли ответственно, - не беда: активизируем еще одну виртуальную консоль (а на ней будет жить наша первозданная Live-система с CD) и дозваниваемся до провайдера через программу wvdial (а она у нас пока существует только в той самой виртуальной Live-системе), а потом повторяем последнюю команду. И, скорее всего, дело было в каком-нибудь исконно Gentoo'ском патчике объемом в пару килобайт, так что процедура эта нас не разорит. Если же обуяет приступ жадности, можно просто продолжить, а к emerge system вернуться в другой раз - после полного зеркалирования каталога distfiles с сайта Gentoo, и за казенный счет, разумеется :-)

Этап четвертый: в недра ядра


На предыдущем этапе были перестроены все компоненты базовой системы, кроме одного - зато самого главного: ядра системы. Перекомпиляция ядра - процедура, рано или поздно неизбежная для пользователя любого дистрибутива Linux, даже самого user-ориентированного. Перед пользователем же Source Based дистрибутива она встает с неотвратимостью рока уже при установке системы.


Gentoo - опять не составляет исключения. Хотя в заключительных разделах я расскажу, как при крайней необходимости можно обойти этот этап, однако по хорошему к тому нет никаких причин. И потому, хотя тема пересборки ядра - совершенно отдельная, и нам придется еще не раз к ней возвращаться, применительно случаю постараюсь осветить ее здесь в минимально возможном объеме.


Чтобы пересобрать ядро, для начала нужно иметь его исходники. Ни на инсталляционном диске, ни в составе тарбаллов stage2-3 мы их не найдем. Что делать?


При подключении к Сети - все просто: к нашим услугам система портежей. Отправляемся в каталог /usr/portage, просматриваем содержимое подкаталога sys-kernel - и остается только дивиться свалившемуся на голову богачеству: даже отметая классово чуждые портежи ядер для Sparc, PPC, Alpha, на выбор предоставляется чуть не дюжина вариантов. Подчеркну, речь идет не о прекомпилированных ядрах, а именно о вариантах исходников, снабженных патчами, обеспечивающими дополнительные опции относительно ядра первозданного.


Разумеется, и последнее, каноническое ядро от Линуса Торвальдса - тоже доступно (под известным именем vanilla-sources) для тех, кто хочет быть святее папы римского. Далее - фирменная коронка, gentoo-sources, это - лучший выбор с точки зрения функциональности). Ну и ac-sources - ядро от Алана Кокса, в патчах которого обычно воплощены новейшие достижения ядреной науки и техники.


Есть и более специфичные варианты: usermode-sources - ядро для запуска Linux в Linux, в т.н. пользовательской моде (предназначается обычно для тестирования); openmosix-sources - ядро с поддержкой одноименной (openMosix) кластерной технологии, и т.д..


Так что в этих условиях главное - определиться с выбором. А потом - простая команда

$ emerge sys-kernel/name-sources


некоторый период ожидания, пока скачиваются сами исходники ядра и все необходимые патчи , еще чуть-чуть времени на развертывание архивов - и вперед, в каталог /usr/src/linux для конфигурирования.


При наличии предусмотрительно скачанных исходников ядра, наиболее явно необходимых патчей и модемного подключения - сложнее, но не намного. Выполняем ту же команду. Если повезет - все по прежней схеме, но предупреждаю, шансов на это мало: почти наверняка при предварительном скачивании какой-то Gentoo-специфичный патч будет пропущен (учтем также наше пока еще очень ограниченное знакомство с системой портежей вообще - в дальнейшем такой ситуации можно и избежать). Но не беда: получив сообщение об ошибке, соединяемся с Сетью и либо скачиваем недостающий патч вручную (хоть через браузер lynx - полный адрес к недостающему компоненту будет выведен), либо (и это, товарищи, правильнее) запускаем процедуру по новой. Разорвав соединение по завершении установки исходников ядра.


И не нужно бояться, что это больно ударит по карману: при соединении по линии, способной вынести протокол V90, скачивание большинства патчей занимает минуты. И wget при обрыве коннекта способен к докачке - так что непроизводительные расходы сведены к минимуму.


Хуже, если нет ни полного комплекта исходников, ни модема. И это не смертельно, но придется кое-чем поступиться (надеюсь, не принципами). То есть: просто тупо распаковываем архив исходников ядра в каталог /usr/src, распаковываем и накладываем минимально необходимые патчи, далее - обычным порядком, как описано ниже. Можно и просто ограничиться каноническим ядром Линуса. Недостаток - кроме возможных потерь некоторых функций, эти действия не будут зафиксированы в базе данных портежей (имеющей место пребывания в каталоге /var/db/pkg), то есть система портежей о них как-бы и не узнает (на самом деле - не совсем, но все равно - этот способ может рассматриваться как временное решение).


И еще одно временное решение - вообще отказаться от пересборки ядра. А как при этом получить возможность загрузить систему - я расскажу под занавес (если вы к тому времени сами не догадаетесь).


В любом случае, кроме последнего, исходники ядра мы получили, так что можно отправляться в вышеупомянутый каталог /usr/src/linux (или /usr/src/linux-номер_версии-имя_варианта, без разницы, - первый лишь символическая на него ссылка). И давать команду

$ make menuconfig


которая сгенерирует меню настройки опций ядра. Любители отвечать черному экрану могут выбрать и make config - но я к ним не принадлежу.


Сам процесс конфигурирования описывать не буду - это совсем другая история. Отмечу только обязательные опции. Первая из них - поддержка экспериментальных и разрабатываемых опций: большинство продвинутых возможностей ядра Linux описываются именно этими терминами (что не мешает им функционировать вполне справно). В секции файловых систем необходимо отметить поддержку файловых систем процессов (procfs), файловой системы виртуальной памяти (Virtual Memory Filesystem) и файловой системы устройств (devfs). И, конечно же, тех файловых систем, которые были размещены на созданных разделах (например, XFS или ext3fs - про поддержку ext2fs, надеюсь, не забудет ни один линуксоид). Ну и учесть поддержку требуемых устройств - сами знаете, что у вас вкручено в машине.


Закончив с конфигурированием, выходим из системы меню (не забыв сохранить изменения) и даем последовательность команд:

$ make dep

$ make clean

$ make bzImage

$ make modules

$ make modules_install


Разумеется, не обязательно последовательно, можно и одной строкой, разделяя символом ; (или, правильнее, &&). А то и вообще в форме, рекомендованной руководством:

$ make dep && make clean bzImage modules modules_install


Теперь остается только скопировать образовавшийся образ ядра в загрузочный каталог

$ cp /usr/src/linux/arch/i386/boot/bzImage /boot


И ядерный вопрос можно считать закрытым. Хотя остается еще вопрос, косвенным образом с ним связанный - программы поддержки файловых систем. Их, в соответствие с выбором и предпочтениями, устанавливаем через систему портежей, например, команда

$ emerge sys-apps/xfsprogs


установит все необходимое для работы с файловой системой XFS. Напомню, что архив исходников пакета xfsprogs должен иметься в каталоге distfiles.


Попутно через систему портежей можно установить и другие программы, однако я пока ограничился бы только тем, что облегчит завершение конфигурирования, а именно - службой консольной мыши:

$ emerge sys-libs/gpm


А теперь активизируем ее. Если мы имеем наиболее типичного ныне грызуна с колесиком и под разъем PS/2, это будет выглядеть так:

$ gpm -t imps2 -m /dev/psaux


И на следующих этапах гораздо проще будет выделять нужные фрагменты и вставлять их щелчком средней клавиши, нежели набрать вручную.

Финал: постинсталляционное конфигурирование


Собственно установка на этом закончена. Осталось довести систему до идеала не только изнутри, но и снаружи. И первый шаг здесь - настройка часового пояса: для Source Based дистрибутивов это не последнее дело (утилита управления компиляцией make обращает внимание на даты создания файлов). Реализуем просто: созданием символической ссылки

$ ln -sf /usr/share/zoneinfo/path/timezonefile /etc/localtime


Рискну предположить, что компонент пути path/timezonefile для большинства моих читателей окажется в диапазоне от Europe/Kaliningrad до Asia/Kamchatka (наличие Анадыря в нашей стране почему-то упорно игнорируется - но, слава богу, хоть о Петропавловске-Камчатском знают). Если системное время в BIOS установлено на не время по Гринвичу, дополнительно потребуется внести коррективы в файл /etc/rc.conf.


Теперь увековечим монтирование новых файловых систем. Как? - очень просто, лобовым редактированием ответственного за сие файла /etc/fstab. Вызываем его:

$ nano -w /etc/fstab


И видим, если исключить комментарии, следующую картину:

/dev/BOOT /boot ext2 noauto,noatime 1 1

/dev/ROOT / xfs noatime 0 0

/dev/SWAP none swap sw 0 0

/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0

proc /proc proc defaults 0 0


#tmpfs /dev/shm tmpfs defaults 0 0


Если мы следовали рекомендациям инструкции, остается только заменить символы верхнего регистра конкретными реалиями, как то: /dev/hda1, /dev/hda3, /dev/hda2. Или, что будет более корректно, /dev/discs/disc0/part1 и т.д., сняв при этом комментарий со строки #tmpfs. Если же использовалась какая-либо иная схема разбиения - можно в одной из ранее активизированных консолей с помощью команды mount без аргументов подсмотреть, какой раздел с какой файловой системой куда монтировался. И просто перетащить мышью (не зря же мы ее запускали) соответствующие значения в наш /etc/fstab. Ну и всякого рода коррективы (типа монтирования FAT-разделов, флоппи-дисков, zip-накопителей и еще чего требуется) также никто не запрещает.


Внимательный читатель обратил внимание - в строке /dev/BOOT по умолчанию стоит значение noauto, предписывающее не монтировать соответствующий раздел автоматически при старте системы. Именно так рекомендуется делать при использовании GRUB - он принят в Gentoo в качестве загрузчика по умолчанию. Так вот, настало время обеспечить загрузку системы. Для этого даем команду grub и после появления одноименного приглашения последовательно вводим:

grub> root (hd0,0)

grub> setup (hd0)


вслед за чем выходим из программы:

grub> quit


Начальный загрузчик установлен в первый раздел первого диска, тот самый, который в текущий момент смонтирован у нас как /boot. И который в дальнейшем не будет монтироваться автоматически - дополнительная защита, в первую очередь от человеческого фактора. Так что в дальнейшем не следует удивляться, если, собрав новое ядро системы, вы не сможете его сразу скопировать в каталог /boot - предварительно оный придется смонтировать вручную.


Теперь остается GRUB настроить. Для этого посредством того же редактора создаем файл его меню:

$ nano -w /boot/grub/menu.lst


и записываем в него две секции. Строки первой относятся к GRUB в целом:

default 0

timeout [значение_в_секундах]

splashimage=(hd0,0)/boot/grub/splash.xpm.gz


Она указывает на ОС, загружаемую по умолчанию, время ожидания выбора в секундах и описывает путь к файлу графической заставки. Последняя штатно - нечто вроде аметиста с морионовым оттенком. Не нравится - заставку можно убрать (стерев или закомментировав третью строку). Или - изготовить собственную соответствующем формате.


Вторая секция описывает непосредственно загрузку Gentoo.

title=My Love Gentoo Linux

root (hd0,0)

kernel /boot/имя_образа root=/dev/hda3


Первая строка - произвольное название пункта меню. Вторая определяет имя устройства, с которого будет загружаться система. Имя это дается в нотации GRUB, отличной от принятой в Linux: дело в том, что GRUB способен загрузить ядро с не смонтированной файловой системы, относящейся к незагруженной операционке. И это распространяется не только на Linux, но на практически любую ОС из клана свободных Unix'ов (например, на FreeBSD или OpenBSD).


В третьей строке определяется имя образа ядра, подлежащего загрузке, и устройство, на котором после этого будет располагаться корневая файловая система. Если мы собирали собственное ядро, в качестве образа будет выступать тот самый файл /boot/bzImage, который был скопирован в каталог /boot после компиляции. Если же ядро не собиралось, значение kernel, как будет показано ниже, проще всего определить как /boot/linux. А имя устройства с корневым каталогом на этот раз дается в нотации Linux - ведь соответствующее ядро уже загружено, и оно знает, что такое /dev/hda?.


Напомню еще раз, что все действия по редактированию меню GRUB можно выполнить, просто перетаскивая мышью соответствующие фрагменты руководства (там приведены все необходимые примеры) в наш /boot/grub/menu.lst и редактируя их в соответствии с собственными реалиями.

И все же - супер финал


Настройкой загрузчика можно считать завершенной официальную часть инсталляции. Однако для полного счастья не хватает еще некоторых штрихов. Так, руководство рекомендует (и это - более чем резонно) оптимизировать режим работы жесткого диска на предмет использования DMA - что весьма способствует его быстродействию. Для такого рода штук предназначен файл /etc/conf.d/local.start. Открываем его в редакторе и после комментария (по умолчанию там больше ничего нет) приписываем строку

hdparm -d 1 /dev/hda


Если физических дисков больше одного - повторяем ее для каждого устройства. А затем, воспользовавшись случаем, обеспечим здесь же и загрузку консольной мыши при старте системы:

gpm -t imps2 -m /dev/psaux


Теперь обратимся к локализации. Не смотря на свое исходно американское происхождение, Gentoo - дистрибутив интернациональный (это ясно из состава команды его разработчиков). И потому в нем есть все базовые средства для работы с языками, отличными от американского. Нужно только немного потрудиться для их активизации.


Достигается это можно редактированием файла /etc/rc.conf. Что может показаться необычным для пользователей Linux. Но мы помним, что в Gentoo принят порядок начальной загрузки в стиле BSD (а не в стиле System V, как в большинстве распространенных дистрибутивов Linux, за исключением Slackware и его сородичей). Впрочем, вдаваться в подробности пока не буду - это тема для отдельной беседы. Пока же - голая практика: все, что мы хотим видеть загруженным при старте машины, должно быть явным образом указано в файле /etc/rc.conf. И именно в том порядке, в каком требуется.


Так что открываем этот универсальный файл

$ nano -w /etc/rc.conf


отыскиваем в начале его строку

KEYMAP="us"


и заменяем чуждую нам Америку на что-нибудь родное, от братчиков Кирилла и Мефодия. Что именно - определяем в какой-либо из иных виртуальных консолей командой

$ ls /usr/share/keymaps/i386/qwerty/ru*


В ответ она выведет на экран такой список:

/usr/share/keymaps/i386/qwerty/ru1.map.gz

/usr/share/keymaps/i386/qwerty/ru2.map.gz

/usr/share/keymaps/i386/qwerty/ru3.map.gz

/usr/share/keymaps/i386/qwerty/ru4.map.gz

/usr/share/keymaps/i386/qwerty/ru-cp1251.map.gz

/usr/share/keymaps/i386/qwerty/ru.map.gz

/usr/share/keymaps/i386/qwerty/ru-ms.map.gz

/usr/share/keymaps/i386/qwerty/ru_win.map.gz

/usr/share/keymaps/i386/qwerty/ru-yawerty.map.gz


Можно видеть, что в нем присутствуют кириллические раскладки на все случаи жизни (а пути к ним, хотя и взяты с Live CD, соответствуют тем, что будут в инсталлированной системе). Дело, конечно, сугубо личное (я бы даже сказал, интимное), но по мне предпочтительна ru4: это раскладка для кодировки KOI8-R с Windows-маркировкой клавиш (не путать с собственно раскладкой для Windows-кодировки - ее, как видно из списка, тоже можно использовать) и переключением с латиницы на кириллицу по нажатию CapsLock. Так что вписываем

KEYMAP="ru4"


и переходим к следующей строке, определяющей экранный шрифт консоли - CONSOLEFONT. Очевидно, что умолчальное ее значение описывает шрифт без символов кириллицы. Но - их у нас есть, в чем легко убедиться, просмотрев каталог /usr/share/consolefonts. Шрифтов там немерянно, и среди них легко отыскиваются семейства alt-*.psf.gz и cp866-*.psf.gz. И то, и другое нам (почти) подходит - это экранные шрифты с символами кириллицы в кодировке CP866 (она же - альтернативная, кодировка DOS или IBM). Почему так - ведь мы только что установили раскладку KOI8-R для клавиатуры, да и шрифты (семейства koi8r-*.gz), имеются? Распространяться не буду, ограничившись словами: это лучше, Леня.


А слово "почти" я добавил потому, что все имеющиеся стандартно кириллические шрифты далеки от совершенства как эстетически, так и медицински. Так что в дальнейшем лучше будет воспользоваться шрифтами из пакета Виктора Вагнера console-tools-cyrillic - там есть очень симпатичные экземпляры, но об этом - как-нибудь в другой раз. Пока же просто вписываем, например,

CONSOLEFONT="cp866-8x16"


И начинаем рассуждать логически: как же так, раскладка клавиатуры KOI8, а кодировка экранного шрифта - CP866. Ясно, что без загрузки карты трансформации одного в другое не обойтись. И такая карта у нас есть тоже - в каталоге /usr/share/consoletrans обнаруживаем файл koi2alt. Имя которого и вписываем в строку

CONSOLETRASLATION="koi2alt"


сняв с нее предварительно стоящий по умолчанию комментарий. Откладываем в уме, что таким образом карта соответствия будет загружена только на одной, первой, из виртуальных консолей (она же - консоль системная) - к этому мы еще вернемся. А пока, дабы покончить с файлом /etc/rc.conf, вспоминаем, что системные часы нашей машины установлены по местному часовому поясу (скорее всего - хотя в последнее время я осознал преимущества времени гринвичского) - тому самому, который мы определили через файл-ссылку /etc/localtime. И обращаем внимание, что строка

CLOCK="UTC"


указывает у нас, напротив, именно на время по Гринвичу (UTC=GMT). Заменяем UTC на localtime - и файл /etc/rc.conf можно закрывать (прочие его строки можно оставить без изменений, если вам лично не известны веские причины их сделать).


А вот теперь пора довести до конца дело с картами соответствия. Открываем файл /etc/init.d/local: как явствует из названия, он предназначен для всякой всячины местного значения (и исполняется после всех остальных конфигурационных файлов). И вставляем в его конец с помощью редактора (или перетаскиваем мышью из данного руководства) простенький скрипт (оператор цикла):

for i in 1 2 3 4 5 6

do

echo -ne '' > /dev/vc/$i

done


В первой его строке определяется значение переменной i (ее можно обозвать любым другим образом) как диапазона цифр от 1 до 6 (по умолчанию у нас именно шесть виртуальных консолей), вторая - указывает, что следующей строкой будет тело цикла. А тело цикла - вывод "магической последовательности" ESC-(K (именно она и обеспечивает активизацию карты соответствия) и ее перенаправление на виртуальные консоли, номера которых заданы переменной i, то есть /dev/vc/1 - /dev/vc6. Это - если используется файловая система устройств (devfs), в противном случае (если не был снят комментарий со строки tmpfs в файле /etc/fstab) имена консолей будут обычными - /dev/tty0 - /dev/tty5.


Отступление для любовников (или невольников) кодировки CP1251. Все сказанное о русификации применимо и к ней. Нужно только определить в файле /etc/fstab загрузку соответствующих раскладки клавиатуры (они, как уже говорилось, имеются) и карты соответствия CP1251->CP866. А вот ее придется поискать (где - за ненадобностью не помню) или просто слямзить из любого отечественного дистрибутива - Altlinux или ASPLinux.


Все же открою секрет - почему в консоли в любом случае предпочтительны экранные шрифты в кодировке DOS. Так уж исторически сложилось: вследствие аппаратных особенностей VGA-адаптеров (а в консоли мы имеем дело именно с режимом VGA, сколь бы крутой GeForce не стоял в машине) только они обеспечивают нормальный вывод на экран символов псевдографики. Кроме того, их просто больше, и некоторые среди них, как я говорил, лучше. Так что есть резон загружать именно их, даже если программы с псевдографикой не используются совсем. В том числе и Midnight Commander - но какой же русский не любит детей командира Нортона!


Мы же пока завершим русификацию. Для чего установим собственно локаль последней строкой в файле /etc/init.d/local (опять прекрасный каламбур, господа!):

export LANG="ru_RU.KOI8-R"


Она обеспечит установку всех локально-зависимых переменных (не только страны, языка, набора символов, но и формата даты, времени, денежной единицы, и так далее) в значения, принятые для нашей многострадальной Отчизны. Тем не менее, для представления чисел я сделал бы исключение, добавив строку

export LC_NUMERIC="POSIX"


Ведь в любых программах, связанных со счетом, удобнее оперировать с десятичной точкой, а не запятой (а говорят, что некоторые такие программы этого просто требуют).


В итоге, выполнив несложную последовательность действий, мы получили корректно русифицированную систему - русифицированную ничуть не хуже, чем те дистрибутивы, кириллической поддержкой в которых гордятся (и - справедливо гордятся) именитые отечественные разработчики - Altlinux и ASPLinux. А поскольку мы сделали все это своими руками и с полным пониманием сути действий, у нас тоже есть основание для гордости. Правда, "лобовым" способом, без учета специфики дистрибутива - но зато работающим всегда и везде. А к "идеологически праввильному" (для Gentoo) методу локализации можно будет вернуться позднее.


Можно, конечно, активизировав внесенные в конфигурацию изменения командой etc-update, продолжать устанавливать программы (Иксы, например). Или даже начинать обычную работу - установленная система, внутри которой мы находимся, это вполне уже позволяет. Однако для полной проверки лучше все-таки сначала перезагрузиться.


Итак, временно расстаемся с нашим новым Gentoo командой exit, после чего вновь оказываемся в системе Live CD, той же командой зарываем все виртуальные консоли, кроме первой (а у нас их могло расплодиться немало) и готовимся к выходу.


Хотя - стоп. А собирали ли мы при установке ядро системы. Если да - все в порядке, тотальный unmount:

$ umount /mnt/gentoo/boot

$ umount /mnt/gentoo


и что было смонтировано руками, а затем - reboot (или halt, если есть желание прерваться - при первой загрузке хорошо бы внимательно следить за ее ходом по сообщениям на экране).


Если же ядро не собиралось (за отсутствием каких-то исходников - другого оправдания такому разгильдяйству нет), то совершаем последнее установочное действие: просто тупо копируем ядро с Live CD (оно, как мы уже убедились, не только работоспособно, но и поддерживает большинство жизненно необходимых функций):

$ cp /cdroot/boot/linux /mnt/gentoo/boot/


Правда, у нас не собиралось не только ядро, но и модули. И это не беда, их тоже копируем с CD:

cp -R /cdroot/lib/modules /mnt/gentoo/lib/modules


А далее - все то же, размонтирование и перезагрузка. Конечно, в ходе ее мы рискуем получить кое-какие сообщения об ошибках, но, по моему опыту - ни одна из них не критична. И загрузившаяся система будет вполне пригодной к использования. По крайней мере, до тех пор, пока не разживемся всеми необходимыми архивами и все-таки ядро не пересоберем - от этого все равно не уйти.

Заключительный аккорд


У терпеливого читателя, добравшегося до этих строк, может возникнуть три совершенно законных вопроса: не слишком ли все это сложно, на кой все это нужно, и кому все это нужно. Постараюсь ответить последовательно.


Относительно сложности - могу заверить, что это из той самой оперы, когда глаза боятся, а руки делают. Проверено на собственном опыте - причем первый из них проводился в подмосковной деревне, где не то что постоянного подключения к Сети - и телефона-то с модемом не было. И все исходники скачивались на службе (в полутора часах езды) и таскались домой на CD и съемном винчестере. И если праведно выполнять все заветы инструкции по установке, то сложностей возникнет не много (надеюсь, что и настоящий мемуар поспособствует их преодолению).


Второй вопрос - а зачем их было преодолевать, когда можно легко и быстро развернуть любой пакетный дистрибутив, разработчики которого уже решили все мои проблемы. Отвечаю: решить-то они решили, но - не скажу плохо, просто в меру своих представлений, как это нужно народу (и конкретно мне, как его представителю). Gentoo же позволяет не просто поставить систему, идеально оптимизированную под железо, но и настроить ее тоже в соответствие именно со своим представлением об идеале. Причем - с полным осознанием, что и зачем делается, немало способствующим общему образованию.


Ну а третий ответ очевиден из второго. Дистрибутив Gentoo нужен пользователю, которому требуется система, настроенная на максимальную производительность для конкретной тяжелой задачи - счетной, графической, GIS или CAD. Разработчику, которому надоело проводить время компиляции тысяч и тысяч строк кода за игрой в тетрис. Сисадмину, у которого в системе не должно быть ничего лишнего, но все необходимое должно быть. Изучающему Linux, которого не устраивают готовые рецепты, предлагаемые руководствами пакетных дистрибутивов. И наконец, тому, кто просто стремится к идеалу - пусть идеал этот и недостижим...



Краткое руководство по установке Gentoo Linux x86

Ссылка на оригинал: http://www.gentoo.org/doc/ru/gentoo-x86-quickinstall.xml

C версии: 1.0

Установочный диск



Скачайте компакт-диск с одного из наших зеркал. ISO-образы находятся в каталогах: releases/<архитектура>/<выпуск>/установочный-диск. Минимальный установочный диск подходит только для установки из интернета; с универсального диска также возможна установка без обращения к сети.

Запишите компакт-диск, затем загрузитесь с него. В загрузочном окне нажмите F2, чтобы выяснить, какие варианты загрузки предлагаются. Если вам нужна поддержка PCMCIA, сразу после загрузки потребуется запустить сценарий инициализации pcmcia.

Установочные диски позволяют запускать сервер sshd, добавлять новых пользователей, запускать irssi (консольный чат-клиент) и просматривать веб-страницы с помощью lynx или links2.



Настройка сети



Если ваша сеть еще не работает, для ее настройки можно использовать net-setup. Перед настройкой вам может потребоваться загрузить поддержку свой сетевой платы с помощью modprobe. Если у вас ADSL, используйте adsl-setup и adsl-start. Для поддержки PPTP, сначала отредактируйте /etc/ppp/chap-secrets и /etc/ppp/options.pptp, а затем запустите pptp <ip сервера>.

При беспроводном доступе для установки параметров соединения используйте iwconfig, а затем либо опять net-setup, либо запустите вручную ifconfig, dhcpcd и/или route.

Если вы находитесь за прокси-сервером, не забудьте инициализировать систему с помощью export http_proxy, ftp_proxy и RSYNC_PROXY.

Подготовка дисков



Для организации разделов запустите fdisk или cfdisk. Вам нужен хотя бы раздел подкачки (тип 82) и один раздел Linux (тип 83).

Для создания файловых систем на своих Linux-разделах используйте mke2fs, mke2fs -j, mkreiserfs, mkfs.xfs mkfs.jfs. Подготовьте свой раздел подкачки командами mkswap и swapon.

Смонтируйте свеже созданные файловые системы в /mnt/gentoo. Создайте каталоги для других точек монтирования (например, /mnt/gentoo/boot), если они вам нужны.



Установка стадии



Прежде всего, установите верную дату командой date MMDDhhmmYYYY. Далее скачайте файл стадии с одного из наших зеркал или используйте находящийся на установочном диске (в /mnt/cdrom/stages). Перейдите в /mnt/gentoo и распакуйте стадию командой tar -xvjpf <архив стадии>.

В случае установки без сети установите снимок портежей: перейдите в /mnt/gentoo/usr и запустите tar -xvjf /mnt/cdrom/snapshots/<файл снимка>. Другие пользователи таким же образом могут скачать снимок портежей и установить его.

При установке без сети, скопируйте файлы исходников из /mnt/cdrom/distfiles/ в /mnt/gentoo/usr/portage/distfiles/.

Отредактируйте /mnt/gentoo/etc/make.conf под ваши нужды (флаги USE, CFLAGS и CXXFLAGS). Для этого можно использовать редактор nano.



Установка базовой системы Gentoo



Сначала смонтируйте файловую систему /proc, скопируйте файл /etc/resolv.conf поверх существующего, а затем смените корневой каталог (chroot) на свою среду Gentoo.



Листинг 1.1: Подготовка и смена корневого каталога

# mount -t proc none /mnt/gentoo/proc

# cp /etc/resolv.conf /mnt/gentoo/etc/

# chroot /mnt/gentoo /bin/bash

# env-update && source /etc/profile





Если вы не выполняете бессетевую установку, командой emerge --sync обновите свое дерево портежей.

Далее убедитесь, что /etc/make.profile указывает на верный профиль. Профиль по умолчанию должен подойти большинству пользователей; имеются подпрофили для различных ядер (например, 2.4/ для профилей, основанных на ядре 2.4). Изменяйте профиль командой ln -sfn.

Самогенерация системы (не выполняется при бессетевой установке) запускается сценарием scripts/bootstrap.sh в каталоге /usr/portage.

Установка системы (не выполняется при бессетевой установке) запускается командой emerge -e system (или -N, если вы не меняли значения CFLAGS/CXXFLAGS по умолчанию).



Настройка ядра



Установите сведения о своем часовом поясе, сменив символьную ссылку /etc/localtime на указывающую на верное место в /usr/share/zoneinfo командой ln -sf.

Установите исходный код ядра (при установке без сети доступны gentoo-sources и vanilla-sources) и настройте его с помощью make menuconfig, затем make && make modules_install внутри каталога /usr/src/linux. Скопируйте файл arch/i386/boot/bzImage в /boot, заменяя существующий. Также можно выполнить emerge genkernel и genkernel all.

Пользователям, использующим Genkernel, потребуется выполнить emerge coldplug и rc-update add coldplug default.



Настройка системы



Отредактируйте свой /etc/fstab; пример показан ниже.

Листинг 1.2: Пример файла fstab

/dev/hda1 /boot ext2 defaults,noatime 1 2

/dev/hda2 none swap sw 0 0

/dev/hda3 / ext3 noatime 0 1

none /proc proc defaults 0 0

none /dev/shm tmpfs nodev,nosuid,noexec 0 0

/dev/cdroms/cdrom0 /mnt/cdrom auto noauto,user 0 0





Для настройки своей сети отредактируйте /etc/conf.d/hostname и /etc/conf.d/domainname, запустите rc-update add domainname default, затем отредактируйте /etc/conf.d/net. Добавьте сценарий инициализации net.eth0 к уровню запуска по умолчанию (default run level). Если у вас несколько сетевых карт (NIC), поместите символьные ссылки на них в сценарий инициализации net.eth0, и также добавьте их в уровень запуска по умолчанию.



Отредактируйте /etc/hosts; примеры приведены ниже:



Листинг 1.3: Примеры файла /etc/hosts

(Для статических IP-адресов)

127.0.0.1 localhost

192.168.0.5 jenny.homenetwork jenny

192.168.0.6 benny.homenetwork benny

192.168.0.7 tux.homenetwork tux

(Для динамических IP-адресов)

127.0.0.1 localhost.homenetwork tux localhost

При необходимости установите (emerge) pcmcia-cs и добавьте его в уровень запуска по умолчанию.

Установите пароль root с помощью passwd.

Выполните необходимую настройку в файлах: /etc/rc.conf, /etc/conf.d/rc, /etc/conf.d/keymaps, /etc/conf.d/clock.



Установка системных утилит



Пользователям ядра 2.4 нужно запустить emerge --unmerge udev и emerge devfsd.

Установите системный журнал, например syslog-ng, и добавьте его в уровень запуска по умолчанию. Сделайте то же самое для демона cron, например, vixie-cron (необязательный шаг).

Установите необходимые средства для файловых систем (xfsprogs, reiserfsprogs или jfsutils), а также для сети (dhcpcd или rp-pppoe).



Настройка загрузчика



Установите (emerge) grub или lilo. Отредактируйте /boot/grub/grub.conf или /etc/lilo.conf, соответственно. Ниже приведены примеры обоих.

grub

Листинг 1.4: Пример grub.conf

default 0

timeout 30

splashimage=(hd0,0)/grub/splash.xpm.gz

# для пользователей genkernel

title=Gentoo Linux 2.6.11-r3

root (hd0,0)

kernel /kernel-genkernel-x86-2.6.11-gentoo-r3 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev

initrd /initramfs-genkernel-x86-2.6.11-gentoo-r3

# для остальных пользователей (без initrd)

title=Gentoo Linux 2.6.11 r3

root (hd0,0)

kernel /kernel-2.6.11-gentoo-r3 root=/dev/hda3

# только если вам нужна двойная загрузка

title=Windows XP

root (hd0,5)

makeactive

chainloader +1

lilo



Листинг 1.5: Пример файла lilo.conf

boot=/dev/hda

prompt

timeout=50

default=gentoo



# для пользователей, не использующих genkernel

image=/boot/kernel-2.6.11-gentoo-r3

label=gentoo

read-only

root=/dev/hda3



# для пользователей genkernel

image=/boot/kernel-genkernel-x86-2.6.11-gentoo-r3

label=gentoo

read-only

root=/dev/ram0

append="init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev"

initrd=/boot/initramfs-genkernel-x86-2.6.11-gentoo-r3

# Для двойной загрузки

other=/dev/hda6

label=windows



Пользователям GRUB необходимо установить GRUB в главную загрузочную запись (MBR) командой grub-install /dev/hda после копирования /proc/mounts в /etc/mtab. Пользователям LILO нужно запустить /sbin/lilo.

Выйдите из изолированной среды, размонтируйте все файловые системы и перезагрузитесь.

Окончание установки



Зайдите как root, затем добавьте одного или нескольких пользователей для повседневного использования командой useradd -m -G <группа> <имя пользователя>.

Если вы выполняли установку без сети, смонтируйте компакт-диск с пакетами в /mnt/cdrom и выполните export PKGDIR="/mnt/cdrom", после чего вы сможете устанавливать дополнительное ПО, например, kde, командой emerge -k <имя пакета>. для .



Спасибо за установку Gentoo!



Описание альтернативных способов установки Gentoo Linux

Ссылка на оригинал: http://www.gentoo.org/doc/ru/altinstall.xml

С версии: 1.0



1. Об этом документе


Если у вас не работает стандартный метод установки boot-from-CD (или он вас не устраивает), вам сюда. Этот документ описывает альтернативные приемы установки Gentoo Linux для тех, кто в них нуждается. Или, если хотите, это место сбора всех "оригинальных" способов установки. Если у вас один такой завалялся, или вы откопали новую прикольную методу, не стесняйтесь, написать запрос в Bugzilla.


2. Загрузка с установочного диска при помощи Smart BootManager


Скачайте Smart BootManager с http://btmgr.sourceforge.net/download.html. Доступны как исходники, так и бинарники для Linux, не говоря уже про виндовский .exe и множество языковых пакетов. Все-таки, в настоящее время, бинарный формат предпочтительнее, поскольку исходники могут не откомпилироваться современными версиями NASM.


Скомпилируйте пакет или возьмите уже готовый. Ниже я расскажу о некоторых полезных опциях, доступных при создании загрузочной дискеты.




Листинг 2.1: Опции Smart BootManager

sbminst [-t theme] [-d drv] [-b backup_file] [-u backup_file]


-t тема выбор используемой темы, где тема должна быть:

us = English тема de = German тема

hu = Hungarian тема zh = Chinese тема

ru = Russian тема cz = Czech тема

es = Spanish тема fr = French тема

pt = Portuguese тема


-d диск выбор диска, куда вы собираетесь инсталлировать Smart BootManager;

для Linux:

/dev/fd0 первый floppy-диск,

/dev/hda первый IDE-диск.

/dev/sda первый SCSI-диск.

для DOS:

0 первый floppy-диск

128 первый жесткий диск;


-c отключить загрузку с CD-ROM;


-b backup_file сохранить (для будущей деинсталляции) данные, которые будут

перезаписаны;


-u backup_file деинсталлировать Smart BootManager, нельзя использовать

с другими ключами;


-y никаких вопросов и предупреждений.



Листинг 2.2: Использование sbminst для создания загрузочной дискеты

# sbminst -t us -d /dev/fd0


Примечание: Замените fd0 на имя вашего floppy-дисковода (если у вас он называется по-другому).



Теперь просто вставьте дискету в дисковод компьютера, на котором вы хотите запустить установочный диск, и загрузитесь с нее.


Вас поприветствует Smart BootManager. Выберите CD-ROM и нажмите ENTER для загрузки установочного диска. Если все прошло удачно, следуйте стандартной процедуре установки.


Больше информации по Smart BootManager вы найдете на http://btmgr.sourceforge.net/


3. Установка при помощи Knoppix

Примечание: Knoppix доступен только для пользователей x86.



Загрузившись с Knoppix LiveCD, вы получаете полностью работоспособную систему для компиляции Gentoo. Во время сборки Tux Racer скрасит ваше ожидание, а для работы вы можете пользоваться OpenOffice.

Предупреждение: Помните, что если вы что-либо сохраните в домашний каталог Knoppix, ожидая установки своей системы Gentoo, вы потеряете это после перезагрузки в Gentoo. Убедитесь, что сохраняете важные файлы на жесткий диск или на другой компьютер!


Загрузитесь с Knoppix CD. Если у вас Knoppix 3.6-3.8.2, потребуется указать knoppix26 в качестве параметра ядра, чтобы загрузить ядро 2.6. Если вы пропустите этот шаг, то при chroot вы получите сообщение об ошибке, что ваше ядро слишком старое. Однако, если у вас Knoppix 3.9+, этот шаг не потребуется, так как ядро 2.6 выбрано по умолчанию.


По умолчанию вы попадаете на рабочий стол KDE. Откройте консоль и введите su -, чтобы была возможность изменить пароль. Это позволяет задать пароль для root в Knoppix. Теперь, при желании, можете настроить sshd для удаленного входа в систему.


Листинг 3.1: Создание точки монтирования /mnt/gentoo

# mkdir /mnt/gentoo



Далее вы можете придерживаться стандартного руководства по установке, начиная с части 4. Кроме монтирования /proc. Тут вам надо поступить по-другому:


Листинг 3.2: Монтирование с привязкой псевдо-ФС proc

# mount -o bind /proc /mnt/gentoo/proc



Также знайте, что некоторые возможности (FEATURES) портежей не будут работать в knoppix. Будьте особенно осторожны с userpriv и usersandbox. Если вы обнаружили, что начали получать ошибки, будет разумным отключить все или некоторые необязательные возможности.


4. Установка со Stage 1 без доступа в сеть


Создайте установочный компакт-диск из iso-образа.


Возьмите последний snapshot портежей из http://distro.ibiblio.org/pub/linux/distributions/gentoo/snapshots/ (или с любимого зеркала). Запишите этот tarball на существующий раздел в компьютере, где будет проходить установка, или прожгите его на CD.


Следуйте инструкции из Gentoo Install Doc вплоть до chroot /mnt/gentoo в главе 6. Если у вас в наличии только один привод CD-ROM, не забудьте при загрузке ввести опцию docache чтобы иметь возможность размонтировать установочный компакт-диск и смонтировать CD со snapshot-ом портежей.


Открыв новую консоль (Alt-F2), а в ней руководство по установке, мы можем следовать ему вплоть до запуска скрипта bootstrap.sh.

Предупреждение: В старых выпусках установочного компакт-диска требуется изменить пароль командой passwd прежде чем логиниться с другой консоли.


Возвращаемся к первой консоли (Alt-F1, without chroot) и монтируем второй CD в /mnt/gentoo/mnt/cdrom2. Копируем portage tarball с cdrom2 и распаковываем в /mnt/gentoo/usr.


Листинг 4.1: Монтирование snapshot cd

# umount /mnt/cdrom

# mkdir /mnt/gentoo/mnt/cdrom2

# mount /dev/cdroms/cdrom0 /mnt/gentoo/mnt/cdrom2

# cp /mnt/gentoo/mnt/cdrom2/portage-$date.tar.bz2 /mnt/gentoo/usr

# cd /mnt/gentoo/usr

# tar -xvjpf portage-$date.tar.bz2



Снова переключаемся на вторую консоль. Если сейчас попытаться запустить bootstrap.sh, ничего не выйдет, так как он не сможет закачать ни одного файла. Мы получим эти файлы из другого места и разместим их в /usr/portage/distfiles (в консоли F2).


Нам необходим список пакетов Stage1: glibc, baselayout, texinfo, gettext, zlib, binutils, gcc, ncurses плюс их зависимости.

Примечание: Не забываете, что вам нужны версии пакетов, синхронизированные с вашим деревом портежей.



Листинг 4.2: Получение списка для скачивания


(Не забывайте 2 перед >)

# emerge -fp glibc baselayout texinfo gettext zlib binutils gcc ncurses 2> stage1.list

# mount -t vfat /dev/fd0 /mnt/floppy

# cp /mnt/gentoo/stage1.list /mnt/floppy

# umount /mnt/floppy



Вставьте дискету в компьютер с хорошим каналом. Если заглянуть в файл stage1.list, можно увидеть, что в нем перечисляются несколько ссылок на каждую загрузку. К сожалению, это не совсем то, что нам надо. Сначала список надо почистить от лишнего:


Листинг 4.3: Stripping URLs

(Этот скрипт привязан к формату вывода emerge, который может измениться

без предварительного предупреждения - используйте с осторожностью!)

# cut -f 1 -d ' ' stage1.list > stage1.download



Теперь используйте wget для загрузки списка исходников:


Листинг 4.4: Загружаем пакеты с помощью wget

# wget -N -i stage1.download



Получив все файлы, переносим их в наш компьютер в /mnt/gentoo/usr/portage/distfiles. Вот теперь можно запускать bootstrap.sh. Повторяем ту же операцию с wget для stage2 и 3.


5. Бездисковая установка с загрузкой через PXE


Что необходимо


Нужна сетевая карта на бездисковом клиенте, которая способна загружаться по протоколу PXE (многие карточки 3com). BIOS тоже должен поддерживать такой способ загрузки.


Настройки на стороне сервера


Создание папок: Во-первых, следует создать папки, в которых будет размещена ваша бездисковая система. Начнем с /diskless, в ней будет находиться по отдельной папке для каждого бездискового клиента. Дальше мы рассмотрим работу с клиентом 'eta'.


Листинг 5.1: создание папок

# mkdir /diskless

# mkdir /diskless/eta

# mkdir /diskless/eta/boot



Настройка DHCP и TFTP: Клиент получает загрузочную информацию, используя DHCP, затем загружает необходимые файлы с помощью TFTP. Собираем DHCP командой emerge и настраиваем его для наших нужд. Добавляем следующее в /etc/dhcp/dhcpd.conf:

Примечание: Мы получим статический IP для клиента и путь к загрузочному образу PXE, здесь pxegrub. Вам необходимо подставить соответствующий MAC-адрес сетевой карты вашего клиента и определиться с директорией, где будут храниться клиентские файлы.



Для DHCPd, запустите emerge dhcp (или любой другой сервер DHCP на свое усмотрение). Убедитесь, что в /etc/conf.d/dhcp выбран верный интерфейс.


Листинг 5.2: dhcp.conf

option option-150 code 150 = text ;

ddns-update-style none ;

host eta {

hardware ethernet 00:00:00:00:00:00;

fixed-address ip.add.re.ss;

option option-150 "/eta/boot/grub.lst";

filename "/eta/boot/pxegrub";

}



Для установки TFTP, соберите app-admin/tftp-hpa. Впишите следующее в /etc/conf.d/in.tftpd:


Листинг 5.3: in.tftpd

INTFTPD_PATH="/diskless"

INTFTPD_USER="nobody"

INTFTPD_OPTS="-u ${INTFTPD_USER} -l -vvvvvv -p -c -s ${INTFTPD_PATH}"



Настройка GRUB: Я использую GRUB для PXE-загрузки. Чтобы можно было использовать PXE, вы должны самостоятельно скомпилировать GRUB ... ведь это просто. Во-первых, скачайте самую свежую версию исходников GRUB (emerge -f grub поместит tarball в /usr/portage/distfiles). Скопируйте tarball в /diskless и скомпилируйте GRUB, чтобы получить доступный для pxe бинарник. Готовый бинарник копируем в boot-папку бездискового клиента. И редактируем файл grub.lst:




Листинг 5.4: установка grub

# tar zxvf grub-0.92.tar.gz

# cd grub-0.92

# ./configure --help

(Среди опций вы увидите список поддерживаемых драйверов сетевых интерфейсов.)

(Выберите драйвер, совместимый с вашей картой. Здесь он фигурирует как $nic)

# ./configure --enable-diskless --enable-$nic

# make

# cd stage2

# cp pxegrub /diskless/eta/boot/pxegrub

# nano -w /diskless/eta/boot/grub.lst



Листинг 5.5: grub.lst

default 0

timeout 30


title=Diskless Gentoo

root (nd)

kernel /eta/bzImage ip=dhcp root=/dev/nfs nfsroot=ip.add.re.ss:/diskless/eta


(В опции nfsroot указывается IP адрес сервера и путь к директории,)

(в которой на сервере лежат файлы нашего бездискового клиента.)



Настройка NFS: NFS легко сконфигурировать. Все что нам надо - это добавить одну строку в конфигурационный файл /etc/exports:


Листинг 5.6: /etc/exports

# nano -w /etc/exports

# /etc/exports: NFS file systems being exported. See exports(5).

/diskless/eta eta(rw,sync,no_root_squash)



Обновление hosts: Еще одно важное дело - изменение файла /etc/hosts.



Листинг 5.7: /etc/hosts

127.0.0.1 localhost


192.168.1.10 eta.example.com eta

192.168.1.20 sigma.example.com sigma



Создание системы на сервере


Вы можете захотеть перезагрузить сервер с установочного диска Gentoo, хотя точно так же можете немедленно продолжить, если знать, как выполнять инструкции по установке Gentoo на установленной системе. Следуйте стандартной процедуре установки, как описано в Gentoo Install Howto, НО с учетом следующих отличий: Для монтирования файловой системы сделайте следующее (здесь hdaX - раздел, в котором создана папка /diskless). Вам не надо монтировать другие разделы, так как все файлы располагаются в /diskless/eta.


Листинг 5.8: монтирование файловой системы

# mount /dev/hdaX /mnt/gentoo



Stage tarballs и chroot: Этот пример использует tarball stage3. Смонтируйте /proc в вашу бездисковую директорию и выполните chroot в нее(директорию) для продолжения установки. Дальше - по инструкции вплоть до конфигурации ядра.

Предупреждение: Будьте очень внимательны при разархивировании stage tarball. Не распакуйте его в существующую систему.



Листинг 5.9: извлечение stage tarball

# cd /mnt/gentoo/diskless/eta/

# tar -xvjpf /mnt/cdrom/gentoo/stage3-*.tar.bz2

# mount -t proc /proc /mnt/gentoo/diskless/eta/proc

# cp /etc/resolv.conf /mnt/gentoo/diskless/eta/etc/resolv.conf

# chroot /mnt/gentoo/diskless/eta/ /bin/bash

# env-update

# source /etc/profile



Конфигурация ядра: При выполнении make menuconfig во время конфигурации ядра, не забудьте сделать доступными следующие опции (помимо рекомендуемых в руководстве по установке):


Листинг 5.10: опции menuconfig

- Your network card device support

(в ядре, *не* как модуль!)


- Under "Networking options" :


[*] TCP/IP networking

[*] IP: kernel level autoconfiguration

[*] IP: DHCP support

[*] IP: BOOTP support



- Under "File systems --> Network File Systems" :


<*> NFS file system support

[*] Provide NFSv3 client support

[*] Root file system on NFS



Сохраните ядро в / своей изолированной среды (не в /boot), в соответствии с настройкой pxegrub, определенной ранее. Затем настройте /etc/fstab своего бездискового клиента.


Листинг 5.11: /etc/fstab

# nano -w /etc/fstab

/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0

proc /proc proc defaults 0 0

tmpfs /dev/shm tmpfs nodev,nosuid,noexec 0 0



Вам также потребуется предотвратить запуск на клиенте проверки файловой системы:


Листинг 5.12: Исключение запуска проверки файловой системы на клиенте

# touch /fastboot

# echo "touch /fastboot" >> /etc/conf.d/local.start



Установите nfs-utils, так как ваш клиент будет сильно зависеть от них:


Листинг 5.13: Установка nfs-utils

# emerge nfs-utils



Загрузчик. Не устанавливайте других загрузчиков, так как один у нас уже есть - pxegrub. Просто завершаете установку и перезагружаете сервер. Запустите службы, необходимые для загрузки новоиспеченного клиента: DHCP, TFTPD и NFS.


Листинг 5.14: Запуск служб

# /etc/init.d/dhcp start

# /etc/init.d/in.tftpd start

# /etc/init.d/nfs start



Загрузка нового клиента


Чтобы клиент загрузился, надо настроить bios и сетевую карту для использования PXE как первого способа загрузки - до CD-ROM или floppy. Помощником вам будет документация к оборудованию или website производителя. Сетевая карта должна получить IP адрес от DHCP и загрузить PXE-образ GRUB при помощи TFTP. Дальше вы увидите симпатичное черно-белое меню GRUB, в котором можно выбрать ядро для загрузки, а нажав Enter, и загрузить его. Если все в порядке, ядро примонтирует корневую файловую систему, используя NFS, и выведет на терминал приглашение для входа в систему. Вот и все.


6. Установка Gentoo из существующей Linux-системы


Что необходимо


Для установки Gentoo из существующей системы Linux вам должна быть доступна команда chroot, а также копия установочного tarball-а Gentoo, либо его ISO-образ. Не помешает доступ в сеть, если вы не хотите ограничиваться тем, что есть в вашем tarball-е. (к слову, tarball - это просто файл, заканчивающийся на .tbz иди .tar.gz). Автор (ориг.текста) использовал RedHat Linux 7.3 как "базовую" ОС, хотя это не так уж важно. Итак, приступим!



Обзор


Сначала надо отвести раздел для Gentoo, изменив размер существующего раздела Linux, смонтировать его, разархивировать tarball, chroot внутрь нашей псевдо-системы, и начинаем строительство. После настройки загрузчика немного поработаем напильником, просто для того, чтобы система была способна загрузиться самостоятельно, перезагружаемся и пользуемся Gentoo.


Как отвести место для Gentoo?


Корневой раздел - это файловая система, примонтированная к /. Запущенная команда mount показывает, о чем я веду речь. Еще мы можем выполнить df (disk free), чтобы посмотреть, сколько свободного места у нас есть. Прошу заметить - совсем не обязательно кромсать ваш root раздел! Вы можете отрезать в любом другом месте, доступном вашей программе редактирования разделов жесткого диска, но мы поговорим об этом чуть позже.


Листинг 6.1: Информация о файловых системах

# mount

/dev/hdb2 on / type ext3 (rw)

none on /proc type proc (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

none on /dev/shm type tmpfs (rw,nodev,nosuid,noexec)

# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/hdb2 4.0G 1.9G 2.4G 82% /

none 38M 0 38M 0% /dev/shm



Как видите, раздел, смонтированный как /, носит имя /dev/hdb2 и на нем еще свободно 2.4 гигабайта. В моем случае, думаю, 400 МБ свободного пространства хватит с головой, следовательно, под Gentoo отводим 2 ГБ. Совсем неплохо, учитывая, что большинству пользователей хватит и одного гигабайта. Приступим!


Сборка parted для переразбивки разделов


Parted - утилита, поддерживаемая GNU foundation, старым, респектабельным, безразмерным проектом, софтом которого мы в данный момент и собираемся воспользоваться. Всего одним инструментом, который вполне нам подходит. Называется он parted, partition editor, загрузить его можно из http://www.gnu.org/software/parted/

Примечание: Конечно, существуют и другие инструменты для работы с разделами, но автор не уверен/не интересуется, сможет ли PartitionMagic(tm) или любая другая программа сделать то, что нам нужно. Проверить - это забота читателя.


Взгляните на ту страницу руководства parted, где речь идет о типе файловой системы, размер которой вы собираетесь изменять, и узнайте, сможет ли parted это сделать. Если нет, что ж, вам не повезло. Придется убить какой-нибудь раздел и создать по-новому, чтобы было место для Gentoo. Вперед, качаем программу, устанавливаем. Возникает проблема. Мы хотим изменить размер корневого раздела, следовательно нам нужно загрузить с дискеты минимальную linux-систему и использовать предварительно скомпилированный parted для редактирования /. Если в вашем случае можно отмонтировать выбранный раздел, оставаясь в Linux, вам везет и нет необходимости делать то, что описано ниже. Просто соберите parted и запустите его на разделе, который хотите урезать. А вот то, что я сделал в своей системе.

Важно: Убедитесь, что действия, которые вы собираетесь проделать с разделом, поддерживаются parted!


Скачайте загрузочный/корневой диск mininux (бесплатный мини-дистрибутив Linux c ядром 2.4 на дискете) с http://mininux.free.fr/uk/, создайте дискету, как описано в прилагающейся документации, вставьте еще одну чистую дискету в дисковод и перейдите к следующему шагу.

Примечание: Опять замечу, что Linux - синоним понятия "Этот путь не единственный". Наша цель - запустить parted на отмонтированном разделе жесткого диска и это можно сделать не только описанным способом. Вы можете использовать любой другой набор boot/root дискет, не только mininux. Вы можете вообще не выполнять данный шаг, главное, что нужно - отмонтировать файловую систему, которую вы собираетесь использовать под Gentoo, и перекроить ее, используя parted.


Листинг 6.2: Создание вспомогательной дискеты

# mkfs.minix /dev/fd0

480 inodes

1440 blocks

Firstdatazone=19 (19)

Zonesize=1024

Maxsize=268966912



Продолжим со сборкой parted. Если он еще не закачан и не распакован, сделайте это. А затем перейдите в каталог, куда вы его распаковали. И здесь выполните следующий набор команд для сборки утилиты и записи ее на дискету.


Листинг 6.3: Подготовка вспомогательной дискеты

# mkdir /floppy; mount -t minix /dev/fd0 /floppy &&

export CFLAGS="-O3 -pipe -fomit-frame-pointer -static" && ./configure

&& make && cp parted/parted /floppy && umount /floppy




Поздравляю, вы готовы перезагрузиться и изменять выбранный раздел. Только делайте это после хотя бы беглого просмотра документации к parted на GNU website. Наберитесь терпения - изменение размера может занять больше получаса на больших дисках. Загрузитесь с дискеты mininux, а после этого замените загрузочную дискету на вспомогательную, которую мы только что создали. Введите mount /dev/fd0 /floppy и parted будет доступен в папке /floppy. Нам туда. Запускаете parted и перекраиваете нужный раздел жесткого диска. Когда этот бесконечный процесс наконец завершится, все будет готово для того, чтобы получить истинное наслаждение, устанавливая Gentoo. Диск, с которым мы работаем - это тот, на котором находится раздел, размер которого мы меняем. К примеру, если мы хотим изменить /dev/hda3, то диск, соответственно, будет называться /dev/hda.


Листинг 6.4: Команды, которые следует выполнить, загрузившись с mininux

# mount /dev/fd0 /floppy

# cd /floppy; ./parted [диск, с которым мы работаем]

(parted) print

Disk geometry for /dev/hdb: 0.000-9787.148 megabytes

Disk label type: msdos

Minor Start End Type Filesystem Flags

1 0.031 2953.125 primary ntfs

3 2953.125 3133.265 primary linux-swap

2 3133.266 5633.085 primary ext3

4 5633.086 9787.148 extended

5 5633.117 6633.210 logical

6 6633.242 9787.148 logical ext3

(parted) help resize

resize MINOR START END resize filesystem on partition MINOR


MINOR is the partition number used by Linux. On msdos disk labels, the

primary partitions number from 1-4, and logical partitions are 5

onwards.

START and END are in megabytes

(parted) resize 2 3133.266 4000.000


Важно: Наберитесь терпения! Компьютер работает! Посмотрите на индикатор обращения к жесткому диску (находится на корпусе), чтобы убедиться, что это так. Процесс может занять от 2 до 30 минут.



Когда процесс завершится, перезагрузитесь в вашу старую linux-систему. После этого откройте документ Настольная книга Gentoo: подготовка дисков и следуйте инструкциям. Дойдя до chroot, используйте следующую команду чтобы очистить переменные окружения:


Листинг 6.5: Обновление среды при chroot

# env -i HOME=$HOME TERM=$TERM chroot /mnt/gentoo /bin/bash

# /usr/sbin/env-update

# source /etc/profile



Удачи!


Полезные советы по установке Gentoo/x86

Ссылка на оригинал: http://www.gentoo.org/doc/ru/gentoo-x86-tipsntricks.xml

С версии: 1.0


1. Вступление


Для начала


Этот документ содержит различные полезные советы по установке Gentoo/x86. Большинство из них описаны кратко подразумевается, что они послужат дополнением к руководству по установке, а не заменой ему.


2. Расширенная установка


Программный RAID

Примечание: Если вы не знакомы с программным RAID, пожалуйста, прочтите Software-RAID-HOWTO (англ.).


Примечание: Более подробное описание установки приведено в руководстве по быстрой установке программного RAID и LVM2 для x86 (англ.).


После загрузки с установочного CD, загрузите соответствующие модули RAID. Например, если вы собираетесь использовать RAID-1:


Листинг 2.1: Загрузка модуля RAID-1

# modprobe raid1



Разбивая свои диски, убедитесь, что используете тип раздела fd (Linux raid autodetect), а не 83 (Linux native). Тип раздела можно изменить, используя команду t программы fdisk.


Теперь, до начала создания массивов RAID, нам потребуется создать узлы метаустройств:


Листинг 2.2: Создание узлов метаустройств

# mkno

# mknod /dev/md2 b 9 2

# mknod /dev/md3 b 9 3d /dev/md1 b 9 1



После разбивки на разделы, создайте файл /etc/mdadm.conf (да, именно так, в среде установочного CD), с помощью mdadm, расширенного средства управления RAID. Например, чтобы зеркалировать (RAID-1) разделы boot, swap и root, охватывая /dev/sda и /dev/sdb, можете использовать:


Листинг 2.3: Создание устройств raid командой mdadm

# mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

# mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2

# mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3


Важно: На загрузочном разделе не следует использовать никаких разновидностей чередования (striping), таких как RAID-0 or RAID-5.



Драйвер Linux Software RAID начнет создавать метаустройства. Вы можете проследить за этим в /proc/mdstat. Перед продолжением дождитесь, пока создание метаустройств окончательно завершится..


Листинг 2.4: Сохранение сведений о созданных устройствах

# mdadm --detail --scan > /etc/mdadm.conf


Теперь и далее используйте /dev/md1 для загрузочного раздела, /dev/md2 для раздела подкачки и /dev/md3 для корневого раздела.


Прямо перед изменением корня (chroot), не забудьте скопировать /etc/mdadm.conf в /mnt/gentoo/etc.


При конфигурации ядра, обязательно включите соответствующую поддержку RAID в состав ядра, а не модулем.


При установке дополнительных утилит, также установите mdadm. Заметьте, что она есть не на всех установочных CD, поэтому у вас может не получиться бессетевая установка Gentoo на программный raid.


При настройке загрузчика не забудьте установить его в MBR обоих дисков, если используется зеркалирование.


ATA RAID c ядрами 2.4


Удостоверьтесь, что вы загрузились с установочного CD с параметром doataraid. После загрузки, проверьте содержимое /dev/ataraid. Там должны находиться различные каталоги disc* для каждого жесткого диска, доступного в ATA RAID. Целый диск показывается как disc, а разделы как part*.


Выпишите различные файлы устройств /dev/ataraid/disc*/*, на которые будете устанавливать Gentoo. При установке вам потребуется указывать этот путь вместо /dev/hda, указанного в примерах.


Перед изменением корня, свяжите структуру /dev с новой средой:


Листинг 2.5: Связывание /dev

# mount -o bind /dev /mnt/gentoo/dev



При настройке ядра не забудьте включить поддержку вашего ATA RAID чипсета с нужными параметрами. Например, для популярной системы ATA RAID Promise FastTrack built-in RAID требуется включение в ядро Promise FastTrack Options.


При настройке GRUB сначала потребуется создать загрузочный диск GRUB. Это не так сложно, как кажется. Сначала установите GRUB как обычно, а дойдя до пункта, в котором GRUB устанавливается в MBR, следуйте этим инструкциям:



Листинг 2.6: Создание загрузочного диска GRUB

# cd /boot/grub

# dd if=stage1 of=/dev/fd0 bs=512 count=1

# dd if=stage2 of=/dev/fd0 bs=512 seek=1



Еще вам потребуется записать файл grub.conf. Здесь нет никаких отличий от установочных инструкций, просто убедитесь, что запись root= указывает на ваше устройство ATA RAID.


После окончания установки, загрузитесь со своего загрузочного диска GRUB. Вы должны увидеть приглашение командной строки GRUB. Теперь настройте GRUB для загрузки с устройства ATA RAID:


Листинг 2.7: Установка GRUB на ATA RAID

grub> root (hd0,x)

grub> setup (hd0)

grub> quit



Теперь перезагрузитесь (вытащив загрузочную дискету GRUB из дисковода).


Пользователи LILO могут просто следовать указаниям руководства по установке.


Использование ядра с установочного CD


Если вы не хотите компилировать ядро сами, можно взять ядро с установочного компакт-диска и скопировать его в свою систему. Дойдя в процессе инсталяции Gentoo до стадии компиляции ядра, перейдите на другую виртуальную консоль (Alt-F2) и войдите в систему как ROOT, используя пароль, установленный вами в начали установки (passwd root).


Скопируйте ядро и модули в свою систему:


Листинг 2.8: Копирование ядра с установочного CD

(${KN} это название ядра, обычно это что-то вроде 'gentoo' или 'smp')

cdimage ~# cp /mnt/cdrom/isolinux/${KN} /mnt/cdrom/isolinux/${KN}.gz /mnt/gentoo/boot

cdimage ~# mkdir -p /mnt/gentoo/lib/modules

cdiamge ~# cp -Rp /lib/modules/`uname -r` /mnt/gentoo/lib/modules



Удостоверьтесь в том, что вы установили hotplug (emerge hotplug) и уже добавили его в загрузку. Чтобы все запущенные сейчас модули (с установочного CD) загружались на вашей машине, запустите следующие команды из среды с измененным корнем (chroot):


Листинг 2.9: Добавление всех запущенных модулей в файл modules.conf

# cat /proc/modules | cut -d ' ' -f 1 >> \

/etc/modules.autoload.d/kernel-`uname -r | cut -d . -f -2`

# modules-update





3. Упрощение установки


Как оставить терминал без присмотра


Многим хочется отойти от своей системы, пока она компилируется. Иногда это довольно сложно, поскольку установка производится в месте, где много народу и нельзя доверять всем подряд. На этот случай пригодится возможность проводить компиляцию в фоновом режиме, выйдя изо всех терминалов.


Есть несколько возможных путей. Первый использовать screen. После загрузки с LiveCD, установите пароль для root и запустите сеанс screen:

Примечание: screen есть не на всех LiveCD. Если у вас его нет, придется использовать один из других способов, описанных в этом разделе.



Листинг 3.1: Запуск сеанса screen

# screen -S gentoo



Из сеанса screen можно хоть провести полную установку. Захотев уйти от терминала, нажмите Ctrl-a, d (то есть control и a одновременно, затем d), чтобы открепить свой сеанс screen. Теперь можно с уверенностью выйти из системы.


Чтобы восстановить доступ к терминалу, опять войдите как root и прикрепитесь к запущенному сеансу screen:


Листинг 3.2: Прикрепление к сеансу screen

# screen -x gentoo



Если вы не можете использовать screen, есть другой путь отойти от терминала. Следуйте инструкциям по установке, а дойдя до пункта, в котором запускается длительная компиляция (например, шаг с запуском ./scripts/bootstrap.sh), используйте команду nohup, которая позволит процессу продолжиться, даже если вы выйдете. Не забудьте добавить в конце "&", иначе процесс не будет выполняться в фоновом режиме! Запомните, в каком каталоге вы находитесь (команда pwd покажет ее), так как это вам позже понадобится.






Листинг 3.3: Использование nohup

# pwd

/usr/portage

# nohup ./scripts/bootstrap.sh &



Теперь выйдите из среды измененного корня (exit) и из сеанса загрузочного CD. Компиляция продолжится в фоновом режиме.


Захотев проверить компиляцию, войдите как root (на установочный CD) и сделайте chroot обратно в свою среду, затем перейдите в оставленный каталог:




Листинг 3.4: Chroot обратно

# chroot /mnt/gentoo /bin/bash

# env-update && source /etc/profile

# cd /usr/portage



Теперь запустите команду less на файле nohup.out, расположенном внутри каталога. Компиляция добавляет свои сообщения в этот файл, так что при желании следить за ней запустите less nohup.out и нажмите F, чтобы наблюдать за ее ходом. Когда компиляция закончится, можно приступать к следующему пункту указаний по установке.


Если вам надоело следить за изменениями, нажмите Ctrl-C, затем q. Это остановит только процесс less, не затрагивая процесс компиляции.


4. Решение ошибок/проблем


Тщательное тестирование дисков


Если вы считаете, что необходимо тщательно проверить ваш диск на предмет целостности (неисправные секторы и т.д.), можете включить параметр -c при создании на нем файловой системы ext2 или ext3 (используя mke2fs). Это запустит проверку на чтение, которая пометит все неисправные блоки. Если вы настоящий параноик, можете включить -c -c, чтобы провести детальный тест на чтение/запись.


Листинг 4.1: Проверка целостности диска

# mke2fs -j -c /dev/hda3



Восстановление сбойной установки


Если по какой-то причине ваша установка Gentoo дает сбой, вам не придется повторять ее раз за разом с самого начала. Вместо этого можно спокойно вернуться к моменту, в который вы, как вам кажется, ошиблись (или где, как вы считаете, есть ошибка в инструкции), и попробовать другой подход.


Прежде всего, вам потребуется перейти обратно в свою среду Gentoo Linux командой chroot. Снова следуйте указаниям, пропуская шаги по разбивке диска, так как ваши разделы уже созданы и даже заполнены. Таким образом, вы можете сразу монтировать эти разделы в /mnt/gentoo. Следует также пропустить шаги, связанные с извлечением файла стадии и изменением make.conf вы же не хотите перезаписывать существующие файлы, не так ли?


Изменив корень на свою среду Gentoo Linux, сразу переходите к шагу, где, как вам кажется, следует попробовать действовать по-другому. Не повторяйте все шаги, такие как самогенерация, если не считаете, что именно там что-то пошло не так.


Например, если вы считаете, что неверно настроили grub.conf, можно сразу запустить свой редактор, чтобы изменить /boot/grub/grub.conf.


Попробовав другой подход в своей ситуации, вы, скорее всего, сможете представить, сколько последующих шагов потребуется выполнить снова. Если последующие действия зависели от вашего изменения, их потребуется повторить.


Например:

изменив переменную в make.conf, вам потребуется выполнить всю последующую компиляцию, поскольку ее результаты зависят от настройки make.conf

изменив /boot/grub/grub.conf, можно сразу выходить из среды измененного корня и перезагружаться, так как никакие последущие шаги не зависят от grub.conf

перекомпилировав свое ядро, вам нужно лишь убедиться, что конфигурация вашего начального загрузчика указывает на верный образ ядра (убедитесь, что вы смонтировали свой /boot!), затем можно выйти из среды измененного корня и перезагрузиться

изменив /etc/fstab, можно выходить из среды измененного корня и перезагружаться


Как видите, после большинства действий по восстановлению можно сразу перезагружаться. Лишь изредка вам потребуется повторять последующие шаги установки.























Настольная книга Gentoo Linux x86



Ссылка на оригинал: http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml

С версии: 1.0


Содержание:


Установка Gentoo

Из этой части вы узнаете, как устанавливать Gentoo на свою систему.


Об установке Gentoo Linux

В этой главе дается общее представление о предлагаемом порядке установки.



Выбор подходящего источника для установки

Gentoo можно устанавливать по-разному. Здесь описывается, как установить Gentoo с минимального установочного диска. Способ подходит и для установки с универсального установочного диска.


Настройка сети

Чтобы загрузить новейший исходный код, потребуется настройка сети. Здесь описывается порядок ее выполнения.


Подготовка дисков

Чтобы установить Gentoo, нужно создать подходящие дисковые разделы. В этой главе описывается, как разбить диск для будущего использования.


Установка установочных файлов Gentoo

Установка Gentoo выполняется с помощью архива третьей стадии (stage3). В этой главе мы расскажем, как извлечь файл третьей стадии и настроить Portage.


Установка базовой системы Gentoo

После установки и настройки третьей стадии в вашем распоряжении оказывается базовая система Gentoo. Здесь описывается, как этого достичь.


Настройка ядра

Ядро Linux сердце каждого дистрибутива. В этой главе описывается, как его настроить.


Настройка параметров системы

Вам потребуется отредактировать несколько важных конфигурационных файлов. Из этой главы вы получите представление об этих файлах и поймете, как с ними обращаться.


Установка нужных системных средств

Как отмечено ранее, Gentoo это богатство выбора. В этой главе мы поможем вам выбрать и установить некоторые важные инструменты.


Настройка начального загрузчика

Для архитектуры x86 существует несколько загрузчиков. Каждый из них настраивается по-своему. В этой главе мы шаг за шагом объясним вам порядок настройки начального загрузчика для ваших нужд.


Завершение установки Gentoo

Установка почти закончена. Осталось создать одну (или несколько) учетных записей для пользователей вашей системы. Как это делается, описано в данной главе.


Чем заняться дальше?

Теперь у вас появилась собственная система Gentoo. Но чем же заняться дальше?


Работа с Gentoo

Здесь вы научитесь работать с Gentoo: устанавливать программное обеспечение, изменять значения переменных, управлять поведением Portage и т.д.


Введение в Portage

В этой главе описываются «простые» шаги, которые вам точно потребуется знать для поддержания в порядке и обслуживания программного обеспечения.


USE-флаги

USE-флаги (признаки использования) очень важный аспект Gentoo. Прочитав эту главу, вы научитесь обращаться с ними и разберетесь, как USE-флаги влияют на систему.


Возможности Portage


Откройте для себя дополнительные возможности Portage: поддержку распределенной компиляции, кэш компилятора и др.


Сценарии инициализации

В Gentoo используется специальный формат сценариев инициализации (initscript), в котором, например, предусмотрены решения, управляемые зависимостями, и виртуальные сценарии. Здесь описываются эти аспекты, и объясняется, как обращаться со сценариями.


Переменные среды

В Gentoo можно довольно легко управлять системными переменными среды. В этой главе обьясняется, как это делать, и описываются часто используемые переменные.

Работа с Portage

В этой части подробно описывается Portage, средство управления программным обеспечением Gentoo.

Файлы и каталоги

Чтобы поближе познакомиться с Portage, вам потребуется узнать, где же хранятся его файлы и данные.


Настройка с помощью переменных

Portage полностью настраивается с помощью различных переменных, которые устанавливаются в конфигурационном файле или как переменные среды.


Смешение ветвей программного обеспечения

Программное обеспечение в составе Gentoo подразделяется на ветви в зависимости от стабильности и поддержки различных архитектур. В этой главе рассказывается, как настраивать использование ветвей, а также как при необходимости преодолевать такое разделение.


Дополнительные средства Portage

В состав Portage входит несколько дополнительных инструментов, которые могут значительно улучшить ваше впечатление от Gentoo. В этой главе раскрываются секреты использования dispatch-conf и других инструментов.


Отступление от официального дерева

Здесь даются советы и показываются приемы «выращивания» собственного дерева Portage, рассказывается о том, как синхронизировать только нужные категории, добавлять свои пакеты и т.д.


Использование ebuild

В этой главе рассказывается о шагах, выполняемых Portage при установке программного обеспечения, и об их самостоятельном выполнении с помощью утилиты ebuild.



Настройка сети в Gentoo

Полное руководство по сетям в Gentoo.


Начальная настройка

Руководство по быстрому запуску и подключению сетевого интерфейса в наиболее распространенных случаях.


Расширенная настройка

Здесь вы изучите, как работает конфигурация это нужно сделать перед изучением модульного построения сети.


Модульное построение сети

В Gentoo предусмотрены гибкие сетевые средства: здесь рассказывается о выборе различных клиентов DHCP, настройке объединения, образования мостов, виртуальных сетей (VLAN) и т.п.


Беспроводная сеть

Настроить беспроводную сеть не совсем просто. Надеемся, мы поможем вам заставить ее работать.


Дополнительные возможности

Если вы ищете приключений, можете подключить к сети свои собственные функции.

Управление сетью

Для пользователей ноутбуков и тех, кто перемещает свои компьютеры из сети в сеть.


A. Установка Gentoo










A. Установка Gentoo

1. Об установке Gentoo Linux


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


Добро пожаловать!


Прежде всего, добро пожаловать в Gentoo! Вы на пороге мира больших возможностей и высокой производительности! Gentoo весь пропитан идеей свободы выбора. При установке Gentoo вы не раз убедитесь в этом: вам предстоит выбрать объем самостоятельной компиляции, способ установки Gentoo, службу журналирования системы и т.д.


Gentoo быстрый современный метадистрибутив, обладающий большой чистотой и гибкостью. Gentoo основан на свободном программном обеспечении, и не скрывает от пользователя, «что под капотом». Portage, система управления пакетами Gentoo, написана на языке Python, что позволяет легко просматривать и изменять ее исходный код. Сборка Gentoo также выполняется из исходных текстов (хотя есть и поддержка бинарных пакетов), а настройка Gentoo выполняется с помощью обычных текстовых файлов. Другими словами сплошная открытость и свобода!


Важно понимать, что Gentoo развивается именно благодаря свободе выбора. Мы стараемся ничего вам не навязывать. А если вам покажется обратное пожалуйста, сообщите нам об этой оплошности.


Как организована установка?


Установка Gentoo рассматривается как последовательность из 10 шагов, которым соответствуют главы 211. Каждый шаг приводит к определенному состоянию:


Мы приложили все усилия, чтобы объяснить вам все «за» и «против» каждого варианта, когда вам предоставляется возможность выбора. При этом один из вариантов помечен как «По умолчанию: ». Другие варианты помечены как «Альтернатива: ». Не подумайте, что вариант по умолчанию наша рекомендация. Нам просто кажется, что именно его выбирает большинство пользователей.


Иногда есть возможность выполнить необязательный шаг. Такие шаги помечены как «Дополнительно: », и не требуются для установки Gentoo. Однако, некоторые из них будут обусловлены вашими предшествующими решениями. Мы будем сообщать об этом, как в момент выбора, так и непосредственно перед описанием необязательных шагов.


Какие варианты установки существуют?


Gentoo можно установить разными способами. Можно скачать и запустить один из установочных компакт-дисков, установить с имеющегося дистрибутива, с загрузочного CD (например, Knoppix), из сетевой загрузочной среды, с дискеты аварийного восстановления и т.д.


В этом руководстве описывается установка с установочных дисков Gentoo, и, в некоторых случаях, с помощью сетевой загрузки (netboot). Предполагается, что вы собираетесь устанавливать самые свежие версии пакетов. Если вам нужна установка, при которой не требуется использование сети, обратитесь к настольным книгам Gentoo 2006.1 (англ.), где даются указания по установке в бессетевой среде.


Если вы планируете использовать GRP (Gentoo Reference Platform эталонная платформа Gentoo, набор бинарных пакетов, предназначенных для немедленного использования сразу после установки Gentoo), вам необходимо следовать инструкциям, приведенных в настольной книге Gentoo 2006.1 (англ.).


Чтобы получить сведения о других способах установки, прочитайте описание альтернативных способов установки. Также рекомендуется прочитать полезные советы по установке Gentoo. Если вы почувствуете, что приведенные указания по установке слишком подробны, обратитесь к краткому руководству по установке (см. перечень документации), если, конечно, такое существует для вашей архитектуры.


Кроме того, вы можете выбрать между компиляцией своей системы полностью «с нуля» или установкой заранее собранной среды, позволяющей запустить Gentoo практически моментально. Естественно, есть и промежуточные варианты, в которых вы не компилируете все подряд, а начинаете с полу готовой системы.


Появились затруднения?


Если при установке вы столкнулись с проблемой (или с ошибкой в документации по установке), войдите в нашу систему распределения запросов (англ.) и убедитесь, что такая ошибка еще не заявлена. В этом случае, создайте отчет об ошибке, чтобы мы о ней позаботились. Не бойтесь разработчиков, которым выпадает работа над (вашими) ошибками людей они обычно не едят.


Обратите внимание, что, хотя руководство, которое вы сейчас читаете, посвящено определенной архитектуре, в нем упоминаются и другие архитектуры. Это связано с тем, что значительная часть текста настольной книги Gentoo является общей для всех архитектур (чтобы не дублировать работу, а также из-за острой нехватки разработчиков). Во избежание путаницы, мы стараемся сократить такие упоминания до минимума.


Если вы не уверены, пользовательская ли у вас ошибка (какую-то ошибку совершили вы, хотя внимательно прочитали документацию), или программная (какую-то ошибку совершили мы, хотя тщательно тестировали установку/документацию), то не стесняясь, заходите на канал #gentoo (а также #gentoo-amd64, #gentoo-ru, #rugentoo) сервера irc.freenode.net. Разумеется, мы в любом случае будем вам рады :)


Если у вас есть вопрос, касающийся Gentoo, сначала загляните в список распространенных вопросов (FAQ), входящий в состав документации Gentoo. Можно также обратиться к FAQ (англ.) в наших форумах. Если вы не найдете там ответа, задайте вопрос на #gentoo, нашем IRC-канале на irc.freenode.net. Да-да, кое-кто из нас маньяки, висящие на IRC :-)


2. Выбор подходящего источника для установки


2.a. Аппаратные требования


Введение


Прежде чем начать, перечислим аппаратные требования, необходимые для успешной установки Gentoo на вашем компьютере.


Аппаратные требования:



2.b. Установочные компакт-диски Gentoo


Введение


Установочные компакт-диски Gentoo это загрузочные диски, содержащие самодостаточную среду Gentoo. Они позволяют загружать Linux прямо с компакт-диска. При запуске определяются ваши устройства и загружаются соответствующие драйверы. Эти диски сопровождаются разработчиками Gentoo.


Все установочные компакт-диски позволяют загрузиться, настроить сеть, разметить разделы жесткого диска и начать установку Gentoo из интернета. В настоящее время мы выпускаем два установочных компакт-диска, одинаково подходящих для установки Gentoo с загрузкой последних версий существующих пакетов из интернета.


Если вы хотите установить Gentoo без работоспособного соединения с интернетом, или желаете использовать одну из существующих программ установки, пожалуйста, следуйте указаниям по установке, приведенным в настольной книге Gentoo 2006.0 (англ.).


В настоящее время мы выпускаем два установочных компакт-диска:

Минимальный установочный диск Gentoo, маленький загрузочный компакт-диск без излишеств, единственное назначение которого загрузить систему, подготовить подключение к сети и перейти к установке Gentoo.

Живой установочный диск Gentoo, содержащий все необходимое для установки Gentoo. На нем есть графическая среда, графическая и консольная программы автоматической установки, и, конечно, указания по установке для вашей архитектуры.


Чтобы помочь вам решить, какой из них нужен, мы привели главные преимущества и недостатки каждого диска.


Минимальный установочный диск Gentoo


Минимальный установочный диск называется install-x86-minimal-2006.0.iso и занимает всего 49 МБ. Gentoo можно устанавливать с этого диска только при постоянном наличии работоспособного подключения к интернету. Минимальный установочный диск:

За и против

+ наименьший объем загрузки из сети

не содержит ни архива stage3, ни снимков Portage, ни готовых двоичных пакетов, и поэтому не подходит для установки без сети



Живой (live) установочный диск Gentoo


Живой установочный диск называется install-x86-universal-2006.0.iso и занимает 697 МБ. С этого диска вы сможете установить Gentoo даже без исправного подключения к интернету, на случай, если в процессе установки Gentoo на свой компьютер у вас появится неодолимое желание занести его еще и на соседний :) Живой установочный диск Gentoo:


За и против

+ содержит все, что требуется; установку можно выполнять даже без сетевого подключения;

огромный объем загрузки.



Файл Stage3


Архив третьей стадии stage3 это файл, содержащий минимальную среду Gentoo, пригодную для продолжения установки Gentoo в соответствии с инструкциями, данными в этом руководстве (другими словами: образ (снимок) минимальной системы.

Когда-то в настольной книге Gentoo описывались варианты установки с использованием файла любой из трех существующих стадий создания системы. Несмотря на то, что в Gentoo до сих представлены файлы stage1 и stage2, в официальном способе установки используется архив stage3. Если вас интересует установка Gentoo из файлов stage1 или stage2, пожалуйста, обратитесь к сборнику распространенных вопросов по Gentoo, раздел как установить Gentoo, используя файлы Stage1 или Stage2?


Архивы stage3 можно загрузить из releases/x86/2007.0/stages/ или с любого из официальных зеркал Gentoo; на «живом диске» они не поставляются.


2.c. Скачивание, запись и загрузка с установочного диска Gentoo


Скачивание образа и запись на диск


Итак, вы выбрали нужный установочный диск Gentoo. Начнем с загрузки его образа из сети, и его записи на компакт-диск. Ранее обсуждались варианты доступных дисков, но где же их взять?


Любой из установочных дисков (а при желании заодно и диск пакетов, если есть) можно загрузить с одного из наших зеркал. Установочные диски расположены в каталоге releases/x86/2007.0/installcd.


В этом каталоге находятся ISO-файлы. Это полные образы компакт-дисков, которые можно записать на CD-R.


Если вас волнует, не искажен ли загруженный файл, можно сверить его контрольную сумму MD5 с рассчитанной нами (например, install-x86-minimal-2007.0.iso.DIGESTS). Вычислить контрольную сумму MD5 можно утилитой md5sum в Linux/Unix, или программой md5sum (англ.) для Windows.


Другой способ убедиться в пригодности загруженного файла с помощью GnuPG сверить криптографическую подпись с той, что хранится у нас (в файле с расширением .asc). Скачайте файл подписи, затем получите открытый ключ:


Листинг 1: Получение открытого ключа

$ gpg --keyserver subkeys.pgp.net --recv-keys 17072058



Теперь сверьте подпись:


Листинг 2: Сверка криптографической подписи

$ gpg --verify <файл подписи> <скачанный образ диска>



Записывать загруженный ISO-образ на компакт-диск нужно в «сыром» режиме. Как это сделать, сильно зависит от используемой программы. Здесь мы обсудим запись с помощью cdrecord и K3B. Дополнительные сведения находятся в нашем сборнике распространенных вопросов.

При использовании cdrecord, просто введите cdrecord dev=/dev/hdc <скачанный iso-файл> (/dev/hdc замените на путь к вашему устройству CD-RW).

При использования K3B, выберите Tools > CD > Burn Image (Инструменты > Компакт-диск > Прожечь образ). Затем в области 'Image to Burn' ('Образ для записи') укажите свой ISO-файл. В завершение нажмите Start (Запуск).


Загрузка с установочного компакт-диска






Важно: Перед тем, как приступить, полностью прочитайте этот подраздел, так как перед последующими действиями вам, скорее всего, больше не представится такая возможность.


Записав установочный компакт-диск, пора его загрузить. Уберите все компакт-диски из своих приводов CD, перезагрузите компьютер и войдите в BIOS. В зависимости от BIOS, для этого обычно нужно нажать DEL, F1 или ESC. В BIOS измените порядок загрузки так, чтобы обращение к CD-ROM выполнялось до обращения к жесткому диску. Этот параметр часто задается в разделе «CMOS Setup». Если порядок загрузки не изменить, система просто перезагрузится с жесткого диска, игнорируя CD-ROM.


Теперь поместите установочный диск в привод CD-ROM (наконец-то!) и перезагрузитесь. Должно появиться загрузочное приглашение. Здесь можно просто нажать ENTER, чтобы запустить процесс загрузки с параметрами по умолчанию, или загрузить установочный диск по-своему: указать ядро, потом загрузочные параметры, а затем нажать ENTER.


Указать ядро? Да, на нашем установочном компакт-диске есть несколько вариантов ядра. По умолчанию используется gentoo. Другие ядра предназначены для специфических аппаратных задач; вариант -nofb отключает кадровый буфер.


Ниже перечислены доступные варианты ядра:

Ядро Описание

gentoo ядро 2.6 с многопроцессорной поддержкой (используется по умолчанию)

gentoo-nofb аналогично gentoo, но без поддержки кадрового буфера

memtest86 для выявления ошибок локальной оперативной памяти



Также можно указать параметры ядра, явно включающие или отключающие определенные режимы. Приведенный список соответствует тому, что выводится при нажатия F2 в экране загрузки.


Листинг 3: Параметры, которые можно сообщить выбранному ядру


- agpgart загрузка agpgart (используйте при сбоях графики, зависаниях)

- acpi=on включение поддержки ACPI

- ide=nodma принудительное отключение DMA для сбойных IDE-устройств

- doscsi поиск scsi-устройств (нарушает работу некоторых ethernet-плат)

- dopcmcia запуск службы pcmcia для PCMCIA-приводов компакт-дисков

- nofirewire отключение в initrd модулей firewire (предназначенных для

приводов компакт-дисков с подключением firewire и т.п.)

- nokeymap отключение выбора неамериканских раскладок клавиатуры

- docache кэширование исполняемой части компакт-диска в памяти, позволяет

размонтировать /mnt/cdrom для установки другого диска

- nodetect запрет запуска hwsetup/kudzu и hotplug

- nousb отключение загрузки модулей usb в initrd, отключает hotplug

- nodhcp отмена автоматического запуска dhcp при обнаружении сетевой

платы

- nohotplug отключение загрузки службы hotplug

- noapic отключение apic (попробуйте, если есть аппаратные проблемы

с устройствами scsi, сетевыми платами и т.д.)

- noevms отключение поддержки модулей EVMS2

- nolvm2 отключение поддержки модулей LVM2

- hdx=stroke позволяет использовать жесткий диск целиком, даже если BIOS

не поддерживает диски большого размера

- noload=module1,[module2,[...]]

запрет загрузки определенных модулей ядра



Теперь загрузите систему с компакт-диска, выбрав ядро (если вас не устраивает ядро по умолчанию gentoo) и указав дополнительные параметры. В качестве примера мы покажем, как загрузить ядро gentoo с параметром dopcmcia:


Листинг 4: Загрузка установочного диска

boot: gentoo dopcmcia



Появится заставка с полосой индикатора загрузки. Если вы устанавливаете Gentoo на машину с неамериканской раскладкой клавиатуры, нужно немедленно нажать ALT+F1, чтобы переключиться в подробный режим, и следовать появившимся указаниям. Если ничего не выбрано в течение 10 секунд, устанавливается раскладка по умолчанию (клавиатура США), а загрузка продолжается. По окончании загрузки для вас будет выполнен автоматический вход в «живой» Gentoo Linux в качестве «root» (администратора). В текущей консоли должно появиться прилашение root («#»). Также можно переключаться в другие консоли, нажимая ALT-F2, ALT-F3 и ALT-F4. Вернуться в первоначальную консоль можно нажатием ALT-F1.


Приступим к дополнительной настройке оборудования.


Дополнительная настройка оборудования


При загрузке с установочного компакт-диска система пытается определить все устройства и загрузить соответствующие модули для их поддержки. В подавляющем большинстве случаев она очень хорошо справляется с этим. Однако, в редких случаях некоторые из нужных модулей не загружаются автоматически. Если какие-либо устройства пропущены при автоматическом опросе шины PCI, модули ядра для их поддержки вам придется загрузить вручную.


В следующем примере мы попробуем загрузить модуль 8139too (для поддержки некоторых типов сетевого интерфейса):


Листинг 5: Загрузка модуля ядра

# modprobe 8139too



Если вам нужна поддержка PCMCIA, требуется запустить сценарий инициализации pcmcia:


Листинг 6: Запуск сценария инициализации PCMCIA

# /etc/init.d/pcmcia start



Дополнительно: оптимизация скорости жесткого диска


Если вы опытный пользователь, возможно, вам захочется настроить скоростные параметры жесткого диска IDE с помощью программы hdparm. Указав параметр -tT, можно измерить скорость вашего диска (для уточнения значений запускайте программу несколько раз подряд):


Листинг 7: Тестирование производительности диска

# hdparm -tT /dev/hda



Для настройки вы можете использовать любой из приведенных примеров (или поэкспериментировать самостоятельно), при необходимости указав название своего диска вместо /dev/hda:



Листинг 8: Оптимизация скорости жесткого диска

Включение DMA:

# hdparm -d 1 /dev/hda

Установка безопасных значений:

# hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda



Дополнительно: учетные записи пользователей


Если вы собираетесь дать другим людям доступ к своей системе, или намерены входить в чат irssi без прав администратора (из соображений безопасности), потребуется создать учетные записи пользователей и изменить пароль администратора.


Для изменения пароля администратора используйте passwd:


Листинг 9: Изменение пароля администратора

# passwd

New password: (введите новый пароль)

Re-enter password: (введите новый пароль еще раз)



Для создания учетной записи пользователя сначала задаются его реквизиты, а затем вводится пароль. Для этого служат программы useradd и passwd. В следующем примере мы создадим пользователя «john»:


Листинг 10: Создание учетной записи пользователя

# useradd -m -G users john

# passwd john

New password: (введите новый пароль для john)

Re-enter password: (введите новый пароль Джона еще раз)



Вы также можете изменить свой идентификатор пользователя с администратора (root) на вновь созданного пользователя командой su:


Листинг 11: Изменение идентификатора пользователя

# su - john



Дополнительно: просмотр документации во время установки


Если вам нужна возможность просмотра настольной книги Gentoo в процессе установки (не важно, из сети или с компакт-диска), убедитесь, что вы создали учетную запись обычного пользователя (см. дополнительно: учетные записи пользователей). Затем нажмите ALT+F2 для перехода в другой терминал, и войдите в систему.


Для чтения документации c компакт-диска, вы можете сразу запустить links:


Листинг 12: Просмотр документации с компакт-диска

# links /mnt/cdrom/docs/html/index.html



Но лучше открывать настольную книгу Gentoo из сети (там она новее, чем на компакт-диске). Для этого тоже можно пользоваться links, но только после настройки сети (иначе вы не сможете выйти в интернет, чтобы прочесть документ):


Листинг 13: Просмотр документации, находящейся в сети

# links http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml



На исходный терминал можно переключаться нажатием ALT+F1.


Дополнительно: запуск демона SSH


Если вы хотите разрешить другим пользователям доступ к своей системе в процессе установки Gentoo (возможно затем, чтобы они помогли вам с установкой или даже провели ее за вас), для них потребуется создать учетные записи, а возможно, даже дать им пароль администратора (делайте это только в том случае, если вы им полностью доверяете).


Чтобы запустить демон SSH, выполните следующую команду:


Листинг 14: Запуск демона SSH

# /etc/init.d/sshd start



Для использования sshd, сначала требуется настроить сеть. Переходите к главе настройка сети.

3. Настройка сети


3.a. Автоматическое подключение к сети


Может, она уже настроена?


Если ваша система подсоединена к сети Ethernet, в которой есть сервер DHCP, очень вероятно, что сетевое подключение на вашей машине уже автоматически настроено. Если так, вы сможете воспользоваться многими сетевыми командами, находящимися на установочном компакт-диске, например, ssh, scp, ping, irssi, wget и links.


Если сеть уже настроена, команда /sbin/ifconfig должна показывать сетевые интерфейсы кроме lo, например, eth0:


Листинг 1: /sbin/ifconfig для рабочей сетевой конфигурации

# /sbin/ifconfig

(...)

eth0 Link encap:Ethernet HWaddr 00:50:BA:8F:61:7A

inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0

inet6 addr: fe80::50:ba8f:617a/10 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0

TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0

collisions:1984 txqueuelen:100

RX bytes:485691215 (463.1 Mb) TX bytes:123951388 (118.2 Mb)

Interrupt:11 Base address:0xe800





Дополнительно: указание прокси-серверов


Если вы подключены к интернету через прокси-сервер, при установке вам может потребоваться ввести сведения о нем. Задать прокси-сервер очень просто: нужно определить переменные, содержащие необходимые сведения.


В большинстве случаев в определении переменных достаточно указать имя прокси-сервера. Предположим, например, что прокси-сервер называется proxy.gentoo.org, а его порт 8080:


Листинг 2: Указание прокси-сервера


(если прокси-сервер фильтрует трафик HTTP)

# export http_proxy="http://proxy.gentoo.org:8080"

(если прокси-сервер фильтрует трафик FTP)

# export ftp_proxy="ftp://proxy.gentoo.org:8080"

(если прокси-сервер фильтрует трафик RSYNC)

# export RSYNC_PROXY="proxy.gentoo.org:8080"



Если прокси-сервер запрашивает имя пользователя и пароль, для значения переменной следует использовать такой формат:


Листинг 3: Указание имени/пароля в адресе прокси-сервера

http://имя_пользователя:пароль@proxy.gentoo.org:8080



Проверка сети


Может оказаться полезным проверить отклик DNS-сервера вашего поставщика услуг интернета (адрес сервера находится в /etc/resolv.conf), а также произвольного веб-сайта, чтобы убедиться, что ваши пакеты выходят в интернет, разрешение имен DNS работает и т.д.


Листинг 4: Проверка доступности сети

# ping -c 3 google.com


Сеть доступна? Тогда пропустите остаток этого раздела, и переходите к разделу подготовка дисков. Если сеть все же недоступна, то, к сожалению, вам придется еще поработать над ее настройкой.


3.b. Автоматизированная настройка сети



Если сеть не заработает сразу, при установке с некоторых носителей можно использовать net-setup (для обычных или беспроводных сетей), pppoe-setup (для пользователей ADSL) или pptp (для пользователей PPTP; есть на x86, amd64, alpha, ppc и ppc64).







Если на вашем установочном диске нет ни одного из этих средств, или сеть еще не подключена, приступайте к ручной настройке сети:



По умолчанию: использование net-setup


Простейший способ настройки сети, если она не произошла автоматически запуск сценария net-setup:


Листинг 5: Запуск сценария net-setup

# net-setup eth0



net-setup задаст вам несколько вопросов о вашей сетевой среде. В результате его работы у вас должно появиться работоспособное подключение к сети. Проверьте сетевое подключение, как это описано выше. Если проверка прошла успешно, примите наши поздравления теперь вы готовы к установке Gentoo. Пропустите оставшуюся часть этого раздела и приступайте к подготовке дисков.


Если ваша сеть все еще не заработала, переходите к ручной настройке сети.


Альтернатива: использование RP-PPPoE


Для простоты подключения к интернету по PPPoE, в установочный диск (любой версии) включен rp-pppoe. Для настройки соединения используйте сценарий pppoe-setup, входящий в комплект. У вас будет запрошена информация о сетевом устройстве ethernet, подключенном к adsl-модему, имя пользователя, пароль, IP-адреса ваших серверов DNS. Также задается вопрос, нужно ли включать базовый межсетевой экран (firewall).


Листинг 6: Использование rp-pppoe

# pppoe-setup

# pppoe-start


Если что-то пошло не так, проверьте, правильно ли вы ввели имя пользователя и пароль, посмотрев в /etc/ppp/pap-secrets или /etc/ppp/chap-secrets, и убедитесь, что устройство ethernet указано верно. Если ваше устройство не видно в системе, потребуется загрузить соответствующие сетевые модули. Для этого нужно перейти к разделу ручная настройка сети где мы объясняем, как из загрузить.


Если же все заработало, переходите к подготовке дисков.


Альтернатива: использование PPTP


Примечание: Поддержка PPTP имеется только для архитектуры x86.


Если вам нужна поддержка PPTP, можно использовать pptpclient, который входит в состав нашего установочного диска. Но сначала нужно обеспечить правильность настройки. Отредактируйте файлы /etc/ppp/pap-secrets или /etc/ppp/chap-secrets так, чтобы в них находилось правильное сочетание имени пользователя и пароля.


Листинг 7: Редактирование /etc/ppp/chap-secrets

# nano -w /etc/ppp/chap-secrets


Затем, если нужно, измените параметры PPTP в файле /etc/ppp/options.pptp:


Листинг 8: Редактирование /etc/ppp/options.pptp

# nano -w /etc/ppp/options.pptp


Когда все будет готово, просто запустите pptp (с параметрами, которые вы не стали прописывать в options.pptp), чтобы соединиться с сервером:


Листинг 9: Подключение к серверу коммутируемого доступа

# pptp <server ip>


Теперь переходите к подготовке дисков.


3.c. Ручная настройка сети


Загрузка нужных сетевых модулей


При загрузке установочный диск пытается выявить все установленные устройства и загружает подходящие модули ядра (драйверы) для поддержки вашего оборудования. В подавляющем большинстве случаев он очень хорошо справляется с этой работой. Однако, в некоторых случаях он может не справиться с автозагрузкой нужных вам модулей ядра.


Если net-setup или pppoe-setup не удалось загрузить нужный модуль, возможно, ваша сетевая плата сразу не обнаружена. При этом вам может потребоваться ручная загрузка необходимых модулей ядра.


Чтобы выяснить, какие модули ядра для поддержки сети существуют, используйте ls:


Листинг 10: Поиск имеющихся модулей

# ls /lib/modules/`uname -r`/kernel/drivers/net



Если вы найдете драйвер для своей сетевой платы, для загрузки модуля ядра используйте modprobe:


Листинг 11: Использование modprobe для загрузки модуля ядра

(для примера загрузим модуль pcnet32)

# modprobe pcnet32



Чтобы убедиться, что ваша сетевая плата теперь обнаружена, используйте ifconfig. Если сетевая плата обнаружена, результат выглядит подобным образом:






Листинг 12: Проверка доступности сетевой платы (удачная)

# ifconfig eth0

eth0 Link encap:Ethernet HWaddr FE:FD:00:00:00:00

BROADCAST NOARP MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)



Однако, если вы получите такое сообщение об ошибке, сетевая плата не обнаружена:


Листинг 13: Проверка доступности сетевой платы (неудачная)

# ifconfig eth0

eth0: error fetching interface information: Device not found



Если в вашей системе установлено несколько сетевых плат, они будут называться eth0, eth1 и т.д. Убедитесь, что сетевая плата, которую вы собираетесь использовать, работает хорошо, и в дальнейшем не забудьте везде подставлять верное имя. Мы предполагаем, что используется сетевая плата eth0.


Когда ваша сетевая плата обнаружена, можно попробовать снова запустить net-setup или pppoe-setup (которые теперь должны сработать), но на случай, если вы из крутых, мы опишем, как настроить сеть вручную.


Выберите один из следующих разделов, в зависимости от необходимого вида настройки:


Использование DHCP


DHCP (Dynamic Host Configuration Protocol протокол динамической настройки хоста) дает возможность автоматически получить параметры сетевого подключения (IP-адрес, маску сети, широковещательный адрес, шлюз, сервера имен и т. д.) Все это работает, только когда в вашей сети есть сервер DHCP (или ваш поставщик предоставляет услугу DHCP). Чтобы сетевой интерфейс получал эти сведения автоматически, используйте dhcpcd:


Листинг 14: Использование dhcpcd

# dhcpcd eth0

Некоторые сетевые администраторы требуют, чтобы вы использовали

имя хоста и домена, назначенное сервером DHCP.

В этом случае используйте

# dhcpcd -HD eth0



Если это сработало (попробуйте «попинговать» какой-нибудь сервер интернета, например, Google), то у вас все настроено, и можно двигаться дальше. Пропустите остаток этого раздела и приступайте к подготовке дисков.


Подготовка беспроводного доступа

Примечание: Поддержка команды iwconfig есть только на установочных дисках для платформ x86, amd64 и ppc. В других случаях вы все же сможете запустить расширения, следуя инструкциям проекта linux-wlan-ng (англ.).



Если вы используете беспроводную плату (802.11), перед дальнейшими действиями может потребоваться настройка параметров беспроводного подключения. Для просмотра текущей настройки беспроводной платы можете использовать iwconfig. При запуске iwconfig вы увидите подобные сведения:


Листинг 15: Вывод текущих параметров беспроводного подключения


# iwconfig eth0

eth0 IEEE 802.11-DS ESSID:"GentooNode"

Mode:Managed Frequency:2.442GHz Access Point: 00:09:5B:11:CC:F2

Bit Rate:11Mb/s Tx-Power=20 dBm Sensitivity=0/65535

Retry limit:16 RTS thr:off Fragment thr:off

Power Management:off

Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm

Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx

excessive retries:237 Invalid misc:350282 Missed beacon:84


Примечание: Некоторые беспроводные платы могут называться подобно wlan0 или ra0, а не eth0. Для определения верного имени устройства запускайте iwconfig без каких-либо параметров командной строки.



Для большинства пользователей может потребоваться изменение только двух параметров: ESSID (названия беспроводной сети) и ключа шифрования WEP. Если ESSID и указанный адрес точки доступа уже принадлежат вашей точке доступа, и вы не используете WEP, значит, ваше беспроводное подключение работает. Если вам необходимо изменить свой ESSID или добавить ключ WEP, можно запустить следующие команды:


Листинг 16: Замена ESSID и/или добавление ключа WEP

(так название сети устанавливается в "GentooNode")

# iwconfig eth0 essid GentooNode


(так устанавливается шестнадцатиричный ключ WEP)

# iwconfig eth0 key 1234123412341234abcd


(так устанавливается текстовый ключ (ASCII); вначале нужно добавлять "s:")

# iwconfig eth0 key s:some-password



Проверить сделанную настройку можно, снова запустив iwconfig. Как только ваша беспроводная сеть заработает, вы можете перейти к установке параметров сети, относящихся к протоколу IP, которые описываются в следующем разделе (освоение сетевой терминологии), или использовать утилиту net-setup, как описано ранее.


Освоение сетевой терминологии

Примечание: Если вы знаете свой IP-адрес, широковещательный адрес, маску сети и серверы имен, можете пропустить этот подраздел и перейти к разделу использование ifconfig и route.


Если все, рассказанное выше, не помогло, вам придется настроить свою сеть вручную. Это совсем нетрудно. Однако, вам понадобится освоить кое-какую сетевую терминологию, знание которой требуется для удовлетворительной настройки сети. Прочитав этот текст, вы узнаете, что такое шлюз, зачем служит маска сети, как формируется широковещательный адрес, и зачем нужны серверы имен.


В сети узлы (хосты, компьютеры) различаются по IP-адресу (адресу протокола интернета). Такой адрес это сочетание четырех чисел от 0 до 255. Ну, по крайней мере, так мы его воспринимаем. В действительности, IP-адрес состоит из 32 бит (единиц и нулей). Давайте рассмотрим пример:


Листинг 17: Пример IP-адреса

IP-адрес (числа): 192.168.0.2

IP-адрес (биты): 11000000 10101000 00000000 00000010

-------- -------- -------- --------

192 168 0 2



Такой IP-адрес уникален для узла в рамках всех доступных сетей (т. е. каждый узел, с которым вы можете связаться, должен иметь уникальный IP-адрес). Чтобы различать узлы, находящиеся внутри и извне сети, IP-адрес подразделяется на две части: часть сети и часть узла.


Это разделение записывается с помощью маски сети набора единиц, за которым следует набор нулей. Часть IP-адреса, которая попадает на единицы сетевая, оставшаяся часть узловая. Как обычно, маска сети может записываться в виде IP-адреса.


Листинг 18: Пример разделения сети/узла

IP-адрес: 192 168 0 2

11000000 10101000 00000000 00000010

Маска сети: 11111111 11111111 11111111 00000000

255 255 255 0

+--------------------------+--------+

Сеть Узел



Другими словами, 192.168.0.14 все еще входит в состав сети из нашего примера, а 192.168.1.2 уже нет.


Широковещательный адрес это IP-адрес с такой же сетевой частью, как у вашей сети, но у которого узловая часть состоит только из единиц. Каждый узел вашей сети слушает этот IP-адрес. Он действительно предназначен для широковещательной рассылки пакетов.






Листинг 19: Широковещательный адрес

IP-адрес: 192 168 0 2

11000000 10101000 00000000 00000010

Широковещательный 11000000 10101000 00000000 11111111

адрес: 192 168 0 255

+--------------------------+--------+

Сеть Узел


Чтобы бороздить просторы интернета, вы должны знать, через какой узел происходит подключение к интернету. Этот узел называется шлюзом. Так как это обычный узел, ему присвоен обычный IP-адрес (например, 192.168.0.1).


Выше мы говорили, что каждому узлу присваивается свой собственный IP-адрес. Чтобы связываться с узлом по имени (вместо IP-адреса), нужна служба, которая переводит имя (такое, как dev.gentoo.org) в IP-адрес (например, 64.5.62.82). Такая служба называется службой имен. Чтобы пользоваться ей, нужно указать необходимые серверы имен в /etc/resolv.conf.


Иногда ваш шлюз сам является сервером имен. В остальных случаях вам необходимо указывать серверы имен, предоставляемые поставщиком интернета.


В итоге, для дальнейшего вам потребуется следующая информация:


Параметр настройки сети Пример

Ваш IP-адрес 192.168.0.2

Маска сети 255.255.255.0

Широковещательный адрес 192.168.0.255

Шлюз 192.168.0.1

Сервер(ы) имен 195.130.130.5, 195.130.130.133



Использование ifconfig и route


Настройка вашей сети состоит из трех шагов. Сначала мы назначаем себе IP-адрес с помощью ifconfig. Затем мы настраиваем маршрутизацию к шлюзу, пользуясь route. И в завершение мы помещаем IP-адреса серверов имен в /etc/resolv.conf.


Для назначения IP-адреса потребуется ваш IP-адрес, широковещательный адрес и маска сети. Узнав их, выполните следующую команду, заменив ${IP_ADDR} на свой IP-адрес, ${BROADCAST} на свой широковещательный адрес, а ${NETMASK} на свою маску сети:


Листинг 20: Использование ifconfig

# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up



Теперь настройте маршрутизацию с помощью route. Подставьте IP-адрес своего шлюза вместо ${GATEWAY}:


Листинг 21: Использование route

# route add default gw ${GATEWAY}



Затем откройте /etc/resolv.conf в своем любимом редакторе (в нашем примере используется nano):


Листинг 22: Создание /etc/resolv.conf

# nano -w /etc/resolv.conf



Заполните данные своих серверов имен по следующему образцу. Обязательно замените ${NAMESERVER1} и ${NAMESERVER2} на соответствующие адреса серверов имен:


Листинг 23: Образец /etc/resolv.conf

nameserver ${NAMESERVER1}

nameserver ${NAMESERVER2}



Готово. Теперь проверьте свою сеть, «попинговав» какой-либо сервер интернета (например, Google). Если все заработало, примите наши поздравления! Теперь вы готовы к установке Gentoo. Приступайте к подготовке дисков.

4. Подготовка дисков


4.a. Общие сведения о блочных устройствах


Блочные устройства


Мы достаточно подробно рассмотрим аспекты работы с дисками в Gentoo Linux и Linux вообще, включая файловые системы, разделы и блочные устройства. Позже, когда вы уже освоитесь с дисками и файловыми системами, мы проведем вас через процесс настройки разделов и файловых систем для установки Gentoo Linux.


Для начала, давайте познакомимся с блочными устройствами. Вероятно, наиболее известно блочное устройство, соответствующее в системе Linux первому IDE-диску, а именно /dev/hda. А если в вашей системе используются диски SCSI или SATA, то первым жестким диском будет /dev/sda.


Подобные блочные устройства представляют собой абстрактный интерфейс к диску. Прикладные программы могут использовать их для обращения к дискам, не беспокоясь, к какому типу те принадлежат: IDE, SCSI или какому-то еще. Программы могут просто обращаться к накопителю, как к набору смежных 512-байтных блоков с произвольным доступом.


Разделы


Хотя теоретически для размещения системы Linux диск можно использовать целиком, так почти никогда не делают на практике. Вместо этого большое физическое блочное устройство разбивают на меньшие блочные устройства, более удобные для обращения. В архитектуре x86 они называются разделами.


Существуют разделы трех типов: первичные (primary), расширенные (extended) и логические (logical).




Первичный раздел это раздел, информация о котором хранится в MBR (Master Boot Record главной загрузочной записи). Так как MBR очень мала (512 байт), можно определять всего четыре первичных раздела (например, от /dev/hda1 до /dev/hda4).


Расширенный раздел это особый первичный раздел (имеется в виду, что расширенный раздел должен быть одним из четырех возможных первичных разделов), в котором содержатся другие разделы. Таких разделов изначально не существовало, но их введение помогло расширить существующую схему разметки без потери совместимости, как только четырех разделов перестало хватать.


Логический раздел это раздел, входящий в расширенный раздел. Его определение находится не в MBR, а внутри расширенного раздела.


Дополнительные возможности


На установочном компакт-диске для х86 предусмотрена поддержка EVMS и LVM2. Использование EVMS и LVM2 повышает гибкость разбиения диска. В ходе установки мы останавливаемся на «обычных» разделах, но стоит запомнить, что EVMS и LVM2 тоже поддерживаются.


4.b. Разработка схемы разбиения диска


Схема разбиения по умолчанию


Если вам не интересно заниматься разработкой схемы для своей системы, можно воспользоваться схемой, используемой в этой книге:


Раздел Файловая система Размер Описание

/dev/hda1 ext2 32МБ загрузочный раздел

/dev/hda2 (swap) 512МБ раздел подкачки

/dev/hda3 ext3 оставшаяся часть диска корневой раздел



Если вам интересно узнать, какого размера должны быть разделы, и сколько их вам вообще может потребоваться, читайте дальше. В противном случае приступайте к созданию разделов, описанному в главе использование fdisk для создания разделов.


Сколько и каких именно?


Количество разделов очень сильно зависит от назначения системы. Например, если у вас много пользователей, вам, скорее всего, захочется отделить /home для повышения безопасности и упрощения резервного копирования. Если вы устанавливаете Gentoo в роли почтового сервера, следует отделить /var, т.к. вся почта хранится там. Затем, правильно выбрав файловую систему, вы добьетесь максимальной производительности. Для игровых серверов потребуется отдельный раздел /opt, так как большинство программ для их работы устанавливается туда. Причины выделения те же, что и для /home: безопасность и резервное копирование. Определенно не помешает побольше места для /usr: не только потому, что там хранится большинство приложений, а еще из-за того, что лишь дерево Portage, не считая размещенных в нем архивов с исходными кодами, занимает около 500 МБ.


Как видите, все зависит от ваших целей. Наличие отдельных разделов или томов имеет следующие плюсы:



Однако, у создания множества разделов есть один большой минус: при неправильной настройке можно получить систему, в которой много свободного места на одном разделе, и совершенно нет на другом. Кроме того, на дисках SCSI и SATA возможно создание не более 15 разделов.


Для примера мы покажем разбиение диска объемом 20 ГБ, используемого в демонстрационном ноутбуке (с веб-сервером, почтовым сервером, средой Gnome и т.д.):


Листинг 1: Пример файловой системы

$ df -h

Filesystem Type Size Used Avail Use% Mounted on

/dev/hda5 ext3 509M 132M 351M 28% /

/dev/hda2 ext3 5.0G 3.0G 1.8G 63% /home

/dev/hda7 ext3 7.9G 6.2G 1.3G 83% /usr

/dev/hda8 ext3 1011M 483M 477M 51% /opt

/dev/hda9 ext3 2.0G 607M 1.3G 32% /var

/dev/hda1 ext2 51M 17M 31M 36% /boot

/dev/hda6 swap 516M 12M 504M 2% <not mounted>

(свободное место для будущего использования: 2 ГБ)



Раздел /usr, как видим, почти заполнен (использовано 83%), но когда все программы установлены, /usr растет не слишком быстро. Хотя отведение нескольких гигабайт дискового пространства для /var может показаться расточительством, помните, что этот раздел по умолчанию используется Portage для компиляции пакетов. Если вы захотите удержать /var в рамках более разумного размера, например, 1ГБ, вам потребуется изменить переменную PORTAGE_TMPDIR в /etc/make.conf, чтобы она указывала на раздел, где достаточно свободного места для компиляции чрезвычайно больших пакетов, таких как OpenOffice.


4.c. Использование fdisk для создания разделов



В следующих разделах описывается, как разбить диск в соответствии с примерной схемой, описанной ранее, а именно:


Раздел Описание

/dev/hda1 загрузочный раздел

/dev/hda2 раздел подкачки

/dev/hda3 корневой раздел



Эту схему вы можете изменять по своему усмотрению.


Просмотр текущей схемы разбиения диска


fdisk это популярная и очень мощная утилита для создания разделов на ваших дисках. Запустите fdisk, указав свой диск в качестве параметра (в примере мы используем /dev/hda):


Листинг 2: Запуск fdisk

# fdisk /dev/hda



После запуска fdisk выдаст такое приглашение:


Листинг 3: Приглашение fdisk

Command (m for help):



Нажмите p, чтобы вывести текущую схему разбиения диска:


Листинг 4: Пример схемы разделов диска

Command (m for help): p


Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders

Units = cylinders of 15120 * 512 bytes


Device Boot Start End Blocks Id System

/dev/hda1 1 14 105808+ 83 Linux

/dev/hda2 15 49 264600 82 Linux swap

/dev/hda3 50 70 158760 83 Linux

/dev/hda4 71 2184 15981840 5 Extended

/dev/hda5 71 209 1050808+ 83 Linux

/dev/hda6 210 348 1050808+ 83 Linux

/dev/hda7 349 626 2101648+ 83 Linux

/dev/hda8 627 904 2101648+ 83 Linux

/dev/hda9 905 2184 9676768+ 83 Linux


Command (m for help):



В данном случае на диске есть семь разделов Linux (для которых в графе «System» указано «Linux») и один раздел подкачки (в списке показан как «Linux swap»).


Удаление всех разделов


Сначала удалим с диска все существующие разделы. Для удаления раздела вводите d. Например для удаления существующего /dev/hda1:


Листинг 5: Удаление раздела

Command (m for help): d

Partition number (1-4): 1



Удаление раздела будет запланировано. Он больше не будет отображаться при вводе p, но фактически не будет удалятся до тех пор, пока вы не сохраните внесенные изменения. Если вы ошиблись и хотите прервать разбиение без сохранения изменений, немедленно введите q и нажмите ENTER; тогда ваш раздел сохранится в неизменном виде.


Теперь, если вы действительно собираетесь удалить в своей системе все разделы, повторяйте ввод p для показа оставшихся разделов, затем d и номера удаляемого раздела до тех пор, пока разделы не кончатся. В итоге вы получите пустую таблицу разделов:


Листинг 6: Пустая таблица разделов

Disk /dev/hda: 30.0 GB, 30005821440 bytes

240 heads, 63 sectors/track, 3876 cylinders

Units = cylinders of 15120 * 512 = 7741440 bytes


Device Boot Start End Blocks Id System


Command (m for help):



Теперь, когда мы очистили таблицу разделов, хранящуюся в оперативной памяти, настало время создавать разделы. Мы воспользуемся примерной схемой разбиения, описанной выше. Естественно, не следуйте этим инструкциям буквально, если только вам не нужна таблица разделов, идентичная нашей!


Создание загрузочного раздела


Сначала создадим маленький загрузочный раздел. Введите n для создания нового раздела, затем p, чтобы выбрать первичный раздел, и 1 для указания первого первичного раздела. На вопрос о первом цилиндре нажмите ввод. На вопрос о последнем цилиндре введите +32M, чтобы создать раздел размером 32МБ:


Листинг 7: Создание загрузочного раздела

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-3876, default 1): (нажмите ввод)

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M



Теперь, введя p, вы должны увидеть следующий текст:


Листинг 8: Созданный загрузочный раздел

Command (m for help): p


Disk /dev/hda: 30.0 GB, 30005821440 bytes

240 heads, 63 sectors/track, 3876 cylinders

Units = cylinders of 15120 * 512 = 7741440 bytes


Device Boot Start End Blocks Id System

/dev/hda1 1 14 105808+ 83 Linux



Нам необходимо сделать этот раздел загружаемым. Введите a для включения признака загрузки с раздела, затем нажмите 1. Если снова ввести p, можно увидеть, что в столбце «boot» появился знак *.


Создание раздела подкачки


Теперь создадим раздел подкачки. Для этого введите n (создание нового раздела), затем p для выбора первичного раздела. Потом нажмите 2, чтобы создать второй первичный раздел, в нашем случае /dev/hda2. На вопрос о первом цилиндре просто нажмите ввод. На вопрос о последнем ответьте +512M, чтобы создать раздел размером 512МБ. Сделав это, введите t для указания типа раздела, 2, для выбора только что созданного раздела, и 82, чтобы установить тип раздела «Linux Swap». При нажатии p по завершении этих действий, таблица разделов должна выглядеть примерно так:


Листинг 9: Список разделов после создания раздела подкачки

Command (m for help): p


Disk /dev/hda: 30.0 GB, 30005821440 bytes

240 heads, 63 sectors/track, 3876 cylinders

Units = cylinders of 15120 * 512 = 7741440 bytes


Device Boot Start End Blocks Id System

/dev/hda1 * 1 14 105808+ 83 Linux

/dev/hda2 15 81 506520 82 Linux swap



Создание корневого раздела


Теперь создадим корневой раздел. Для этого введите n (создание нового раздела), затем p (первичный раздел). После этого нажмите 3 для создания третьего первичного раздела, в нашем случае /dev/hda3. На вопрос о первом цилиндре нажмите ввод. На вопрос о последнем также нажмите ввод, чтобы раздел занял все оставшееся свободное место на диске. По завершении этих шагов, при вводе p должна выводиться подобная таблица разделов:


Листинг 10: Список разделов после создания корневого раздела

Command (m for help): p


Disk /dev/hda: 30.0 GB, 30005821440 bytes

240 heads, 63 sectors/track, 3876 cylinders

Units = cylinders of 15120 * 512 = 7741440 bytes


Device Boot Start End Blocks Id System

/dev/hda1 * 1 14 105808+ 83 Linux

/dev/hda2 15 81 506520 82 Linux swap

/dev/hda3 82 3876 28690200 83 Linux


Сохранение схемы разбиения


Для сохранения схемы разбиения и выхода из fdisk, введите w.


Листинг 11: Сохранение и выход из fdisk

Command (m for help): w


Теперь, создав все разделы, перейдем к созданию файловых систем.


4.d. Создание файловых систем


Введение


Разделы созданы, настало время разместить на них файловые системы. Если вам безразлично, какую файловую систему использовать, и вы вполне довольны той, что мы предлагаем в книге по умолчанию, переходите к размещению файловой системы в разделе. Если нет, читайте дальше, чтобы разузнать о существующих файловых системах...


Файловые системы (сравнение !)


В ядре Linux поддерживаются различные файловые системы. Мы расскажем о самых распространенных из них: ext2, ext3, ReiserFS, XFS и JFS.



Размещение файловой системы в разделе


Для создания в разделе или томе файловой системы каждого типа существуют специальные средства:

Файловая система Команда создания

ext2 mke2fs

ext3 mke2fs -j

reiserfs mkreiserfs

xfs mkfs.xfs

jfs mkfs.jfs



Например, чтобы у загрузочного раздела (/dev/hda1 в наших примерах) была файловая система ext2, а у корневого раздела (/dev/hda3 в наших примерах) ext3, требуется выполнить:


Листинг 12: Создание файловых систем разделов

# mke2fs /dev/hda1

# mke2fs -j /dev/hda3



Теперь самостоятельно создайте файловые системы на своих только что созданных разделах (логических томах).


Подключение раздела подкачки


mkswap команда, используемая для инициализации разделов подкачки:


Листинг 13: Создание идентификатора раздела подкачки

# mkswap /dev/hda2


Для подключения раздела подкачки воспользуйтесь swapon:


Листинг 14: Подключение раздела подкачки

# swapon /dev/hda2


Теперь командами, приведенными выше, создайте и подключите раздел подкачки в своей системе.


4.e. Монтирование


Теперь, когда разделы созданы, а файловые системы размещены, настало время смонтировать (подключить к системе) эти разделы. Используйте команду mount. Не забудьте создать для каждого раздела соответствующие каталоги монтирования. Например, смонтируем корневой и загрузочный разделы:





Листинг 15: Монтирование разделов

# mount /dev/hda3 /mnt/gentoo

# mkdir /mnt/gentoo/boot

# mount /dev/hda1 /mnt/gentoo/boot


Примечание: Если вы хотите разместить каталог /tmp в отдельном разделе, не забудьте изменить права доступа к этому каталогу после монтирования: chmod 1777 /mnt/gentoo/tmp. Это также относится к /var/tmp.



Еще нам потребуется смонтировать файловую систему proc (виртуальный интерфейс ядра) в каталог /proc. Но сначала надо поместить в разделы нужные файлы.


Переходите к установке установочных файлов Gentoo.


5. Установка установочных файлов Gentoo


5.a. Установка архива стадии


Установка текущей даты и времени


Перед тем, как продолжать, убедитесь в правильности системной даты и времени, и при необходимости обновите их. Если часы установлены неверно, это в будущем может привести к странным результатам!


Для проверки времени, введите команду date:


Листинг 1: Проверка даты и времени

# date

Fri Mar 29 16:21:18 UTC 2007



Если часы установлены неправильно, измените время командой date ММДДччммГГГГГ (формат: Месяц, День, часы, минуты и Год). На этом этапе следует указывать время UTC. Позднее вы сможете установить свой часовой пояс. Например, для установки часов на 29 марта, 16:21, 2005 год, выполните:


Листинг 2: Установка даты и времени

# date 032916212007



Выбор источника


Следующий необходимый шаг установка архива stage3 на вашу систему. Нужный архив можно скачать из интернета, или, если вы загрузились с универсального установочного диска Gentoo, скопировать с самого диска. Если у вас есть универсальный диск, а на нем нужная стадия, то загрузка из интернета лишняя трата трафика и времени, т.к. файлы стадии окажутся совершенно одинаковы. В большинстве случаев, определиться с выбором архива стадии вам поможет команда uname -m.


по умолчанию: использование файла стадии из интернета

альтернатива: использование файла стадии с установочного диска


5.b. По умолчанию: использование файла стадии из интернета


Загрузка архива стадии


Перейдите в точку подключения файловой системы Gentoo (обычно /mnt/gentoo):


Листинг 3: Переход к точке подключения Gentoo

# cd /mnt/gentoo



Для загрузки файла стадии у вас уже есть различные инструменты, зависящие от типа диска, с которого производится установка. Если имеется links, можете сразу открыть список зеркал Gentoo и выбрать ближайшее.


Когда links нет, в вашем распоряжении должен оказаться lynx. Если требуется использовать прокси-сервер, экспортируйте переменные http_proxy и ftp_proxy:


Листинг 4: Настройка информации о прокси-сервере для lynx

# export http_proxy="http://proxy.server.com:port"

# export ftp_proxy="http://proxy.server.com:port"



Предположим, у вас под рукой есть links.


Перейдите в каталог releases/, в нем откройте каталог, соответствующий вашей архитектуре (например, x86/), затем каталог с версией Gentoo (2006.1/), и, наконец, каталог stages/. Здесь находятся все доступные архивы стадий для вашей архитектуры (они могут располагаться в подкаталогах с названиями разновидностей архитектуры). Выберите один из них и нажмите D для загрузки. По окончании нажмите Q, чтобы выйти из браузера.


Листинг 5: Открытие списка зеркал в links

# links http://www.gentoo.org/main/ru/mirrors.xml


(если в links нужна поддержка прокси-сервера:)

# links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/ru/mirrors.xml



Удостоверьтесь, что вы скачали stage3-архив установка с использованием файлов stage1 и stage2 более не поддерживается.


Если вы хотите проверить целостность загруженного архива стадии, с помощью md5sum сравните результат с контрольной суммой MD5, взятой с зеркала. Например, для проверки целостности архива стадии для x86:


Листинг 6: Пример проверки целостности архива стадии

# md5sum -c stage3-x86-2007.0.tar.bz2.DIGESTS

stage3-x86-2007.0.tar.bz2: OK





Распаковка архива стадии


Распакуйте загруженный архив стадии в своей системе. Мы используем tar, т.к. это простейший способ:


Листинг 7: Распаковка архива стадии

# tar xvjpf stage3-*.tar.bz2



Примечание: На установочных компакт-дисках и загрузочных образах для некоторых архитектур (например, MIPS) tar встроен в оболочку BusyBox, которая на данный момент не поддерживает параметр v. Тогда вместо приведенных указывайте параметры xjpf.



После развертывания установки стадии переходите к установке дерева портежей.

5.c. Альтернатива: использование файла стадии с установочного диска


Извлечение архива стадии

Важно: Если вы в x86 и используете «живой диск» с установщиком, на нем нет стадий. Вам понадобится последовать указаниям по использованию файла стадии из интернета.



Архивы стадий находятся на компакт-диске в каталоге /mnt/cdrom/stages. Для получения списка доступных стадий, воспользуйтесь ls:


Листинг 8: Список доступных архивов стадий

# ls /mnt/cdrom/stages


Если система сообщает об ошибке, возможно, сначала нужно смонтировать CD-ROM:


Листинг 9: Монтирование CD-ROM

# ls /mnt/cdrom/stages

ls: /mnt/cdrom/stages: No such file or directory

# mount /dev/cdroms/cdrom0 /mnt/cdrom

# ls /mnt/cdrom/stages



Перейдите в точку подключения Gentoo (обычно /mnt/gentoo):


Листинг 10: Смена каталога на /mnt/gentoo

# cd /mnt/gentoo



Теперь утилитой tar распакуем выбранный архив стадии. Убедитесь, что вы используете точно такие же параметры (xvjpf)! Параметр v необязателен и может не работать в некоторых версиях tar. В следующем примере мы распакуем архив стадии stage3-<архитектура>-2006.1.tar.bz2. В качестве имени архива обязательно указывайте название файла нужной вам стадии.


Листинг 11: Распаковка архива стадии

# tar xvjpf /mnt/cdrom/stages/stage3-<архитектура>-2007.0.tar.bz2



После установки стадии переходите к установке дерева портежей.


5.d. Установка дерева портежей


Распаковка снимка портежей


Теперь вам нужно установить снимок дерева портежей набор файлов, содержащих сведения для Portage о программном обеспечении, доступном для установки, имеющихся профилях и т.д.


Загрузка и установка снимка дерева портежей


Перейдите к точке подключения вашей системы (обычно /mnt/gentoo):


Листинг 12: Переход к точке подключения

# cd /mnt/gentoo



Запустите links (или lynx) и откройте спискок зеркал Gentoo. Выберите ближайшее зеркало и перейдите в каталог snapshots/. Оттуда загрузите новейший снимок дерева портежей (portage-latest.tar.bz2), выбрав его из списка и нажав D.


Листинг 13: Просмотр списка зеркал Gentoo

# links http://www.gentoo.org/main/ru/mirrors.xml



Закройте браузер нажатием Q. Теперь у вас в /mnt/gentoo появился снимок дерева портежей.


Если нужно убедиться в целостности загруженного снимка, воспользуйтесь md5sum, и сравните результат с контрольной суммой MD5, имеющейся на зеркале.


Листинг 14: Checking integrity of a Portage snapshot

# md5sum -c portage-latest.tar.bz2.md5sum

portage-latest.tar.bz2: OK



Теперь нужно распаковать снимок. Убедитесь в том, что вы используете в точности такие же параметры; последний параметр заглавная C, а не строчная c.


Листинг 15: Извлечение снимка дерева портежей

# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr



5.e. Настройка параметров компиляции


Введение


Для оптимизации Gentoo вы можете создать ряд переменных, которые повлияют на поведение Portage. Все их можно создавать как переменные среды (с помощью export), но тогда они будут лишь временными. Для хранения ваших настроек предназначен конфигурационный файл Portage, /etc/make.conf. Именно его мы сейчас будем редактировать.


Примечание: Список и описание всех допустимых переменных находятся в файле /mnt/gentoo/etc/make.conf.example. Для успешной установки Gentoo, достаточно установить значения только тех переменных, которые описаны ниже.



Запустите ваш любимый редактор (в этом руководстве используется nano) для изменения параметров оптимизации, которые обсуждаются далее.


Листинг 16: Открытие /etc/make.conf

# nano -w /mnt/gentoo/etc/make.conf



Как вы могли заметить, у файла make.conf.example обычная структура: строки комментария начинаются со знака «#», а в остальных строках выражениями вида ПЕРЕМЕННАЯ="значение" определяются переменные. У файла make.conf такой же формат. Некоторые из переменных мы обсудим ниже.


CHOST


В переменной CHOST определяется, для какой архитектуры скомпилирована система. В ней уже должно быть установлено правильное значение. Не изменяйте эту переменную, т.к. это может повредить вашу систему. Если переменная CHOST, по-вашему, выглядит неправильно, возможно, вы используете не тот архив stage3.


CFLAGS и CXXFLAGS


Переменные CFLAGS и CXXFLAGS определяют параметры оптимизации компилятора gcc для языков C и C++, соответственно. При том, что общие значения следует устанавливать здесь, максимальная производительность достигается в том случае, когда для каждой компилируемой программы устанавливаются свои собственные оптимальные параметры. Причина в том, что все программы различны.


В файле make.conf следует указывать параметры оптимизации, которые, на ваш взгляд, повысят скорость системы в целом. Не помещайте сюда экспериментальные значения; излишняя оптимизация может привести к плохому поведению программ (аварийным завершениям, или, что хуже, неправильной работе).


Мы не будем описывать все возможные параметры оптимизации. Если вы хотите узнать о них всё, почитайте онлайновые руководства GNU (англ.) или страницу описания gcc (info gcc доступна только на работающей системе Linux). Не забудьте прочитать сам файл make.conf.example: в нем также есть немало примеров и полезных сведений.


Первый параметр флаг -march=, где указывается название целевой архитектуры. Возможные варианты описаны в комментариях в файле make.conf.example. Например, для архитектуры x86 Athlon XP:


Листинг 17: Значение -march для GCC

# пользователям AMD64, желающим получить действительно 64-битную

# систему, следует использовать -march=k8

# пользователи EM64T должны указать -march=nocona

-march=athlon-xp



Примечание(JohnBat26): Если Вы используете компилятор версии 4.2.0 и выше, то вместо указания специфичного типа процессора, необходимо указывать одно из двух (в параметрах: -march и -mtune):

  1. generic: если Вы хотите, чтобы Ваш скомпилированный код запускался на всех процессорах, архитектуры x86;

  2. native: если Вы хотите оптимизировать код только для Вашего процессора. В этом случае компилятор будет брать сведения о процессоре путем вызова cpuid ! Т.е никаких nocona (для Core 2 Duo) или prescott (для последних Intel Pentium 4 и т.п).


Следующий флаг -O (заглавная латинская «O», а не ноль), определяющий класс оптимизации в gcc. Допустимые значения:


Например, для оптимизации класса 2:


Листинг 18: Значение -O для GCC

-O2


Другой популярный флаг оптимизации -pipe (использование для связи между различными проходами компилятора каналов вместо временных файлов).


Заметьте, что использование -fomit-frame-pointer (не хранить в регистре указатель стекового кадра для функций, которым он не нужен) может всерьез помешать отладке программ!


При определении переменных CFLAGS и CXXFLAGS, нужно объединять несколько флагов оптимизации, как в следующем примере:


Листинг 19: Определение переменных CFLAGS и CXXFLAGS (gcc < 4.2.0)

CFLAGS="-march=athlon-xp -pipe -O2" # для пользователей AMD64: -march=k8

# для пользователей EM64T: -march=nocona

CXXFLAGS="${CFLAGS}" # указывайте одинаковые значения обеих переменных



MAKEOPTS


С помощью MAKEOPTS определяется, сколько параллельных процессов компиляции можно запускать при установке пакета. Хороший (но не всегда идеальный) вариант значение, равное количеству процессоров в системе плюс один.


Листинг 20: MAKEOPTS для обычной однопроцессорной системы

MAKEOPTS="-j2"


На старт, внимание, марш!


Измените /mnt/gentoo/etc/make.conf в соответствии со своими пожеланиями, и сохраните изменения (пользователям nano нужно нажать CTRL+X). Теперь вы готовы к установке базовой системы Gentoo.


6. Установка базовой системы Gentoo

6.a. Изменение корневого каталога


Дополнительно: выбор зеркала


Для ускорения загрузки исходного кода рекомендуется выбрать быстрое зеркало. Portage ищет переменную GENTOO_MIRRORS в файле make.conf и использует зеркала, перечисленные в ней. Конечно, можно просмотреть наш список зеркал и выбрать одно или несколько, географически ближайших к вам (чаще всего они и будут самыми быстрыми), но мы предлагаем вам удобную утилиту mirrorselect, которая позволяет выбрать желаемые зеркала более удобным способом.


Листинг 1: Запуск mirrorselect для установки переменной GENTOO_MIRRORS

# mirrorselect -i -o >>/mnt/gentoo/etc/make.conf


Предупреждение: Не выбирайте зеркала IPv6. Файлы стадий пока не поддерживают протокол IPv6.



Вторая важная настройка установка значения переменной SYNC в файле make.conf. Эта переменная указывает на сервер rsync (сервер удаленной синхронизации), выбранный вами для обновления дерева Portage (коллекции файлов ebuild сборочных сценариев, содержащих все данные, нужные Portage для скачивания и установки программ). Хотя вписать адрес сервера в SYNC можно и вручную, mirrorselect позволяет упростить это действие:


Листинг 2: Выбор зеркала rsync с помощью mirrorselect

# mirrorselect -i -r -o >> /mnt/gentoo/etc/make.conf



После выполнения mirrorselect, мы рекомендуем проверить все значения в файле /mnt/gentoo/etc/make.conf!




Копирование сведений о DNS


Перед тем, как перейти в новую среду, осталось сделать одно дело: скопировать информацию о DNS (системе доменных имен) в файл /etc/resolv.conf. Это нужно, чтобы при переходе сохранить работоспособность сети. В файле /etc/resolv.conf содержатся адреса серверов имен, используемых в вашей сети.


Листинг 3: Копирование информации о DNS

(параметр «-L» нужен, чтобы случайно не скопировать

символьную ссылку)

# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf



Монтирование файловых систем /proc и /dev


Смонтируйте файловую систему /proc в /mnt/gentoo/proc, чтобы после изменения корневого каталога устанавливаемая система смогла обращаться к информации, предоставляемой ядром, а затем создайте привязку монтирования файловой системы /dev.


Листинг 4: Монтирование /proc и /dev

# mount -t proc none /mnt/gentoo/proc

# mount -o bind /dev /mnt/gentoo/dev



Переход в новую среду


Итак, все разделы подготовлены, а базовая операционная среда установлена. Теперь пора войти в нее, изменив корневой каталог. Таким образом, мы перейдем из текущей установочной среды (с компакт-диска или другого установочного носителя) в свою устанавливаемую систему (находящуюся в недавно размеченных разделах).


Изменение выполняется в три этапа:


  1. Сначала мы с помощью chroot изменим корневой каталог с / (находящийся на установочном носителе) на /mnt/gentoo (находящийся на ваших дисковых разделах).

  2. Затем мы создадим новую среду, пользуясь утилитой env-update, которая, собственно, создает переменные среды.

  3. Наконец, мы загрузим эти переменные в память при помощи source.


Листинг 5: Изменение корневого каталога для перехода в новую среду

# chroot /mnt/gentoo /bin/bash

# env-update

>> Regenerating /etc/ld.so.cache...

# source /etc/profile

# export PS1="(chroot) $PS1"





Поздравляем! Теперь вы в своей собственной среде Gentoo Linux. Конечно, на этом она далеко еще не готова, поэтому в руководстве еще осталось несколько разделов :-)


6.b. Настройка Portage


Обновление дерева Portage


Теперь надо обновить дерево Portage до самой последней версии с помощью команды emerge --sync:


Листинг 6: Обновление дерева портежей

# emerge --sync

(если вы пользуетесь медленным терминалом, например, последовательным

терминалом или кадровым буфером, для ускорения процесса можно добавить

параметр --quiet :)

# emerge --sync --quiet



Если компьютер подключен к интернету через межсетевой экран, блокирующий прохождение rsync-пакетов, вы можете воспользоваться командой emerge-webrsync, которая скачивает и устанавливает снимок дерева.

Если выдано предупреждение, что имеется новая версия Portage и ее нужно обновить, выполните обновление командой emerge portage.


Выбор нужного профиля


Сначала дадим небольшое определение.


Профиль конструктивный элемент любой системы Gentoo. В нем указываются не только значения по умолчанию для CHOST, CFLAGS и других важных переменных, он также привязывает систему к определенному диапазону допустимых версий пакетов. Диапазоны поддерживаются разработчиками Gentoo.


Раньше пользователь редко касался профиля. Однако, пользователи х86, hppa и alpha могут выбирать из двух вариантов профиля: одного для ядра 2.4, другого для ядра 2.6. Это вызвано необходимостью улучшения интеграции ядер 2.6. Для архитектур ppc и ppc64 также существует несколько профилей. Мы поговорим о них позже.


Узнать, какой профиль используется в системе в данный момент, вы можете командой:


Листинг 7: Выяснение используемого профиля

# ls -FGg /etc/make.profile

lrwxrwxrwx 1 48 Apr 8 18:51 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2007.0/


Если вы используете одну из трех упомянутых архитектур, профиль по умолчанию даст вам систему с ядром 2.6. Это рекомендуется по умолчанию, но за вами сохраняется и право выбора другого профиля.


Для некоторых архитектур также предусмотрены подпрофили desktop и server. Загляните в профиль 2007.0/, чтобы узнать, есть ли подпрофили для вашей архитектуры. Возможно, вы захотите заглянуть в make.defaults профиля desktop, чтобы определить, подходит ли он вам.


Некоторым пользователям, возможно, захочется установить систему, основанную на старом профиле, с ядром 2.4. Если для этого есть веские основания, сначала надо проверить, существует ли такой дополнительный профиль. На системах x86 это можно сделать следующей командой:


Листинг 8: Выяснение наличия дополнительного профиля

# ls -d /usr/portage/profiles/default-linux/x86/no-nptl/2.4

/usr/portage/profiles/default-linux/x86/no-nptl/2.4



В приведенном примере дополнительный профиль 2.4 существует (т.е. нет сообщений об отсутствующем файле или каталоге). Рекомендуется использовать профиль по умолчанию, но если вы все же хотите сменить его, это можно сделать так:


Листинг 9: Переключение профиля на 2.4

(убедитесь, что используете нужную архитектуру; этот пример - для x86)

# ln -snf /usr/portage/profiles/default-linux/x86/no-nptl/2.4 /etc/make.profile

(вывод списка файлов в профиле 2.4)

# ls -FGg /etc/make.profile/

total 12

-rw-r--r-- 1 939 Dec 10 14:06 packages

-rw-r--r-- 1 347 Dec 3 2004 parent

-rw-r--r-- 1 573 Dec 3 2004 virtuals



Для архитектуры ppc в выпуске 2006.1 появилось несколько новых профилей:


Листинг 10: Профили для PPC

(базовый профиль PPC, подходит для всех PPC-машин, минимальный)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.1 /etc/make.profile

(профиль для G3)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.1/G3 /etc/make.profile

(профиль для G3 Pegasos)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.1/G3/Pegasos/ /etc/make.profile

(профиль для G4 (Altivec))

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.1/G4 /etc/make.profile

(профиль для G4 (Altivec) Pegasos)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.1/G4/Pegasos/ /etc/make.profile



Для архитектуры ppc64 в выпуске 2006.1 также появилось несколько новых профилей:


Листинг 11: Профили для PPC64

(базовый профиль PPC64 с 64-битным режимом пользователя, для всех PPC64-машин)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/64bit-userland /etc/make.profile

(базовый профиль PPC64 с 32-битным режимом пользователя, для всех PPC64-машин)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/32bit-userland /etc/make.profile

(для каждого режима пользователя существуют подпрофили, как показано ниже.)

(«userland» необходимо заменять на нужный вариант режима из примеров выше)

(профиль 970 для JS20)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/(userland)/970 /etc/make.profile

(профиль для G5)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/(userland)/970/pmac /etc/make.profile

(профиль для POWER3)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/(userland)/power3 /etc/make.profile

(профиль для POWER4)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/(userland)/power4 /etc/make.profile

(профиль для POWER5)

# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.1/(userland)/power5 /etc/make.profile

(многорежимные профили на дату выхода этого выпуска нестабильны)



Настройка переменной USE


USE («использовать») одна из самых мощных переменных, имеющихся в распоряжении пользователей Gentoo. Она позволяет при компиляции программ включать или отключать поддержку определенных необязательных функций. Например, некоторые программы можно компилировать с поддержкой gtk или qt на выбор. Другие можно собирать, включая или отключая поддержку SSL. Некоторые программы можно даже компилировать с поддержкой кадрового буфера (svgalib) вместо поддержки X11 (X-сервера).


В большинстве дистрибутивов пакеты собраны с поддержкой практически всех мыслимых вариантов. Это увеличивает размер программ и время запуска, не говоря уже о чрезмерных зависимостях. В Gentoo вы сами можете определять, с какими возможностями следует компилировать пакет. Здесь играет роль переменная USE.


В переменной USE указываются ключевые слова, которые отражаются на параметрах компиляции. Например, параметр ssl включает компиляцию с поддержкой ssl всех программ, которые способны его поддерживать. -X отключает поддержку X-сервера (обратите внимание на предшествующий знак «минус»). Параметры gnome gtk -kde -qt обеспечивают компиляцию ваших программ с поддержкой Gnome и gtk, но без поддержки KDE и qt, делая систему оптимальной для GNOME.


Настройки USE по умолчанию хранятся в файлах make.defaults вашего профиля. Файлы make.defaults находятся в каталоге, на который указывает /etc/make.profile, а также во всех родительких каталогах. Значение USE по умолчанию это сумма всех значений USE во всех файлах make.defaults. Все, что вы вносите в /etc/make.conf, рассчитывается относительно этих значений. Когда вы добавляете что-либо к значению USE, оно добавляется в список по умолчанию. Когда удаляете что-либо (указывая ключевое слово с предшествующим знаком минус), оно удаляется из списка по умолчанию (если оно там вообще было). Никогда ничего не меняйте в /etc/make.profile. Все, что там находится, перезаписывается при обновлении Portage!


Полное описание переменной USE находится во второй части настольной книги Gentoo в главе USE-флаги. Полное описание возможных значений признаков использования находится в вашей системе в файле /usr/portage/profiles/use.desc.


Листинг 12: Просмотр допустимых USE-флагов

# less /usr/portage/profiles/use.desc

(для прокрутки пользуйтесь клавишами стрелок, для выхода нажимайте "q")



Например, приведем значение USE для системы, базирующейся на KDE, с включением поддержки DVD, ALSA и записи CD:


Листинг 13: Открытие файла /etc/make.conf

# nano -w /etc/make.conf


Листинг 14: Значение USE

USE="-gtk -gnome qt kde dvd alsa cdr"



Дополнительно: региональные параметры GLIBC


Скорее всего, вы будете использовать в системе один-два набора региональных параметров. Нужные регионы можно указать в /etc/locale.gen.


Листинг 15: Открытие /etc/locale.gen

# nano -w /etc/locale.gen



Вот пример одновременного подключения как английского (США), так и немецкого (Германия) с соответствующими кодировками (например, UTF-8).


Листинг 16: Укажите свои региональные настройки

en_US/ISO-8859-1

en_US.UTF-8/UTF-8

de_DE/ISO-8859-1

de_DE@euro/ISO-8859-15



Следующий шаг запустить locale-gen. Это сгенерирует настройки для всех регионов, указанных вами в файле /etc/locale.gen.

Примечание: locale-gen имеется в glibc-2.3.6-r4 и более новой. Если у вас старшая версия glibc, сейчас ее следует обновить.


Примечание: Настройки, подобной приведенной, для поддержки русского языка недостаточно. За дополнительными сведениями обращайтесь к отдельным руководствам по русификации Gentoo. прим. пер.



Теперь приступим к настройке ядра.

7. Настройка ядра


7.a. Часовой пояс


Сначала необходимо выбрать часовой пояс (time zone), чтобы система знала, где вы находитесь. Найдите подходящий пояс в /usr/share/zoneinfo, затем скопируйте его в /etc/localtime. Постарайтесь, пожалуйста, избегать использования часовых поясов /usr/share/zoneinfo/Etc/GMT*, т. к. их названия не соответствуют ожидаемым поясам. Например, GMT-8 фактически является поясом GMT+8.


Листинг 1: Установка часового пояса

# ls /usr/share/zoneinfo

(допустим, вы хотите использовать GMT)

# cp /usr/share/zoneinfo/GMT /etc/localtime


Примечание (JohnBat26): Если возникают проблемы со временем (особенно с часовыми поясами), то выполните следующее (получено с форума):


  1. Выстави правильное время.

  2. Удали файл /etc/adjtime. Все, часы идут при перезагрузке нормально.

  3. nano -w /etc/conf.d/clock. Ставь там вместо UTC Local,и все!!!


7.b. Установка исходных кодов ядра


Выбор ядра


Ядро Linux это то, вокруг чего формируются все дистрибутивы. Это слой между пользовательскими программами и вашим оборудованием. Пользователи Gentoo могут выбирать из нескольких типов ядра. Их полный список и описание находится в руководстве по выбору ядра Gentoo (англ.).


Для x86 систем, помимо прочего, есть такие ядра, как


С помощью команды emerge выберите и установите ядро. USE="-doc" требуется, чтобы на этом этапе избежать установки xorg-x11 или других связанных пакетов. USE="symlink" при новой установке не требуется, но обеспечивает правильное создание символьной ссылки /usr/src/linux:


Листинг 2: Установка исходных кодов ядра

# USE="-doc symlink" emerge gentoo-sources



Просмотрев содержимое каталога /usr/src, вы увидите символьную ссылку linux, которая указывает на каталог с исходными кодами ядра. В данном случае, установленный исходный код ядра указывает на gentoo-sources-2.6.12-r10. Имейте в виду, что ваша версия может отличаться.


Листинг 3: Просмотр папки с исходными кодами ядра

# ls -l /usr/src/linux

lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.6.12-gentoo-r10



Теперь настало время настройки и компиляции ядра. Можно использовать сценарий genkernel, который сформирует стандартное ядро, аналогичное используемому на установочном компакт-диске. Однако сначала мы расскажем о «ручной» настройке ядра, так как это лучший из способов оптимизации системы.


Если вы собираетесь настроить ядро вручную, то переходите к разделу по умолчанию: ручная настройка. Если вы хотите использовать genkernel, то читайте альтернатива: использование genkernel.


7.c. По умолчанию: ручная настройка



Введение


Ручная настройка ядра считается одним из самых сложных вопросов для пользователей Linux. Зато после настройки нескольких вариантов ядра вы и не вспомните, что это когда-то было трудно ;)

Однако есть одна непреложная истина: запуская ручную настройку ядра, следует знать состав аппаратуры своего компьютера. Большую часть информации можно собрать, установив пакет pciutils (emerge pciutils), в который входит lspci. lspci можно использовать, находясь в среде с временным корневым каталогом. Можно не обращать внимания на предупреждения, касающиеся pcilib (например: pcilib: cannot open /sys/bus/pci/devices [pcilib: не могу открыть /sys/bus/pci/devices]), которые выводит на экран lspci. Можно запустить lspci и вне временной среды установки. Результат тот же. Вы также можете запустить lsmod для просмотра модулей ядра, используемых установочным компакт-диском (это даст хорошую подсказку, какие параметры включать).


Теперь войдите в каталог с исходными кодами ядра и введите команду make menuconfig. Этой командой вы вызовете меню настройки, использующее ncurses.


Листинг 4: Вызов меню настройки

# cd /usr/src/linux

# make menuconfig



Перед вами появятся несколько разделов настройки. Сначала перечислим пункты, включение которых обязательно (иначе Gentoo не заработает, или для его работы потребуются дополнительные ухищрения).


Включение нужных пунктов


Прежде всего, разрешите использование разрабатываемого и экспериментального кода и драйверов. Без этого не появятся некоторые важные пункты:


Листинг 5: Выбор экспериментальных кодов/драйверов, основные параметры

Code maturity level options --->

[*] Prompt for development and/or incomplete code/drivers"

General setup --->

[*] Support for hot-pluggable devices



Удостоверьтесь, что каждый драйвер, жизненно необходимый для загрузки системы (например, SCSI-контроллера), собран внутри ядра, а не как модуль, иначе система совсем не сможет загрузиться.


Далее выберите нужное семейство процессоров:


Листинг 6: Выбор подходящего семейства процессоров

Processor type and features --->

(измените в соответствии со своей системой)

(Athlon/Duron/K7) Processor family



Теперь войдите в File Systems и выберите поддержку всех нужных файловых систем. Не компилируйте их как модули, иначе система Gentoo не сможет смонтировать дисковые разделы. Также выберите Virtual memory и /proc file system. При использовании ядра 2.4, вам потребуется включить /dev file system, т.к. это ядро не поддерживает udev.


Листинг 7: Выбор необходимых файловых систем

(при использовани ядра 2.4.x)

File systems --->

[*] Virtual memory file system support (former shm fs)

[*] /proc file system support

[*] /dev file system support (EXPERIMENTAL)

[*] automatically mount /dev at boot

[ ] /dev/pts file system for Unix98 PTYs


(при использовании ядра 2.6.x)

File systems --->

Pseudo Filesystems --->

[*] /proc file system support

[*] Virtual memory file system support (former shm fs)


(включите поддержку всех нужных вам файловых систем)

<*> Reiserfs support

<*> Ext3 journalling file system support

<*> JFS filesystem support

<*> Second extended fs support

<*> XFS filesystem support



Если ваш BIOS не поддерживает жесткие диски большого размера, и вы ограничили перемычками сообщаемый диском объем, то для получения доступа ко всему диску нужно включить следующие параметры ядра:


Листинг 8: Включение поддержки автокоррекции геометрии

(только в ядре 2.4.x)

ATA/IDE/MFM/RLL support --->

IDE, ATA and ATAPI Block devices --->

<*> Include IDE/ATA-2 DISK support

[ ] Use multi-mode by default

[*] Auto-Geometry Resizing support



Не забудьте включить поддержку режима DMA для ваших дисков:


Листинг 9: Включение DMA

Device Drivers --->

ATA/ATAPI/MFM/RLL support --->

[*] Generic PCI bus-master DMA support

[*] Use PCI DMA by default when available



Если вы используете PPPoE или коммутируемого соединения для соединения с интернетом, потребуется включить в ядре следующие функции:


Листинг 10: Выбор нужных драйверов PPPoE

(при использовании ядра 2.4.х)

Network device support --->

<*> PPP (point-to-point protocol) support

<*> PPP support for async serial ports

<*> PPP support for sync tty ports

(при использовании ядра 2.6.x)

Device Drivers --->

Networking support --->

<*> PPP (point-to-point protocol) support

<*> PPP support for async serial ports

<*> PPP support for sync tty ports



Два параметра сжатия данных не являются обязательными, но и не повредят. То же относится и к параметру PPP over Ethernet который нужен только для rp-pppoe, для поддержки PPPoE в режиме ядра.


При необходимости, не забудьте включить в ядре поддержку своей сетевой платы.


Если у вас процессор Intel с поддержкой HyperTreading или многопроцессорная система, следует включить «симметричную многопроцессорную обработку»:


Листинг 11: Включение поддержки SMP

Processor type and features --->

[*] Symmetric multi-processing support



Если вы пользуетесь устройствами ввода на шине USB, (например, мышью или клавиатурой), не забудьте включить их поддержку:


Листинг 12: Включение поддержки USB для устройств ввода

USB Support --->

<*> USB Human Interface Device (full HID) support



Владельцам ноутбуков, которым нужна поддержка PCMCIA, не нужно включать драйверы PCMCIA в ядре, выбрав ядро версии 2.4. В пакете pcmcia-cs, который будет устанавливаться позже, есть более свежие драйверы. Пользователям ядра 2.6 следует использовать драйверы PCMCIA, включенные в ядро.


Наряду с включением поддержки PCMCIA в ядре 2.6, не забудьте включить поддержку моста PCMCIA своей системы:


Листинг 13: Включение поддержки PCMCIA для ядра 2.6

Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->

PCCARD (PCMCIA/CardBus) support --->

<*> PCCard (PCMCIA/CardBus) support

(если нужно (обычно нужно), включите поддержку старых 16-битных карт PCMCIA)

<*> 16-bit PCMCIA support

[*] 32-bit CardBus support

(выберите наиболее подходящий мост)

--- PC-card bridges

<*> CardBus yenta-compatible bridge support (NEW)

<*> Cirrus PD6729 compatible bridge support (NEW)

<*> i82092 compatible bridge support (NEW)

<*> i82365 compatible bridge support (NEW)

<*> Databook TCIC host bridge support (NEW)



Закончив настройку ядра, приступайте к компиляции и установке.


Компиляция и установка


Теперь, когда ядро настроено, настало время его скомпилировать и установить. Выйдите из настройки и запустите процесс компиляции:


Листинг 14: Компиляция ядра

(для ядра 2.4)

# make dep && make bzImage modules modules_install


(для ядра 2.6)

# make && make modules_install





По завершении компиляции, скопируйте образ ядра в каталог /boot. Используйте любое имя, которое вам покажется подходящим для избранного ядра, и запомните его, так как позже при настройке начального загрузчика оно потребуется. Не забудьте заменить <версия-ядра> на имя и версию своего ядра.


Листинг 15: Установка ядра

# cp arch/i386/boot/bzImage /boot/<версия-ядра>



Теперь переходите к модулям ядра.


7.d. Альтернатива: использование genkernel


Если вы читаете эти строки, значит, вы собираетесь использовать наш сценарий genkernel для настройки ядра за вас.


Теперь когда исходные коды ядра установлены, настало время скомпилировать ядро, собрав его автоматически при помощи сценария genkernel. genkernel выполняет настройку ядра практически так же, как настраивается ядро на установочном компакт-диске. То есть система, ядро которой собрано genkernel, как правило, будет выполнять определение всех устройств при загрузке. Поскольку genkernel не требует никакой ручной настройки ядра, это идеальное решение для тех, кому неуютно от одной мысли, что придется компилировать ядро.


Рассмотрим, как использовать genkernel. Сначала установите его:


Листинг 16: Установка genkernel

# emerge genkernel



Теперь, если вы собираетесь использовать ядро ветви 2.6, скопируйте настройку ядра, используемую установочным диском, в каталог, где genkernel ищет настройку по умолчанию:


Листинг 17: Копирование файла настройки ядра с установочного диска

(только если вы собираетесь настраивать ядро 2.6.х)

# zcat /proc/config.gz > /usr/share/genkernel/x86/kernel-config-2.6



Теперь скомпилируйте исходный код ядра, запустив genkernel all. Имейте в виду, что компиляция займет приличное время, поскольку genkernel собирает ядро, поддерживающее практически любое оборудование.


Если в загрузочном разделе не используется файловая система ext2 или ext3, то вам придется вручную настроить ядро, запустив genkernel --menuconfig all, добавив поддержку используемой файловой системы в ядро (т.е. не модулем). Пользователям EVMS2 или LVM2, вероятно, захочется также добавить параметр командной строки --evms2 или --lvm2.


Листинг 18: Запуск genkernel

# genkernel all




В итоге работы genkernel будет создано ядро, полный набор модулей и начальный корневой диск (initrd). Ядро и initrd будут использоваться в процессе настройки загрузчика системы, которая описана далее в руководстве. Запишите имена ядра и начального корневого диска, так как они понадобятся при составлении конфигурационного файла загрузчика. initrd запускается сразу при начальной загрузке, выполняя автоматическое определение устройств (точно так же, как при запуске установочного диска), до запуска «настоящей» системы.


Листинг 19: Уточнение названия созданного образа ядра и initrd

# ls /boot/kernel* /boot/initramfs*



Теперь давайте еще на шаг приблизим нашу систему к установочному диску: соберем coldplug. Если initrd определяет оборудование, необходимое для загрузки системы, coldplug выполняет автоопределение всех остальных устройств. Для установки и подключения coldplug введите команду:


Листинг 20: Установка и подключение coldplug

# emerge coldplug

# rc-update add coldplug boot



7.e. Модули ядра


Настройка модулей


Модули, которые требуется загружать автоматически, нужно указать в /etc/modules.autoload.d/kernel-2.4 (или kernel-2.6). Также, при желании, модулям можно сообщить дополнительные параметры.


Для просмотра всех доступных модулей запустите команду find, заменив «<версия ядра>» на версию только что собранного ядра:


Листинг 21: Просмотр перечня доступных модулей

# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'



Например, для автоматической загрузки модуля 3c59x.o измените файл kernel-2.4 или kernel-2.6, указав в нем имя модуля.


Листинг 22: Изменение /etc/modules.autoload.d/kernel-2.4

(показан пример для ядра 2.4.x)

# nano -w /etc/modules.autoload.d/kernel-2.4



Листинг 23: /etc/modules.autoload.d/kernel-2.4 или kernel-2.6

3c59x



Теперь переходите к настройке параметров системы.




8. Настройка параметров системы


8.a. Параметры файловых систем


Что такое fstab?


В Linux все разделы, используемые системой, должны быть перечислены в /etc/fstab. В этом файле указываются точки подключения разделов (mountpoints, местоположение разделов в файловой системе), порядок подключения, а также дополнительные параметры (автоматический или ручной режим подключения, достаточность прав пользователя для подключения и т.п.)


Создание /etc/fstab


В /etc/fstab используется специальный формат. Каждая строка состоит из шести полей, разделяемых пробелами, знаками табуляции или их сочетанием. Каждое поле имеет свое назначение:

  1. Первое поле обозначает раздел (partition) (путь к файлу устройства).

  2. Второе поле указывает точку подключения (mountpoint), в которую монтируется раздел.

  3. Третье поле задает тип файловой системы (filesystem), используемой в разделе.

  4. В четвертом поле указываются параметры подключения (mountoptions), используемые mount при подключении раздела. Поскольку для каждой файловой системы существуют свои параметры, рекомендуется прочитать страницу справки по mount (man mount), где приведен их полный перечень. При указании нескольких параметров подключения их следует разделять запятыми.

  5. Пятое поле используется dump для определения, требуется ли резервное копирование раздела средствами dump. Обычно это поле можно просто установить в 0 (ноль).

  6. Шестое поле используется fsck для определения порядка проверки (check) файловых систем после некорректного завершения работы системы. Для корневой файловой системы рекомендуется значение 1, а для остальных 2 (или 0, когда проверка файловой системы не требуется).


Важно: Вариант файла /etc/fstab по умолчанию, входящий в Gentoo, не является работоспособным. Вам потребуется создать свой собственный /etc/fstab.



Листинг 1: Открытие /etc/fstab

# nano -w /etc/fstab



Укажите правила, соответствующие вашей схеме разбивки, и добавьте правила для /proc, для tmpfs, для своих дисководов CD-ROM (если есть другие разделы или устройства, их тоже можно указать).




Теперь на основе приведенного примера создайте собственный файл /etc/fstab:


Параметр auto позволяет mount определять тип файловой системы автоматически (рекомендуется для съемных носителей, которые могут оказаться размечены в одной из множества существующих файловых систем), а user позволяет монтировать компакт-диски обычным пользователям.


Чтобы повысить быстродействие, большинству пользователей стоит добавить параметр noatime в параметры подключения, что приведет к ускорению за счет отключения регистрации отметки времени доступа к файлам (обычно в ней все равно нет необходимости):


Перепроверьте свой файл /etc/fstab, сохраните его, и выйдите из редактора, чтобы продолжить настройку.


Примечание (JohnBat26): пример моего /etc/fstab:


Листинг 2: Пример /etc/fstab


/dev/sda2 /boot ext2 defaults,noatime 1 2

/dev/sda5 / xfs defaults,noatime 0 1

/dev/sda3 none swap sw 0 0

/dev/sda7 /home xfs defaults,noatime 0 1

/dev/sr0 /mnt/cdrom auto noauto,ro,user,iocharset=utf8 0 0

# раздел с FAT32

/dev/sda1 /windows/c vfat auto,iocharset=utf8,quiet,user,umask=000,noatime 0 0

# раздел NTFS только для чтения

/dev/sda6 /windows/d ntfs auto,nls=utf8,umask=0,user,noatime 0 0

/dev/sda8 /windows/e vfat auto,iocharset=utf8,user,quiet,umask=000,noatime 0 0

/dev/sda9 /home/media xfs defaults,noatime 0 1

# раздел NTFS для чтения и записи при помощи ntfs-3g

/dev/sda10 /mnt/windows/f ntfs-3g -o silent,umask=0,locale=ru_RU.utf8

# NOTE: The next line is critical for boot!

proc /proc proc defaults 0 0

# flash drive

/dev/sdb /mnt/flash auto user,noauto,rw,async,iocharset=utf8 0 0

shm /dev/shm tmpfs nodev,nosuid,noexec 0 0

8.b. Параметры сети


Hostname, Domainname и т. д.


Еще один вопрос, который нужно решить пользователю как назвать свой компьютер. Он кажется довольно простым, но многие затрудняются дать подходящее имя для своей Linux-системы. Чтобы вам стало легче, запомните, что какое бы имя вы не выбрали, потом его всегда можно изменить. Например, вы могли бы просто назвать свою систему tux, а домен homenetwork.


Листинг 2: Установка имени узла

# nano -w /etc/conf.d/hostname


(присвойте переменной HOSTNAME имя своего узла)

HOSTNAME="tux"



Во-вторых, установим имя домена (domainname) в /etc/conf.d/net:


Листинг 3: Установка имени домена

# nano -w /etc/conf.d/net

(присвойте переменной DNSDOMAIN имя своего домена)

dns_domain_lo="homenetwork"



Если у вас есть домен NIS (а если вы не знаете, что это такое, то у вас его точно нет), его также необходимо указать:


Листинг 4: Установка имени NIS-домена

# nano -w /etc/conf.d/net


(укажите название своего домена NIS переменной nis_domain)

nis_domain_lo="my-nisdomain"



Настройка сети


Прежде, чем возмутиться: «Эй, мы же все это уже делали!» вспомните, что подключение к сети, настроенное вначале, было предназначено лишь для установки Gentoo. Теперь же вы настраиваете сеть для постоянного использования.

Примечание: Более подробные сведения о сетях, включая дополнительные темы, такие как объединение, образование мостов, настройка виртуальных сетей (VLAN) 802.1Q или беспроводных сетей, представлены в разделе настройка сети в Gentoo.


Все настройки сети собраны в файле /etc/conf.d/net. В нем используется простой формат, хотя, если вы не знакомы с ручной настройкой сети, он не слишком очевиден. Но не бойтесь, мы все объясним. В файле /etc/conf.d/net.example приведен подробно прокомментированный пример, охватывающий много различных конфигураций.


По умолчанию используется DHCP. Чтобы DHCP заработал, требуется установить DHCP-клиент, как описано далее в разделе Установка нужных системных средств. Не забудьте установить DHCP-клиент.


Если настройка сетевого подключения нужна вам для указания специфических параметров DHCP, или из-за того, что вы вообще не используете DHCP, откройте /etc/conf.d/net в своем любимом редакторе (в этом примере использован nano):


Листинг 5: Открытие /etc/conf.d/net для изменения

# nano -w /etc/conf.d/net



Вы увидите следующее:


Листинг 6: /etc/conf.d/net по умолчанию

# This blank configuration will automatically use DHCP for any net.*

# scripts in /etc/init.d. To create a more complete configuration,

# please review /etc/conf.d/net.example and save your configuration

# in /etc/conf.d/net (this file :]!).


(# Этот пустой файл настройки приводит к автоматическому использованию

# DHCP всеми сценариями net.* из /etc/init.d. Для создания более полной

# настройки, пожалуйста, просмотрите /etc/conf.d/net.example, а свою

# настройку сохраните в /etc/conf.d/net (в этом файле :]!). )



Чтобы указать свой собственный адрес IP, маску сети и шлюз, потребуется настроить как config_eth0, так и routes_eth0:


Листинг 7: Ручная настройка параметров IP для eth0

config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )

routes_eth0=( "default gw 192.168.0.1" )



Чтобы при использовании DHCP указать специфические параметры, определите config_eth0 и dhcp_eth0:


Листинг 8: Автоматическое получение адреса IP для eth0

config_eth0=( "dhcp" )

dhcp_eth0="nodns nontp nonis"



Список допустимых параметров дан в файле /etc/conf.d/net.example.


Если у вас несколько сетевых интерфейсов, повторите эти шаги для config_eth1, config_eth2 и т.д.


Теперь сохраните параметры и выйдите из редактора, чтобы продолжить настройку.


Автоматический запуск сетевого подключения при загрузке


Для запуска сетевых интерфейсов при загрузке необходимо добавить их в уровень запуска по умолчанию. Если у вас интерфейсы типа PCMCIA, пропустите этот шаг, поскольку интерфейсы PCMCIA запускаются сценарием инициализации PCMCIA.


Листинг 9: Добавление net.eth0 в уровень запуска default

# rc-update add net.eth0 default



Если у вас несколько сетевых интерфейсов, потребуется создать для них соответствующие сценарии инициализации net.eth1, net.eth2 и т.д. Для этого можно использовать ln:


Листинг 10: Создание дополнительных сценариев инициализации

# cd /etc/init.d

# ln -s net.lo net.eth1

# rc-update add net.eth1 default



Указание сетевых узлов


Теперь расскажем системе Linux о вашей сети. Эти сведения указываются в /etc/hosts, и помогают разрешению имен в IP-адреса для узлов, не обрабатываемых сервером имен. Требуется определить вашу систему. Также можно определить другие системы в сети, если вы не собираетесь устанавливать собственную систему DNS.


Листинг 11: Открытие /etc/hosts

# nano -w /etc/hosts




Листинг 12: Указание сведений об узлах сети

(определение текущей системы)

127.0.0.1 tux.homenetwork tux localhost


(определите другие машины в своей сети,

для этого у них должен быть статический IP-адрес.)


192.168.0.5 jenny.homenetwork jenny

192.168.0.6 benny.homenetwork benny



Чтобы продолжить настройку, сохраните файл и выйдите из редактора.


8.c. Параметры системы


Пароль root


Прежде всего, нужно установить пароль root (администратора), набрав:


Листинг 13: Установка пароля root

# passwd



Если вы хотите, чтобы root мог входить в систему через последовательный терминал, добавьте tts/0 в /etc/securetty:


Листинг 14: Добавление tts/0 to /etc/securetty

# echo "tts/0" >> /etc/securetty



Параметры системы


Для общей настройки системы в Gentoo используется /etc/rc.conf. Откройте /etc/rc.conf и с удовольствием прочитайте все комментарии, находящиеся в этом файле :)


Листинг 15: Открытие /etc/rc.conf

# nano -w /etc/rc.conf



Завершив изменение /etc/rc.conf сохраните файл и выйдите из редактора.


Как видите, этот файл подробно прокомментирован, что поможет вам в настройке необходимых конфигурационных переменных. Можно настроить систему на использование unicode, а также указать редактор по умолчанию и диспетчер отображения (например, gdm или kdm).


Для управления раскладками клавиатуры в Gentoo используется /etc/conf.d/keymaps. Для настройки своей клавиатуры измените его.


Листинг 16: Открытие /etc/conf.d/keymaps

# nano -w /etc/conf.d/keymaps



Будьте особенно тщательны при установке переменной раскладки клавиатуры (KEYMAP): выбрав неверную раскладку, вы можете получить непредсказуемый результат при попытке ввода с клавиатуры.


По завершении изменения /etc/conf.d/keymaps сохраните файл и выйдите из редактора.


Для настройки параметров часов в Gentoo используется /etc/conf.d/clock. Изменяйте его в соответствии со своими потребностями.


Если аппаратные часы вашей системы настроены не на часовой пояс UTC (Гринвич), в файл необходимо добавить строку CLOCK="local". В противном случае вы заметите сдвиг часового пояса.


После завершения настройки /etc/conf.d/clock сохраните файл и выйдите из редактора.


Переходите к установке нужных системных средств.

9. Установка нужных системных средств


9.a. Диспетчер устройств


Если вы используете ядро 2.4, и при этом устанавливаете Gentoo из файла третьей стадии (stage3), вам необходимо еще кое-что сделать. Так как теперь в Gentoo по умолчанию используется udev, а ядром 2.4 udev не поддерживается, вам потребуется установить devfsd, и убрать udev.


Листинг 1: Установка devfsd

(для тех, кто использует ядро 2.4.x при установке c третьей стадии)

# emerge --unmerge udev

# emerge devfsd



9.b. Системные службы журналирования



Некоторые средства не включены в архив stage3, поскольку одинаковые возможности можно обеспечить различными пакетами. Теперь вы сами выберете, какие именно установить.


Первый инструмент, который вам необходимо выбрать, должен дать системе возможность журналирования. У Unix и Linux превосходная история развития журналирования при желании в файлах журналов можно регистрировать любой чих, происходящий в вашей системе. Это обеспечивается системной службой журналирования.


В Gentoo предлагается несколько служб журналирования на выбор. Это sysklogd, традиционный набор журналирующих демонов, syslog-ng, расширенная служба журналирования, и metalog служба журналирования с очень гибкими возможностями настройки. Возможно, в Portage имеются и другие службы журналирования: количество доступных пакетов растет день ото дня.


Если вы планируете использовать sysklogd или syslog-ng, позднее может потребоваться установка logrotate, поскольку в этих службах журналирования не предусмотрен никакой механизм ротации системных журналов.


Чтобы установить выбранную службу журналирования, воспользуйтесь emerge, а затем добавьте ее в уровень запуска по умолчанию с помощью rc-update. В следующем примере показана установка syslog-ng. Вместо нее вы можете подставить другую службу журналирования:


Листинг 2: Установка системной службы журналирования

# emerge syslog-ng

# rc-update add syslog-ng default



9.c. Дополнительно: демон cron


Следующий демон cron. Хотя он является дополнительным, и не обязателен для работы вашей системы, будет благоразумным установить его. Но что же такое демон cron? Демон cron выполняет команды по расписанию. Это очень удобно, когда нужно выполнять какие-либо команды регулярно (например, ежедневно, еженедельно или ежемесячно).


В Gentoo предлагаются три варианта демона cron на выбор: dcron, fcron и vixie-cron. Установка любого из них подобна установке системной службы журналирования. Однако, при установке dcron или fcron для настройки требуется выполнение дополнительной команды, а именно crontab /etc/crontab. Если вы не знаете, что выбрать, используйте vixie-cron.


При бессетевой установке доступен только vixie-cron. Если вам нужен другой демон cron, его можно установить позже.


Листинг 3: Установка демона cron

# emerge vixie-cron

# rc-update add vixie-cron default

(только если выбран dcron или fcron) # crontab /etc/crontab



9.d. Дополнительно: индексация файлов


Если вы хотите индексировать файлы в своей системе, чтобы быстро находить их с помощью locate, нужно установить sys-apps/slocate:


Листинг 4: Установка slocate

# emerge slocate



9.e. Утилиты для обслуживания файловых систем


Для проверки целостности файловых систем, создания дополнительных файловых систем, и т.п., вам потребуются определенные утилиты, состав которых зависит от используемых файловых систем.


В следующей таблице перечислены утилиты, которые необходимо устанавливать для обслуживания файловых систем различных типов:


Файловая система Утилиты Команда установки

XFS xfsprogs emerge xfsprogs

ReiserFS reiserfsprogs emerge reiserfsprogs

JFS jfsutils emerge jfsutils



Если вы используете EVMS, также необходимо установить evms:


Листинг 5: Установка утилит EVMS

# USE="-gtk" emerge evms



USE="-gtk" предотвратит установку пакетов, от которых зависит данный. При желании включить графические средства evms, потом можно перекомпилировать evms.


Если вам не нужны никакие дополнительные сетевые средства (типа rp-pppoe или клиента dhcp), переходите к настройке начального загрузчика.


9.f. Сетевые средства


Дополнительно: установка клиента DHCP


Если требуется, чтобы Gentoo автоматически получала IP-адрес для ваших сетевых интерфейсов, необходимо установить dhcpcd (или любой другой клиент DHCP, список имеющихся клиентов DHCP см. в главе Модульное построение сети). Если не сделать этого сейчас, то после завершения установки вы не сможете подключиться к интернету!


Листинг 6: Установка dhcpcd

# emerge dhcpcd



Дополнительно: установка клиента PPPoE


Если для выхода в сеть требуется rp-pppoe, его нужно установить.


Листинг 7: Установка rp-pppoe

# USE="-X" emerge rp-pppoe



USE="-X" запрещает установку xorg-x11 в порядке зависимости (в rp-pppoe есть графические средства; если их нужно подключить, можно перекомпилировать rp-pppoe позже, или же установить xorg-x11 сейчас: при его установке потребуется много времени на компиляцию).


Дополнительно: утилиты RAID для оборудования IBM


Если в составе системы на базе POWER5 вы используете RAID-массивы SCSI, стоит задуматься об установке iprutils, которые, среди прочего, позволяют работать с дисковыми массивами, выяснять состояние дисков в составе массива и обновлять микрокод.


Листинг 8: Установка iprutils

# emerge iprutils



Теперь переходите к настройке начального загрузчика.

10. Настройка начального загрузчика


10.a. Выбор загрузчика


Введение


Теперь, когда ядро настроено и собрано, а нужные конфигурационные файлы заполнены как надо, пришло время установить программу, которая будет запускать ваше ядро при старте системы. Такого рода программа называется загрузчиком. Для архитектуры x86 в Gentoo Linux есть загрузчики GRUB и LILO. Но прежде, чем приступить к установке одного из двух загрузчиков, мы расскажем, как настроить кадровый буфер (естественно, если вы захотите). С помощью кадрового буфера можно работать в командной строке Linux на фоне графических элементов (например, симпатичного изображения из загрузочной заставки Gentoo).


Дополнительно: кадровый буфер


Если вы настроили в ядре поддержку кадрового буфера (или оставили настройки по умолчанию при использовании genkernel), вы можете включить буфер, добавив параметр vga и/или video в файл конфигурации своего загрузчика.


Для начала, вам надо узнать тип используемого кадрового буфера. При использовании исходных кодов ядра, доработанных для Gentoo (таких как gentoo-sources), у вас есть возможность выбрать vesafb-tng в качестве типа драйвера VESA (в этих исходных кодах ядра он используется по умолчанию). При использовании vesafb-tng параметр vga указывать не нужно. В других случаях используется драйвер vesafb, а параметр vga необходимо указывать.


Параметр vga устанавливает разрешение и глубину цвета, используемые кадровым буфером vesafb. Как отмечено в /usr/src/linux/Documentation/fb/vesafb.txt (который устанавливается в составе пакета с деревом исходных кодов ядра), кадровому буферу необходимо передавать код режима VESA, соответствующий нужному разрешению и цветности.


В следующей таблице приведены коды режимов для указания в параметре vga, а также соответствующие им значения разрешения и цветности.


640x480 800x600 1024x768 1280x1024

256 0x301 0x303 0x305 0x307

32 тыс 0x310 0x313 0x316 0x319

64 тыс 0x311 0x314 0x317 0x31A

16 млн 0x312 0x315 0x318 0x31B



Параметр video отвечает за порядок отображения кадрового буфера. В нем указывается название драйвера кадрового буфера (vesafb для ядра 2.6 или vesa для ядра 2.4), а затем режимы, которые нужно включить. Все режимы приведены в /usr/src/linux/Documentation/fb/vesafb.txt, а здесь мы расскажем о трех самых используемых:


  1. ywrap считать, что видеоплата может закольцовывать свою память (продолжать выборку с начального адреса, когда достигнут конечный);

  2. mtrr:n установка регистров MTRR; допустимые значения n: 0 - отключено 1 - без кэширования 2 - отложенная запись (write-back) 3 - объединенная запись (write-combining) 4 - сквозная запись (write-through);

  3. mode (только для vesafb-tng) Установить разрешение, цветность и частоту кадров. Например, 1024x768-32@85 для разрешения 1024x768, 32-битного цвета и частоты кадров 85 Гц.



В результате должно получиться что-то вроде vga=0x318 video=vesafb:mtrr:3,ywrap или video=vesafb:mtrr:3,ywrap,1024x768-32@85. Запомните (или запишите) составленное значение, скоро оно понадобится.


Перейдем к установке GRUB или LILO.


10.b. По умолчанию: использование GRUB


Введение в терминологию GRUB


Самое сложное в освоении GRUB освоиться с тем, как в нем именуются жесткие диски и разделы. Ваш Linux-раздел /dev/hda1, скорее всего, в GRUB станет называться (hd0,0). Обратите внимание на круглые скобки вокруг hd0,0 они обязательны.


Жесткие диски нумеруются, начиная с нуля, а не с «а»; разделы c нуля, а не с единицы. Нужно помнить, что в виде hd нумеруются только жесткие диски, но не устройства atapi-ide, такие как приводы компакт-дисков. Та же нумерация используется для устройств SCSI (обычно им присваиваются номера большие, чем устройствам IDE, кроме случаев, когда BIOS настроен на загрузку с устройства SCSI). Когда BIOS настроен на загрузку с другого жесткого диска (например, с первичного ведомого), именно этот жесткий диск и становится hd0.


Например, если у вас есть жесткий диск /dev/hda, привод CD-ROM /dev/hdb, записывающий CD /dev/hdc, второй жесткий диск /dev/hdd, а устройств SCSI нет, то разделу /dev/hdd7 будет соответствовать (hd1,6). Возможно, это покажется запутанным (так и есть), но, как мы увидим, в GRUB есть механизм автодополнения по tab, облегчающий жизнь обладателям множества жестких дисков и разделов, а также тем, кто теряется в схеме нумерации устройств GRUB.


Почувствовав, что к чему, пора установить GRUB.


Установка GRUB


Для установки GRUB сначала добавим его в систему:


Листинг 1: Установка GRUB

# emerge grub



Хотя GRUB уже установлен, нам еще потребуется подправить его файл конфигурации, и поместить GRUB в MBR, чтобы он автоматически загружал ядро. С помощью nano (или другого редактора) создайте /boot/grub/grub.conf:


Листинг 2: Создание /boot/grub/grub.conf

# nano -w /boot/grub/grub.conf



Теперь заполним grub.conf своими значениями. Ниже приведены два варианта grub.conf для показанного примера разбиения дисков. Первый вариант grub.conf мы подробно прокомментировали. Удостоверьтесь, что у себя вы указываете имя своего файла образа ядра, и при необходимости имя своего образа начального корневого диска (initrd).

первый вариант grub.conf для тех, кто при сборке ядра обходился без genkernel

второй вариант grub.conf для тех, кто при сборке ядра пользовался genkernel


Примечание: Если ваша корневая файловая система JFS, необходимо добавить «ro» в строку kernel, поскольку JFS «накатывает» свой журнал перед тем, как разрешить монтирование раздела на чтение-запись.



Листинг 3: grub.conf для тех, кто обошелся без genkernel

# какой пункт загружать по умолчанию: 0 - первый, 1 - второй и т.д.

default 0

# сколько секунд ждать до начала загрузки пункта по умолчанию

timeout 30

# симпатичная заставка, добавить по вкусу :)

# закомментируйте, если у вас не установлена графическая видеоплата

splashimage=(hd0,0)/boot/grub/splash.xpm.gz


title=Gentoo Linux 2.6.12-r10

# раздел с файлом образа ядра (или операционной системой)

root (hd0,0)

kernel /boot/kernel-2.6.12-gentoo-r10 root=/dev/hda3


# следующие четыре строки нужны только для двойной загрузки с Windows

# в этом примере Windows находится на /dev/hda6

title=Windows XP

rootnoverify (hd0,5)

makeactive

chainloader +1



Листинг 4: grub.conf для тех, кто пользовался genkernel

default 0

timeout 30

splashimage=(hd0,0)/boot/grub/splash.xpm.gz


title=Gentoo Linux 2.6.12-r10

root (hd0,0)

kernel /boot/kernel-genkernel-x86-2.6.12-gentoo-r10 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev

initrd /boot/initramfs-genkernel-x86-2.6.12-gentoo-r10


# нужно только для двойной загрузки

title=Windows XP

rootnoverify (hd0,5)

makeactive

chainloader +1


Примечание: Параметр udev, указанный в конце строки kernel, необходим для обхода ошибки в некоторых версиях genkernel, если вы вообще используете udev (по умолчанию используется).


Примечание: Если вы разбили жесткий диск по-другому, или у вас другое ядро, внесите необходимые изменения. При этом убедитесь, что все пути, следующие за упоминанием устройства GRUB (например (hd0,0)), приведены относительно точки подключения, а не корня файловой системы. Другими словами, (hd0,0)/grub/splash.xpm.gz на самом деле /boot/grub/splash.xpm.gz, так как (hd0,0) это /boot.



Кроме того, если вы избрали другую схему разбиения диска, и не выделяли для /boot отдельный раздел, префикс /boot, использованный в примерах выше, обязателен. Если же вы следовали рекомендованному нами плану разбиения, префикс /boot не требуется, но все работает благодаря символьной ссылке boot. Короче говоря, приведенные примеры должны работать независимо от того, есть у вас отдельный раздел для /boot или нет.


Если вам надо передать ядру дополнительные параметры, просто добавьте их в конец строки kernel. Один параметр мы уже передаем ядру (root=/dev/hda3 или real_root=/dev/hda3); можно добавлять и другие, например, такие как параметры video и/или vga для кадрового буфера, обсуждавшиеся выше.


Если вы используете ядро 2.6.7 или выше, а объем жесткого диска ограничили перемычками из-за того, что BIOS не в состоянии работать с дисками большого размера, вам потребуется добавить hdx=stroke.


Тем, кто использует genkernel, нужно помнить, что их ядро использует такие же загрузочные параметры, как на установочном компакт-диске. Например, если у вас есть устройства SCSI, следует передать ядру параметр doscsi.


Теперь сохраните grub.conf и выйдите из редактора. Вам по-прежнему необходимо записать GRUB в MBR (Master Boot Record), чтобы GRUB автоматически запускался при загрузке системы.


Разработчики GRUB рекомендуют использовать grub-install. Однако, на случай некорректной работы grub-install есть возможность записать GRUB вручную.


Переходите к разделу по умолчанию: установка GRUB с помощью grub-install или альтернатива: установка GRUB вручную.


По умолчанию: установка GRUB с помощью grub-install


Для установки GRUB вам надо выполнить команду grub-install. Однако, grub-install не заработает сам по себе, т.к. мы находимся в среде с измененным корневым каталогом. Нам нужно создать файл /etc/mtab, перечислив в нем все смонтированные файловые системы. К счастью, для этого есть очень легкий способ: просто скопируйте содержимое /proc/mounts поверх /etc/mtab, исключив строку rootfs, если вы не создавали отдельный загрузочный раздел. Следующая команда подойдет в обоих случаях:


Листинг 5: Создание /etc/mtab

# grep -v rootfs /proc/mounts > /etc/mtab



Теперь мы можем установить GRUB, используя grub-install:


Листинг 6: Выполнение grub-install

# grub-install /dev/hda



Если у вас есть вопросы о GRUB, пожалуйста, обратитесь к GRUB FAQ (англ.) или руководству по GRUB (англ.).


Переходите к перезагрузке системы.


Альтернатива: установка GRUB вручную


Для начала настройки, введите grub. Вы увидите приглашение grub> это командная строка grub. Теперь потребуется набрать команды, нужные для установки загрузочной записи GRUB на ваш жесткий диск.


Листинг 7: Запуск оболочки GRUB

# grub


Примечание: Если у вас нет приводов для дискет, к приведенной команде добавьте --no-floppy, чтобы grub зря не опрашивал несуществующие дисководы.



В приводимом примере мы хотим установить GRUB так, чтобы он считывал нужную информацию с загрузочного раздела /dev/hda1, а загрузочная запись GRUB находилась в MBR (Master Boot Record) жесткого диска, чтобы первое, что мы видели после включения компьютера это приглашение GRUB. Естественно, если вы при установке отклонялись от предлагаемой схемы, внесите необходимые поправки.


Находясь в GRUB, можно использовать автодополнение по клавише TAB. К примеру, если ввести «root (», а затем TAB, появится список устройств (таких как hd0). Если ввести «root (hd0,» и нажать TAB, появится список для выбора раздела из возможных (такого как hd0,0).


Благодаря автодополнению установка GRUB не так сложна. Теперь приступим к настройке GRUB.


Листинг 8: Установка GRUB в MBR

grub> root (hd0,0) (указание расположения раздела с /boot)

grub> setup (hd0) (установка GRUB в MBR)

grub> quit (выход из оболочки GRUB)


Примечание: Если вы хотите установить GRUB в определенный раздел вместо MBR, команду setup потребуется исправить так, чтобы она указывала на нужный раздел. Например, команда для установки GRUB в /dev/hda3 setup (hd0,2). Однако, так поступают немногие.



С дополнительными вопросами о GRUB, пожалуйста, обращайтесь к GRUB FAQ (англ.) или руководству по GRUB (англ.).


Примечание: В случае переустановки ядра в будущем, вам больше не потребуется копировать содержимое файлов. После компиляции ядра просто запускайте make install: копирование файлов и изменение конфигурации GRUB произойдет автоматически.



Переходите к перезагрузке системы.


10.c. Альтернатива: использование LILO


Установка LILO


LILO (сокращение от LInux LOader) это проверенная временем рабочая лошадка среди загрузчиков Linux-систем. Но ей недостает ряда возможностей, которые есть в GRUB (и в том числе в этом заключается причина растущей популярности GRUB). LILO все еще используется, потому что на некоторых системах он работает, а GRUB нет. Конечно же, он используется еще и потому, что многие просто знакомы с LILO и сроднились с ним. Так или иначе, в Gentoo поддерживаются оба загрузчика, и вы, видимо, решили использовать LILO.


Установка LILO в систему проста как пробка: просто используйте emerge.


Листинг 9: Установка LILO

# emerge lilo



Настройка LILO


Для настройки LILO нужно создать файл /etc/lilo.conf. Запустите свой любимый редактор (в руководстве мы для единообразия используем nano) и создайте файл.


Листинг 10: Создание /etc/lilo.conf

# nano -w /etc/lilo.conf



Несколькими разделами раньше мы попросили вас запомнить название созданного файла образа ядра. В следующем примере используется предложенная нами схема разделения диска.


Пример разделен на две части:


Удостоверьтесь, что у себя вы указываете имя своего файла образа ядра, и при необходимости имя своего образа начального корневого диска (initrd).



Примечание: Если ваша корневая файловая система JFS, необходимо добавить «ro» в строку kernel, поскольку JFS «накатывает» свой журнал перед тем, как разрешить монтирование раздела на чтение-запись.



Листинг 11: Пример /etc/lilo.conf

boot=/dev/hda # установка LILO в MBR

prompt # предоставление шанса выбора другого варианта

timeout=50 # ожидание пять секунд до загрузки варианта по умолчанию

default=gentoo # по истечении времени загрузка варианта gentoo


# для тех, кто не использует genkernel

image=/boot/kernel-2.6.12-gentoo-r10

label=gentoo # название этого варианта

read-only # запуск с корневой ФС только для чтения; не менять!

root=/dev/hda3 # расположение корневой файловой системы


# для тех, кто использует genkernel

image=/boot/kernel-genkernel-x86-2.6.12-gentoo-r10

label=gentoo

read-only

root=/dev/ram0

append="init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev"

initrd=/boot/initramfs-genkernel-2.6.12-gentoo-r10


# следующие две строки нужны только для двойной загрузки с Windows

# в этом примере Windows находится на /dev/hda6

other=/dev/hda6

label=windows


Примечание: Параметр udev, указанный в конце строки kernel, необходим для обхода ошибки в некоторых версиях genkernel, если вы вообще используете udev (по умолчанию используется).


Примечание: Если вы разбили жесткий диск по-другому, или у вас другое ядро, внесите необходимые изменения.



Если нужно передать ядру дополнительные параметры, добавьте в соответствующий раздел файла выражение append. Например, добавим параметр video для включения кадрового буфера:


Листинг 12: Использование append для добавления параметров ядра

image=/boot/kernel-2.6.12-gentoo-r10

label=gentoo

read-only

root=/dev/hda3

append="video=vesafb:mtrr,ywrap,1024x768-32@85"



Если вы используете ядро 2.6.7 или выше, а объем жесткого диска ограничили перемычками из-за того, что BIOS не в состоянии работать с дисками большого размера, вам потребуется добавить hdx=stroke.


Тем, кто использует genkernel, нужно помнить, что их ядро использует такие же загрузочные параметры, как на установочном компакт-диске. Например, если у вас есть устройства SCSI, следует передать ядру параметр doscsi.


Теперь сохраните файл и выйдите из редактора. Для окончания установки нужно запустить /sbin/lilo, чтобы LILO смог отразить настройки, сделанные в /etc/lilo.conf, в вашей системе (т.е. записался на диск). Имейте в виду, что при каждой установке нового ядра или изменении меню вам потребуется выполнять /sbin/lilo заново.


Листинг 13: Завершение установки LILO

# /sbin/lilo


Примечание: При переустановке ядра вам больше не придется копировать файлы. Просто запустите make install после компиляции ядра; копирование файлов и изменение конфигурации LILO выполнится автоматически.



Переходите к перезагрузке системы.


10.d. Перезагрузка системы



Выйдите из изолированной среды и размонтируйте все смонтированные разделы. Затем введите ту самую волшебную команду, которую вы так заждались: reboot.


Листинг 14: Размонтирование всех разделов и перезагрузка

# exit

cdimage ~# cd

cdimage ~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo

cdimage ~# reboot



Естественно, не забудьте вынуть загрузочный компакт-диск, иначе он загрузится сам вместо вашей новой системы Gentoo.


Загрузив вновь установленную систему, переходите к завершению установки Gentoo.

11. Завершение установки Gentoo


11.a. Управление учетными записями


Добавление учетной записи для повседневной работы


Работа в учетной записи root (администратора) в системе Unix/Linux опасна, и ее следует всячески избегать. Поэтому настоятельно рекомендуется добавить учетную запись пользователя для повседневной работы.


Членством пользователя в группах определяется, какие действия он сможет выполнять. В следующей таблице перечислено несколько важных групп, в которые вы, возможно, захотите включать пользователей.


Группа Описание

audio возможность доступа к аудиоустройствам

cdrom возможность прямого доступа к оптическим накопителям

floppy возможность прямого доступа к гибким дискам

games возможность играть в игры

portage возможность использования emerge --pretend с правами пользователя

usb возможность доступа к устройствам USB

plugdev возможность монтирования и использования подключаемых устройств типа камер и USB-брелков

video возможность доступа к средствам видеозахвата и выполнения аппаратного ускорения видео

wheel возможность использования команды su



Например, для создания учетной записи пользователя по имени john, входящего в группы wheel, users и audio, сначала войдите в систему как root (только root может создавать учетные записи пользователей), а затем запустите useradd:


Листинг 1: Создание учетной записи на каждый день

Login: root

Password: (ваш пароль root)


# useradd -m -G users,wheel,audio -s /bin/bash john

# passwd john

Password: (введите пароль для john)

Re-enter password: (повторно введите пароль для подтверждения)



Если пользователю потребуется выполнить задачу от имени root, для временного получения привилегий root можно использовать su -. Другой способ пользоваться пакетом sudo, который при правильной настройке вполне безопасен.

12. Чем заняться дальше?


12.a. Документация



Примите поздравления! У вас теперь появилась работающая система Gentoo. И что же делать дальше? Какие у вас появились возможности? На что стоит взглянуть прежде всего? Gentoo дает своим пользователям богатый выбор возможностей, а следовательно и множество документированных (или не очень) свойств.


Вам обязательно нужно прочитать следующую часть настольной книги Gentoo, работа в Gentoo, в которой рассказывается, как поддерживать программное обеспечение в актуальном состоянии, как до устанавливать программы, что такое «USE-флаги», как происходит инициализация в Gentoo и т.д.


Если вас интересует оптимизация системы с точки зрения пользователя, или вы хотите узнать, как настроить полноценный «рабочий стол», обратитесь к более подробной документации по графической среде Gentoo. Кроме того, вы, возможно захотите прочитать наше руководство по локализации (англ.), что бы чуствовать себя более уютно.

Примечание: В настоящее время для русификации рекомендуется пользоваться альтернативными руководствами по локализации Gentoo. прим. пер.



Также имеется настольная книга по безопасности в Gentoo (англ.), которую определенно стоит прочитать.


Полный список существующих материалов имеется на странице документации.


12.b. Gentoo в интернете


Естественно, мы всегда рады видеть вас на форумах Gentoo (англ.), как и на любом из множества IRC-каналов Gentoo (англ.).


Кроме того, мы можем предложить вашему вниманию несколько списков рассылки, открытых для всех наших пользователей. Сведения о порядке подписки находятся на той же странице.


На этом мы замолкаем, чтобы позволить вам в полной мере насладиться результатом установки :)


B. Работа с Gentoo

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


1.a. Добро пожаловать в Portage


Система Portage вероятно, самое известное нововведение Gentoo в управлении программным обеспечением. Благодаря высокой гибкости и чрезвычайно богатым возможностям, она зачастую считается лучшим средством управления программным обеспечением из существующих в Linux.


Portage полностью написана на Python и Bash, и в результате полностью прозрачна для пользователей, поскольку оба языки сценариев.


Большинство пользователей взаимодействует с Portage с помощью команды emerge. Эта глава не призвана заменить страницу справки emerge. Для просмотра всех возможных параметров команды emerge, обращайтесь к странице справки:


Листинг 1: Чтение страницы справки emerge

$ man emerge








1.b. Дерево портежей


Сборочные файлы ebuild


Говоря о пакетах, мы часто имеем в виду программы, доступные пользователям Gentoo через дерево портежей. Дерево портежей это набор сборочных файлов ebuild, содержащих всю информацию, необходимую Portage для управления программным обеспечением (установки, поиска, извлечения и т.п.) По умолчанию сборочные файлы находятся в /usr/portage.


Когда Portage по вашему поручению выполняет любые действия над пакетами программ, эти действия опираются на сборочные файлы, имеющиеся в системе. Поэтому необходимо регулярно обновлять сборочные файлы, чтобы Portage знала о новых программах, обновлениях, связанных с безопасностью и т.д.


Обновление дерева портежей


Дерево портежей обычно обновляется с помощью rsync (англ.), средства быстрой разностной передачи файлов. Обновление выполнить довольно просто, так как запуск rsync обеспечивается командой emerge :


Листинг 2: Обновление дерева портежей

# emerge --sync



Если rsync выполнить невозможно из-за ограничений межсетевого экрана, дерево портежей все-таки можно обновить из ежедневных «снимков», создаваемых нами. Для автоматического извлечения и установки в системе новейшего снимка служит утилита emerge-webrsync:


Листинг 3: Запуск emerge-webrsync

# emerge-webrsync



1.c. Обслуживание программного обеспечения


Поиск программ


Для поиска программ в дереве портежей по названию можно использовать встроенные возможности команды emerge. По умолчанию команда emerge --search выдает названия пакетов, соответствующих (как полностью, так и частично) заданному условию поиска.


Например, чтобы найти все пакеты, содержащие «pdf» в названии:


Листинг 4: Поиск пакетов с pdf в названии

$ emerge --search pdf



Для поиска пакетов еще и по тексту описания можно использовать параметр --searchdesc (или -S):


Листинг 5: Поиск пакетов, связанных с pdf

$ emerge --searchdesc pdf



Посмотрев на сообщения команды, вы отметите, что вам дается множество информации. Поля четко обозначены, поэтому мы не будем вдаваться в подробности их значения:


Листинг 6: Пример вывода emerge --search

* net-print/cups-pdf

Latest version available: 1.5.2

Latest version installed: [ Not Installed ]

Size of downloaded files: 15 kB

Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/

Description: Provides a virtual printer for CUPS to produce PDF files.

License: GPL-2


(

* net-print/cups-pdf

Последняя доступная версия: 1.5.2

Последняя установленная версия: [ не установлен ]

Размер загружаемых файлов: 15 kB

Веб-страница: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/

Описание: Снабжает CUPS виртуальным принтером для печати PDF-файлов.

Лицензия: GPL-2 )



Примечание (JohnBat26): Для более быстрого поиска программ используйте утилиту: eix (установка emerge eix). Она работает быстрее благодаря индексированию.


Установка программ


После того, как вы нашли нужное программное обеспечение, его можно легко установить с помощью команды emerge. Вот пример установки пакета gnumeric:


Листинг 7: Установка gnumeric

# emerge gnumeric



Так как множество приложений зависит друг от друга, любая попытка установить какой-либо пакет программ может повлечь за собой также установку дополнительных пакетов. Не беспокойтесь, Portage справится и с этим. Если вы захотите выяснить, что именно Portage собирается установить вместе с нужным вам пакетом, добавьте параметр --pretend. Например:


Листинг 8: Проверка зависимостей пакета gnumeric

# emerge --pretend gnumeric



После команды на установку пакета, Portage загружает из интернета необходимый исходный код (при необходимости), и по умолчанию сохраняет его в каталоге /usr/portage/distfiles. После этого пакет распаковывается, компилируется и устанавливается. Если вы хотите, чтобы Portage только загрузила исходный код без его установки, добавьте к команде emerge параметр --fetchonly:


Листинг 9: Загрузка исходного кода пакета gnumeric

# emerge --fetchonly gnumeric





Обнаружение документации к пакету


Многие пакеты содержат собственную документацию. Иногда USE-флаг doc определяет, следует ли устанавливать документацию к пакету. Проверить наличие USE-флага doc можно командой emerge -vp <название пакета>.


Листинг 10: Проверка наличия USE-флага doc

(alsa-lib - это всего лишь пример)

# emerge -vp alsa-lib

[ebuild N ] media-libs/alsa-lib-1.0.9_rc3 +doc -jack 674 kB



USE-флаг doc можно включить или отключить как глобально в файле /etc/make.conf, так и для отдельных пакетов в файле /etc/portage/package.use. Также можно, создав каталог с названием /etc/portage/package.use, указать флаг в файле внутри этого каталога. В главе USE-флаги этот вопрос описывается более подробно.


Документация от вновь установленного пакета обычно находится в подкаталоге каталога /usr/share/doc, соответствующем названию пакета. Кроме того, можно вывести список всех установленных файлов утилитой equery, которая входит в пакет gentoolkit (англ.) app-portage/gentoolkit.


Листинг 11: Обнаружение документации пакета

# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3

total 28

-rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz

-rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz

drwxr-xr-x 2 root root 8560 May 17 21:54 html

-rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz


(или используйте для поиска интересных файлов команду equery :)

# equery files alsa-lib | less

media-libs/alsa-lib-1.0.9_rc3

* Contents of media-libs/alsa-lib-1.0.9_rc3:

/usr

/usr/bin

/usr/bin/alsalisp

(выдача обрезана)



Удаление пакета


Когда вы захотите удалить пакет из системы, используйте команду emerge --unmerge. Это приведет к удалению из системы всех файлов, установленных пакетом, кроме конфигурационных файлов приложения, изменявшихся после установки. Сохранение конфигурационных файлов позволяет вернуться к работе с пакетом, если вы когда-нибудь решите снова его установить.




Внимание: Portage не проверяет, зависят ли другие пакеты от удаляемого! Однако вы получите предупреждение, если удаление пакета приведет к неработоспособности системы.


Листинг 12: Удаление пакета gnumeric из системы

# emerge --unmerge gnumeric



После удаления пакета из системы, пакеты, установленные автоматически, потому что от них зависел удаленный пакет, остаются. Чтобы Portage выявила все когда-то нужные пакеты, которые теперь можно удалить, используйте команду emerge --depclean. Мы вернемся к этому ниже.


Обновление системы


Чтобы система сохранялась в отличной форме (не говоря уже об установке свежайших обновлений, связанных с безопасностью), ее нужно регулярно обновлять. Так как Portage просматривает сборочные файлы только в локальном дереве портежей, сперва потребуется обновить его. Обновив дерево портежей, вы сможете обновить систему командой emerge --update world. В следующем примере мы также пользуемся параметром --ask, который поручает Portage вывести список пакетов, которые она собирается обновить, и спросить вас, можно ли продолжать:


Листинг 13: Обновление системы

# emerge --update --ask world



Portage будет искать более новые версии установленных приложений. Однако проверяется только версии приложений, явно установленных вами, а не тех, от которых они зависят. Если вы хотите обновить каждый пакет в системе, добавьте аргумент --deep:


Листинг 14: Обновление всей системы

# emerge --update --deep world



Поскольку обновления, относящиеся к безопасности, случаются и в пакетах, явным образом не устанавливались (но были «подтянуты» из-за того, что он них зависят другие программы), рекомендуется изредка запускать эту команду.


Если вы меняли какие-либо из USE-флагов, возможно, потом вы также захотите добавить параметр --newuse. Тогда Portage проверит, требует ли изменение установки новых пакетов или перекомпиляции существующих:


Листинг 15: Выполнение полного обновления

# emerge --update --deep --newuse world



Метапакеты


У некоторых пакетов в дереве портежей нет содержимого как такового, и они используются для установки набора других пакетов. Например, пакет kde полностью устанавливает среду KDE в вашей системе, привлекая различные KDE-пакетов в качестве зависимостей.


Если вы когда-либо захотите удалить из системы такой пакет, запуск emerge--unmerge не возымеет должного эффекта, так как пакеты, от которых он зависит, останутся в системе.


В Portage существует возможность удаления остаточных зависимостей, но так как зависимости программ меняются со временем, доступность программного обеспечения, прежде всего требуется полностью обновить всю систему, включая реализацию изменений, произведенных путем модификации USE-флагов. После этого можно запустить emerge --depclean, чтобы удалить остаточные зависимости. Когда это сделано, вам потребуется пересобрать приложения, ранее динамически связанные с удаленными пакетами, в которых они теперь не нуждаются.


Со всем этим управляются следующие три команды:


Листинг 16: Удаление ненужных зависимостей

# emerge --update --deep --newuse world

# emerge --depclean

# revdep-rebuild



revdep-rebuild входит в пакет gentoolkit; не забудьте сначала его установить:


Листинг 17: Установка пакета gentoolkit

# emerge gentoolkit



1.d. Когда Portage жалуется...


Слоты, виртуалы, ветви, архитектуры и профили


Как уже сказано, Portage чрезвычайно мощная система, поддерживающая множество возможностей, не хватающих другим системам управления программами. Чтобы это стало понятно, разберем несколько аспектов Portage, не вникая в подробности.


С помощью Portage разные версии отдельного пакета могут сосуществовать в одной системе. В то время, как другие системы управления стремятся называть пакеты в соответствии с версией (например freetype и freetype2), в Portage используется технология слотов (SLOT), или областей. Пакет присваивает определенный слот своей версии. Пакеты с разными слотами способны сосуществовать в одной системе. Например, у пакета freetype есть ebuild как со SLOT="1", так и со SLOT="2".


Существуют также пакеты, выполняющие одни и те же функции, но отличающиеся в реализации. Например metalogd, sysklogd и syslog-ng являются системными службами журналирования. Приложения, использующие «системный журнал», не могут зависеть от одной конкретной программы, например от metalogd, так как остальные программы ничем не хуже. В Portage предусмотрены виртуальные пакеты: каждая служба журналирования предоставляет virtual/syslog, и в результате в приложениях можно указывать зависимость от virtual/syslog.


Программное обеспечение может располагаться в различных ветвях дерева портежей. По умолчанию в системе разрешено только использование стабильных пакетов. Большинство новых программ при поступлении включаются в тестовую ветвь, что указывает на необходимость дополнительного тестирования перед тем, как включить их в стабильные. Хотя в дереве портежей и видны сборочные файлы для таких программ, Portage не станет обновлять их до тех пор, пока они не будут помещены в стабильную ветвь.


Некоторые программы имеются не для всех архитектур. Либо они не работают в определенных архитектурах, либо требуют дополнительного тестирования, или у разработчика нет возможности проверить, работает ли пакет в различных архитектурах.


Каждая установка Gentoo придерживается определенного профиля, который содержит, помимо прочего, список пакетов, необходимых для работоспособности системы.


Блокировка пакетов


Листинг 18: Предупреждение о заблокированных пакетах (с --pretend)

[blocks B ] mail-mt