File: README

package info (click to toggle)
di-netboot-assistant 0.78~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 312 kB
  • sloc: sh: 1,511; makefile: 2
file content (372 lines) | stat: -rw-r--r-- 15,808 bytes parent folder | download | duplicates (2)
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372

                 Debian-Installer NetBoot Assistant
                ====================================

Overview
--------
    'di-netboot-assistant' is a tool to simplify the preparation of
    files for TFTP net booting: It downloads and extracts all the
    files needed and takes care of organizing them.
    In addition, it prepares a top level menu, which allows to choose
    from all installed netboot images.
    It supports completely automatic installations by preseeding the
    installer.  For details consult the 'README.preseed'.


QuickStart
----------
    1. Install the 'di-netboot-assistant' package and a TFTP
       server, for example 'dnsmasq' configured with
       'enable-tftp' [2].
    2. Run 'di-netboot-assistant install stable' or similar.
       'di-netboot-assistant install' returns a list of netboot images
       available for download and installation.
    3. Configure a DHCP server, as explained in [1]. For further
       information, read the 'architecture specific notes' below and
       the example configuration samples [2].

    For a more detailed example consult the 'README.installbox'.


Packaged Debian-Installer Images
--------------------------------
    You can also use the images provided by the
    debian-installer-*-netboot-* packages.

    1. Install the needed debian-installer-*-netboot-* packages.
    2. Bind mount (use 'ro' only if no firmware is needed) or copy
       '/usr/lib/debian-installer/' to your tftp root directory:

         mount -o bind,ro  /usr/lib/debian-installer/  $TFTP_ROOT/d-i/n-pkg/

       To make this persistent, add the following line to '/etc/fstab':

         /usr/lib/debian-installer/  $TFTP_ROOT/d-i/n-pkg/  none  bind,ro  0  0

    3. Add the corresponding menu entries to the boot menu by running:

         di-netboot-assistant -v rebuild-menu


Debian Live ISO Images
----------------------
    Finally, you can also provide Debian Live ISO images.

    1. Download the ISO image of interest.
    2. Mount the ISO image within your tftp root directory
       below '$TFTP_ROOT/d-i/n-live/':

         mount -o loop,ro  /PATH/TO/IMAGE.iso  $TFTP_ROOT/d-i/n-live/ISO_NAME

       To make this persistent, add the following line to '/etc/fstab':

         /PATH/TO/IMAGE.iso  $TFTP_ROOT/d-i/n-live/ISO_NAME  iso9660  loop,ro  0  0

    3. Add the corresponding menu entries to the boot menu by running:

         di-netboot-assistant -v rebuild-menu

    NOTE: In case you prefer to provide filesystem.squashfs by faster means
          than the TFTP server, use the variable $ISO_NAME in SQUASHIMG=…,
          c.f. '/etc/di-netboot-assistant/di-netboot-assistant.conf'.


TFTP server
-----------
    Depending on the TFTP server you use, adjust either 'TFTP_ROOT='
    in '/etc/di-netboot-assistant/di-netboot-assistant.conf' or the
    root directory of the TFTP server.


