aboutsummaryrefslogtreecommitdiffstats
path: root/russian/ports/hurd/hurd-devel-debian.wml
blob: 1651426257869289608d314495faf9eec76b5d0c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#use wml::debian::template title="Debian GNU/Hurd — Разработка" NOHEADER="yes"
#include "$(ENGLISHDIR)/ports/hurd/menu.inc"
#use wml::debian::translation-check translation="1ee233788cf476e1bd555018a37476e483d815f4" maintainer="Lev Lamberov"

<h1>
Debian GNU/Hurd</h1>
<h2>
Разработка дистрибутива</h2>

<h3>
Перенос пакетов Debian</h3>
<p>
Если вы хотите помочь переносу Debian GNU/Hurd, вам следует познакомиться
с системой создания пакетов Debian. После того, как вы прочтёте
доступную документацию и посетите <a
href="$(HOME)/devel/">Уголок разработчика</a>, вы будете знать, как
распаковывать пакеты Debian с исходным кодом и собирать пакеты Debian. Для
ленивых людей имеется ускоренный курс:</p>

<h3>
Получение исходного кода и сборка пакетов</h3>

<p>
Вы можете получить исходный код, просто выполнив команду <code>apt source
package</code>, эта команда также развернёт исходный код.
</p>

<p>
Для распаковки пакета Debian с исходным кодом требуется файл
<code>package_version.dsc</code> и указанные в нём файлы. Вы создаёте
каталог Debian для сборки с помощью команды
<code>dpkg-source -x package_version.dsc</code>
</p>

<p>
Сборка пакета происходит в созданном каталоге Debian для сборки
<code>package-version</code> с помощью команды
<code>dpkg-buildpackage -B "-mMyName &lt;MyEmail&gt;"</code>.
Вместо <code>-B</code> вы можете использовать
<code>-b</code>, если также хотите собрать независимые от архитектуры
части пакета. Вы можете добавить
<code>-uc</code>, чтобы не подписывать пакет вашим ключом pgp.</p>

<p>
Для сборки могут потребоваться дополнительные пакеты. Проще всего
выполнить команду <code>apt build-dep package</code>, которая установит все требуемые пакеты.
</p>

<p>
Удобно испольовать pbuilder. Пакет может быть собран с помощью команды
<code>sudo pbuilder create --mirror http://deb.debian.org/debian-ports/ --debootstrapopts --keyring=/usr/share/keyrings/debian-ports-archive-keyring.gpg --debootstrapopts --extra-suites=unreleased --extrapackages debian-ports-archive-keyring</code>,
затем можно использовать команду <code>pdebuild -- --binary-arch</code>, которая загрузит сборочные зависимости и др., а потом поместит результат в <code>/var/cache/pbuilder/result</code>.
</p>

<h3>
Выберите пакет</h3>
<p>
Над каким пакетом нужно поработать? Ну, над любым пакетом, который
ещё не был перенесён, но должен быть перенесён. Список таких пакетов постоянно меняется,
поэтому предпочтительно сконцентрироваться в первую очередь на пакетах с большим количеством обратных
зависимостей, список таких пакетов можно посмотреть на графике зависимости пакетов
<url "https://people.debian.org/~sthibault/graph-radial.pdf">, обновляемом каждый день,
либо в списке наиболее желаемых пакетов
<url "https://people.debian.org/~sthibault/graph-total-top.txt"> (это
список пакетов, желаемых в далёкой перспективе, список пакетов, желаемых в короткой перспективе находится здесь:
<url "https://people.debian.org/~sthibault/graph-top.txt">).
Неплохо также выбрать какой-нибудь пакет из списков устаревших пакетов
<url "https://people.debian.org/~sthibault/out_of_date2.txt"> и
<url "https://people.debian.org/~sthibault/out_of_date.txt">, поскольку обычно они
работают, но сломаны в настоящий момент лишь вероятно из-за пары каких-то причин.
Вы также можете случайным образом выбрать один из отсутствующих пакетов, либо посмотреть
журналы автоматической сборки в списке рассылки debian-hurd-build-logs, либо использовать
список пакетов, которые требуют доработки
<url "https://people.debian.org/~sthibault/failed_packages.txt"> .
</p>
<p>
Также проверьте, может быть работа по переносу какого-то пакета уже выполнена, см.
<url "https://alioth.debian.org/tracker/?atid=410472&amp;group_id=30628&amp;func=browse">,
<url "https://alioth.debian.org/tracker/?atid=411594&amp;group_id=30628&amp;func=browse">,
систему отслеживания ошибок (<url "https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-hurd@lists.debian.org;tag=hurd">) и <url "https://wiki.debian.org/Debian_GNU/Hurd">,
а также статус пакетов на buildd.debian.org, напр.
<url "https://buildd.debian.org/util-linux">.
</p>

<h4>
Пакеты, которые не будут перенесены</h4>
<p>
Некоторые из этих пакетов или их части могут быть перенесены позже, но
в настоящее время они считаются по меньшей мере непереносимыми. Обычно
они помечены как NotForUs в базе данных buildd.
</p>

