From 1a849f774406bee403f3bb9bb6632feeb9ae62fe Mon Sep 17 00:00:00 2001 From: 1bah Date: Tue, 16 Jun 2026 23:28:58 +0300 Subject: [PATCH 01/14] article example --- antora.yml | 2 +- modules/ROOT/nav.adoc | 2 ++ modules/ROOT/pages/linux/fhs.adoc | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 modules/ROOT/pages/linux/fhs.adoc diff --git a/antora.yml b/antora.yml index 7727657..455e9bb 100644 --- a/antora.yml +++ b/antora.yml @@ -1,5 +1,5 @@ name: ptbook -version: latest +version: dev title: ProgTech Book nav: - modules/ROOT/nav.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 5b46499..51d421b 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -2,3 +2,5 @@ * xref:authors.adoc[Авторы] * xref:code-of-conduct.adoc[Code of conduct] +.Linux FS +* xref:linux/fhs.adoc[FHS] diff --git a/modules/ROOT/pages/linux/fhs.adoc b/modules/ROOT/pages/linux/fhs.adoc new file mode 100644 index 0000000..f0beb7c --- /dev/null +++ b/modules/ROOT/pages/linux/fhs.adoc @@ -0,0 +1,7 @@ += Filesystem Hierarchy Standard +:page-pagination: +:page-authors: Иван Калинин + +*Filesystem Hierarchy Standard (FHS)* - это соглашение об устройстве фс, использующееся в большинстве самых популярных дистрибутивов Linux. Однако, есть дистрибутивы не следующие ему. Таким, например, является https://nixos.org/[NixOS]. + + From 52ee19632efdba623c5407baddf9f0ebbea6409b Mon Sep 17 00:00:00 2001 From: 1bah Date: Tue, 16 Jun 2026 23:36:56 +0300 Subject: [PATCH 02/14] change source for CI --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index a5f034b..b81bdfe 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -3,7 +3,7 @@ site: start_page: ptbook::index.adoc content: sources: - - url: . + - url: https://github.com/progtech-course/book branches: [ '*' ] ui: bundle: From fc5beda9b9eb9e64432bf7d28161e4e8a67518ef Mon Sep 17 00:00:00 2001 From: 1bah Date: Thu, 18 Jun 2026 15:40:57 +0300 Subject: [PATCH 03/14] See admonitions update --- modules/ROOT/pages/linux/fhs.adoc | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/modules/ROOT/pages/linux/fhs.adoc b/modules/ROOT/pages/linux/fhs.adoc index f0beb7c..2834ad7 100644 --- a/modules/ROOT/pages/linux/fhs.adoc +++ b/modules/ROOT/pages/linux/fhs.adoc @@ -2,6 +2,35 @@ :page-pagination: :page-authors: Иван Калинин -*Filesystem Hierarchy Standard (FHS)* - это соглашение об устройстве фс, использующееся в большинстве самых популярных дистрибутивов Linux. Однако, есть дистрибутивы не следующие ему. Таким, например, является https://nixos.org/[NixOS]. +*Filesystem Hierarchy Standard (FHS)* - это соглашение об устройстве файловой системы Linux, использующееся в большинстве популярных дистрибутивов Linux. Однако, есть дистрибутивы не следующие ему. Таким, например, является https://nixos.org/[NixOS]. Информацию про FHS можно прочитать в мануале: +[,console] +---- +$ man hier +---- +== Три уровня бинарей +Есть три папки, повторяющие структуру друг друга: `/`, `/usr`, `/usr/local`. Корневая папка используется для хранения файлов, необходимых для запуска или починики системы, в частности тут должны храниться файлы, доступные до момента монтирования файловых систем, отличных от корневой (`/`). Директории `/usr` и `/usr/local` уже содержат все остальные файлы, с которыми пользователь будет работать. Их отличие заключается в большинстве случаев в том, что `/usr` управляется пакетным менеджером системы (`dnf`, `apt`, etc.), а `/usr/local` предназначен для ручной установки. + +CAUTION: То, что + +// TODO +[WARNING.todo] +==== +Нужна ссыль на mounting process +==== +Каждая из директорий содержит следующие подпапки: + +* `bin` -- бинарники: команды для работы в консоли (e.g. _ls_) +* `sbin` -- системные бинари (e.g. _reboot_) +* `lib` -- библиотеки (e.g. _libc_) +** `lib32` -- 32-битный код +** `lib64` -- 64-битный код +* `include` -- хедеры (e.g. _math.h_) +* `share` -- + + + +== Read more + +* https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html[FHS 3.0 (C) Linux Foundation] From 6713d199b4b8fe164ee0f07ea36aa70667412019 Mon Sep 17 00:00:00 2001 From: 1bah Date: Thu, 18 Jun 2026 20:44:45 +0300 Subject: [PATCH 04/14] share folder --- modules/ROOT/pages/linux/fhs.adoc | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/modules/ROOT/pages/linux/fhs.adoc b/modules/ROOT/pages/linux/fhs.adoc index 2834ad7..f88775e 100644 --- a/modules/ROOT/pages/linux/fhs.adoc +++ b/modules/ROOT/pages/linux/fhs.adoc @@ -10,15 +10,15 @@ $ man hier == Три уровня бинарей -Есть три папки, повторяющие структуру друг друга: `/`, `/usr`, `/usr/local`. Корневая папка используется для хранения файлов, необходимых для запуска или починики системы, в частности тут должны храниться файлы, доступные до момента монтирования файловых систем, отличных от корневой (`/`). Директории `/usr` и `/usr/local` уже содержат все остальные файлы, с которыми пользователь будет работать. Их отличие заключается в большинстве случаев в том, что `/usr` управляется пакетным менеджером системы (`dnf`, `apt`, etc.), а `/usr/local` предназначен для ручной установки. - -CAUTION: То, что - // TODO [WARNING.todo] ==== Нужна ссыль на mounting process ==== +Есть три папки, повторяющие структуру друг друга: `/`, `/usr`, `/usr/local`. Корневая папка используется для хранения файлов, необходимых для запуска или починики системы, в частности тут должны храниться файлы, доступные до момента монтирования файловых систем, отличных от корневой (`/`). Директории `/usr` и `/usr/local` уже содержат все остальные файлы, с которыми пользователь будет работать. Их отличие заключается в большинстве случаев в том, что `/usr` управляется пакетным менеджером системы (`dnf`, `apt`, etc.), а `/usr/local` предназначен для ручной установки. + +CAUTION: То, что `/usr` управляется системой, не означает, что вы не можете вручную менять файлы в этой папке. Однако, следует быть аккуратным, чтобы не наделать конфликтов. + Каждая из директорий содержит следующие подпапки: * `bin` -- бинарники: команды для работы в консоли (e.g. _ls_) @@ -27,7 +27,28 @@ CAUTION: То, что ** `lib32` -- 32-битный код ** `lib64` -- 64-битный код * `include` -- хедеры (e.g. _math.h_) -* `share` -- +* `share` -- файлы, не зависящие от архитектуры. В эту папку перенесли различные поддиректории, ранее лежавшие рядом с `bin` + +NOTE: Во многих новых дистрибутивах Linux папки `/bin`, `/lib`, `/sbin` не являются настоящими папками. На самом деле они -- симлинки на соответствующие папки в `/usr`. А `/usr/sbin` может быть симлинкой на `/usr/bin`. + +=== Папка `share` +doc:: +Внутри подпапки `doc` располагается различная документация проекта: это могут быть лицензии, README файлы. Для каждого инструмента такие данные собраны в директорию, которая имеет название инструмента. Например, для `zsh` собрана такая информация: + +[,console] +---- +$ ls /usr/share/doc/zsh +BUGS completion-style-guide CONTRIBUTORS FAQ FEATURES +LICENCE MACHINES NEWS README zsh-development-guide +---- + +man:: +В этой подпапке собраны man страницы. Для каждого языка лежит своя подпапка, например, для итальянского -- `it`. + +[TIP.todo] +==== +Ссылка на маны +==== From cfbc4d4bde1e58d5e1030201a9db2d65f5af7984 Mon Sep 17 00:00:00 2001 From: 1bah Date: Thu, 18 Jun 2026 21:58:22 +0300 Subject: [PATCH 05/14] file types --- modules/ROOT/nav.adoc | 1 + modules/ROOT/pages/linux/fhs.adoc | 93 ++++++++++++++++++++++++ modules/ROOT/pages/linux/file-types.adoc | 51 +++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 modules/ROOT/pages/linux/file-types.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 51d421b..2c7f57d 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -3,4 +3,5 @@ * xref:code-of-conduct.adoc[Code of conduct] .Linux FS +* xref:linux/file-types.adoc[Типы файлов] * xref:linux/fhs.adoc[FHS] diff --git a/modules/ROOT/pages/linux/fhs.adoc b/modules/ROOT/pages/linux/fhs.adoc index f88775e..fd05fcd 100644 --- a/modules/ROOT/pages/linux/fhs.adoc +++ b/modules/ROOT/pages/linux/fhs.adoc @@ -50,7 +50,100 @@ man:: Ссылка на маны ==== +== Основные директории системы +_Все директории ниже лежат в корневой папке._ + +boot:: +Статические бинарники для загрузчика системы. Сам загрузчик должен лежать либо в корне, либо в этой папке. + +dev:: +Расшифровывается как _devices_. Здесь собраны файлы устройств. + +etc:: +Расшифровывается как _et cetera_. Здесь располагаются конфигурационные файлы, например, `/etc/passwd` + +// TODO +[TIP.todo] +==== +ссыли на прокфс & сисфс +==== + +proc:: +Точка монтирования _procfs_. + +sys:: +Точка монтирования _sysfs_. + +lost+found:: +"Потерянные" файлы. + +// TODO +[TIP.todo] +==== +больше про лост+фаунд +==== + +mnt:: +Расшифровывается как _mount_. Точка монтирования временных файловых систем, например, live образ ОС при установке. + +home:: +В этой папке располагаются домашние директории пользователей. Обычно для каждого пользователя своя директория с соответствующим именем, однако можно выбрать любое название. + +root:: +Домашняя папка для рута. + +tmp:: +Расшифровывается как _temporary_. Хранилище временных файлов, которые можно удалить в любой момент времени. + +opt:: +Расшифровывается как _optional_. Различные приложения и расширения для системы. + +run:: +Расшифровывается как _runtime_. Описывает систему с момента запуска. Раньше для этого использовали `/var/run`, поэтому теперь этот файл является симлинкой на `/run`. + +var:: +Расшифровывается как _variable_. Данные, изменяющиеся в процессе работы системы. + +=== Папка `run` + +cache:: +Кэши программ. Для каждой программы выделяется своя подпапка. + +lib:: +Переменные данные различных программ. Аналогично, для каждой программы своя подпапка. + +[,console] +---- +$ sudo ls /var/lib/docker +buildkit containers engine-id image network +plugins policy rootfs runtimes swarm tmp volumes +---- + +local:: +Папка `var` для `/usr/local`. + +opt:: +Папка `/var` для `/opt`. + +lock:: +Тут хранятся lock-файлы. + +// TODO +[TIP.todo] +---- +Надо написать про лок файлы +---- + +log:: +Логи различных программ + +mail:: +Почты пользователей. + +== Команды + +Данный стандарт не только фиксирует названия и назначения директорий, но еще и требует наличие определенных файлов, которые должны выполнять определенные цели. Так в `/bin` требуется наличие файлов `kill`, `mkdir`, `more`, `su` и других. == Read more diff --git a/modules/ROOT/pages/linux/file-types.adoc b/modules/ROOT/pages/linux/file-types.adoc new file mode 100644 index 0000000..cb42c6e --- /dev/null +++ b/modules/ROOT/pages/linux/file-types.adoc @@ -0,0 +1,51 @@ += Типы файлов +:page-pagination: +:page-authors: Иван Калинин + +В Linux есть 7 типов файлов: регулярные, директории, ссылки, сокеты и пайпы, блочные и символьные устройства. + +== Regular + +*Регулярные файлы* или просто файлы -- это просто набор байт, который хранит какую-то информацию. Чтобы создать файл с некоторым содержимым, можно использовать конструкцию `echo CONTENT > FILENAME` или можно создать пустой файл с помощью команды `touch FILENAME`. Такие файлы в `ls -l` будут отображаться как `-`. + +CAUTION: Команда `touch` прежде всего нужна для обновления информации о времени доступа и изменения файла. + +== Directory +*Директории* или папки -- это узлы в файловой системе, которые содержат список других _вложенных_ файлов. Такие файлы в `ls -l` будут отображаться как `d`. + +Создать директорию можно с помощью команды `mkdir DIRNAME`. Если вам необходимо вместе с папкой создать еще ее родителей, то используйте флаг `-p`. + +[,console] +---- +$ mkdir folder/subfolder +mkdir: cannot create directory ‘folder/subfolder’: No such file or directory +$ mkdir -p folder/subfolder +$ ls folder +subfolder +---- + +== Links + +*Ссылочные* файлы или символические ссылки (симлинки) -- это файлы, хранящие в себе путь до другого файла. При использовании такого файла ОС будет сама подставлять заместо него файл, на который указывает записанный путь. Такие файлы в `ls -l` будут отображаться как `l`. + +Создать симлинку можно с помощью команды `ln -s PATH LINKNAME`. Прочесть содержимое самой симлинки можно с помощью `readlink`. + + +[,console] +---- +$ ls subfolder +file.txt +$ ln -s subfolder/file.txt symlink +$ ls -l +drwxr-xr-x. nbah nbah 60 B Thu Jun 18 21:44:45 2026 subfolder +lrwxrwxrwx. nbah nbah 18 B Thu Jun 18 21:45:44 2026 symlink => subfolder/file.txt +$ readlink symlink +subfolder/file.txt +$ bat symlink +─────┬─────────────────────────────── + │ File: symlink +─────┼─────────────────────────────── + 1 │ 4 +─────┴─────────────────────────────── +---- + From 21fac3569824ff841c4154c8e80615365deb6fb5 Mon Sep 17 00:00:00 2001 From: 1bah Date: Thu, 25 Jun 2026 12:17:07 +0300 Subject: [PATCH 06/14] Add dev guides --- .gitignore | 2 +- bundle/.gitkeep | 0 modules/ROOT/nav.adoc | 3 +- modules/ROOT/pages/dev-guides.adoc | 71 ++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 bundle/.gitkeep create mode 100644 modules/ROOT/pages/dev-guides.adoc diff --git a/.gitignore b/.gitignore index 8f05654..20741e3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,5 @@ build/ node_modules/ **/*.iml - +bundle/ui-bundle.zip diff --git a/bundle/.gitkeep b/bundle/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 2c7f57d..16d94b7 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -1,6 +1,7 @@ -.Intro +.О проекте * xref:authors.adoc[Авторы] * xref:code-of-conduct.adoc[Code of conduct] +* xref:dev-guides.adoc[Гайды по разработке] .Linux FS * xref:linux/file-types.adoc[Типы файлов] diff --git a/modules/ROOT/pages/dev-guides.adoc b/modules/ROOT/pages/dev-guides.adoc new file mode 100644 index 0000000..bc4af69 --- /dev/null +++ b/modules/ROOT/pages/dev-guides.adoc @@ -0,0 +1,71 @@ += Как разрабатывать сайт + +== Инструменты + +Для разработки вам потребуется: + +* `npm` -- можно установить через пакетный менеджер, например `apt install node` (обычно поставляется в пакете `node`) +* IDE с плагином для asciidoctor +** Для JetBrains IDE советую установить плагин https://plugins.jetbrains.com/plugin/7391-asciidoc + +Склонируйте проект и из его корня исполните: +[,shell] +---- +npm install +---- + +== Просмотр сайта + +Чтобы запустить сборку сайта исполните: +[,shell] +---- +npx antora --stacktrace antora-playbook.yml +---- +Полученный сайт будет лежать в папке `build`. Однако, у него могут не отображаться иконки на блоках и на каждое изменение необходимо вручную пересобирать. + + +Для динамического превью нужно использовать докер: +[,shell] +---- +docker run --rm -p 35729:35729 -p 2020:2020 -v "${PWD}":/preview/antora -v "${PWD}/bundle:/preview/bundles" ghcr.io/vshn/antora-preview --antora='.' --style=ui-bundle +---- + +IMPORTANT: Для подгрузки стилей скачайте `ui-bundle.zip` из https://github.com/progtech-course/antora-ui/releases/tag/latest[проекта] и поместите в папку `bundle` в корне проекта. + +Сайт будет доступен на http://localhost:2020. Однако, уже тут не будет работать фавиконка и настройки UI. + +Подробнее об образе можно прочитать в https://github.com/vshn/antora-preview[репозитории проекта]. + +== Настройка плейбука + +При локальной разработке советую использовать следующую модификацию `antora-playbook.yml`: +[,yaml] +---- +site: + title: ProgTech Book + start_page: ptbook::index.adoc +content: + sources: + - url: . + branches: [ '*' ] +ui: + bundle: + url: https://github.com/progtech-course/antora-ui/releases/download/latest/ui-bundle.zip + snapshot: true + supplemental_files: ./supplemental-ui +antora: + extensions: + - require: '@antora/lunr-extension' + languages: [en, ru] + +# runtime: +# fetch: true +---- + +Изменения: + +. `url: .` -- используется локальный репо, а не исходники в гитхабе +. `runtime: fetch: true` -- если обновился исходник с UI, то эта настройка перескачает его, иначе будет использоваться закэшированный + +WARNING: Не нужно это коммитить в репозиторий! + From 079d9ddf1db115065a975ccb6d0be41f7bd14ca1 Mon Sep 17 00:00:00 2001 From: 1bah Date: Thu, 25 Jun 2026 12:28:21 +0300 Subject: [PATCH 07/14] Update dev guides --- modules/ROOT/pages/dev-guides.adoc | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/ROOT/pages/dev-guides.adoc b/modules/ROOT/pages/dev-guides.adoc index bc4af69..ab8637f 100644 --- a/modules/ROOT/pages/dev-guides.adoc +++ b/modules/ROOT/pages/dev-guides.adoc @@ -1,4 +1,6 @@ = Как разрабатывать сайт +:page-pagination: +:page-authors: Иван Калинин == Инструменты @@ -25,12 +27,12 @@ npx antora --stacktrace antora-playbook.yml Для динамического превью нужно использовать докер: -[,shell] +[.wrap,shell] ---- docker run --rm -p 35729:35729 -p 2020:2020 -v "${PWD}":/preview/antora -v "${PWD}/bundle:/preview/bundles" ghcr.io/vshn/antora-preview --antora='.' --style=ui-bundle ---- -IMPORTANT: Для подгрузки стилей скачайте `ui-bundle.zip` из https://github.com/progtech-course/antora-ui/releases/tag/latest[проекта] и поместите в папку `bundle` в корне проекта. +NOTE: Для подгрузки стилей скачайте `ui-bundle.zip` из https://github.com/progtech-course/antora-ui/releases/tag/latest[проекта] и поместите в папку `bundle` в корне проекта. Сайт будет доступен на http://localhost:2020. Однако, уже тут не будет работать фавиконка и настройки UI. @@ -39,7 +41,7 @@ IMPORTANT: Для подгрузки стилей скачайте `ui-bundle.zi == Настройка плейбука При локальной разработке советую использовать следующую модификацию `antora-playbook.yml`: -[,yaml] +[.wrap,yaml] ---- site: title: ProgTech Book @@ -69,3 +71,21 @@ antora: WARNING: Не нужно это коммитить в репозиторий! +== Возможности asciidoctor + +Посмотреть, как можно оформить материалы, можно на https://progtech-course.github.io/antora-ui[превью UI]. Исходники аскидоктора лежат https://github.com/progtech-course/antora-ui/blob/main/preview-src/index.adoc[здесь]. + +Также поддерживается кастомная стилизация TODO: + +[.wrap,asciidoc] +---- +// TODO +[TIP.todo] +==== +Нужна ссыль на mounting process +==== +---- + +CAUTION: При ее использовании просьба оставлять выше комментарий `// TODO` -- так IDE сможет трекать тудушки в проекте. + +При написании страницы добавляйте параметр `:page-pagination:`, а также указывайте себя в `:page-authors:`. При указании авторства пишите так же, как в заголовке xref:authors.adoc[authors.adoc] -- иначе не сработают автоматические ссылки. From 7094633bb6a44fce31736a3e86c668e61c5ccc46 Mon Sep 17 00:00:00 2001 From: 1bah Date: Thu, 25 Jun 2026 12:36:48 +0300 Subject: [PATCH 08/14] Renaming in authors --- supplemental-ui/partials/author-header.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supplemental-ui/partials/author-header.hbs b/supplemental-ui/partials/author-header.hbs index 6c94a63..070e25f 100644 --- a/supplemental-ui/partials/author-header.hbs +++ b/supplemental-ui/partials/author-header.hbs @@ -1 +1 @@ -
Эта статья написана следующими людьми:
+
Эта страница написана следующими людьми:
From a88f925af11c465a1f01cac64375c679602b6ae5 Mon Sep 17 00:00:00 2001 From: 1bah Date: Tue, 30 Jun 2026 23:48:22 +0300 Subject: [PATCH 09/14] Add description --- modules/ROOT/pages/authors.adoc | 1 + modules/ROOT/pages/index.adoc | 1 + modules/ROOT/pages/linux/fhs.adoc | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/ROOT/pages/authors.adoc b/modules/ROOT/pages/authors.adoc index b7a77e8..da64380 100644 --- a/modules/ROOT/pages/authors.adoc +++ b/modules/ROOT/pages/authors.adoc @@ -1,5 +1,6 @@ = Авторы :page-pagination: +:description: Авторы проекта Здесь можно найти информацию про людей, участвовавших в создании этого ресурса. diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc index c2fc019..2fb7bfb 100644 --- a/modules/ROOT/pages/index.adoc +++ b/modules/ROOT/pages/index.adoc @@ -1,6 +1,7 @@ = ProgTech Book // :page-authors: Иван Калинин :page-pagination: +:description: Материалы курса "Технологии программирования" Здесь собраны материалы курса "Технологии программирования". diff --git a/modules/ROOT/pages/linux/fhs.adoc b/modules/ROOT/pages/linux/fhs.adoc index fd05fcd..351d2d1 100644 --- a/modules/ROOT/pages/linux/fhs.adoc +++ b/modules/ROOT/pages/linux/fhs.adoc @@ -1,6 +1,7 @@ = Filesystem Hierarchy Standard :page-pagination: :page-authors: Иван Калинин +:description: Filesystem Hierarchy Standard (Linux) *Filesystem Hierarchy Standard (FHS)* - это соглашение об устройстве файловой системы Linux, использующееся в большинстве популярных дистрибутивов Linux. Однако, есть дистрибутивы не следующие ему. Таким, например, является https://nixos.org/[NixOS]. Информацию про FHS можно прочитать в мануале: [,console] @@ -58,7 +59,7 @@ boot:: Статические бинарники для загрузчика системы. Сам загрузчик должен лежать либо в корне, либо в этой папке. dev:: -Расшифровывается как _devices_. Здесь собраны файлы устройств. +Расшифровывается как _devices_. Здесь собраны файлы устройств. Подробнее о папке `dev` написано xref:linux/devices.adoc[тут]. etc:: Расшифровывается как _et cetera_. Здесь располагаются конфигурационные файлы, например, `/etc/passwd` From 643907b23fe98597668f27b71aab2eb836e49816 Mon Sep 17 00:00:00 2001 From: 1bah Date: Tue, 30 Jun 2026 23:48:45 +0300 Subject: [PATCH 10/14] Linux device files --- modules/ROOT/images/linux/terminal-window.png | Bin 0 -> 18590 bytes modules/ROOT/images/logos/kitty.svg | 1 + modules/ROOT/images/logos/xterm.png | Bin 0 -> 4263 bytes modules/ROOT/pages/linux/devices.adoc | 97 ++++++++++++++++++ modules/ROOT/pages/linux/ttys.adoc | 39 +++++++ 5 files changed, 137 insertions(+) create mode 100644 modules/ROOT/images/linux/terminal-window.png create mode 100644 modules/ROOT/images/logos/kitty.svg create mode 100644 modules/ROOT/images/logos/xterm.png create mode 100644 modules/ROOT/pages/linux/devices.adoc create mode 100644 modules/ROOT/pages/linux/ttys.adoc diff --git a/modules/ROOT/images/linux/terminal-window.png b/modules/ROOT/images/linux/terminal-window.png new file mode 100644 index 0000000000000000000000000000000000000000..54755a7f69c7dfbe47320b86da92301f5f6c9150 GIT binary patch literal 18590 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 \ No newline at end of file diff --git a/modules/ROOT/images/logos/xterm.png b/modules/ROOT/images/logos/xterm.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad01e84655a7a8f0812ad495ed32b6fa996d605 GIT binary patch literal 4263 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 z /dev/full +echo: write error: no space left on device +---- + +/dev/random и /dev/urandom:: +Оба файла используются для генерации псевдослучайных чисел. В качестве сида используется энтропия различных устройств системы. Как следствие, запись в эти устройства будет обновлять энтропию. Если ваша программа работает не в момент бутстрапа, то используйте `urandom`. Например, `std::random_device` https://en.cppreference.com/cpp/numeric/random/random_device/random_device#Notes[по умолчанию] использует именно `/dev/urandom`. + +// TODO +[TIP.todo] +==== +ссыль на рандомизацию и хэши? +==== + +WARNING: Устройства создают _бесконечный_ стрим случайных данных, поэтому всегда ограничивайте число считываемых данных. Например, через `head -c N`. + +/dev/mem:: +Это устройство представляет собой образ физической памяти (RAM). Адреса внутри этого устройства отражают реальные физические адреса в памяти. + +/dev/kmem:: +Аналогично прошлому устройству `kmem` представляется способ обращаться к памяти через файлы, однако `kmem` является представлением виртуальной памяти. + +/dev/port:: +Аналогично прошлым двум через это устройство можно обращаться напрямую к портам. + +IMPORTANT: Доступ к последним трем устройствам может быть (скорее всего так и есть, если вы не собирали ядро вручную) ограничен на уровне конфигураций ядра Linux. + +/dev/tty:: +Терминальные устройства. Про них написано в xref:linux/ttys.adoc[следующей статье]. + +== Block devices + +/dev/sd[a-z]:: +Жесткие диски, использующие технологию SATA. + +/dev/nvme[0-N]:: +Жесткие диски, использующие технологию PCI. + +NOTE: Под каждую партицию жесткого диска создается отдельное устройство с суффиксом `pN`, где N -- номер партиции внутри диска. + +/dev/loop[0-N]:: +Виртуальные девайсы, используемые для монтирования файловых систем не на физические устройства. Например, такие устройства можно связать с регулярным файлом и использовать такой файл как модель жесткого диска. + +[,console] +---- +$ dd if=/dev/zero of=file.img bs=1MiB count=10 +$ sudo losetup /dev/loop4 file.img +$ sudo mkfs -t ext4 /dev/loop4 +$ sudo mkdir /myloopdev +$ sudo mount /dev/loop4 /myloopdev +---- + +== Симлинки + +/dev/fd:: +Симлинка на `/proc/self/fd` -- папку с файловыми дескрипторами текущего процесса. + +/dev/stdin:: +Симлинка на `/proc/self/fd/0` -- стандартный поток ввода текущего процесса. + +/dev/stdout:: +Симлинка на `/proc/self/fd/1` -- стандартный поток вывода текущего процесса. + +/dev/stderr:: +Симлинка на `/proc/self/fd/2` -- стандартный поток ошибок текущего процесса. + +== Read more + +* https://media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy[Random & urandom devices (C) Filippo Valsorda at 32C3] +* https://www.linuxjournal.com/article/2890[Block devices (C) Linux journal] +* https://tldp.org/LDP/khg/HyperNews/get/devices/devices.html[Device drivers (C) KHG] +* https://www.reddit.com/r/hardware/comments/b0zb64/ssd_pcie_vs_sata_real_difference_for_programming/[PCI VS SATA (C) Reddit] + diff --git a/modules/ROOT/pages/linux/ttys.adoc b/modules/ROOT/pages/linux/ttys.adoc new file mode 100644 index 0000000..d36da83 --- /dev/null +++ b/modules/ROOT/pages/linux/ttys.adoc @@ -0,0 +1,39 @@ += Терминальные устройства +:page-pagination: +:page-authors: Иван Калинин +:description: Терминалы. PTS и TTY устройства. + +== TTY + +Аббревиатура *tty* расшифровывается как _teletype_ -- физическое устройство, некогда использовавшееся для отправки и получения сообщений. В Linux tty-устройства отражают _виртуальные терминалы_, через которые пользователь взаимодействует с системой. Терминал в данном случае следует воспринимать не как окно, в которое вводят команды, а как некоторое устройство, через которое идет взаимодействие с пользователем. + +.Это не терминал в смысле tty-устройств +image::linux/terminal-window.png[] + +Под терминалы создаются файлы `/dev/ttyN`. Чтобы сменить виртуальный терминал, используется команда `chvt TERMINAL_ID` или комбинация клавиш kbd:[Ctrl,Alt,F#] (`#` здесь отражает индекс терминала). Файл `/dev/tty` указывает на текущий контролирующий терминал. + +Графическая оболочка открывается поверх некоторого виртуального терминала и транслирует действия с графическим интерфейсом в команды для виртуального терминала. Обычно для этого используются устройства `/dev/tty2` или `/dev/tty7`. + +Чтобы узнать, с каким терминалом вы сейчас взаимодействуете, можно выполнить команду `tty`. + +== Console + +Файл `/dev/console` же отражает за системную консоль, которая используется при стартапе системы. Данный терминал управляется напрямую ядром и назначается init-процессу при загрузке системы. + +== PTS + +Графическое окно, которое открывается в операционной системе, на самом деле является запущенным *эмулятором*. Примерами такого могут быть `xterm`, `xterm-kitty`. + +[cols="2*", frame="none", grid="none"] +|=== +|image:logos/kitty.svg[kitty,100,role=text-left] +|image:logos/xterm.png[kitty,100,role=text-center] +|=== + +При запуске эмулятора создается пара из master и slave терминалов с помощью устройства `/dev/ptmx` -- pseudoterminal multiplexor device. Для второго создается устройство в папке `/dev/pts`, через которое происходит взаимодействие при работе в окне эмулятора. + +NOTE: Под `/dev/pts` монтируется отдельная файловая система: _devpts_. + +== Read more + +* https://www.kernel.org/doc/html/latest/admin-guide/devices.html#terminal-devices[Terminal devices (C) Linux kernel docs] From 8e3989bfc498a9f7de494fc7aed8abc08ebb30d1 Mon Sep 17 00:00:00 2001 From: 1bah Date: Tue, 30 Jun 2026 23:49:13 +0300 Subject: [PATCH 11/14] New file types --- modules/ROOT/pages/linux/file-types.adoc | 60 +++++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/modules/ROOT/pages/linux/file-types.adoc b/modules/ROOT/pages/linux/file-types.adoc index cb42c6e..3eb4f98 100644 --- a/modules/ROOT/pages/linux/file-types.adoc +++ b/modules/ROOT/pages/linux/file-types.adoc @@ -1,9 +1,12 @@ = Типы файлов :page-pagination: :page-authors: Иван Калинин +:description: Типы файлов в Linux В Linux есть 7 типов файлов: регулярные, директории, ссылки, сокеты и пайпы, блочные и символьные устройства. +WARNING: Рекомендуем выполнять примеры кода внутри папки `/tmp` (убедитесь, что она смонтирована на `tmpfs`) + == Regular *Регулярные файлы* или просто файлы -- это просто набор байт, который хранит какую-то информацию. Чтобы создать файл с некоторым содержимым, можно использовать конструкцию `echo CONTENT > FILENAME` или можно создать пустой файл с помощью команды `touch FILENAME`. Такие файлы в `ls -l` будут отображаться как `-`. @@ -11,7 +14,7 @@ CAUTION: Команда `touch` прежде всего нужна для обновления информации о времени доступа и изменения файла. == Directory -*Директории* или папки -- это узлы в файловой системе, которые содержат список других _вложенных_ файлов. Такие файлы в `ls -l` будут отображаться как `d`. +*Директории* или папки -- это узлы в файловой системе, которые содержат список других _вложенных_ файлов. Такие файлы в `ls -l` будут отображаться как `d`, также они часто окрашены в синий цвет. Создать директорию можно с помощью команды `mkdir DIRNAME`. Если вам необходимо вместе с папкой создать еще ее родителей, то используйте флаг `-p`. @@ -26,7 +29,7 @@ subfolder == Links -*Ссылочные* файлы или символические ссылки (симлинки) -- это файлы, хранящие в себе путь до другого файла. При использовании такого файла ОС будет сама подставлять заместо него файл, на который указывает записанный путь. Такие файлы в `ls -l` будут отображаться как `l`. +*Ссылочные* файлы или символические ссылки (симлинки) -- это файлы, хранящие в себе путь до другого файла. При использовании такого файла ОС будет сама подставлять заместо него файл, на который указывает записанный путь. Такие файлы в `ls -l` будут отображаться как `l`, также они часто окрашены в циановый цвет. Создать симлинку можно с помощью команды `ln -s PATH LINKNAME`. Прочесть содержимое самой симлинки можно с помощью `readlink`. @@ -49,3 +52,56 @@ $ bat symlink ─────┴─────────────────────────────── ---- +== Named pipes + +*Именованные пайпы* -- это специальный вид файлов, позволяющий двум процессам отправлять сообщения. Пайп работает как односторонний канал отправки информации: существует только один слушатель, но при этом отправителей может быть несколько. Такие файлы в `ls -l` будут отображаться как `p`, также они часто окрашены в бледно-желтый цвет. + +Для создания таких файлов используется команда `mkfifo PIPENAME`. + +[,console] +---- +$ mkfifo npipe +$ ls -l +prw-r--r--. nbah nbah 0 B Thu Jun 25 12:40:30 2026 npipe +---- + +Операции записи и чтения являются блокирующими. Это означает, что если на одном конце никого нет, то процесс на другом конце будет ждать пока кто-то не придет. Попробуем сделать запись в пайп: `echo Hello > npipe`. Заметим, что терминал "завис", тогда откроем второй терминал и попробуем прочитать файл: `cat npipe`. В этот же момент первый терминал проснулся, а во втором вывелось `Hello`. Аналогично произойдет, если сделать наоборот. + +При одновременной записи в пайп больших размеров данных никаких гарантий на порядок данные не предоставляется. Откроем один терминал и в нем создадим три файла с 100тыс строк: +[.wrap,console] +---- +$ for sym in a b c d e; do yes ${sym} | head -n 100000 > ${sym}.in; done +---- +После попробуем записать их в пайп: +[.wrap,console] +---- +$ for sym in a b c d e; do cat ${sym}.in > npipe & ; done +---- +Теперь в другом терминале запустим команду: `cat npipe | uniq -d`. Она прочтет из пайпа и "схлопнет" последовательные дубликаты в один символ. + +.Возможные результаты +[%collapsible] +==== +В первый раз получим: + +`a c b c d e b c d e b c d e b d e` + +Во второй раз получим: + +`d e d e b a c d e b a c d b a c b a c` +==== + +== Sockets +// TODO +[TIP.todo] +==== +Пупупу +==== + +== Devices + +Файлы *устройств* представляют собой интерфейсы взаимодействия с устройствами, как если бы они были файлами. Они подразделяются на два вида: *блочные* (block) и *символьные* (character). Первые предоставляют буферизированный случайный доступ (buffered random access), когда как вторые предоставляют прямой доступ и не обязаны RA-устройствами. Также файловые системы могут быть смонтированы только на блочные устройства. Такие файлы в `ls -l` будут отображаться как `b` и `c`, a окрашены будут в бледно-желтый цвет. + +Подробно о девайсах описано xref:linux/devices.adoc[тут]. + + +// == Read more + From 7452d3cf6141fdf423aeb688cef4a60c25330d29 Mon Sep 17 00:00:00 2001 From: 1bah Date: Tue, 30 Jun 2026 23:49:23 +0300 Subject: [PATCH 12/14] Update nav --- modules/ROOT/nav.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 16d94b7..4a47238 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -6,3 +6,5 @@ .Linux FS * xref:linux/file-types.adoc[Типы файлов] * xref:linux/fhs.adoc[FHS] +* xref:linux/devices.adoc[] +* xref:linux/ttys.adoc[] From eaa4a8dd14bc1d2c654dcc5ab8f5ca71bf9986b7 Mon Sep 17 00:00:00 2001 From: 1bah Date: Sun, 5 Jul 2026 15:05:16 +0300 Subject: [PATCH 13/14] Add default params & support include adoc by URL --- antora-playbook.yml | 10 ++++ lib/remote-include-processor.js | 68 ++++++++++++++++++++++++ modules/ROOT/pages/authors.adoc | 1 - modules/ROOT/pages/code-of-conduct.adoc | 1 - modules/ROOT/pages/dev-guides.adoc | 3 +- modules/ROOT/pages/index.adoc | 2 - modules/ROOT/pages/linux/devices.adoc | 1 - modules/ROOT/pages/linux/fhs.adoc | 1 - modules/ROOT/pages/linux/file-types.adoc | 1 - modules/ROOT/pages/linux/ttys.adoc | 1 - 10 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 lib/remote-include-processor.js diff --git a/antora-playbook.yml b/antora-playbook.yml index b81bdfe..d386820 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,6 +1,7 @@ site: title: ProgTech Book start_page: ptbook::index.adoc + content: sources: - url: https://github.com/progtech-course/book @@ -10,6 +11,15 @@ ui: url: https://github.com/progtech-course/antora-ui/releases/download/latest/ui-bundle.zip snapshot: true supplemental_files: ./supplemental-ui + +asciidoc: + attributes: + experimental: '' + page-pagination: '' + allow-uri-read: '' + extensions: + - ./lib/remote-include-processor.js + antora: extensions: - require: '@antora/lunr-extension' diff --git a/lib/remote-include-processor.js b/lib/remote-include-processor.js new file mode 100644 index 0000000..1b4364d --- /dev/null +++ b/lib/remote-include-processor.js @@ -0,0 +1,68 @@ +'use strict' + +const { execFileSync } = require('node:child_process') +const fs = require('node:fs') +const { createHash } = require('node:crypto') + +/** + * An Asciidoctor include processor that handles remote (URL) includes. This version gets registered each time a + * document is loaded and is thus scoped to the document, which allows it to cache the contents of the URL for + * subsequent references. This extension relies on an internal API to look up and delegate to the default include + * processor once the URL is cached. It caches the URL in the ROOT component, so that component must be filtered + * out from the navigation in the UI template. + */ +function createExtensionGroup ({ contentCatalog }) { + return function () { + this.includeProcessor(function () { + this.prepend() // register in front of Antora's include processor + this.handles((target) => target.startsWith('https://') || target.startsWith('http://')) + this.process((doc, reader, target, attrs) => { + const cachedTarget = readUrl(contentCatalog, target) + if (cachedTarget === false) { + const cursor = reader.$cursor_at_prev_line() + const logMessage = doc.createLogMessage(`include uri not readable: ${target}`, { source_location: cursor }) + doc.getLogger().error(logMessage) + reader.pushInclude(`Unresolved directive in ${reader.path} - include::${target}[]`, target, target, 1, attrs) + return + } + const nextIncludeProcessor = findNextIncludeProcessor(doc, this, cachedTarget) + nextIncludeProcessor && nextIncludeProcessor.process_method['$[]'](doc, reader, cachedTarget, Opal.hash(attrs)) + }) + }) + } +} + +function readUrl (contentCatalog, url) { + contentCatalog.getComponentVersion('ROOT', '') || contentCatalog.registerComponentVersion('ROOT', '') + const src = { component: 'ROOT', version: '', module: 'cache', family: 'partial', relative: sha1(url) + '.adoc' } + let file = contentCatalog.getById(src) + if (!file) { + try { + file = contentCatalog.addFile({ contents: execFileSync('curl', ['--silent', '-L', url]), src }) + } catch { + file = contentCatalog.addFile({ contents: null, src }) + } + } + return file.contents == null ? false : 'ROOT:cache:partial$' + src.relative +} + +function sha1 (string) { + const shasum = createHash('sha1') + shasum.update(string) + return shasum.digest('hex') +} + +function findNextIncludeProcessor (doc, currentIncludeProcessor, target) { + let skip = true + return doc.getExtensions().$include_processors().find((candidate) => { + candidate = candidate.instance + if (skip) return candidate === currentIncludeProcessor ? (skip = false) : false + return candidate.handles(target) + }) +} + +module.exports.register = (registry, context) => { + const toProc = (fn) => Object.defineProperty(fn, '$$arity', { value: fn.length }) + registry.$groups().$store('remote-include-processor', toProc(createExtensionGroup(context))) + return registry +} diff --git a/modules/ROOT/pages/authors.adoc b/modules/ROOT/pages/authors.adoc index da64380..353905e 100644 --- a/modules/ROOT/pages/authors.adoc +++ b/modules/ROOT/pages/authors.adoc @@ -1,5 +1,4 @@ = Авторы -:page-pagination: :description: Авторы проекта Здесь можно найти информацию про людей, участвовавших в создании этого ресурса. diff --git a/modules/ROOT/pages/code-of-conduct.adoc b/modules/ROOT/pages/code-of-conduct.adoc index ed9f0c8..0b64800 100644 --- a/modules/ROOT/pages/code-of-conduct.adoc +++ b/modules/ROOT/pages/code-of-conduct.adoc @@ -1,5 +1,4 @@ = Code of conduct -:page-pagination: Все материалы на этом сайте являются открытыми и доступны всем. При их использовании ознакомьтесь с лицензией https://www.mozilla.org/en-US/MPL/2.0/[MPL-2.0], под которой распространяется проект. diff --git a/modules/ROOT/pages/dev-guides.adoc b/modules/ROOT/pages/dev-guides.adoc index ab8637f..1e38792 100644 --- a/modules/ROOT/pages/dev-guides.adoc +++ b/modules/ROOT/pages/dev-guides.adoc @@ -1,5 +1,4 @@ = Как разрабатывать сайт -:page-pagination: :page-authors: Иван Калинин == Инструменты @@ -88,4 +87,4 @@ WARNING: Не нужно это коммитить в репозиторий! CAUTION: При ее использовании просьба оставлять выше комментарий `// TODO` -- так IDE сможет трекать тудушки в проекте. -При написании страницы добавляйте параметр `:page-pagination:`, а также указывайте себя в `:page-authors:`. При указании авторства пишите так же, как в заголовке xref:authors.adoc[authors.adoc] -- иначе не сработают автоматические ссылки. +При написании страницы добавляйте параметр `:description:` с кратким описанием, о чем написано на странице, а также указывайте себя в `:page-authors:`. При указании авторства пишите так же, как в заголовке xref:authors.adoc[authors.adoc] -- иначе не сработают автоматические ссылки. diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc index 2fb7bfb..a999332 100644 --- a/modules/ROOT/pages/index.adoc +++ b/modules/ROOT/pages/index.adoc @@ -1,6 +1,4 @@ = ProgTech Book -// :page-authors: Иван Калинин -:page-pagination: :description: Материалы курса "Технологии программирования" Здесь собраны материалы курса "Технологии программирования". diff --git a/modules/ROOT/pages/linux/devices.adoc b/modules/ROOT/pages/linux/devices.adoc index 1ae8083..2932c0a 100644 --- a/modules/ROOT/pages/linux/devices.adoc +++ b/modules/ROOT/pages/linux/devices.adoc @@ -1,5 +1,4 @@ = Папка dev -:page-pagination: :page-authors: Иван Калинин :description: Устройство папки /dev diff --git a/modules/ROOT/pages/linux/fhs.adoc b/modules/ROOT/pages/linux/fhs.adoc index 351d2d1..54942a4 100644 --- a/modules/ROOT/pages/linux/fhs.adoc +++ b/modules/ROOT/pages/linux/fhs.adoc @@ -1,5 +1,4 @@ = Filesystem Hierarchy Standard -:page-pagination: :page-authors: Иван Калинин :description: Filesystem Hierarchy Standard (Linux) diff --git a/modules/ROOT/pages/linux/file-types.adoc b/modules/ROOT/pages/linux/file-types.adoc index 3eb4f98..0ea98f8 100644 --- a/modules/ROOT/pages/linux/file-types.adoc +++ b/modules/ROOT/pages/linux/file-types.adoc @@ -1,5 +1,4 @@ = Типы файлов -:page-pagination: :page-authors: Иван Калинин :description: Типы файлов в Linux diff --git a/modules/ROOT/pages/linux/ttys.adoc b/modules/ROOT/pages/linux/ttys.adoc index d36da83..bc40390 100644 --- a/modules/ROOT/pages/linux/ttys.adoc +++ b/modules/ROOT/pages/linux/ttys.adoc @@ -1,5 +1,4 @@ = Терминальные устройства -:page-pagination: :page-authors: Иван Калинин :description: Терминалы. PTS и TTY устройства. From aade0e44d702f70116000e1ce492c7ef5214667b Mon Sep 17 00:00:00 2001 From: 1bah Date: Sat, 25 Jul 2026 20:51:26 +0300 Subject: [PATCH 14/14] Add RPM draft & rename --- README.adoc | 6 +-- antora-playbook.yml | 11 ++--- antora.yml | 4 +- modules/ROOT/nav.adoc | 3 ++ modules/ROOT/pages/index.adoc | 6 +-- modules/ROOT/pages/utils/rpm.adoc | 67 +++++++++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 modules/ROOT/pages/utils/rpm.adoc diff --git a/README.adoc b/README.adoc index 13661ad..7922064 100644 --- a/README.adoc +++ b/README.adoc @@ -1,11 +1,11 @@ -= ProgTech Book -:url-project: https://github.com/progtech-course/book/actions/workflows += DevTools Book +:url-project: https://github.com/devtools-course/book/actions/workflows :workflow: site.yml :img-ci-status: {url-project}/{workflow}/badge.svg image:{img-ci-status}[CI Status] -Материалы курса "Технологии Программирования". +Материалы курса "Инструменты разработчика". Проект распространяется под лицензией link:LICENSE[MPL-2.0]. diff --git a/antora-playbook.yml b/antora-playbook.yml index d386820..957b173 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,14 +1,15 @@ site: - title: ProgTech Book - start_page: ptbook::index.adoc + title: DevTools Book + start_page: book::index.adoc content: sources: - - url: https://github.com/progtech-course/book + - url: . branches: [ '*' ] ui: bundle: - url: https://github.com/progtech-course/antora-ui/releases/download/latest/ui-bundle.zip + url: https://github.com/devtools-course/antora-ui/releases/download/latest/ui-bundle.zip +# url: /home/nbah/antora-ui-default/build/ui-bundle.zip snapshot: true supplemental_files: ./supplemental-ui @@ -26,4 +27,4 @@ antora: languages: [en, ru] #runtime: -# fetch: true \ No newline at end of file +# fetch: true diff --git a/antora.yml b/antora.yml index 455e9bb..3f554f2 100644 --- a/antora.yml +++ b/antora.yml @@ -1,5 +1,5 @@ -name: ptbook +name: book version: dev -title: ProgTech Book +title: DevTools Book nav: - modules/ROOT/nav.adoc diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 4a47238..980c53d 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -8,3 +8,6 @@ * xref:linux/fhs.adoc[FHS] * xref:linux/devices.adoc[] * xref:linux/ttys.adoc[] + +.Packages & Archives +* xref:utils/rpm.adoc[] diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc index a999332..9980fe9 100644 --- a/modules/ROOT/pages/index.adoc +++ b/modules/ROOT/pages/index.adoc @@ -1,7 +1,7 @@ -= ProgTech Book -:description: Материалы курса "Технологии программирования" += DevTools Book +:description: Материалы курса "Инструменты разработчика" -Здесь собраны материалы курса "Технологии программирования". +Здесь собраны материалы курса "Инструменты разработчика". image::crya.png[] diff --git a/modules/ROOT/pages/utils/rpm.adoc b/modules/ROOT/pages/utils/rpm.adoc new file mode 100644 index 0000000..cfca454 --- /dev/null +++ b/modules/ROOT/pages/utils/rpm.adoc @@ -0,0 +1,67 @@ += RPM пакеты + +Дистрибутивы Red Hat семейства используют пакетный менеджер `rpm`. На базе него есть пакетные менеджеры `yum` и `dnf`. + +== Rpmbuild + +Для разработки `rpm` пакетов используется директория `~/rpmbuild`. Ее можно автоматически настроить с помощью команды `rpmdev-setuptree` из `rpmdevtools` или вручную: + +[,text] +---- +🖿 /home/USER/rpmbuild +├─ 🖿 BUILD +├─ 🖿 RPMS +├─ 🖿 SOURCES +├─ 🖿 SPECS +└─ 🖿 SPRMS +---- + +* `BUILD` -- директория в которой происходит сборка пакетов +* `RPMS` -- директория для хранения `rpm`-пакетов +* `SOURCES` -- директория для хранения архивов с исходниками для использования при сборке пакетов +* `SPECS` -- директория для хранения `spec`-файлов +* `SRPMS` -- директория для хранения `srpm`-пакетов + +== Spec файлы + +Для создания своего `rpm`-пакета необходимо создать архив с исходниками и файл описания сборки пакета. Последний должен иметь имя `.spec`. Его можно создать как вручную в папке `SPECS`, так и выполнив команду `rpmdev-newspec `. Рассмотрим основные компоненты спецификации: + +Преамбула:: +[%autowidth] +|=== +| `Name` | Название пакета +| `Version` | Версия исходного кода +| `Release` | Номер релиза, newspec по дефолту выставит `1%{?dist}` +| `Summary` | Краткое описание проекта +| `License` | Лицензия под которой распространяется проект +| `URL` | URL сайта проекта +| `Source` | URL исходного кода +| `BuildRequires` | Зависимости, необходимые для сборки пакета +| `Requires` | Рантайм зависимости +| `BuildArch` | Под какую архитектуру собран проект +|=== + +Тело:: +[%autowidth] +|=== +| `%description` | Подробное описание проекта +| `%prep` | Скрипт подготовки исходников к сборке +| `%build` | Скрипт сборки проекта +| `%install` | Скрипт установки проекта в `%{buildroot}` +| `%files` | Индекс файлов, которые будут установлены +| `%changelog` | Описания изменений проекта +|=== + +// TODO +[TIP.todo] +==== +Дописать +==== + + + +== Read more + +* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/packaging-software_packaging-and-distributing-software[RPM documentation (C) Red Hat] +* https://docs.fedoraproject.org/en-US/packaging-guidelines/RPMMacros/[Predefined macros (C) Fedora docs] +* http://ftp.rpm.org/max-rpm/[Maximum RPM (C) Edward C. Bailey]