DHCP server
-----------
    There are two typical scenarios:
                                     ┌────────┐
         __                          │ Switch │  ┌───────────────────┐
      __/  \__                       └─┬──┬─┬─┘  │     This host     │
     /        \    ┌──────────────┐    │  │ │    │    is the only    │
    ( Internet )───┤ (DSL) Modem  ├────┘  │ └────┤    DHCP server    │
     \__    __/    │   or router  │       │      └───────────────────┘
        \__/       └──────────────┘       │    ┌───────────────────┐
                                          └────┤ A client computer │
                                               └───────────────────┘

    First case:  The TFTP server also provides DHCP for the local
                 network.  This is the most simple and recommended
                 configuration.  You simply have to add some options
                 to enable netbooting (typically, the filename to
                 boot, and the tftp server's address).  Read [1],
                 examples [2] and architecture specific notes.

                                      ┌────────┐
         __                           │ Switch │
      __/  \__     ┌───────────────┐  └─┬──┬─┬─┘
     /        \    │  (DSL) Modem  │    │  │ │    ┌───────────────────┐
    ( Internet )───┤      with     ├────┘  │ └────┤     This host     │
     \__    __/    │ build─in DHCP │       │      └───────────────────┘
        \__/       └───────────────┘       │    ┌───────────────────┐
                                           └────┤ A client computer │
                                                └───────────────────┘

    Second case: A DHCP already exists, but you can't/don't want to use it
                 for netbooting. This isn't the recommended configuration,
                 but it was successfully tested for netbooting PXE clients
                 (i386, amd64 and ia64) on network where the existing DHCP
                 server didn't provide netboot informations.
                 !!!! Do not setup rogue dhcp servers in your company !!!!

                 In this situation, you have to divide your DHCP subnet in
                 two ranges of IP address. The first range will still be
                 served by the existing DHCP server.
                 The second part will be served by "this host". It will only
                 reply to DHCP request sent during PXE netboot step. This is
                 possible because client computers (actually, their PXE agent
                 in the NIC's ROM) sends an option like this during PXE boot:
                    vendor-class-id= "PXEClient:Arch:00000:UNDI:002001"
                 Both dhcpd and dnsmasq can be instructed to provide answer
                 depending on such strings.

                 Note: For easy _home_ setup, you can choose not to reduce the
                 range of IP served by the existing DHCP server, and just
                 declare a *small* range of addresses on *both* DHCP (some
                 addresses that are unlikely to be used on the first one)
                 That's ugly, but it can work ! (as long your existing DHCP
                 don't allocate some of those IP ;-)


Using 'dnsmasq'
---------------
    'dnsmasq' is a simple all-in-one (DNS, DHCP and TFTP) server.

  QuickStart :
    Install the package 'dnsmasq':
        apt install dnsmasq

    Create the TFTP server's root directory:
	mkdir /var/lib/tftpboot

    Configure 'dnsmasq':
        cp /usr/share/doc/di-netboot-assistant/examples/dnsmasq.conf.simple \
                                               /etc/dnsmasq.d/netboot-installer
        systemctl restart dnsmasq

    Install the netboot images:
        di-netboot-assistant install stable


Running as non-root
-------------------
    It is possible to run di-netboot-assistant as non root. There are
    actually two ways to achieve that:

  • Delegate to a group (that manage the system wide netboot images)

        In this case, we want to delegate the management of netboot files
        to one or more people that don't have access to root account.

        Create a group and add those user to the group
            addgroup dina-admin
            adduser johndoe dina-admin

        Purge the package (and existing files that are owned by root !).
            # Note : you will loose existing configuration file!
            apt-get purge di-netboot-assistant

        Allow that group to modify the files
            # note: the four lines below are on single command.
            for dir in /var/cache/di-netboot-assistant \
                /var/lib/di-netboot-assistant \
                /var/lib/tftpboot/; do
                dpkg-statoverride --update --add root dina-admin 2775 $dir
            done

            # add the following line in di-netboot-assistant.conf, so
            # so new file are writable by other members of the group.
            umask 0002

            # Do not grant write permission on di-netboot-assistant.conf to
            # anybody but root. This would lead to privilege escalation since
            # the configuration file are executed (sourced) by the script.

        Reinstall the package
            apt-get install di-netboot-assistant

  • Per-user tftpboot
        It is possible to have per user configuration files and repositories.
        The user just have to create a configuration file in
           ~/.di-netboot-assistant/di-netboot-assistant.conf
        and configure it. A sample file is provided in
           /usr/share/doc/di-netboot-assistant/examples/peruser.di-netboot-assistant.conf

  • Sudo
        Do *NOT* expect the restriction of a sudo user to only run di-netboot-assistant
        to be a restriction at all:  It allows one to become root (because the sudoer
        can edit ~/.di-netboot-assistant/*).


Testing
-------
    qemu/kvm can emulate a TFTP server, so it's easy to test netboot:

        TFTP_ROOT="/var/lib/tftpboot/"

        qemu-system-x86_64 -enable-kvm -m 1024 -boot n -net nic \
                           -net user,tftp=$TFTP_ROOT,bootfile=/d-i/n-a/pxelinux.0

    or with 'Open Virtual Machine Firmware' (ovmf) installed:

        qemu-system-x86_64 -enable-kvm -m 1024 -boot n -net nic -bios /usr/share/OVMF/OVMF_CODE.fd \
                           -net user,tftp=$TFTP_ROOT,bootfile=/d-i/n-a/bootnetx64.efi

        qemu-system-x86_64 -enable-kvm -m 1024 -boot order=n \
          -net nic,netdev=net0 \
          -bios /usr/share/OVMF/OVMF_CODE.fd \
          -netdev user,id=net0,tftp=$TFTP_ROOT,bootfile=/d-i/n-a/bootnetx64.efi \
          -object filter-dump,id=net0,netdev=net0,file=/tmp/neboot.pcap

        qemu-system-aarch64 -machine virt -m 1024 -cpu cortex-a57 -boot order=n \
          -device virtio-net-device,netdev=net0 \
          -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
          -netdev user,id=net0,tftp=$TFTP_ROOT,bootfile=/d-i/n-a/bootnetaa64.efi \
          -object filter-dump,id=net0,netdev=net0,file=/tmp/neboot.pcap

Mirrors
-------
    The file 'di-sources.list' contains the canonical URLs for
    repositories of netboot image.
    You can set the variable 'MIRROR_REGEXPS' to rewrite the URLs to
    your preferred mirror (you can specify multiple space-separated
    regexp).

    For example, if you want to search "://ftp.debian.org/" and
    replace it with "://ftp.fr.debian.org/debian/", then you declare
    MIRROR_REGEXPS="s=://ftp.debian.org/=://ftp.fr.debian.org/debian/="
    in '/etc/di-netboot-assistant/di-netboot-assistant.conf'.


Architecture specific notes
---------------------------
The notes in this section might not be up to date, as different Debian releases
support different architectures and systematic testing of 'di-netboot-assistant'
for exotic ones does not happen.  Do not hesitate to get in contact with the
maintainers if you would like to add additional support or further suggestions.

• i386 / amd64
    The Debian-Installer uses Syslinux's PXElinux[3] for BIOS
    platforms.  Syslinux is a boot-loader that provide a menu system
    to select the kernel you want to boot.
    For systems with EFI, grub-efi and the grub menu system is used.
    Make sure you have the grub-efi-amd64-bin package installed for
    building the grub-efi netboot image.  Secure boot is supported and
    available with 'grub-efi-amd64-signed' and 'shim-signed' installed.
    Run 'di-netboot-assistant rebuild-grub' to use the signed images.

    Absolute filenames in PXElinux:
      TFTP filenames inside PXElinux configuration files
      ('pxelinux.HEAD', 'default', …) must be prefixed with '::/'.
      PXElinux then treats them as absolute filenames (starting from
      the root of the TFTP server).  Paths starting with a slash ('/')
      are relative to the directory of 'pxelinux.0'.

    Configure DHCP:

        - In /etc/dhcp/dhcpd.conf (for isc-dhcp-server), configure the
          TFTP server's IP address:

           next-server 192.168.0.10;

        - Provide netboot/pxelinux information:

           filename "d-i/n-a/pxelinux.0";

        and/or:

           filename "d-i/n-a/bootnetx64.efi";

        for the grub EFI image.  Consult the examples [2] on how to
        configure the DHCP server to send the correct file automatically.

        If you prefer to boot a specific installer, make it the default
        in the top level menu and automatically boot it (perhaps after
        some timeout).

  The architectures below are rarely tested and the information might
  be out of date.  Help in providing support for them is highly
  appreciated.

• iPXE
    A iPXE script is provided to chainload 'pxelinux.0' or
    'bootnetx64.efi'.  Check the examples [2] on how to configure the
    DHCP server to send the boot.ipxe script to the client.

• ia64
    Support for ia64 was available in older versions of
    'di-netboot-assistant', but has been removed due to insufficient
    developer support.

• alpha
• hppa
• sparc
    Those  architectures  netboot using  BOOTP  (some  can use RARP or
    DHCP).  They don't have a boot-loader that would present a menu at
    boot-time.  This means that you must configure the DHCP server to
    provide one given kernel. (The DHCP server can of course provide
    different kernel images, based on the MAC and/or IP address).

    You can declare a kernel filename for all hosts in
    '/etc/dhcpd3/dhcpd.conf':

        subnet 192.168.0.0 netmask 255.255.255.0 {
            filename "d-i/n-a/stable/sparc/boot.img"
        }

    or declare a single host:

        host myhost1 {
            hardware ethernet 00:40:63:d8:02:2c;
            filename "d-i/n-a/stable/sparc/boot.img"
        }

• arm, armel, armhf, arm64
    Start u-boot, stop autoboot and enter at the prompt:
      => dhcp
      => pxe get
      => pxe boot
    Then choose an entry from the installer boot menu.

• mips,mipsel,mips64el
    Those architectures can do netbooting, but are not supported  by
    this tool at the moment (because there is no '.tar.gz' archive).

• m68k
• ppc64el
• s390, s390x


See also
--------
    http://wiki.debian.org/DebianInstaller/NetbootAssistant
    http://www.debian.org/releases/stable/debian-installer/

--------------------------------------------------------------------------
    [1] "Installation Guide", especially the sections
        "4.6 Preparing Files for TFTP Net Booting"
        and "5.1.5 Booting with TFTP"
        http://www.debian.org/releases/stable/installmanual

    [2] Sample DHCP configuration files:
        /usr/share/doc/di-netboot-assistant/examples/dnsmasq.conf.simple
        /usr/share/doc/di-netboot-assistant/examples/dnsmasq.conf.multiarch
        /usr/share/doc/di-netboot-assistant/examples/dhcpd.conf.simple
        /usr/share/doc/di-netboot-assistant/examples/dhcpd.conf.multiarch

    [3] PXElinux homepage.
        http://syslinux.zytor.com/wiki/index.php/PXELINUX

    [ ] Preboot Execution Environment (PXE) Specification
        http://www.intel.com/design/archives/wfm/downloads/pxespec.htm

    [ ] Extensible Firmware Interface (EFI)
        http://developer.intel.com/technology/efi/index.htm

 -- Franklin PIAT, Andreas B. Mundt