<ul>
<li>
<code>base/makedev</code>, поскольку Hurd имеет свою собственную версию
этого сценария. Пакет Debian с исходным кодом содержит только версию,
специфичную для Linux.</li>
<li>
<code>base/modconf</code> и <code>base/modutils</code>, поскольку
концепция модулей специфична для Linux.</li>
<li>
<code>base/netbase</code>, поскольку оставшаяся часть этого специфична для
ядра Linux. Hurd использует
<code>inetutils</code>.</li>
<li>
<code>base/pcmcia-cs</code>, поскольку этот пакет специфичен для Linux.</li>
<li>
<code>base/setserial</code>, поскольку это специфично для ядра
Linux. Тем не менее, с переносом символьных драйверов Linux на GNU Mach, мы,
вероятно, сможем использовать эту функциональность.</li>
</ul>

<h3> <a name="porting_issues">
Общие проблемы переноса</a></h3>
<p>
<a href=https://www.gnu.org/software/hurd/hurd/porting/guidelines.html>Список
общих проблем</a> доступен на веб-сайте основной ветки разработки. Следующие общие
проблемы специфичны для Debian.</p>
<p>До того, как предпринять попытку исправить что-то, проверьте, может быть в переносе на kfreebsd*
это уже исправлено и нужно лишь распространить это решение на hurd-i386.</p>

<ul>
<li>
<code>Сломанная зависимость libc6</code>
<p>
Некоторые пакеты используют ошибочную зависимость от <code>libc6-dev</code>. Это
неправильно, поскольку <code>libc6</code> специфична для некоторых архитектур
GNU/Linux. Соответствующий пакет для GNU &mdash; <code>libc0.3-dev</code>,
но другие операционные системы имеют свои пакеты. Мы можем обнаружить проблему в
файле <code>debian/control</code> в дереве исходного кода. Типичное решение предполагает
обнаружение операционной системы, используя <code>dpkg-architecture</code>, и добавления
версии so-библиотеки (soname), или, что ещё лучше, использования логического ИЛИ, напр.:
<code>libc6-dev | libc6.1-dev | libc0.3-dev | libc0.1-dev | libc-dev</code>.
Пакет <code>libc-dev</code> является
виртуальным пакетом, которые работает для любой версии so-библиотеки, но вам следует указывать его только
как последнее средство.</p></li>
<li>
<code>undefined reference to snd_*, SND_* undeclared</code>
<p>
Некоторые пакеты используют ALSA даже на архитектурах, отличных от Linux. Пакет oss-libsalsa
предоставляет некоторую эмуляцию над OSS, но он ограничен 1.0.5, и не предоставляет
некоторые возможности, такие как все операции секвенсера.
</p>
<p>
Если пакет разрешает это, поддержка alsa должна быть отключена на всех
архитектурах <code>!linux-any</code> (например, через параметр
<code>configure</code>), к alsa <code>Build-Depends</code> добавлен спецификатор <code>[linux-any]</code>,
а к <code>Build-Conflicts</code> добавлено
обратное утверждение, такое как
<code>Build-Conflicts: libasound2-dev [!linux-any]</code>.
</p>
</li>
<li>
<code>dh_install: не удаётся найти (совпадения с) "foo" (попытка произведена в ., debian/tmp)</code>
<p>
Обычно это случается в том случае, когда код из основной ветки разработки не выполняет
установку, если не удаётся определить операционную систему. Иногда это просто глупо
(например, код не знает, что сборка разделяемой библиотеки на GNU/Hurd полностью совпадает со
сборкой на GNU/Linux) и нужно это исправить. Иногда эта проблема имеет смысл (например, не установлены
файлы служб systemd). В этом случае можно использовать dh-exec: добавьте <tt>dh-exec</tt> в список
сборочных зависимостей, выполните команду <tt>chmod +x</tt> для файла <tt>.install</tt> и добавьте к проблемным
строкам <tt>[linux-any]</tt> или <tt>[!hurd-any]</tt>.
</p>

<h3> <a name="debian_installer">
Изучение и работа с программой установки Debian</a></h3>

<p>
Чтобы создать ISO-образ, проще всего начать с существующего образа, размещённого на <a href=hurd-cd>странице CD-образов Hurd</a>. Его можно примонтировать и скопировать:
</p>

<table><tr><td>&nbsp;</td><td class=example><pre>
mount debian-sid-hurd-i386-NETINST-1.iso /mnt
cp -a /mnt /tmp/myimage
umount /mnt
chmod -R +w /tmp/myimage
</pre></td></tr></table>

<p>
Далее, можно примонтировать начальный ram-диск и, например, заменить какой-то транслятор на ту версию, которая вам нужна:
</p>

<table><tr><td>&nbsp;</td><td class=example><pre>
gunzip /tmp/myimage/initrd.gz
mount /tmp/myimage/initrd /mnt
cp ~/hurd/rumpdisk/rumpdisk /mnt/hurd/
umount /mnt
gzip /tmp/myimage/initrd
</pre></td></tr></table>

<p>
Теперь можно заново собрать iso с помощью grub-mkrescue:
</p>

<table><tr><td>&nbsp;</td><td class=example><pre>
rm -fr /tmp/myimage/boot/grub/i386-pc
grub-mkrescue -o /tmp/myimage.iso /tmp/myimage
</pre></td></tr></table>
</li>
</ul>

© 2014-2024 Faster IT GmbH | imprint | privacy policy