website annotate pt/doc/scratchbook/base-system.html @ rev 537

pt: localy browseable (with file://)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Aug 19 16:52:20 2009 +0200 (2009-08-19)
parents 64306af23f92
children 17d06d9a2ab0
rev   line source
claudinei@267 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
claudinei@267 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
claudinei@267 3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
claudinei@267 4 <head>
claudinei@267 5 <title>SliTaz Scratchbook - Base System</title>
claudinei@267 6 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
claudinei@267 7 <meta name="description" content="" />
claudinei@267 8 <meta name="expires" content="never" />
claudinei@267 9 <meta name="modified" content="2008-11-22 17:00:00" />
claudinei@267 10 <meta name="publisher" content="www.slitaz.org" />
claudinei@267 11 <meta name="author" content="Christophe Lincoln"/>
claudinei@267 12 <link rel="shortcut icon" href="favicon.ico" />
claudinei@267 13 <link rel="stylesheet" type="text/css" href="book.css" />
claudinei@267 14 </head>
claudinei@267 15 <body bgcolor="#ffffff">
claudinei@267 16
claudinei@267 17 <!-- Header and quick navigation -->
claudinei@267 18 <div id="header">
claudinei@267 19 <div align="right" id="quicknav">
claudinei@267 20 <a name="top"></a>
claudinei@267 21 <a href="index.html">Table of contents</a> |
claudinei@267 22 <a href="base-apps.html">Base apps</a>
claudinei@267 23 </div>
claudinei@267 24 <h1><font color="#3E1220">SliTaz Scratchbook</font></h1>
claudinei@267 25 </div>
claudinei@267 26
claudinei@267 27 <!-- Content. -->
claudinei@267 28 <div id="content">
claudinei@267 29 <div class="content-right"></div>
claudinei@267 30
claudinei@267 31
claudinei@267 32 <h2><font color="#df8f06">Base System</font></h2>
claudinei@267 33 <p>
claudinei@267 34 Build a SliTaz GNU/Linux distro running in RAM and using BusyBox.
claudinei@267 35 </p>
claudinei@267 36 <ul>
pascal@537 37 <li><a href="index.html#about">About.</a></li>
pascal@537 38 <li><a href="index.html#src">Wget src.</a></li>
pascal@537 39 <li><a href="index.html#prepa">Unpack and prepare the Linux kernel.</a></li>
pascal@537 40 <li><a href="index.html#rootfs">Creation of the Root System</a>, the root
claudinei@267 41 file System (rootfs).</li>
pascal@537 42 <li><a href="index.html#config">Configure the box.</a></li>
pascal@537 43 <li><a href="index.html#initramfs">Generate the initramfs</a>, compressed cpio archive.</li>
pascal@537 44 <li><a href="index.html#rootcd">Construction of the root of the cdrom</a> (rootcd), and the
claudinei@267 45 configuration files of Syslinux.</li>
pascal@537 46 <li><a href="index.html#mkiso">Create an ISO image with genisoimage or mkisofs.</a></li>
pascal@537 47 <li><a href="index.html#testiso">Burn or test the ISO with Qemu.</a></li>
claudinei@267 48 </ul>
claudinei@267 49 <a name="about"></a>
claudinei@267 50 <h3><font color="#6c0023">About</font></h3>
claudinei@267 51 <p>
claudinei@267 52 This document describes the construction of the SliTaz base system and why we use a
claudinei@267 53 Linux Kernel, BusyBox and Syslinux to boot the system. SliTaz uses an initramfs
claudinei@267 54 archive unpacked in RAM by the kernel at boot. We will create a box to hold a
claudinei@267 55 root of 3 to 4MB and use strip on the libraries and binaries to save space.
claudinei@267 56 </p>
claudinei@267 57 <p>
claudinei@267 58 The scripts and configuration files are created with GNU nano, using the keystroke
claudinei@267 59 &lt;ctrl+x&gt; to save and exit. But of course you are free to replace with your own text editor.
claudinei@267 60 </p>
claudinei@267 61 <p>
claudinei@267 62 This document is based on a howto found in the archive of BusyBox, which is itself based on
claudinei@267 63 a paper presented by Erik Anderson in the Embedded Systems Conference in 2001.
claudinei@267 64 </p>
claudinei@267 65 <a name="src"></a>
claudinei@267 66 <h3><font color="#6c0023">Wget src</font></h3>
claudinei@267 67 <p>
claudinei@267 68 Create a src directory for downloading and compiling:
claudinei@267 69 </p>
claudinei@267 70 <pre> # mkdir -p src
claudinei@267 71 # cd src
claudinei@267 72 </pre>
claudinei@267 73 <ul>
claudinei@267 74 <li>Linux Kernel 2.6.20
claudinei@267 75 (<a href="http://www.kernel.org/">http://www.kernel.org/</a>).
claudinei@267 76 <pre># wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2</pre>
claudinei@267 77 </li>
claudinei@267 78 <li>Busybox 1.2.2
claudinei@267 79 (<a href="http://www.busybox.net/">http://www.busybox.net/</a>).
claudinei@267 80 <pre># wget http://www.busybox.net/downloads/busybox-1.2.2.tar.bz2</pre>
claudinei@267 81 </li>
claudinei@267 82 <li>Syslinux 3.35
claudinei@267 83 (<a href="http://syslinux.zytor.com/">http://syslinux.zytor.com/</a>).
claudinei@267 84 <pre># wget ftp://ftp.kernel.org/pub/linux/boot/syslinux/syslinux-3.35.tar.gz</pre>
claudinei@267 85 </li>
claudinei@267 86 <li>SliTaz tools 1.1. Download SliTaz tools, unpack, save the file in src/ and that's it:
claudinei@267 87 <pre> # wget http://download.tuxfamily.org/slitaz/sources/tools/slitaz-tools-1.1.tar.gz
claudinei@267 88 # tar xzf slitaz-tools-1.1.tar.gz</pre>
claudinei@267 89 </li>
claudinei@267 90 </ul>
claudinei@267 91 <a name="prepa"></a>
claudinei@267 92 <h3><font color="#6c0023">Unpack and prepare the Linux Kernel</font></h3>
claudinei@267 93 <p>
claudinei@267 94 We will begin by compiling a Linux kernel, which may take a little time.
claudinei@267 95 </p>
claudinei@267 96 <h4>Linux Kernel</h4>
claudinei@267 97 <p>
claudinei@267 98 Your kernel must support the intramfs filesystem, otherwise the cdrom will not start. You can
claudinei@267 99 also install the modules in a directory so as not to touch the host system. The configuration
claudinei@267 100 of the Linux kernel sources is done by <code>make menuconfig</code> using ncurses or graphically
claudinei@267 101 with <code>make gconfig</code> or <code>make xconfig</code> using GTK development packages and/or
claudinei@267 102 QT respectively. You can find in <a href="http://www.slitaz.org/en/doc/cookbook/slitaz-tools.html">SliTaz tools</a>,
claudinei@267 103 Makefiles for the various 2.6.xx kernels.
claudinei@267 104 </p>
claudinei@267 105 <p>
claudinei@267 106 A feature of the 2.6 kernels is that if we make menuconfig, xconfig or config for the first time,
claudinei@267 107 the setup menu is displayed based on the configuration of our current kernel.
claudinei@267 108 </p>
claudinei@267 109 <p>
claudinei@267 110 The options depend on your needs, you can install module-init-tools to support compressed modules
claudinei@267 111 or for a minimal install, you can select only the vital options.
claudinei@267 112 </p>
claudinei@267 113 <p>
claudinei@267 114 We start by changing into the sources, <code>make mrproper</code> to put things in order, then we start a
claudinei@267 115 configuration interface: gconfig, xconfig, menuconfig or oldconfig:
claudinei@267 116 </p>
claudinei@267 117 <pre> # tar xjf linux-2.6.20.tar.bz2
claudinei@267 118 # cd linux-2.6.20
claudinei@267 119 # make mrproper
claudinei@267 120 # cp ../slitaz-tools-1.1/Makefiles/linux-2.6.20-slitaz.config .config
claudinei@267 121 # make oldconfig
claudinei@267 122 (# make menuconfig)
claudinei@267 123 # make bzImage
claudinei@267 124 # make modules
claudinei@267 125 # make INSTALL_MOD_PATH=$PWD/_pkg modules_install
claudinei@267 126 # cd ..
claudinei@267 127 </pre>
claudinei@267 128 <p>
claudinei@267 129 If you want more info on compiling kernels, there are many textbooks. Note that you can install the
claudinei@267 130 kernel and after rebooting, you can compile your own kernel following the same instructions.
claudinei@267 131 </p>
claudinei@267 132 <a name="rootfs"></a>
claudinei@267 133 <h3><font color="#6c0023">Creation of the root system (rootfs)</font></h3>
claudinei@267 134 <p>
claudinei@267 135 The next step will create a file named 'rootfs' - Root File System, in the working directory SliTaz/:
claudinei@267 136 </p>
claudinei@267 137 <pre> # mkdir ../rootfs
claudinei@267 138 </pre>
claudinei@267 139 <h4>Install BusyBox</h4>
claudinei@267 140 <p>
claudinei@267 141 BusyBox (<a href="http://www.busybox.net/">www.busybox.net</a>) is a single executable offering
claudinei@267 142 versions of the main tools necessary to use a Linux kernel. It is (mainly) intended to be used
claudinei@267 143 embedded and can do almost anything. As well as proposing (coreutils) shell commands and a daemons
claudinei@267 144 system, it also provides a websever and client/server (DHCP, udhcpc).
claudinei@267 145 </p>
claudinei@267 146 <pre> # tar xjf busybox-1.2.2.tar.bz2
claudinei@267 147 </pre>
claudinei@267 148 <p>
claudinei@267 149 Configure and compile, remembering the dumpkmap options, init, etc - you can find help in the Makefile in
claudinei@267 150 SliTaz Busybox tools. Make install creates a _install directory in the current directory:
claudinei@267 151 </p>
claudinei@267 152 <pre> # cd busybox-1.2.2
claudinei@267 153 # cp ../slitaz-tools-1.1/Makefiles/busybox-1.2.2.config .config
claudinei@267 154 # make oldconfig
claudinei@267 155 (# make menuconfig)
claudinei@267 156 # make
claudinei@267 157 # make install
claudinei@267 158 # chmod 4755 _install/bin/busybox
claudinei@267 159 </pre>
claudinei@267 160 <p>
claudinei@267 161 Copy files compiled by BusyBox in the directory _install to the root file system (rootfs):
claudinei@267 162 </p>
claudinei@267 163 <pre> # cp -a _install/* ../../rootfs
claudinei@267 164 </pre>
claudinei@267 165 <p>
claudinei@267 166 The linuxrc link pointing to /bin/busybox, folders /bin, /lib and /sbin were added to the directory
claudinei@267 167 /rootfs - you can check this. It may be that the link isn't there if you didn't select the option
claudinei@267 168 initrd support in Busybox. We'll delete the linuxrc link and create a link for init that points to
claudinei@267 169 /bin/busybox:
claudinei@267 170 </p>
claudinei@267 171 <pre> # cd ../../rootfs
claudinei@267 172 # ls -CF
claudinei@267 173 bin/ linuxrc@ sbin/ usr/
claudinei@267 174
claudinei@267 175 # rm linuxrc
claudinei@267 176 # ln -s bin/busybox init
claudinei@267 177 </pre>
claudinei@267 178 <h4>ldd on BusyBox</h4>
claudinei@267 179 <p>
claudinei@267 180 The ldd command can show any libraries used by a program. Libraries used by Busybox may differ
claudinei@267 181 depending on the host system. On Debian for example, copying the libraries in /lib/tls. The following
claudinei@267 182 commands are given using 'v' for verbose mode. To eliminate the symbols of executable binaries
claudinei@267 183 and shared libraries we can utilize strip. Note you may also use the mklibs or uClibc libraries.
claudinei@267 184 </p>
claudinei@267 185 <pre> # mkdir lib
claudinei@267 186 </pre>
claudinei@267 187 <p>
claudinei@267 188 SliTaz or another:
claudinei@267 189 </p>
claudinei@267 190 <pre> # cp /lib/{libcrypt.so.1,libm.so.6,libc.so.6} lib
claudinei@267 191 # cp /lib/ld-linux.so.2 lib
claudinei@267 192 </pre>
claudinei@267 193 <p>
claudinei@267 194 Example on Debian Etch:
claudinei@267 195 </p>
claudinei@267 196 <pre> # cp /lib/tls/{libcrypt.so.1,libm.so.6,libc.so.6} lib
claudinei@267 197 # cp /lib/ld-linux.so.2 lib
claudinei@267 198 </pre>
claudinei@267 199 <p>
claudinei@267 200 Cleanup libraries with strip:
claudinei@267 201 </p>
claudinei@267 202 <pre> # strip -v lib/*
claudinei@267 203 </pre>
claudinei@267 204 <h4>Linux tree and configuration</h4>
claudinei@267 205 <p>
claudinei@267 206 Make some directories for a classic Linux branch SliTaz installation. /dev for devices, /etc, /home,
claudinei@267 207 /usr, /proc, /root and co. To learn more about the hierarchy of a file system and its contents,
claudinei@267 208 there is a File System Hierarchy Standard available in various formats at
claudinei@267 209 <a href="http://www.pathname.com/fhs/">www.pathname.com/fhs/</a>.
claudinei@267 210 </p>
claudinei@267 211 <p>
claudinei@267 212 You are free to create your own directory tree. In traditional Unix systems, /usr usually contains
claudinei@267 213 files from the distribution, /dev contains devices (devices), /etc contains configuration files,
claudinei@267 214 /lib libraries, /home for home users and /var for variable data. Note that we do not create
claudinei@267 215 /lib, /bin or /sbin - these are created when BusyBox is installed.
claudinei@267 216 </p>
claudinei@267 217 <pre> # mkdir -p dev etc root home proc media mnt sys tmp var
claudinei@267 218 # mkdir -p usr/{lib,local,games,share} \
claudinei@267 219 var/{cache,lib,lock,log,games,run,spool} \
claudinei@267 220 media/{cdrom,flash,usbdisk}
claudinei@267 221 </pre>
claudinei@267 222 <p>
claudinei@267 223 Change permissions on the /tmp directory:
claudinei@267 224 </p>
claudinei@267 225 <pre> # chmod 1777 tmp
claudinei@267 226 </pre>
claudinei@267 227 <p>
claudinei@267 228 Setting up glibc - note /etc/ld.so.conf and /etc/rpc are not essential for a micro system:
claudinei@267 229 </p>
claudinei@267 230 <pre> # touch etc/ld.so.conf
claudinei@267 231 # cp /etc/rpc etc
claudinei@267 232 </pre>
claudinei@267 233 <h4>Create the devices in /dev</h4>
claudinei@267 234 <p>
claudinei@267 235 This can be done with the script 'mkdevs.sh' found in BusyBox, or with our script 'mktazdevs.sh' in
claudinei@267 236 SliTaz tools. If you want more details, read the scripts. If you use the BusyBox version, we must
claudinei@267 237 still create the pts directory:
claudinei@267 238 </p>
claudinei@267 239 <pre> # cp ../src/slitaz-tools-1.1/utils/mktazdevs.sh bin
claudinei@267 240 # ./bin/mktazdevs.sh dev
claudinei@267 241 or:
claudinei@267 242 # cp ../src/busybox-1.2.2/examples/bootfloppy/mkdevs.sh bin
claudinei@267 243 # ./bin/mkdevs.sh dev
claudinei@267 244 # mkdir -p dev/{pts,input,shm,net,usb}
claudinei@267 245 </pre>
claudinei@267 246 <p>
claudinei@267 247 Note that we start mdev-s with the rcS script to create devices dynamically at boot.
claudinei@267 248 </p>
claudinei@267 249 <h4>Support for the resolution of hostnames (DNS)</h4>
claudinei@267 250 <p>
claudinei@267 251 Copy the libraries libnss_* of the host system into our SliTaz system. These libraries are used for
claudinei@267 252 name resolution and are cleaned with strip:
claudinei@267 253 </p>
claudinei@267 254 <pre> # cp /lib/{libnss_dns.so.2,libnss_files.so.2} lib
claudinei@267 255 # cp /lib/libresolv.so.2 lib
claudinei@267 256 # strip -v lib/*.so*
claudinei@267 257 </pre>
claudinei@267 258 <a name="config"></a>
claudinei@267 259 <h3><font color="#6c0023">Configuration of your box</font></h3>
claudinei@267 260 <p>
claudinei@267 261 Create the necessary files in /etc. For more info, just look at the contents of the files.
claudinei@267 262 We start by creating some files relevant to the core operating system.
claudinei@267 263 </p>
claudinei@267 264 <h4>Network</h4>
claudinei@267 265 <p>
claudinei@267 266 Create basic files used to configure the network:
claudinei@267 267 </p>
claudinei@267 268 <pre> # echo "127.0.0.1 localhost" &gt; etc/hosts
claudinei@267 269 # echo "localnet 127.0.0.1" &gt; etc/networks
claudinei@267 270 # echo "slitaz" &gt; etc/hostname
claudinei@267 271 # echo "order hosts,bind" &gt; etc/host.conf
claudinei@267 272 # echo "multi on" &gt;&gt; etc/host.conf
claudinei@267 273 </pre>
claudinei@267 274 <h4>/etc/nsswitch.conf</h4>
claudinei@267 275 <p>
claudinei@267 276 Configuration files used to resolve names:
claudinei@267 277 </p>
claudinei@267 278 <pre> # nano etc/nsswitch.conf
claudinei@267 279 </pre>
claudinei@267 280 <pre class="script"># /etc/nsswitch.conf: GNU Name Service Switch config.
claudinei@267 281 #
claudinei@267 282
claudinei@267 283 passwd: files
claudinei@267 284 group: files
claudinei@267 285 shadow: files
claudinei@267 286
claudinei@267 287 hosts: files dns
claudinei@267 288 networks: files
claudinei@267 289
claudinei@267 290 </pre>
claudinei@267 291 <h4>/etc/securetty</h4>
claudinei@267 292 <p>
claudinei@267 293 /etc/securetty lists terminals that can connect to root:
claudinei@267 294 </p>
claudinei@267 295 <pre> # nano etc/securetty
claudinei@267 296 </pre>
claudinei@267 297 <pre class="script"># /etc/securetty: List of terminals on which root is allowed to login.
claudinei@267 298 #
claudinei@267 299 console
claudinei@267 300
claudinei@267 301 # For people with serial port consoles
claudinei@267 302 ttyS0
claudinei@267 303
claudinei@267 304 # Standard consoles
claudinei@267 305 tty1
claudinei@267 306 tty2
claudinei@267 307 tty3
claudinei@267 308 tty4
claudinei@267 309 tty5
claudinei@267 310 tty6
claudinei@267 311 tty7
claudinei@267 312
claudinei@267 313 </pre>
claudinei@267 314 <h4>/etc/shells</h4>
claudinei@267 315 <p>
claudinei@267 316 /etc/shells, a shells list of valid connections. This file is used by the SSH server (Dropbear):
claudinei@267 317 </p>
claudinei@267 318 <pre> # nano etc/shells
claudinei@267 319 </pre>
claudinei@267 320 <pre class="script"># /etc/shells: valid login shells.
claudinei@267 321 /bin/sh
claudinei@267 322 /bin/ash
claudinei@267 323 /bin/hush
claudinei@267 324
claudinei@267 325 </pre>
claudinei@267 326 <h4>/etc/issue and /etc/motd</h4>
claudinei@267 327 <p>
claudinei@267 328 /etc/issue is displayed at the end of boot and the message of the day is displayed after logging in:
claudinei@267 329 </p>
claudinei@267 330 <pre> # echo "SliTaz GNU/Linux 1.0 Kernel \r \l" &gt; etc/issue
claudinei@267 331 # echo "" &gt;&gt; etc/issue
claudinei@267 332 # nano etc/motd
claudinei@267 333 </pre>
claudinei@267 334 <pre class="script">
claudinei@267 335 (°- { Get documentation in: /usr/share/doc.
claudinei@267 336 //\ Use: 'less' or 'more' to read files, 'su' to be root. }
claudinei@267 337 v_/_
claudinei@267 338
claudinei@267 339 SliTaz is distributed in the hope that it will be useful, but
claudinei@267 340 with ABSOLUTELY NO WARRANTY.
claudinei@267 341
claudinei@267 342 </pre>
claudinei@267 343 <h4>/etc/busybox.conf</h4>
claudinei@267 344 <p>
claudinei@267 345 The configuration file for BusyBox, it can set duties on BusyBox applications. For more information, you can read the
claudinei@267 346 <a href="http://www.slitaz.org/en/doc/handbook/security.html">security</a> page in the Handbook. BusyBox.conf file:
claudinei@267 347
claudinei@267 348 </p>
claudinei@267 349 <pre> # nano etc/busybox.conf
claudinei@267 350 </pre>
claudinei@267 351 <pre class="script"># /etc/busybox.conf: SliTaz GNU/linux Busybox configuration.
claudinei@267 352 #
claudinei@267 353
claudinei@267 354 [SUID]
claudinei@267 355 # Allow command to be run by anyone.
claudinei@267 356 su = ssx root.root
claudinei@267 357 passwd = ssx root.root
claudinei@267 358 loadkmap = ssx root.root
claudinei@267 359 mount = ssx root.root
claudinei@267 360 reboot = ssx root.root
claudinei@267 361 halt = ssx root.root
claudinei@267 362
claudinei@267 363 </pre>
claudinei@267 364 <p>
claudinei@267 365 For added security, change the permissions on the file:
claudinei@267 366 </p>
claudinei@267 367 <pre> # chmod 600 etc/busybox.conf
claudinei@267 368 </pre>
claudinei@267 369 <h4>/etc/inittab</h4>
claudinei@267 370 <p>
claudinei@267 371 Minimal configuration file for init. It helps to have a root console without having to
claudinei@267 372 go through the login and a console on tty2.
claudinei@267 373 </p>
claudinei@267 374 <pre> # nano etc/inittab
claudinei@267 375 </pre>
claudinei@267 376 <pre class="script"># /etc/inittab: init configuration for SliTaz GNU/Linux.
claudinei@267 377
claudinei@267 378 ::sysinit:/etc/init.d/rcS
claudinei@267 379 ::respawn:-/bin/sh
claudinei@267 380 tty2::askfirst:-/bin/sh
claudinei@267 381 ::ctrlaltdel:/bin/umount -a -r
claudinei@267 382 ::ctrlaltdel:/sbin/reboot
claudinei@267 383
claudinei@267 384 </pre>
claudinei@267 385 <p>
claudinei@267 386 You will also find a wider example of an inittab file in the archive of BusyBox.
claudinei@267 387 </p>
claudinei@267 388 <h4>/etc/profile</h4>
claudinei@267 389 <p>
claudinei@267 390 This file is read at each login and affects all users. We must use the ./profile
claudinei@267 391 config file for each individual user:
claudinei@267 392 </p>
claudinei@267 393 <pre> # nano etc/profile
claudinei@267 394 </pre>
claudinei@267 395 <pre class="script"># /etc/profile: system-wide .profile file for the Bourne shells
claudinei@267 396
claudinei@267 397 PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
claudinei@267 398 LD_LIBRARY_PATH="/usr/lib:/lib"
claudinei@267 399
claudinei@267 400 if [ "`id -u`" -eq 0 ]; then
claudinei@267 401 PS1='\e[1m\u@\h:\w\#\e[m '
claudinei@267 402 else
claudinei@267 403 PS1='\e[1m\u@\h:\w\$\e[m '
claudinei@267 404 fi
claudinei@267 405
claudinei@267 406 DISPLAY=:0.0
claudinei@267 407
claudinei@267 408 export PATH LD_LIBRARY_PATH PS1 DISPLAY ignoreeof
claudinei@267 409 umask 022
claudinei@267 410
claudinei@267 411 </pre>
claudinei@267 412 <h4>Users, groups and passwords</h4>
claudinei@267 413 <p>
claudinei@267 414 Create configuration files of users, groups and passwords in /etc/ {passwd, shadow, group, gshadow}, and adjust permissions:
claudinei@267 415 </p>
claudinei@267 416 <pre> # echo "root:x:0:0:root:/root:/bin/sh" &gt; etc/passwd
claudinei@267 417 # echo "root::13525:0:99999:7:::" &gt; etc/shadow
claudinei@267 418 # echo "root:x:0:" &gt; etc/group
claudinei@267 419 # echo "root:*::" &gt; etc/gshadow
claudinei@267 420 # chmod 640 etc/shadow
claudinei@267 421 # chmod 640 etc/gshadow
claudinei@267 422 </pre>
claudinei@267 423 <p>
claudinei@267 424 You can add other users, like hacker is used by the LiveCD mode. You can also configure a password for the root user
claudinei@267 425 with the <code>passwd</code> command. To add an existing user to an existing group, you must edit /etc/group and /etc/gshadow because
claudinei@267 426 the applet <code>adduser</code> provided by BusyBox doesn't offer all of the options provided by the original program.
claudinei@267 427 </p>
claudinei@267 428 <h4>/etc/fstab or /etc/mtab</h4>
claudinei@267 429 <p>
claudinei@267 430 List filesystems to be mounted:
claudinei@267 431 </p>
claudinei@267 432 <pre> # nano etc/fstab
claudinei@267 433 </pre>
claudinei@267 434 <pre class="script"># /etc/fstab: information about static file system.
claudinei@267 435 #
claudinei@267 436 proc /proc proc defaults 0 0
claudinei@267 437 sysfs /sys sysfs defaults 0 0
claudinei@267 438 devpts /dev/pts devpts defaults 0 0
claudinei@267 439 tmpfs /dev/shm tmpfs defaults 0 0
claudinei@267 440
claudinei@267 441 </pre>
claudinei@267 442 <p>
claudinei@267 443 /etc/mtab is used by other mkfs*, for listing the mounted partitions. It needs /proc because there is a link on /proc/mounts:
claudinei@267 444 </p>
claudinei@267 445 <pre> # chroot . /bin/ash
claudinei@267 446 /# ln -s /proc/mounts /etc/mtab
claudinei@267 447 </pre>
claudinei@267 448 <h4>Keyboard</h4>
claudinei@267 449 <p>
claudinei@267 450 You can create a kmap file specific to your keyboard with the dumpkmap command provided by BusyBox.
claudinei@267 451 You can find some kmap files in SliTaz tools. To create a fr_CH kmap file:
claudinei@267 452 </p>
claudinei@267 453 <pre> /# mkdir /usr/share/kmap
claudinei@267 454 /# /bin/busybox dumpkmap &gt; /usr/share/kmap/fr_CH.kmap
claudinei@267 455 /# exit
claudinei@267 456 </pre>
claudinei@267 457 <p>
claudinei@267 458 Once this is done, you can automatically load your keyboard with loadkmap in a /etc/init.d/rcS script:
claudinei@267 459 </p>
claudinei@267 460 <h4>/usr/share/doc</h4>
claudinei@267 461 <p>
claudinei@267 462 You can also add various documents, such as a SliTaz user manual, which you can download as a tar.gz from the website:
claudinei@267 463 </p>
claudinei@267 464 <pre> # mkdir -p usr/share/doc
claudinei@267 465 </pre>
claudinei@267 466 <h4>Installing the udhcpc script</h4>
claudinei@267 467 <p>
claudinei@267 468 Udhcpc DHCP client supplied by Busybox is fast and stable, but is developed independently.
claudinei@267 469 Web site: <a href="http://udhcp.busybox.net/">http://udhcp.busybox.net/</a>. You can use the default
claudinei@267 470 script found in the archive of BusyBox. This script goes into /usr/share/udhcpc/default.script,
claudinei@267 471 but this can be changed via the command line. On SliTaz, the client is started at boot by the script
claudinei@267 472 /etc/init.d/network.sh via the configuration file /etc/network.conf:
claudinei@267 473 </p>
claudinei@267 474 <pre> # mkdir usr/share/udhcpc
claudinei@267 475 # cp ../src/busybox-1.2.2/examples/udhcp/simple.script \
claudinei@267 476 usr/share/udhcpc/default.script
claudinei@267 477 # chmod +x usr/share/udhcpc/default.script
claudinei@267 478 </pre>
claudinei@267 479 <h4>/etc/init.d/rcS</h4>
claudinei@267 480 <p>
claudinei@267 481 To finish off this draft, you must create the init script /etc/init.d/rcS to mount the filesystems
claudinei@267 482 and run some commands. For more information, you can look at the
claudinei@267 483 <a href="http://www.slitaz.org/en/doc/cookbook/boot-scripts.html">boot scripts</a> page.
claudinei@267 484 You can change the value of the variable KMAP= for the keyboard:
claudinei@267 485 </p>
claudinei@267 486 <pre> # mkdir etc/init.d
claudinei@267 487 # nano etc/init.d/rcS
claudinei@267 488 </pre>
claudinei@267 489 <pre class="script">#! /bin/sh
claudinei@267 490 # /etc/init.d/rcS: rcS initial script.
claudinei@267 491 #
claudinei@267 492
claudinei@267 493 KMAP=fr_CH
claudinei@267 494
claudinei@267 495 echo "Processing /etc/init.d/rcS... "
claudinei@267 496
claudinei@267 497 /bin/mount proc
claudinei@267 498 /bin/mount -a
claudinei@267 499 /bin/hostname -F /etc/hostname
claudinei@267 500 /sbin/ifconfig lo 127.0.0.1 up
claudinei@267 501 /sbin/loadkmap &lt; /usr/share/kmap/$KMAP.kmap
claudinei@267 502
claudinei@267 503
claudinei@267 504 </pre>
claudinei@267 505 <pre> # chmod +x etc/init.d/rcS
claudinei@267 506 </pre>
claudinei@267 507 <h4>Note</h4>
claudinei@267 508 <p>
claudinei@267 509 Note that you can still install the tazpkg package manager (10 kb) that we created,
claudinei@267 510 you will find information to install in the source tarball. You can also install various
claudinei@267 511 files from SliTaz tools, such as the licence.
claudinei@267 512 </p>
claudinei@267 513
claudinei@267 514 <a name="initramfs"></a>
claudinei@267 515 <h3><font color="#6c0023">Build an initramfs cpio archive</font></h3>
claudinei@267 516 <p>
claudinei@267 517 The initramfs is a <code>cpio</code> archive generated from the root of the system,
claudinei@267 518 it is decompressed in RAM by the Linux kernel at boot to create the filesystem (also in RAM).
claudinei@267 519 To generate an initramfs archive, using the root directory of system files (rootfs), we
claudinei@267 520 facilitate a search with <code>find</code> and add some pipes <code>|</code>.
claudinei@267 521 Then we create a cpio archive using <code>gzip</code> which we put in the working directory.
claudinei@267 522 </p>
claudinei@267 523 <p>
claudinei@267 524 The SliTaz initramfs <strong>rootfs.gz</strong> is the root system, but with a <code>.gz</code>
claudinei@267 525 extension. If you want to change the name, you need to edit the configuration file for
claudinei@267 526 isolinux: isolinux.cfg or the menu.lst for GRUB.
claudinei@267 527 </p>
claudinei@267 528 <p>
claudinei@267 529 Generation of the initramfs:
claudinei@267 530 </p>
claudinei@267 531 <pre> # find . -print | cpio -o -H newc | gzip -9 &gt; ../rootfs.gz
claudinei@267 532 </pre>
claudinei@267 533 <p>
claudinei@267 534 You should have a file rootfs.gz about 1 to 2MB in the working directory SliTaz/.
claudinei@267 535 </p>
claudinei@267 536 <p>
claudinei@267 537 For a new image, when making changes in rootfs, simply copy the new rootfs.gz archive to rootcd/boot
claudinei@267 538 and create a new image with <code>genisoimage</code> or <code>mkisofs</code>. For this you can also
claudinei@267 539 use <strong>mktaziso</strong> within SliTaz tools. This script will check if the directories are present,
claudinei@267 540 create a new compressed cpio archive and generate a new bootable ISO image.
claudinei@267 541 </p>
claudinei@267 542 <a name="rootcd"></a>
claudinei@267 543 <h3><font color="#6c0023">Make rootcd files</font></h3>
claudinei@267 544 <p>
claudinei@267 545 The following steps will help you create the root of the bootable CD-ROM. We begin by creating the rootcd,
claudinei@267 546 boot and isolinux directories for the cd-rom files:
claudinei@267 547 </p>
claudinei@267 548 <pre> # cd ..
claudinei@267 549 # mkdir -p rootcd/boot/isolinux
claudinei@267 550 </pre>
claudinei@267 551 <p>
claudinei@267 552 Optionally, you can create some other directories in which to place various data, such as HTML documents or packages.
claudinei@267 553 </p>
claudinei@267 554 <a name="linux"></a>
claudinei@267 555 <h4>Copy the kernel</h4>
claudinei@267 556 <p>
claudinei@267 557 Just copy the kernel previously compiled to rootcd/boot:
claudinei@267 558 </p>
claudinei@267 559 <pre> # cp src/linux-2.6.20/arch/i386/boot/bzImage rootcd/boot
claudinei@267 560 </pre>
claudinei@267 561 <h4>Copy the initramfs into rootcd/boot</h4>
claudinei@267 562 <p>
claudinei@267 563 Copy the rootfs.gz to rootcd/boot. We must not forget to generate a new initramfs archive for any changes
claudinei@267 564 made to the rootfs (root file system):
claudinei@267 565 </p>
claudinei@267 566 <pre> # cp rootfs.gz rootcd/boot
claudinei@267 567 </pre>
claudinei@267 568 <h4>Install the isolinux bootloader</h4>
claudinei@267 569 <p>
claudinei@267 570 The bootloader isolinux - simply copy the isolinux.bin from the source archive of Syslinux:
claudinei@267 571 </p>
claudinei@267 572 <pre> # cd src
claudinei@267 573 # tar xzf syslinux-3.35.tar.gz
claudinei@267 574 # cp syslinux-3.35/isolinux.bin ../rootcd/boot/isolinux
claudinei@267 575 # cd ..
claudinei@267 576 </pre>
claudinei@267 577 <h4>isolinux.cfg - Configure isolinux</h4>
claudinei@267 578 <p>
claudinei@267 579 Here is an example of an isolinux.cfg file that should work well. You can change it if you wish:
claudinei@267 580 </p>
claudinei@267 581 <pre> # nano rootcd/boot/isolinux/isolinux.cfg
claudinei@267 582 </pre>
claudinei@267 583 <pre class="script">display display.txt
claudinei@267 584 default slitaz
claudinei@267 585 label slitaz
claudinei@267 586 kernel /boot/bzImage
claudinei@267 587 append initrd=/boot/rootfs.gz rw root=/dev/null vga=788
claudinei@267 588 implicit 0
claudinei@267 589 prompt 1
claudinei@267 590 timeout 80
claudinei@267 591
claudinei@267 592 </pre>
claudinei@267 593 <p>
claudinei@267 594 Here are some changes that you might like to make in isolinux.cfg:
claudinei@267 595 </p>
claudinei@267 596 <ul>
claudinei@267 597 <li>The timeout value is the number of seconds to wait before booting
claudinei@267 598 You can make it 0 or delete the line to start instantly, or choose to wait as long as 10s.</li>
claudinei@267 599 <li>prompt can be set to 0 to disable the 'boot:' prompt.</li>
claudinei@267 600 <li>You can add more lines to view the contents of several text files when the user presses F1, F2, F3, etc.</li>
claudinei@267 601 </ul>
claudinei@267 602 <h4>display.txt</h4>
claudinei@267 603 <p>
claudinei@267 604 A small welcome note, powered by isolinux, you can modify this file if you wish:
claudinei@267 605 </p>
claudinei@267 606 <pre> # nano rootcd/boot/isolinux/display.txt
claudinei@267 607 </pre>
claudinei@267 608 <pre class="script">/* _\|/_
claudinei@267 609 (o o)
claudinei@267 610 +----oOO-{_}-OOo---------------------------------------------------+
claudinei@267 611 ____ _ _ _____
claudinei@267 612 / ___|| (_)_ _|_ _ ____
claudinei@267 613 \___ \| | | | |/ _` |_ /
claudinei@267 614 ___) | | | | | (_| |/ /
claudinei@267 615 |____/|_|_| |_|\__,_/___|
claudinei@267 616
claudinei@267 617 SliTaz GNU/Linux - Temporary Autonomous Zone
claudinei@267 618
claudinei@267 619 &lt;ENTER&gt; to boot.
claudinei@267 620
claudinei@267 621 */
claudinei@267 622 </pre>
claudinei@267 623 <a name="mkiso"></a>
claudinei@267 624 <h3><font color="#6c0023">Create an ISO image with genisoimage or mkisofs</font></h3>
claudinei@267 625 <pre> # genisoimage -R -o slitaz-cooking.iso -b boot/isolinux/isolinux.bin \
claudinei@267 626 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
claudinei@267 627 -V "SliTaz" -input-charset iso8859-1 -boot-info-table rootcd
claudinei@267 628 </pre>
claudinei@267 629 <p>
claudinei@267 630 For each change in the root of the box, you must create a new ISO image.
claudinei@267 631 </p>
claudinei@267 632 <p>
claudinei@267 633 You can create a small script that will generate a new compressed cpio archive and a new image,
claudinei@267 634 or use mktaziso within SliTaz tools. Note that you can also use GRUB to boot the box.
claudinei@267 635 </p>
claudinei@267 636 <a name="testiso"></a>
claudinei@267 637 <h3><font color="#6c0023">Burn or test ISO image with Qemu</font></h3>
claudinei@267 638 <p>
claudinei@267 639 You can burn the ISO image with Graveman, k3b or wodim and boot it. Simple burning command using wodim (also valid for cdrecord), with a 2.6.XX. kernel:
claudinei@267 640 </p>
claudinei@267 641 <pre># wodim -v -speed=24 -data slitaz-cooking.iso
claudinei@267 642 </pre>
claudinei@267 643 <h4>Qemu</h4>
claudinei@267 644 <p>
claudinei@267 645 Note that you can test the ISO image with the software emulator Qemu (On Debian # aptitude install qemu).
claudinei@267 646 To emulate the newly created ISO image, simply type:
claudinei@267 647 </p>
claudinei@267 648 <pre># qemu -cdrom slitaz-cooking.iso
claudinei@267 649 </pre>
claudinei@267 650 <h4>Following chapter</h4>
claudinei@267 651 <p>
claudinei@267 652 The next chapter <a href="base-apps.html">Base applications</a> provides all the instructions to install
claudinei@267 653 and configure the basic applications and libraries.
claudinei@267 654 </p>
claudinei@267 655
claudinei@267 656 <!-- End of content -->
claudinei@267 657 </div>
claudinei@267 658
claudinei@267 659 <!-- Footer. -->
claudinei@267 660 <div id="footer">
claudinei@267 661 <div class="footer-right"></div>
pascal@537 662 <a href="index.html#top">Top of the page</a> |
claudinei@267 663 <a href="index.html">Table of contents</a>
claudinei@267 664 </div>
claudinei@267 665
claudinei@267 666 <div id="copy">
claudinei@267 667 Copyright &copy; 2008 <a href="http://www.slitaz.org/en/">SliTaz</a> -
claudinei@267 668 <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>;<br />
claudinei@267 669 Documentation is under
claudinei@267 670 <a href="http://www.gnu.org/copyleft/fdl.html">GNU Free Documentation License</a>
claudinei@267 671 and code is <a href="http://validator.w3.org/">valid xHTML 1.0</a>.
claudinei@267 672 </div>
claudinei@267 673
claudinei@267 674 </body>
claudinei@267 675 </html>