Créer son premier RIM Linux !63 minute(s) de lecture

Parent page: À LIRE

Vous voulez faire une distribution live ? Un système ultra-rapide ? Par ici !

RIM Linux, pour Run In Memory Linux, est un système GNU/Linux fonctionnant entièrement en mémoire vive.

N’importe quel système GNU/Linux moderne utilise la technologie du RIM. Comprendre cette technologie est donc un premier pas vers la réalisation de votre système.

Dans ce cas, pourquoi créer son propre système GNU/Linux ? Les raisons peuvent être multiples:

  • Avoir un système parfaitement adapté à ses besoins.
  • Créer sa propre distribution (oui oui, c’est possible).
  • Tout simplement comprendre comment ça fonctionne.
  • Et bien d’autres.

Ce tutoriel n’a pas pour objectif de vous apprendre tout cela, mais seulement de vous permettre de comprendre le fonctionnement et la création d’un RIM Linux. C’est donc un premier pas dans la création de distribution, rien de plus (mais rien de moins non plus :soleil: ).

En effet, les technologies utilisées dans ce tutoriel, bien que généralement cachées par la distribution, sont indispensable tant pour la création d’un LiveCD (ou LiveUSB) que pour celle d’une distribution « classique ». Donc normalement, quelque soit votre projet de création de système GNU/Linux (ou quelque_chose/Linux, coucou les systèmes Android), vous ne perdrez pas de temps en suivant ce tutoriel.

Pour ceux qui rêvent déjà : créer une distribution GNU/Linux à peu près utilisable est extrèmement chronophage, et parfois très pénible. Cela demande une grande tenacité. Le problème n’est pas de créer un système qui soit sympas, mais de le maintenir dans le temps, avec les dernières versions des programmes utilisés, et des développeurs qui ont des cycles de sorties radicalement différents.

Pour pouvoir suivre et comprendre ce tuto, il vous faut:

  • Savoir utiliser sans paniquer la ligne de commande.
  • Connaître les principes de base de l’arborescence UNIX (dont GNU/Linux fait partie).
  • Avoir au moins une fois compilé un logiciel (juste pour voir ce que ça fait).

Nous allons donc parler de quelques points:

Nomenclature

Une question de vocabulaire

Pour les puristes, sachez que nous n’allons pas faire un GNU/Linux ici. En effet, la partie système (coreutils notamment) sera gérée par busybox, qui n’est pas dans le projet GNU. C’est donc un BusyBox/Linux.

Mais c’est complètement absurde !

Sachez que certains peuvent débattre pendant des pages et pages (sur un forum d’un matériel utilisant GNU/Linux, 53 pages. Oui oui, 53 pages là-dessus) sur la dénomination « correcte » de ce système.

Pour ma part, les dénominations étant multiples, j’utilise ce vocabulaire:

  • GNU/Linux pour désigner précisément un système utilisant ces 2 briques.
  • Linux pour désigner le noyau uniquement.
  • GNU pour les programmes issus du projet GNU.
  • linux ou Tux ou tux pour désigner un système UNIX utilisant le noyau Linux, que son système soit ou non fondé sur GNU.
  • système pour parler de tout ce qui n’est pas le noyau.

La petite histoire

Petit constat

Le LiveCD Linux est une chose qui ne date pas d’hier. Le premier est Knoppix.

Knoppix

Knoppix est une distribution fondée sur Debian et créée en 2000, la première à utiliser la technique du LiveCD. Elle est donc rapidement devenue populaire puisque cette spécificité technique est accompagnée de script de détection du matériel ainsi que d’outils de réparation du système, ce qui a permis d’avoir un SystemRescueCd avant l’heure. Comme toute distribution ancienne et relativement populaire, elle a donné naissance à un certain nombre de distributions dérivées.


Le LiveCD a pendant une période été une possibilité technique spécifique aux systèmes GNU/Linux. Pourtant, il n’existait pas aux premiers âges de ce système.

Mais alors, comment faisait-on avant ?

Et bien comme nous allons le faire dans ce tuto ! Tout à la main ! Eh oui, GNU/Linux a été et reste un système « manuel ».

Le LiveCD répond au départ à des impératifs techniques : on ne peut pas écrire sur un CD-R, et on n’a peut-être pas envie d’utiliser un CD-RW pour quelques utilisations seulement. Il faut donc pouvoir utiliser un système qui, de façon tout à fait naturelle, a besoin d’écrire dans son arborescence (ne serait-ce que pour les logs) alors que son support sera de toute façon en lecture seule. La solution la plus évidente est alors de faire entièrement tourner ce système grâce à une ressource présente sur chaque ordinateur : la RAM.

Mais avec le développement du LiveCD sont apparus d’autres usages:

  • Distributions orientées sécurité ne laissant aucune trace sur l’ordinateur.
  • Distributions axées sur la performance (la RAM permettant des performances spectaculaires par rapport à un disque dur), par exemple pour les ordinateurs anciens.
  • Prolongement de la durée de vie des clés USB en limitant les écritures.

Néanmoins, pour les 2 derniers points, avoir un système « isolé » dans sa RAM n’est pas très pratique:

  • Pas de sauvegarde de la configuration.
  • Pas de sauvegarde des logiciels installés.
  • En conséquence : temps de boot parfois long, car générique.

C’est alors que viennent les LiveUSB. Les LiveUSB sont globalement en RAM, mais une persistance (parfois partielle, parfois manuelle) est possible par l’utilisation de la clé sur un dossier particulier, éventuellement associé à des mécanismes de sauvegarde/restauration.

Par la suite, nous allons d’abord créer un pur LiveCD, ce sera notre premier RIM-Linux, puis nous allons le transformer pour aboutir à un LiveUSB hybride.

Le noyau simplifié

Principe

Un court paragraphe pour vous présenter ce qu’est un noyau.

Un noyau, c’est quoi ?

Le noyau, c’est tout. :D Le noyau d’un système d’exploitation (que nous nommerons par la suite OS), c’est tout ce que l’on ne voit pas, et qui pourtant est très utile. Petit exemple :

Chaque carte graphique possède son propre « langage » pour communiquer avec le système.

Vous imaginez si les développeurs devaient faire des applications qui étaient déclinées pour chaque modèle ? Et attention, pas seulement pour les modèles actuels, mais pour ceux à venir . Vous voyez bien que ce n’est pas gérable. C’est pour cela que l’on intègre au noyau des bouts de codes, appelés driver, qui permettent de communiquer au modèle en question. Le noyau propose un « langage » générique à l’application, qui n’a pas à s’occuper du matériel mais seulement de comment utiliser le matériel.

Mais sur ma console, je ne vois pas où est l’OS ! Dans le jeu ?

Eh bien non, en fait, si on prend une console très basique type GameBoy, il n’y en a pas. En effet, le matériel est toujours le même, donc il n’y a pas besoin d’un OS !

Donc un noyau, c’est un sac de drivers ?

Non. Le noyau, c’est aussi un sac de drivers. Mais ce n’est pas tout. C’est lui aussi qui permet de faire du multitâche, de gérer la mémoire, …

Le noyau fait vraiment beaucoup de choses. Toujours pour simplifier la vie des développeurs et des utilisateurs.

Types de noyaux

La première chose qui vient à l’esprit, c’est un gros programme avec toutes les fonctionnalités dedans. C’est ce que l’on appelle un noyau monolithique. C’est simple, efficace, mais parfois dur à gérer. En effet, si vous faites un LiveCD générique, il faut bien supporter (théoriquement) tous les matériels existants, pour que votre LiveCD fonctionne sur tout les PCs existant.

Imaginons le PC d’un utilisateur. Celui-ci n’aura pas tout les matériels existant, donc il y aura des supports dans le noyau qui ne seront pas utilisé. On aura donc un gachi de place, puisque le noyau est plus gros que ce qu’il aurait pu être, et de temps parce qu’il a fallu charger tout ce code inutile en mémoire.

Il faudrait donc que les supports matériels qui ne sont pas très utilisés soient dans l’arborescence du système, et chargé en mémoire à la demande. C’est le concept du micro-noyau, où beaucoup de supports matériels sont « délocalisés » dans le système. L’inconvénient, c’est que l’on ne charge pas forcément tout les supports requis en même temps, du coup on risque de faire plein de petits accès disque au lieu d’un gros, ce qui risque de plomber le temps de boot, mais cette fois à la détection du matériel, pas lors du chargement du noyau en RAM (de plus, de par le fonctionnement interne d’un support « délocalisé », il est très généralement plus lent que son homologue intégré directement au noyau). On n’y est toujours pas >_< .

Il y a donc 2 solutions intermédiaires, le noyau monolithique modulaire, qui est un noyau globalement monolithique, mais avec certains supports mis dans des modules, chargés à la demande, et le noyau hybride, qui est un micro-noyau avec des supports « relocalisés ».

En résumé:
  • Noyau monolithique : un gros programme.
  • Micro-noyau : un petit programme avec plein de petits modules.
  • Noyau monolithique modulaire : un programme de taille intermédiaire avec quelques (petits ou gros) modules. Tend vers le noyau monolithique.
  • Noyau hybride : même chose que le noyau monolithique modulaire, mais tend vers le micro-noyau.

Il existe aussi les noyaux mégalithiques et les exo-noyaux, mais ce sont plus des noyaux expérimentaux et aucun OS robuste et relativement connu n’utilise ces noyaux-là.

Si vous êtes intéressé par le sujet des noyaux, ou plus généralement des OS, ce tuto devrait vous plaire.

Linux

Le noyau Linux (car rappelons-le, Linux n’est qu’un noyau) est, c’est un de ses gros avantages, très configurable. Linux était originellement monolithique pur mais, depuis un certains nombre (élevé) d’années, est devenu modulaire. Toutefois, le support des modules est désactivable, ce qui fait que vous pouvez encore faire un noyau purement monolithique.

Mais puisque ça prend plus de temps, quel est l’intérêt ?

Un noyau monolithique générique est moins bien qu’un monolithique modulaire. Si le noyau est optimisé, c’est-à-dire qu’il contient uniquement les supports dont on a besoin, il chargera en une seule passe tout les supports requis, sans avoir de code inutile de chargé. Il est donc plus efficace que le même noyau avec des modules.

Les choix de ce tuto

Nous allons utiliser un noyau monolithique pur, et ce pour quelques raisons:

  • Pour apprendre au début, un noyau monolithique est plus simple à mettre en place (on n’a pas à gérer les modules qui « se baladent »).
  • Les parties noyau et système seront complètement isolées l’une de l’autre. Vous pourrez faire différentes versions de noyau et système, et les mélanger sans crainte.
  • Cela vous poussera à optimiser votre noyau, et donc à entrer plus en détail dans la configuration du noyau.

Le boot simplifié

Après ce petit préliminaire de blabla, on entre dans la partie technique.

Mais avant de faire un système complet, il faut déjà comprendre comment il boote.

La chaîne du boot

C’est la suivante:

  • BIOS (ou UEFI), qui fait quelques vérifications matérielles de base (par exemple il contrôle la présence de RAM).
  • Le bootloader, chargé par le BIOS/(U)EFI, qui va charger en mémoire le noyau, lui passer des paramètres, puis l’exécuter.
  • Le noyau, qui fait lui aussi des vérifications matérielles, puis qui réagit en fonction des paramètres passés par le bootloader.
  • L’init, qui est le premier programme utilisateur (comprendre « pas du noyau ») lancé, et ce par le noyau. L’init fait plusieurs choses, nous verrons quoi précisément par la suite, qui aboutissent à un OS prêt à l’emploi.

Le noyau lors du boot

Son paramètre principal, c’est l’endroit où est stocké le système (typiquement la partition montée sur /), qui va lui permettre de lancer l’init.

Si on est dans un noyau monolithique, pas de problème, il monte sa partition système, lance l’init et tout le monde est content.

Si on est dans un noyau monolithique modulaire, c’est plus problématique, car il se peut très bien que le système soit en ext4 ou en xfs, alors que le support de ces systèmes de fichiers (appelés aussi FS) est sous forme de module.

Mais alors, il est où le problème ? Ça sera détecté non ?

Ah oui, parfaitement détecté. Mais, ils sont où les modules ? Dans la partition système !

Vous voyez le problème. C’est exactement comme dans les anciennes voitures avec les loquets, quand on fermait la porte de la voiture, loquet fermé, alors que la clé est à l’intérieur. Sauf que dans ces cas-là on pouvait briser la vitre. :ninja: Il n’y a pas de vitre dans un FS. Dommage hein ?

La solution, c’est de passer par un système intermédiaire. Ce système intermédiaire, chargé en RAM par le noyau, contient tous les modules du noyau. Ce dernier peut donc monter sa partition système en toute tranquillité.

Ce système intermédiaire, jusqu’aux noyaux 2.4 (inclus), c’était un initrd obligatoirement.

L’initrd

Initrd, pour Initial Ramdisk, est, comme son nom l’indique, une sorte de partition en RAM. Dans sa version a minima, il contient l’interpréteur shell, le chargeur de module, les modules, et un fichier qui fera office d’init, linuxrc, qui est un simple fichier shell. Sa fonction est de charger les modules requis puis de repasser la main au noyau.

Cet initrd a une taille fixe. Par conséquent, on ne peut pas l’agrandir si on a besoin de place, ni le réduire s’il est trop grand.

Pour en faire un LiveCD, il suffit de dire au noyau que la partition système est la RAM, et c’est fini. On restera indéfiniment dans cet initrd. Plutôt simple non ?

Oui, mais un peu rigide. C’est pourquoi depuis les noyaux 2.6 il existe une alternative.

L’initramfs

L’initramfs a un fonctionnement très différent.

Fondamentalement, ce n’est pas une partition, c’est une archive. Juste un fichier. Du coup, sa taille est indéterminée, et peut varier à notre guise (pas au-delà de la capacité de la RAM installée bien sûr).

Mais, c’est plus compliqué de rester en RAM. En effet, le noyau, lui, veut toujours monter une partition système.

La solution, c’est de ne pas rendre la main, de faire en sorte que notre init dans l’initramfs (oui c’est bien init, pas linuxrc) reste maître. Et après on est tranquille.

Les choix de ce tuto

Nous allons utiliser un initramfs, car:

  • C’est plus en accord avec l’objectif final de faire un LiveUSB.
  • C’est plus simple à manipuler (du moins pour quelqu’un débutant dans le domaine), car le fonctionnement est celui d’une archive.
  • On peut faire ce que fait un initrd avec un initramfs, ce choix ne sera donc pas limité uniquement à la création de linux live, mais pourra aussi servir pour une distribution avec un fonctionnement classique.

L’environnement de travail

Nous allons cannibaliser les bibliothèques de notre distribution, il faut donc que vous soyez sous tux. On va compiler et recompiler, créer plein de fichiers, alors pas question de mettre tout ça n’importe comment ! Créez dans votre dossier personnel un dossier tux, puis dedans un autre, par exemple RIM (ce sera la racine de notre projet), puis dedans:

  • build
  • rootbase
  • kernel

Vous mettrez votre (ou vos) archive(s) de noyau dans le dossier kernel, que vous décompresserez à partir de celui-ci (vous aurez donc dans kernel un dossier par noyau), tout le reste dans build. Le dossier rootbase sera l’original de votre système alors pas question de le polluer avec des fichiers de compilation.

Petit rappel sur la compilation

Compiler un logiciel c’est, dans l’ordre:

  1. Télécharger les sources du dit logiciel
  2. Décompresser les sources
  3. Lire le fichier README et/ou INSTALL
  4. Très généralement faire les étapes suivantes:
    • ./configure
    • make
    • make install
Remarque sur la notation

Pour ceux qui ne seraient pas habitués à celle-ci, le fait de mettre un « # » en début de la ligne de commande dénote que la commande a besoin des droits root, donc que vous fassiez les commandes en tant que root ou avec sudo devant.

Premier RIM-Linux

Ce que nous allons faire
  1. Configurer et compiler un noyau, notre premier ! :o
  2. Configurer et compiler busybox.

Le noyau Linux

Les versions du noyau

Majeur.mineur.publication-modification

Exemples:

  • 2.6.32
  • 3.15.5-2

Actuellement, le majeur est à 3. Un mineur impair dénote un noyau de développement, un mineur pair, un noyau stable. Ce qui ne veut pas dire qu’un noyau stable est forcément plus vieux qu’un noyau de développement: ce sont 2 branches qui évoluent en parallèle, et quand une fonctionnalité pratique et stable est dans la branche développement, elle est progressivement incluse dans la branche stable.

La version de modification dénote un travail en aval de votre distribution (distro) sur le noyau, c’est donc un noyau qui sera légèrement différent des autres portant la même combinaison M.m.pub .

Compilation

Allez on attaque la ligne de commande ! :pirate: Allez sur le site du noyau linux, et prenez un noyau récent et stable en longterm. À l’heure où j’écris ceci, la version 3.14.12 est disponible, donc c’est sur celle-ci que je vais travailler. Mais ne vous en faites pas, la configuration change très peu d’une version à l’autre, surtout que nous n’allons pas utiliser les toutes dernières avancées du noyau. À la limite, même un noyau 2.6 pourrait faire l’affaire, mais on va éviter de tenter le diable.

Décompressez-le dans le dossier kernel, par exemple via la commande:

1
tar -xJf chemin_vers_le_noyau kernel/

Nous sommes ici situés à la racine du projet.

Le J indique que nous utilisons la compression xz, le x que nous voulons extraire (et non rajouter des fichiers dans l’archive), le f que l’archive est donnée par un fichier (et pas par l’entrée standard, soit par défaut le clavier et vos petits doigts).

Ensuite, pour ceux qui ne l’ont pas déjà fait, vous utilisez la ligne de commande.

Mais c’est moche la ligne de commande !

Toi, tu sors ! :D Plus sérieusement, vous n’allez pas avoir le choix donc ce n’est pas le peine de râler.

Avant toute chose il faut aller dans le dossier du noyau, pour cela c’est bien entendu la commande cd:

1
cd kernel/linux-[VERSION]

Où [VERSION] est la version du noyau que vous utilisez.

La configuration du noyau se fait avec un configurateur appelé par make. Concrètement vous allez taper make [configurateur], où [configurateur] peut être:

  • config : là, c’est pour les durs, les rugueux du noyau. :D Une interminable série de questions. Je n’ai jamais réussi à faire les choses proprement avec celui-là.
  • menuconfig : configurateur textuel, à peu près le même look que l’interface d’un BIOS. Donc pas forcément d’un esthétisme ébouriffant, mais efficace.
  • nconfig : pareil que le précédent, mais plus joli. Non disponible sur un noyau 2.6.x .
  • xconfig : configurateur graphique fonctionnant sous Qt.
  • gconfig : configurateur graphique fonctionnant sous Gtk.

Mais tu nous as menti ! On peut le configurer graphiquement !

Certes, sauf que vous êtes obligé de le lancer en console. Et puis de toute façon vous allez faire un tux en console, alors pourquoi ça vous embête ?

Pour les exemples, j’utilise un make nconfigqui donne en premier lieu ceci (sur un système 64 bits, un 32 aura des entrées légèrement différentes) :

Résultat de la commande : un beau petit menu !

Là, normalement, je devrais être sympa et vous donner un fichier de configuration déjà fait pour aller plus vite, ou lister rapidement les choses à cocher ou non. Et bien vous savez quoi ? Je ne vais pas le faire !

Il faut vraiment que vous fouilliez un peu dans la configuration du noyau, c’est indispensable. C’est comme vouloir faire du pain avec de la farine toute faite (farine + levure + arômes) plutôt que de le faire soi-même.

Je vais juste vous dire quelques points:

  • Dans General Setup, ne pas cocher l’option Embedded system. Cela évitera de faire de grosses, grosses bêtises (vous ne pourrez faire que des petites :p ).
  • Toujours dans General Setup, laisser coché le support de l’initrd/l’initramfs.
  • Décocher Enable loadable module support à la racine du menu.
  • Eviter de décocher les debugs, c’est votre premier, soyez sympas avec vous-même.
  • N’oubliez pas de sauvegarder votre configuration.

Pour avoir quelque chose de sain pour votre architecture, vous pouvez, si vous le voulez, faire un make defconfig avant.

Après cela, vous tapez make bzImage. Cela va prendre un peu de temps. D’après mes expériences et des stats que j’ai glanées :

  • 2 minutes sur un core i7 (-j8).
  • ~45 minutes sur un pentium de base.
  • Pas loin de 12h sur une rapsberry pi.

Si vous avez des stats à me proposer, transmettez-les par MP/sur le forum/mail, je ferais une mise à jour ici.

Pour accélérer la compilation sur des machines multi-coeurs, utilisez make -jX plutôt que make, avec X le nombre de coeurs que votre processeur possède.

Busybox

On télécharge ici, en prenant la version la plus récente (qui est … tout en bas :o ). On décompresse l’archive dans build, et ensuite c’est un peu près la même chose qu’avec le noyau :

  1. Configuration (via make config ou make menuconfig, les résultats étant identiques à ceux du noyau), en n’oubliant pas d’être dans le dossier racine de busybox (celui qui vient d’être sorti de l’archive).
  2. Compilation (make).
  3. Installation (make install).

Un menuconfig donne une jolie interface textuelle :

Le configurateur de busybox

La version de busybox que j’utilise est la 1.22.1, et comme là c’est moins grave, je vous mets une configuration possible:

   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
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
#
# Automatically generated make config: don't edit
# Busybox version: 1.21.1
# Mon Aug 11 13:36:34 2014
#
CONFIG_HAVE_DOT_CONFIG=y

#
# Busybox Settings
#

#
# General Configuration
#
CONFIG_DESKTOP=y
# CONFIG_EXTRA_COMPAT is not set
# CONFIG_INCLUDE_SUSv2 is not set
# CONFIG_USE_PORTABLE_CODE is not set
CONFIG_PLATFORM_LINUX=y
CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
CONFIG_SHOW_USAGE=y
CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_FEATURE_COMPRESS_USAGE=y
CONFIG_FEATURE_INSTALLER=y
# CONFIG_INSTALL_NO_USR is not set
CONFIG_LOCALE_SUPPORT=y
CONFIG_UNICODE_SUPPORT=y
# CONFIG_UNICODE_USING_LOCALE is not set
CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
CONFIG_SUBST_WCHAR=63
CONFIG_LAST_SUPPORTED_WCHAR=767
# CONFIG_UNICODE_COMBINING_WCHARS is not set
CONFIG_UNICODE_WIDE_WCHARS=y
# CONFIG_UNICODE_BIDI_SUPPORT is not set
# CONFIG_UNICODE_NEUTRAL_TABLE is not set
# CONFIG_UNICODE_PRESERVE_BROKEN is not set
CONFIG_LONG_OPTS=y
CONFIG_FEATURE_DEVPTS=y
# CONFIG_FEATURE_CLEAN_UP is not set
CONFIG_FEATURE_UTMP=y
CONFIG_FEATURE_WTMP=y
CONFIG_FEATURE_PIDFILE=y
CONFIG_PID_FILE_PATH="/var/run"
CONFIG_FEATURE_SUID=y
CONFIG_FEATURE_SUID_CONFIG=y
CONFIG_FEATURE_SUID_CONFIG_QUIET=y
# CONFIG_SELINUX is not set
# CONFIG_FEATURE_PREFER_APPLETS is not set
CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
CONFIG_FEATURE_SYSLOG=y
# CONFIG_FEATURE_HAVE_RPC is not set

#
# Build Options
#
# CONFIG_STATIC is not set
# CONFIG_PIE is not set
# CONFIG_NOMMU is not set
# CONFIG_BUILD_LIBBUSYBOX is not set
# CONFIG_FEATURE_INDIVIDUAL is not set
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
CONFIG_LFS=y
CONFIG_CROSS_COMPILER_PREFIX=""
CONFIG_SYSROOT=""
CONFIG_EXTRA_CFLAGS="-Os"
CONFIG_EXTRA_LDFLAGS=""
CONFIG_EXTRA_LDLIBS=""

#
# Debugging Options
#
# CONFIG_DEBUG is not set
# CONFIG_DEBUG_PESSIMIZE is not set
# CONFIG_WERROR is not set
CONFIG_NO_DEBUG_LIB=y
# CONFIG_DMALLOC is not set
# CONFIG_EFENCE is not set

#
# Installation Options ("make install" behavior)
#
CONFIG_INSTALL_APPLET_SYMLINKS=y
# CONFIG_INSTALL_APPLET_HARDLINKS is not set
# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
# CONFIG_INSTALL_APPLET_DONT is not set
# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
CONFIG_PREFIX="./_install"

#
# Busybox Library Tuning
#
# CONFIG_FEATURE_SYSTEMD is not set
CONFIG_FEATURE_RTMINMAX=y
CONFIG_PASSWORD_MINLEN=6
CONFIG_MD5_SMALL=1
CONFIG_SHA3_SMALL=0
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
# CONFIG_FEATURE_EDITING_VI is not set
CONFIG_FEATURE_EDITING_HISTORY=255
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
# CONFIG_FEATURE_REVERSE_SEARCH is not set
CONFIG_FEATURE_TAB_COMPLETION=y
CONFIG_FEATURE_USERNAME_COMPLETION=y
CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
CONFIG_FEATURE_NON_POSIX_CP=y
CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
CONFIG_FEATURE_COPYBUF_KB=4
# CONFIG_FEATURE_SKIP_ROOTFS is not set
# CONFIG_MONOTONIC_SYSCALL is not set
CONFIG_IOCTL_HEX2STR_ERROR=y
# CONFIG_FEATURE_HWIB is not set

#
# Applets
#

#
# Archival Utilities
#
CONFIG_FEATURE_SEAMLESS_XZ=y
CONFIG_FEATURE_SEAMLESS_LZMA=y
CONFIG_FEATURE_SEAMLESS_BZ2=y
CONFIG_FEATURE_SEAMLESS_GZ=y
# CONFIG_FEATURE_SEAMLESS_Z is not set
# CONFIG_AR is not set
# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
# CONFIG_FEATURE_AR_CREATE is not set
CONFIG_BUNZIP2=y
CONFIG_BZIP2=y
CONFIG_CPIO=y
CONFIG_FEATURE_CPIO_O=y
CONFIG_FEATURE_CPIO_P=y
# CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
CONFIG_GUNZIP=y
CONFIG_GZIP=y
CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
CONFIG_GZIP_FAST=1
CONFIG_LZOP=y
CONFIG_LZOP_COMPR_HIGH=y
# CONFIG_RPM2CPIO is not set
# CONFIG_RPM is not set
CONFIG_TAR=y
CONFIG_FEATURE_TAR_CREATE=y
CONFIG_FEATURE_TAR_AUTODETECT=y
CONFIG_FEATURE_TAR_FROM=y
CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
CONFIG_FEATURE_TAR_LONG_OPTIONS=y
CONFIG_FEATURE_TAR_TO_COMMAND=y
CONFIG_FEATURE_TAR_UNAME_GNAME=y
CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
# CONFIG_FEATURE_TAR_SELINUX is not set
# CONFIG_UNCOMPRESS is not set
CONFIG_UNLZMA=y
CONFIG_FEATURE_LZMA_FAST=y
CONFIG_LZMA=y
CONFIG_UNXZ=y
CONFIG_XZ=y
CONFIG_UNZIP=y

#
# Coreutils
#
CONFIG_BASENAME=y
CONFIG_CAT=y
CONFIG_DATE=y
CONFIG_FEATURE_DATE_ISOFMT=y
# CONFIG_FEATURE_DATE_NANO is not set
CONFIG_FEATURE_DATE_COMPAT=y
# CONFIG_HOSTID is not set
# CONFIG_ID is not set
# CONFIG_GROUPS is not set
CONFIG_TEST=y
CONFIG_FEATURE_TEST_64=y
CONFIG_TOUCH=y
CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
CONFIG_FEATURE_TR_EQUIV=y
CONFIG_BASE64=y
CONFIG_WHO=y
CONFIG_USERS=y
CONFIG_CAL=y
CONFIG_CATV=y
CONFIG_CHGRP=y
CONFIG_CHMOD=y
CONFIG_CHOWN=y
CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
CONFIG_CHROOT=y
CONFIG_CKSUM=y
# CONFIG_COMM is not set
CONFIG_CP=y
CONFIG_FEATURE_CP_LONG_OPTIONS=y
CONFIG_CUT=y
CONFIG_DD=y
CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
CONFIG_FEATURE_DD_IBS_OBS=y
CONFIG_DF=y
CONFIG_FEATURE_DF_FANCY=y
CONFIG_DIRNAME=y
CONFIG_DOS2UNIX=y
CONFIG_UNIX2DOS=y
CONFIG_DU=y
CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
CONFIG_ECHO=y
CONFIG_FEATURE_FANCY_ECHO=y
CONFIG_ENV=y
CONFIG_FEATURE_ENV_LONG_OPTIONS=y
CONFIG_EXPAND=y
CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y
CONFIG_EXPR=y
CONFIG_EXPR_MATH_SUPPORT_64=y
CONFIG_FALSE=y
CONFIG_FOLD=y
CONFIG_FSYNC=y
CONFIG_HEAD=y
CONFIG_FEATURE_FANCY_HEAD=y
# CONFIG_INSTALL is not set
# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
CONFIG_LN=y
CONFIG_LOGNAME=y
CONFIG_LS=y
CONFIG_FEATURE_LS_FILETYPES=y
CONFIG_FEATURE_LS_FOLLOWLINKS=y
CONFIG_FEATURE_LS_RECURSIVE=y
CONFIG_FEATURE_LS_SORTFILES=y
CONFIG_FEATURE_LS_TIMESTAMPS=y
CONFIG_FEATURE_LS_USERNAME=y
CONFIG_FEATURE_LS_COLOR=y
CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
CONFIG_MD5SUM=y
CONFIG_MKDIR=y
CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
CONFIG_MKFIFO=y
CONFIG_MKNOD=y
CONFIG_MV=y
CONFIG_FEATURE_MV_LONG_OPTIONS=y
CONFIG_NICE=y
CONFIG_NOHUP=y
CONFIG_OD=y
CONFIG_PRINTENV=y
CONFIG_PRINTF=y
CONFIG_PWD=y
CONFIG_READLINK=y
CONFIG_FEATURE_READLINK_FOLLOW=y
# CONFIG_REALPATH is not set
CONFIG_RM=y
CONFIG_RMDIR=y
CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
CONFIG_SEQ=y
CONFIG_SHA1SUM=y
CONFIG_SHA256SUM=y
CONFIG_SHA512SUM=y
CONFIG_SHA3SUM=y
CONFIG_SLEEP=y
CONFIG_FEATURE_FANCY_SLEEP=y
CONFIG_FEATURE_FLOAT_SLEEP=y
CONFIG_SORT=y
CONFIG_FEATURE_SORT_BIG=y
CONFIG_SPLIT=y
CONFIG_FEATURE_SPLIT_FANCY=y
CONFIG_STAT=y
CONFIG_FEATURE_STAT_FORMAT=y
CONFIG_STTY=y
CONFIG_SUM=y
CONFIG_SYNC=y
CONFIG_TAC=y
CONFIG_TAIL=y
CONFIG_FEATURE_FANCY_TAIL=y
CONFIG_TEE=y
CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
CONFIG_TRUE=y
CONFIG_TTY=y
CONFIG_UNAME=y
CONFIG_UNEXPAND=y
CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y
CONFIG_UNIQ=y
CONFIG_USLEEP=y
# CONFIG_UUDECODE is not set
# CONFIG_UUENCODE is not set
CONFIG_WC=y
CONFIG_FEATURE_WC_LARGE=y
CONFIG_WHOAMI=y
CONFIG_YES=y

#
# Common options for cp and mv
#
CONFIG_FEATURE_PRESERVE_HARDLINKS=y

#
# Common options for ls, more and telnet
#
CONFIG_FEATURE_AUTOWIDTH=y

#
# Common options for df, du, ls
#
CONFIG_FEATURE_HUMAN_READABLE=y

#
# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
#
CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y

#
# Console Utilities
#
# CONFIG_CHVT is not set
CONFIG_FGCONSOLE=y
CONFIG_CLEAR=y
# CONFIG_DEALLOCVT is not set
CONFIG_DUMPKMAP=y
CONFIG_KBD_MODE=y
CONFIG_LOADFONT=y
CONFIG_LOADKMAP=y
CONFIG_OPENVT=y
CONFIG_RESET=y
CONFIG_RESIZE=y
CONFIG_FEATURE_RESIZE_PRINT=y
CONFIG_SETCONSOLE=y
CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y
CONFIG_SETFONT=y
CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y
CONFIG_DEFAULT_SETFONT_DIR=""
CONFIG_SETKEYCODES=y
CONFIG_SETLOGCONS=y
CONFIG_SHOWKEY=y

#
# Common options for loadfont and setfont
#
CONFIG_FEATURE_LOADFONT_PSF2=y
CONFIG_FEATURE_LOADFONT_RAW=y

#
# Debian Utilities
#
CONFIG_MKTEMP=y
CONFIG_PIPE_PROGRESS=y
# CONFIG_RUN_PARTS is not set
# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
# CONFIG_START_STOP_DAEMON is not set
# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
CONFIG_WHICH=y

#
# Editors
#
CONFIG_PATCH=y
CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=4096
# CONFIG_FEATURE_VI_8BIT is not set
CONFIG_FEATURE_VI_COLON=y
CONFIG_FEATURE_VI_YANKMARK=y
CONFIG_FEATURE_VI_SEARCH=y
CONFIG_FEATURE_VI_REGEX_SEARCH=y
CONFIG_FEATURE_VI_USE_SIGNALS=y
CONFIG_FEATURE_VI_DOT_CMD=y
CONFIG_FEATURE_VI_READONLY=y
CONFIG_FEATURE_VI_SETOPTS=y
CONFIG_FEATURE_VI_SET=y
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_ASK_TERMINAL=y
CONFIG_AWK=y
CONFIG_FEATURE_AWK_LIBM=y
CONFIG_CMP=y
CONFIG_DIFF=y
CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
CONFIG_FEATURE_DIFF_DIR=y
CONFIG_ED=y
CONFIG_SED=y
CONFIG_FEATURE_ALLOW_EXEC=y

#
# Finding Utilities
#
CONFIG_FIND=y
CONFIG_FEATURE_FIND_PRINT0=y
CONFIG_FEATURE_FIND_MTIME=y
CONFIG_FEATURE_FIND_MMIN=y
CONFIG_FEATURE_FIND_PERM=y
CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
CONFIG_FEATURE_FIND_INUM=y
CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_USER=y
CONFIG_FEATURE_FIND_GROUP=y
CONFIG_FEATURE_FIND_NOT=y
CONFIG_FEATURE_FIND_DEPTH=y
CONFIG_FEATURE_FIND_PAREN=y
CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
CONFIG_FEATURE_FIND_DELETE=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
CONFIG_FEATURE_FIND_LINKS=y
CONFIG_GREP=y
CONFIG_FEATURE_GREP_EGREP_ALIAS=y
CONFIG_FEATURE_GREP_FGREP_ALIAS=y
CONFIG_FEATURE_GREP_CONTEXT=y
CONFIG_XARGS=y
CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y

#
# Init Utilities
#
# CONFIG_BOOTCHARTD is not set
# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
CONFIG_HALT=y
# CONFIG_FEATURE_CALL_TELINIT is not set
CONFIG_TELINIT_PATH=""
CONFIG_INIT=y
CONFIG_FEATURE_USE_INITTAB=y
# CONFIG_FEATURE_KILL_REMOVED is not set
CONFIG_FEATURE_KILL_DELAY=0
CONFIG_FEATURE_INIT_SCTTY=y
CONFIG_FEATURE_INIT_SYSLOG=y
CONFIG_FEATURE_EXTRA_QUIET=y
# CONFIG_FEATURE_INIT_COREDUMPS is not set
# CONFIG_FEATURE_INITRD is not set
CONFIG_INIT_TERMINAL_TYPE="linux"
CONFIG_MESG=y
CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y

#
# Login/Password Management Utilities
#
# CONFIG_ADD_SHELL is not set
# CONFIG_REMOVE_SHELL is not set
CONFIG_FEATURE_SHADOWPASSWDS=y
CONFIG_USE_BB_PWD_GRP=y
CONFIG_USE_BB_SHADOW=y
CONFIG_USE_BB_CRYPT=y
CONFIG_USE_BB_CRYPT_SHA=y
CONFIG_ADDUSER=y
CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_FIRST_SYSTEM_ID=1000
CONFIG_LAST_SYSTEM_ID=9999
CONFIG_ADDGROUP=y
CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y
CONFIG_FEATURE_ADDUSER_TO_GROUP=y
CONFIG_DELUSER=y
CONFIG_DELGROUP=y
CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
CONFIG_GETTY=y
CONFIG_LOGIN=y
# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_PAM is not set
CONFIG_LOGIN_SCRIPTS=y
# CONFIG_FEATURE_NOLOGIN is not set
# CONFIG_FEATURE_SECURETTY is not set
CONFIG_PASSWD=y
CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
CONFIG_CRYPTPW=y
CONFIG_CHPASSWD=y
CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5"
CONFIG_SU=y
CONFIG_FEATURE_SU_SYSLOG=y
CONFIG_FEATURE_SU_CHECKS_SHELLS=y
CONFIG_SULOGIN=y
# CONFIG_VLOCK is not set

#
# Linux Ext2 FS Progs
#
CONFIG_CHATTR=y
CONFIG_FSCK=y
CONFIG_LSATTR=y
CONFIG_TUNE2FS=y

#
# Linux Module Utilities
#
# CONFIG_MODINFO is not set
# CONFIG_MODPROBE_SMALL is not set
# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
# CONFIG_INSMOD is not set
# CONFIG_RMMOD is not set
# CONFIG_LSMOD is not set
# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
# CONFIG_MODPROBE is not set
# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
# CONFIG_DEPMOD is not set

#
# Options common to multiple modutils
#
# CONFIG_FEATURE_2_4_MODULES is not set
# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
# CONFIG_FEATURE_MODUTILS_ALIAS is not set
# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
CONFIG_DEFAULT_MODULES_DIR=""
CONFIG_DEFAULT_DEPMOD_FILE=""

#
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
CONFIG_MDEV=y
CONFIG_FEATURE_MDEV_CONF=y
CONFIG_FEATURE_MDEV_RENAME=y
CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
CONFIG_FEATURE_MDEV_EXEC=y
CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
CONFIG_REV=y
CONFIG_ACPID=y
CONFIG_FEATURE_ACPID_COMPAT=y
CONFIG_BLKID=y
# CONFIG_FEATURE_BLKID_TYPE is not set
CONFIG_DMESG=y
# CONFIG_FEATURE_DMESG_PRETTY is not set
CONFIG_FBSET=y
CONFIG_FEATURE_FBSET_FANCY=y
CONFIG_FEATURE_FBSET_READMODE=y
CONFIG_FDFLUSH=y
CONFIG_FDFORMAT=y
CONFIG_FDISK=y
# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
CONFIG_FEATURE_FDISK_WRITABLE=y
# CONFIG_FEATURE_AIX_LABEL is not set
# CONFIG_FEATURE_SGI_LABEL is not set
# CONFIG_FEATURE_SUN_LABEL is not set
# CONFIG_FEATURE_OSF_LABEL is not set
CONFIG_FEATURE_GPT_LABEL=y
CONFIG_FEATURE_FDISK_ADVANCED=y
CONFIG_FINDFS=y
CONFIG_FLOCK=y
# CONFIG_FREERAMDISK is not set
# CONFIG_FSCK_MINIX is not set
CONFIG_MKFS_EXT2=y
# CONFIG_MKFS_MINIX is not set
# CONFIG_FEATURE_MINIX2 is not set
# CONFIG_MKFS_REISER is not set
CONFIG_MKFS_VFAT=y
# CONFIG_GETOPT is not set
# CONFIG_FEATURE_GETOPT_LONG is not set
CONFIG_HEXDUMP=y
CONFIG_FEATURE_HEXDUMP_REVERSE=y
# CONFIG_HD is not set
CONFIG_HWCLOCK=y
CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
CONFIG_IPCRM=y
CONFIG_IPCS=y
CONFIG_LOSETUP=y
CONFIG_LSPCI=y
CONFIG_LSUSB=y
CONFIG_MKSWAP=y
CONFIG_FEATURE_MKSWAP_UUID=y
CONFIG_MORE=y
CONFIG_MOUNT=y
CONFIG_FEATURE_MOUNT_FAKE=y
CONFIG_FEATURE_MOUNT_VERBOSE=y
# CONFIG_FEATURE_MOUNT_HELPERS is not set
CONFIG_FEATURE_MOUNT_LABEL=y
# CONFIG_FEATURE_MOUNT_NFS is not set
CONFIG_FEATURE_MOUNT_CIFS=y
CONFIG_FEATURE_MOUNT_FLAGS=y
CONFIG_FEATURE_MOUNT_FSTAB=y
# CONFIG_PIVOT_ROOT is not set
CONFIG_RDATE=y
CONFIG_RDEV=y
CONFIG_READPROFILE=y
CONFIG_RTCWAKE=y
CONFIG_SCRIPT=y
CONFIG_SCRIPTREPLAY=y
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
CONFIG_FEATURE_SWAPON_PRI=y
# CONFIG_SWITCH_ROOT is not set
CONFIG_UMOUNT=y
CONFIG_FEATURE_UMOUNT_ALL=y

#
# Common options for mount/umount
#
CONFIG_FEATURE_MOUNT_LOOP=y
CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
# CONFIG_FEATURE_MTAB_SUPPORT is not set
CONFIG_VOLUMEID=y

#
# Filesystem/Volume identification
#
CONFIG_FEATURE_VOLUMEID_EXT=y
CONFIG_FEATURE_VOLUMEID_BTRFS=y
# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
CONFIG_FEATURE_VOLUMEID_FAT=y
CONFIG_FEATURE_VOLUMEID_EXFAT=y
# CONFIG_FEATURE_VOLUMEID_HFS is not set
# CONFIG_FEATURE_VOLUMEID_JFS is not set
CONFIG_FEATURE_VOLUMEID_XFS=y
# CONFIG_FEATURE_VOLUMEID_NILFS is not set
CONFIG_FEATURE_VOLUMEID_NTFS=y
CONFIG_FEATURE_VOLUMEID_ISO9660=y
CONFIG_FEATURE_VOLUMEID_UDF=y
# CONFIG_FEATURE_VOLUMEID_LUKS is not set
CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
# CONFIG_FEATURE_VOLUMEID_SYSV is not set
# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set

#
# Miscellaneous Utilities
#
CONFIG_CONSPY=y
CONFIG_LESS=y
CONFIG_FEATURE_LESS_MAXLINES=9999999
CONFIG_FEATURE_LESS_BRACKETS=y
CONFIG_FEATURE_LESS_FLAGS=y
CONFIG_FEATURE_LESS_MARKS=y
CONFIG_FEATURE_LESS_REGEXP=y
CONFIG_FEATURE_LESS_WINCH=y
CONFIG_FEATURE_LESS_ASK_TERMINAL=y
CONFIG_FEATURE_LESS_DASHCMD=y
CONFIG_FEATURE_LESS_LINENUMS=y
# CONFIG_NANDWRITE is not set
# CONFIG_NANDDUMP is not set
CONFIG_SETSERIAL=y
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
# CONFIG_UBIMKVOL is not set
# CONFIG_UBIRMVOL is not set
# CONFIG_UBIRSVOL is not set
# CONFIG_UBIUPDATEVOL is not set
CONFIG_ADJTIMEX=y
CONFIG_BBCONFIG=y
CONFIG_FEATURE_COMPRESS_BBCONFIG=y
CONFIG_BEEP=y
CONFIG_FEATURE_BEEP_FREQ=4000
CONFIG_FEATURE_BEEP_LENGTH_MS=30
CONFIG_CHAT=y
CONFIG_FEATURE_CHAT_NOFAIL=y
# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
CONFIG_FEATURE_CHAT_CLR_ABORT=y
CONFIG_CHRT=y
CONFIG_CROND=y
CONFIG_FEATURE_CROND_D=y
CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
# CONFIG_CRONTAB is not set
CONFIG_DC=y
CONFIG_FEATURE_DC_LIBM=y
# CONFIG_DEVFSD is not set
# CONFIG_DEVFSD_MODLOAD is not set
# CONFIG_DEVFSD_FG_NP is not set
# CONFIG_DEVFSD_VERBOSE is not set
# CONFIG_FEATURE_DEVFS is not set
CONFIG_DEVMEM=y
CONFIG_EJECT=y
CONFIG_FEATURE_EJECT_SCSI=y
CONFIG_FBSPLASH=y
# CONFIG_FLASHCP is not set
# CONFIG_FLASH_LOCK is not set
# CONFIG_FLASH_UNLOCK is not set
# CONFIG_FLASH_ERASEALL is not set
CONFIG_IONICE=y
# CONFIG_INOTIFYD is not set
CONFIG_LAST=y
CONFIG_FEATURE_LAST_SMALL=y
# CONFIG_FEATURE_LAST_FANCY is not set
CONFIG_HDPARM=y
CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
CONFIG_MAKEDEVS=y
# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
CONFIG_FEATURE_MAKEDEVS_TABLE=y
CONFIG_MAN=y
# CONFIG_MICROCOM is not set
CONFIG_MOUNTPOINT=y
# CONFIG_MT is not set
# CONFIG_RAIDAUTORUN is not set
CONFIG_READAHEAD=y
CONFIG_RFKILL=y
CONFIG_RUNLEVEL=y
CONFIG_RX=y
CONFIG_SETSID=y
CONFIG_STRINGS=y
# CONFIG_TASKSET is not set
# CONFIG_FEATURE_TASKSET_FANCY is not set
CONFIG_TIME=y
CONFIG_TIMEOUT=y
CONFIG_TTYSIZE=y
CONFIG_VOLNAME=y
CONFIG_WALL=y
# CONFIG_WATCHDOG is not set

#
# Networking Utilities
#
CONFIG_NAMEIF=y
CONFIG_FEATURE_NAMEIF_EXTENDED=y
CONFIG_NBDCLIENT=y
CONFIG_NC=y
CONFIG_NC_SERVER=y
CONFIG_NC_EXTRA=y
# CONFIG_NC_110_COMPAT is not set
CONFIG_PING=y
CONFIG_PING6=y
CONFIG_FEATURE_FANCY_PING=y
CONFIG_WHOIS=y
CONFIG_FEATURE_IPV6=y
# CONFIG_FEATURE_UNIX_LOCAL is not set
CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
CONFIG_ARP=y
CONFIG_ARPING=y
CONFIG_BRCTL=y
CONFIG_FEATURE_BRCTL_FANCY=y
CONFIG_FEATURE_BRCTL_SHOW=y
# CONFIG_DNSD is not set
CONFIG_ETHER_WAKE=y
CONFIG_FAKEIDENTD=y
# CONFIG_FTPD is not set
# CONFIG_FEATURE_FTP_WRITE is not set
# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
CONFIG_FTPGET=y
CONFIG_FTPPUT=y
CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
CONFIG_HOSTNAME=y
# CONFIG_HTTPD is not set
# CONFIG_FEATURE_HTTPD_RANGES is not set
# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
# CONFIG_FEATURE_HTTPD_SETUID is not set
# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
# CONFIG_FEATURE_HTTPD_CGI is not set
# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
# CONFIG_FEATURE_HTTPD_PROXY is not set
# CONFIG_FEATURE_HTTPD_GZIP is not set
CONFIG_IFCONFIG=y
CONFIG_FEATURE_IFCONFIG_STATUS=y
CONFIG_FEATURE_IFCONFIG_SLIP=y
CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
CONFIG_FEATURE_IFCONFIG_HW=y
CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
CONFIG_IFENSLAVE=y
CONFIG_IFPLUGD=y
CONFIG_IFUPDOWN=y
CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
CONFIG_FEATURE_IFUPDOWN_IP=y
CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
CONFIG_FEATURE_IFUPDOWN_IPV4=y
CONFIG_FEATURE_IFUPDOWN_IPV6=y
CONFIG_FEATURE_IFUPDOWN_MAPPING=y
# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
# CONFIG_INETD is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
# CONFIG_FEATURE_INETD_RPC is not set
CONFIG_IP=y
CONFIG_FEATURE_IP_ADDRESS=y
CONFIG_FEATURE_IP_LINK=y
CONFIG_FEATURE_IP_ROUTE=y
CONFIG_FEATURE_IP_TUNNEL=y
CONFIG_FEATURE_IP_RULE=y
CONFIG_FEATURE_IP_SHORT_FORMS=y
# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
CONFIG_IPADDR=y
CONFIG_IPLINK=y
CONFIG_IPROUTE=y
CONFIG_IPTUNNEL=y
CONFIG_IPRULE=y
CONFIG_IPCALC=y
CONFIG_FEATURE_IPCALC_FANCY=y
CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
CONFIG_NETSTAT=y
CONFIG_FEATURE_NETSTAT_WIDE=y
CONFIG_FEATURE_NETSTAT_PRG=y
CONFIG_NSLOOKUP=y
CONFIG_NTPD=y
CONFIG_FEATURE_NTPD_SERVER=y
CONFIG_PSCAN=y
CONFIG_ROUTE=y
CONFIG_SLATTACH=y
CONFIG_TCPSVD=y
CONFIG_TELNET=y
CONFIG_FEATURE_TELNET_TTYPE=y
CONFIG_FEATURE_TELNET_AUTOLOGIN=y
CONFIG_TELNETD=y
CONFIG_FEATURE_TELNETD_STANDALONE=y
CONFIG_FEATURE_TELNETD_INETD_WAIT=y
CONFIG_TFTP=y
# CONFIG_TFTPD is not set

#
# Common options for tftp/tftpd
#
CONFIG_FEATURE_TFTP_GET=y
CONFIG_FEATURE_TFTP_PUT=y
CONFIG_FEATURE_TFTP_BLOCKSIZE=y
CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
# CONFIG_TFTP_DEBUG is not set
CONFIG_TRACEROUTE=y
CONFIG_TRACEROUTE6=y
CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
CONFIG_TUNCTL=y
CONFIG_FEATURE_TUNCTL_UG=y
CONFIG_UDHCPC6=y
# CONFIG_UDHCPD is not set
# CONFIG_DHCPRELAY is not set
# CONFIG_DUMPLEASES is not set
# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
CONFIG_DHCPD_LEASES_FILE=""
CONFIG_UDHCPC=y
CONFIG_FEATURE_UDHCPC_ARPING=y
# CONFIG_FEATURE_UDHCP_PORT is not set
CONFIG_UDHCP_DEBUG=9
CONFIG_FEATURE_UDHCP_RFC3397=y
CONFIG_FEATURE_UDHCP_8021Q=y
CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
CONFIG_UDPSVD=y
CONFIG_VCONFIG=y
CONFIG_WGET=y
CONFIG_FEATURE_WGET_STATUSBAR=y
CONFIG_FEATURE_WGET_AUTHENTICATION=y
CONFIG_FEATURE_WGET_LONG_OPTIONS=y
CONFIG_FEATURE_WGET_TIMEOUT=y
CONFIG_ZCIP=y

#
# Print Utilities
#
# CONFIG_LPD is not set
# CONFIG_LPR is not set
# CONFIG_LPQ is not set

#
# Mail Utilities
#
CONFIG_MAKEMIME=y
CONFIG_FEATURE_MIME_CHARSET="us-ascii"
CONFIG_POPMAILDIR=y
CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
CONFIG_REFORMIME=y
CONFIG_FEATURE_REFORMIME_COMPAT=y
CONFIG_SENDMAIL=y

#
# Process Utilities
#
CONFIG_IOSTAT=y
CONFIG_LSOF=y
CONFIG_MPSTAT=y
CONFIG_NMETER=y
CONFIG_PMAP=y
CONFIG_POWERTOP=y
CONFIG_PSTREE=y
CONFIG_PWDX=y
CONFIG_SMEMCAP=y
CONFIG_TOP=y
CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
CONFIG_FEATURE_TOP_SMP_CPU=y
CONFIG_FEATURE_TOP_DECIMALS=y
CONFIG_FEATURE_TOP_SMP_PROCESS=y
CONFIG_FEATURE_TOPMEM=y
CONFIG_UPTIME=y
CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
CONFIG_FREE=y
CONFIG_FUSER=y
CONFIG_KILL=y
CONFIG_KILLALL=y
CONFIG_KILLALL5=y
CONFIG_PGREP=y
CONFIG_PIDOF=y
CONFIG_FEATURE_PIDOF_SINGLE=y
CONFIG_FEATURE_PIDOF_OMIT=y
CONFIG_PKILL=y
CONFIG_PS=y
# CONFIG_FEATURE_PS_WIDE is not set
# CONFIG_FEATURE_PS_LONG is not set
CONFIG_FEATURE_PS_TIME=y
CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
CONFIG_RENICE=y
CONFIG_BB_SYSCTL=y
CONFIG_FEATURE_SHOW_THREADS=y
CONFIG_WATCH=y

#
# Runit Utilities
#
# CONFIG_RUNSV is not set
# CONFIG_RUNSVDIR is not set
# CONFIG_FEATURE_RUNSVDIR_LOG is not set
# CONFIG_SV is not set
CONFIG_SV_DEFAULT_SERVICE_DIR=""
# CONFIG_SVLOGD is not set
CONFIG_CHPST=y
CONFIG_SETUIDGID=y
CONFIG_ENVUIDGID=y
CONFIG_ENVDIR=y
# CONFIG_SOFTLIMIT is not set
# CONFIG_CHCON is not set
# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
# CONFIG_GETENFORCE is not set
# CONFIG_GETSEBOOL is not set
# CONFIG_LOAD_POLICY is not set
# CONFIG_MATCHPATHCON is not set
# CONFIG_RESTORECON is not set
# CONFIG_RUNCON is not set
# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
# CONFIG_SELINUXENABLED is not set
# CONFIG_SETENFORCE is not set
# CONFIG_SETFILES is not set
# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
# CONFIG_SETSEBOOL is not set
# CONFIG_SESTATUS is not set

#
# Shells
#
CONFIG_ASH=y
CONFIG_ASH_BASH_COMPAT=y
# CONFIG_ASH_IDLE_TIMEOUT is not set
CONFIG_ASH_JOB_CONTROL=y
CONFIG_ASH_ALIAS=y
CONFIG_ASH_GETOPTS=y
CONFIG_ASH_BUILTIN_ECHO=y
CONFIG_ASH_BUILTIN_PRINTF=y
CONFIG_ASH_BUILTIN_TEST=y
CONFIG_ASH_CMDCMD=y
# CONFIG_ASH_MAIL is not set
CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
CONFIG_ASH_RANDOM_SUPPORT=y
CONFIG_ASH_EXPAND_PRMT=y
# CONFIG_CTTYHACK is not set
# CONFIG_HUSH is not set
# CONFIG_HUSH_BASH_COMPAT is not set
# CONFIG_HUSH_BRACE_EXPANSION is not set
# CONFIG_HUSH_HELP is not set
# CONFIG_HUSH_INTERACTIVE is not set
# CONFIG_HUSH_SAVEHISTORY is not set
# CONFIG_HUSH_JOB is not set
# CONFIG_HUSH_TICK is not set
# CONFIG_HUSH_IF is not set
# CONFIG_HUSH_LOOPS is not set
# CONFIG_HUSH_CASE is not set
# CONFIG_HUSH_FUNCTIONS is not set
# CONFIG_HUSH_LOCAL is not set
# CONFIG_HUSH_RANDOM_SUPPORT is not set
# CONFIG_HUSH_EXPORT_N is not set
# CONFIG_HUSH_MODE_X is not set
# CONFIG_MSH is not set
CONFIG_FEATURE_SH_IS_ASH=y
# CONFIG_FEATURE_SH_IS_HUSH is not set
# CONFIG_FEATURE_SH_IS_NONE is not set
CONFIG_FEATURE_BASH_IS_ASH=y
# CONFIG_FEATURE_BASH_IS_HUSH is not set
# CONFIG_FEATURE_BASH_IS_NONE is not set
CONFIG_SH_MATH_SUPPORT=y
CONFIG_SH_MATH_SUPPORT_64=y
CONFIG_FEATURE_SH_EXTRA_QUIET=y
# CONFIG_FEATURE_SH_STANDALONE is not set
# CONFIG_FEATURE_SH_NOFORK is not set
CONFIG_FEATURE_SH_HISTFILESIZE=y

#
# System Logging Utilities
#
CONFIG_SYSLOGD=y
CONFIG_FEATURE_ROTATE_LOGFILE=y
CONFIG_FEATURE_REMOTE_LOG=y
CONFIG_FEATURE_SYSLOGD_DUP=y
CONFIG_FEATURE_SYSLOGD_CFG=y
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
CONFIG_FEATURE_IPC_SYSLOG=y
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=4
CONFIG_LOGREAD=y
CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
CONFIG_FEATURE_KMSG_SYSLOG=y
CONFIG_KLOGD=y

#
# klogd should not be used together with syslog to kernel printk buffer
#
CONFIG_FEATURE_KLOGD_KLOGCTL=y
# CONFIG_LOGGER is not set

Ce fichier sera enregistré dans la racine du dossier de busybox, et avec le nom .config.

Une fois le make install lancé (éventuellement avec l’option -j), nous avons un dossier _install situé dans la racine du dossier de busybox qui contient tout le système créé par busybox.

Mais il y a des liens symboliques partout ! Pourquoi tu dis que c’est installé ?

En fait, tous nos programmes résident dans _install/bin/busybox. Ce programme va avoir un comportement différent selon le nom par lequel on l’appelle : c’est un multi-call binairy. Et les liens symboliques permettent de changer le nom par lequel on l’appelle. En conséquence, pour l’utilisateur il n’y a aucune différence (il tape toujours cp par exemple), mais par rapport aux coreutils de GNU, le fonctionnement interne est bien plus proche d’une philosophie « embarquée », puisqu’il n’y a qu’un seul programme (= bien plus léger, car une seule liste de dépendance, un seul entête ELF, …).

Intégration à notre tux

Nous allons donc copier strictement tout ça vers rootbase. En admettant que le dossier _install se trouve dans build/busybox-[version] (soit le comportement par défaut : à la racine du dossier de busybox), la commande sera:

1
cp -a ./_install/* ../../rootbase/

Dans cet exemple nous sommes situés à la racine du dossier de busybox.

Maintenant vient la cannibalisation de la distribution : on va pomper toutes les librairies. Sauf qu’on ne va copier que ce dont on a besoin. Pour ça nous avons une arme : ldd. Ce programme permet de connaître toutes les librairies (non statiquement) utilisées par un programme. Nous allons donc d’abord mettre les librairies utilisées par busybox avec ldd :

1
ldd rootbase/bin/busybox

Dans cet exemple, nous sommes à la racine du projet.

Avec la configuration que je vous ai donnée, le retour de ldd est le suivant:

1
2
3
4
 linux-gate.so.1 (0xb77a9000)
 libm.so.6 => /usr/lib/libm.so.6 (0xb7739000)
 libc.so.6 => /usr/lib/libc.so.6 (0xb7577000)
 /lib/ld-linux.so.2 (0xb77aa000)

On va donc copier strictement dans le même chemin les librairies. C’est-à-dire:

  • libm dans rootbase/usr/lib
  • libc dans rootbase/usr/lib
  • ld-linux dans rootbase/lib

On va donc, dans rootbase, créer les dossiers suivants:

  • lib
  • usr/lib

Si vous avez la flemme de tout recopier proprement, vous pouvez faire un lien symbolique de usr/lib vers lib, via

1
ln -s ../lib lib

en étant dans rootbase/usr, en lieu et place du dossier, comme ça vous mettez tout dans rootbase/lib et tout le monde est content (sauf les puristes, mais les puristes m’ont déjà tué et torturé 3 fois, alors au point où on en est… :D ).

Ensuite, dans rootbase, on crée les dossiers suivants:

  • etc
  • dev
  • opt
  • tmp
  • mnt
  • root
  • run
  • var

Après, on va optimiser un peu pour gagner de la place, avec strip, qui est un programme permettant d’enlever les symboles inutiles, notamment ceux permettant le déboguage. Ce n’est pas la peine de faire ça sur busybox, il est déjà strippé, on va faire cela sur les bibliothèques :

1
2
strip lib/*.so
strip usr/lib/*.so

Et pour finir, on va donner au noyau ce qu’il veut : son init. Positionnez-vous dans rootbase, puis créez le lien symbolique vers busybox :

1
ln -s bin/busybox init

Et voilà ! Plus qu’à tester tout ça. ;)

Faire booter votre RIM-Linux

Nous allons voir comment packager notre tux pour qu’il puisse booter. D’abord, on va faire les étapes communes puis ensuite celles spécifiques à chacun d’entre vous.

La préparation du noyau et du système

Cette étape n’est pas spécifique au premier RIM-Linux, elle s’applique aussi au 2e et à ceux d’après.

Nous n’allons pas faire un iso ! Et non ! Tout simplement parce que notre RIM est destiné à être mis sur une clé, donc on va se simplifier la vie.

Le noyau

Allez dans le dossier de création des binaires, pour beaucoup d’entre vous ce sera arch/x86/boot, et prenez le fichier bzImage. Mettez-le dans le dossier racine du projet, celui qui contient rootbase, build, kernel, pour ne pas le perdre.

Le système

Là, il va falloir faire une archive cpio, compressée de préférence. On va faire ça au moyen de ce petit script (que l’on met à la racine du projet également):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/sh
ICI=$(pwd)
CHEMIN=./rootbase
echo "Le chemin de création est $CHEMIN."
echo "Création en cours ..."
cd $CHEMIN
find ./* -print | cpio -o -Hnewc > $ICI/RIM.cpio
cd $ICI
cat RIM.cpio | gzip -9 > RIM.cpio.gz
echo "Fait."
echo "Faites-vous plaisir avec votre système."

Le principe est le suivant : on crée une archive cpio (cpio -o) avec le format qui va bien (-Hnewc) compressée en gzip (gzip) à fond (-9, donc très compressé). cpio prend une liste de fichier que l’on génère grâce à find.

Ce script sera appelé en se positionnant à la racine du projet.

Il créera à la racine du projet le fichier RIM.cpio.gz.

Identification de l’architecture

Pour ceux qui ne savent pas s’ils sont en BIOS ou UEFI, cette commande vous apportera la réponse :

1
# blkid -s PTTYPE -o value /dev/[périphérique_clé_usb]

L’option -s sert de filtre (on ne prend que les champs correspondant au type de la partition), et l’option -o spécifie ce que l’on veut tirer (la valeur de PTTYPE).

[périphérique_clé_usb] représente un fichier de périphérique (pas une partition, un périphérique entier). Si vous n’avez que votre disque dur, ce devrait être sda (je me répète, mais pas sda1 ou sda2, sda). Cette commande va vous renvoyer le type de la table des partitions du périphérique. Comme je suppose que vous avez tous un disque bien formaté comme il faut au départ, puisque vous pouvez l’utiliser, si la commande vous renvoie dos, c’est que vous êtes en BIOS, gpt en UEFI.

Préparation de la clé USB

Pendant cette étape de partitionnement, il faut ABSOLUMENT que votre clé ne soit pas montée.

Faisons une petite clé maison. Prenez une clé, et lancez un logiciel de partitionnement (je recommande très fortement gparted, mais un (c)fdisk peut faire l’affaire pour les spécialistes). Suivant votre architecture, vous allez refaire une table des partitions:

  • msdos pour un BIOS.
  • GPT pour un (U)EFI.

ATTENTION !! Réécrire la table des partitions est une opération très courte, irréversible et destructrice : vous allez perdre toutes vos partitions, ainsi que vos données. Toutes, sans exception.

Si vous faites une table gpt, les « grands pros » devront utiliser (c)gdisk, et non (c)fdisk.

Ensuite, quelle que soit votre architecture, vous allez créer une seule partition en FAT32 ou FAT16, et vous lui mettrez le drapeau (flag en anglais) boot (bootable pour certains logiciels). Ensuite vous écrivez vos partitions et quittez le logiciel.

On monte ensuite la clé, et on y crée le dossier boot, dans lequel on place notre noyau (le bzImage), et notre initramfs (RIM.cpio.gz).

Configuration spécifique au BIOS

Les utilisateurs d’un (U)EFI peuvent sauter cette section.

Le bootloader utilisé va être syslinux. Attention aux confusions, car syslinux est une « suite » de bootloader qui comporte:

  • syslinux : pour booter à partir d’une FAT32.
  • isolinux : pour booter à partir d’un CD.
  • extlinux : pour booter à partir d’un ext[2/3/4] ou d’un btrfs.
  • pxelinux : pour booter en utilisant la technologie PXE (boot à partir du réseau).

Nous allons utiliser, parmi syslinux, syslinux. Clair ? :D Nous aurions pu choisir extlinux, mais une clé en FAT32 a le gros avantage d’être compatible avec un nombre cataclysmique d’OS (dont Windows et OS X), ce qui est toujours appréciable.

Les raisons du choix de cette suite:

  • Les différents bootloader de la suite obéissent à la même syntaxe en ce qui concerne la configuration.
  • Les bootloader de cette suite sont utilisables dans nombre de situations, pas uniquement celle qui nous intéresse ici.
  • Les bootloader de cette suite ont la réputation d’être légers (et robustes).
  • Les bootloader de cette suite peuvent changer dynamiquement de configuration (je pense à lilo, qui n’a pas forcément cette souplesse).
  • Il est relativement simple de créer un menu (même graphique) avec ces bootloader.
Installation de syslinux

On télécharge syslinux ici (encore une fois, le plus récent est tout en bas >_< ), on décompresse dans build, et on ne compile pas.

Mais … Pourquoi :'( ?

Parce que les binaires sont déjà inclus, et qu’on ne va pas repasser du temps sur un truc qui doit de toute façon être un binaire générique.

On va créer le dossier boot/syslinux sur la clé, et on va y mettre :

  • bios/com32/chain/chain.c32
  • bios/com32/menu/menu.c32
  • bios/com32/modules/poweroff.c32
  • bios/com32/modules/reboot.c32
  • bios/com32/modules/config.c32
  • bios/com32/elflink/ldlinux/ldlinux.c32
  • bios/com32/libutil/libutil.c32

Note : les chemins sont donnés à partir de la racine de l’archive décompressée de syslinux. De plus, on ne recrée pas les dossiers en question, on met tous les fichiers dans boot/syslinux, sans sous-dossiers.

Ensuite, on fait la commande suivante:

1
# [chemin_vers_racine_syslinux]/bios/extlinux/extlinux --install [chemin_vers_clé_usb]/boot/syslinux

Cette commande va mettre le fichier ldlinux.sys dans le dossier boot/syslinux, et faire « pointer » le début de la partition en question sur ce fichier. Il faut donc absolument NE PLUS TOUCHER À LDLINUX.SYS. Tout mouvement sur ce fichier rendra caduc le boot.

Ecriture de la MBR
1
# dd bs=440 count=1 conv=notrunc if=[chemin_vers_syslinux]/bios/mbr/mbr.bin of=/dev/[périphérique_clé_usb]

On fait une copie bit-à-bit (dd) de 1 (count=1) bloc de 440 octets (bs=440) sans troncature (conv=notrunc) de la source (if=) à la destination (of=).

Configuration de syslinux

Dans boot/syslinux, créez un fichier syslinux.cfg. Ce sera la configuration de base. Pour ceux qui n’ont pas envie de passer des heures dans la doc de syslinux, voici une configuration possible:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
UI menu.c32
PROMPT 0
 
MENU TITLE Boot Menu
TIMEOUT 50
DEFAULT rim
 
LABEL rim
  MENU LABEL RIM-Linux
  LINUX ../bzImage
  APPEND root=none rw
  INITRD ../RIM.cpio.gz
 
LABEL poweroff
  MENU LABEL Power off
  COM32 poweroff.c32

LABEL reboot
  MENU LABEL Reboot
  COM32 reboot.c32

Configuration spécifique à l’UEFI

Les utilisateurs de BIOS peuvent sauter cette section.

Il va nous falloir recréer l’arborescence de base de l’UEFI. On va donc créer 2 dossiers sur la clé:

  • EFI
  • EFI/Boot
Le grand choix

La suite syslinux peut être utilisée (comme pour le BIOS), pour l’UEFI, mais (et c’est le plus embêtant) il n’y a pas de support du chainload.

Gné ? Chainload ?

Le chainload c’est quand votre bootloader ne sait pas charger un OS particulier. Il va alors passer la main à un autre bootloader (en fait à un binaire quelconque) qui lui va faire le boulot. Tout ça pour vous dire que vous ne pourrez charger que des OS type UNIX avec syslinux UEFI.

Je vous propose donc une alternative : gummiboot. Ce programme est fait uniquement pour l’UEFI, mais ce n’est pas un bootloader, c’est un bootmanager, c’est-à-dire qu’il ne fait que du chainload.

Mais s’il ne peut pas booter linux, à quoi ça sert ?

En fait, il peut. En effet, les noyaux récents permettent d’inclure un mini-booloader, EFI stub, qui ne fait que charger son noyau. On peut donc avec gummiboot chainloader sur l’EFI stub, donc sur le fichier du noyau, et faire booter ce dernier. Cette méthode est notamment utilisée par archlinux pour ses installations UEFI.

Mais également, comme il peut chainload, il peut chainloader sur … syslinux !

Vous avez donc le choix entre 3 configurations:

  • Syslinux seul, si vous n’avez besoin de rien d’autre.
  • Gummiboot seul, si vous avez besoin du chainload et que vous ne voulez pas vous prendre la tête à faire 2 installation et configuration successives.
  • Gummiboot par-dessus syslinux, pour une installation robuste et complète.

Dans tous les cas, l’installation ne change pas, c’est uniquement la configuration de gummiboot qui change (si gummiboot il y a).

Installation

Syslinux

Note : je vais utiliser dans la suite le répertoire [syslinux]. Celui-ci correspond au EFI/Boot de la clé si vous voulez installer syslinux seul, ou EFI/syslinux si vous voulez faire un gummiboot par dessus syslinux. Comme pour un syslinux BIOS, on décompresse l’archive du projet, puis ensuite on copie quelques fichiers dans [syslinux]:

  • efi64/com32/elflink/ldlinux/ldlinux.e64
  • efi64/com32/elflink/ldlinux/ldlinux.elf
  • efi64/com32/menu/menu.c32
  • efi64/com32/modules/poweroff.c32
  • efi64/com32/modules/config.c32
  • efi64/com32/modules/reboot.c32
  • efi64/com32/chain/chain.c32
  • efi64/com32/libutil/libutil.c32
  • efi64/com32/lib/libcom32.c32
  • efi64/com32/lib/libcom32.elf

Et c’est tout !

Gummiboot

Je vous ai mis le binaire d’archlinux ici (en cas de problèmes pour le télécharger envoyez un mail ou un MP), il devrait marcher pour tout le monde. Vous le mettez dans EFI/Boot, avec comme nom bootx64.efi, et c’est fini.

Configuration

Syslinux

C’est la même que celle d’un syslinux BIOS, je vous renvoie donc à la partie précédente. Le seul changement est que le fameux fichier syslinux.cfg ne sera pas mis dans boot/syslinux mais dans [syslinux].

Gummiboot
Commun

On crée un petit dossier EFI/loader, puis EFI/loader/entries.

Gummiboot seul

Dans loader/loader.conf:

1
2
default rim
timeout 4

Dans loader/entries/rim.conf:

1
2
3
4
title RIM-Linux
linux      /boot/bzImage
initrd     /boot/RIM.cpio.gz
options    root=none rw
Gummiboot + Syslinux

Dans loader/loader.conf:

1
2
default syslinux
timeout 4

Dans loader/entries/syslinux.conf:

1
2
title      Syslinux bootloader
efi        /EFI/syslinux/syslinux.efi

Et pour finir …

On démonte la clé, on redémarre (en ayant bien configuré son BIOS/(U)EFI pour que la clé passe avant le disque dur dans l’ordre de boot), et ça marche ! :D

Second RIM-Linux

Réflexion

Nous avons donc créé un premier RIM-Linux ! Oui, mais…

  • Il n’a aucune configuration (en terme d’init).
  • Il ne supporte pas le hotplug.
  • Il ne supporte pas la persistance.
  • Il n’a aucune application.

Nous allons donc remédier à ces points:

La configuration de base

Le clavier

Méthode classique

kbd est très certainement présent sur votre distribution. En vous mettant à la racine du projet, recopiez ces commandes:

1
2
3
4
5
 cp /bin/loadkeys rootbase/bin
 strip rootbase/bin/loadkeys
 mkdir -p rootbase/usr/share/kbd/keymaps/i386/azerty
 cp -a /usr/share/kbd/keymaps/i386/include rootbase/usr/share/kbd/keymaps/i386
 cp /usr/share/kbd/keymaps/i386/azerty/fr-latin1.map.gz rootbase/usr/share/kbd/keymaps/i386/azerty/

Vous chargerez le clavier en mettant /bin/loadkeys /usr/share/kbd/keymaps/i386/azerty/fr-latin1.map.gz dans la section clavier des scripts d’init.

Méthode busybox

Sur votre distribution, avec votre clavier bien configuré, faites un dumpkmap > fr.kmap (c’est un outil busybox, donc vous pouvez utiliser celui de _install). Vous le chargerez par la commande loadkmap < chemin/vers/fr.kmap dans la section clavier des scripts d’init. Une bonne solution est d’enregistrer le fichier produit dans rootbase/etc/fr.kmap.

Les FS virtuels

On va monter:

  • procfs dans /proc, parce que c’est bien pratique.
  • sysfs dans /sys, requis par le hotplug [m/u]dev.
  • devpts dans /dev/pts, pour el ratón (la souris quoi).
  • usbfs dans /dev/bus/usb, pour l’USB.
  • shm dans /dev/shm, pour la mémoire partagée.

Pour se simplifier les choses (et surtout alléger – donc accélérer – les scripts init), on va faire dans les règles de l’art : par le fichier etc/fstab:

1
2
3
4
5
 proc   /proc       proc    defaults    0   0
 sysfs  /sys        sysfs   defaults    0   0
 devpts /dev/pts    devpts  defaults    0   0
 shm    /dev/shm    tmpfs   defaults    0   0
 usbfs  /dev/bus/usb    usbfs   defaults    0   0

Les champs étant tous séparés par une tabulation.

Les utilisateurs

Créez le fichier rootbase/etc/passwd avec le contenu suivant:

1
root:x:0:0:I am the master:/root:/bin/sh

Le fichier rootbase/etc/group:

1
root::0:root

Le fichier rootbase/etc/shadow:

1
root::9804:0:::::

Les premiers script init

Fichier rootbase/etc/inittab:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# INIT
::sysinit:/etc/init.d/rcS

# Shells
tty1::respawn:-/bin/ash
tty2::askfirst:-/bin/ash
tty3::respawn:/sbin/getty 38400 /dev/tty3 linux
tty4::respawn:/sbin/getty 38400 /dev/tty4 linux

# Restarting init ?
::restart:/sbin/init

# Before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/init.d/rc.shutdown

Fichier rootbase/etc/profile:

1
2
3
4
5
6
7
8
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
TERM=linux
HOME=/root
DISPLAY=:0
LANG=FR_fr
export LANG PATH LD_LIBRARY_PATH
umask 026

Le hotplug

Vous avez le choix entre la méthode busybox et la méthode classique.

Méthode classique : udev

Udev requiert qu’il y ait un sysfs dans /sys. Udev va servir à remplir /dev avec ce qui est présent sur le système. Il gère le coldplug et le hotplug. Depuis 2014 le code source d’udev a été fusionné avec celui de systemd, qui est un remplaçant d’un init de type UNIX tel que celui de busybox.

Mais alors, c’est quoi le problème avec systemd ?

Systemd n’est pas spécialement adapté à notre usage. En effet, il n’est pas aussi simple de ne pas lui faire monter une partition sur / qu’avec celui de busybox, il n’est pas aussi léger, et surtout son intérêt principal est de paralléliser les tâches pour un boot plus rapide. Or, nous n’avons pas ce besoin, puisqu’il n’y a presque aucune tâche !

Personnellement, après avoir choisi dans le bootloader de booter ce tux, je boote sur un Acer Aspire One en 2s50, donc je pense que nous n’avons pas forcément un fort besoin de paralléliser les tâches. D’autant plus que systemd requiert d’utiliser dbus, ce qui fait que l’on va, avec ces 2 programmes, déjà alourdir nettement le système. Normalement, il est possible de compiler udev sans compiler tout systemd (les programmes sont séparés), mais je n’ai pas encore assez exploré cette possibilité, donc pour l’instant je n’en parle pas. Il est donc très fortement recommandé de passer par mdev.

Méthode busybox : mdev

Comme udev, il faut qu’il y ait un sysfs dans /sys, sauf qu’il n’utilise pas la même syntaxe, et surtout n’utilise qu’un seul fichier de configuration facultatif.

On le lance avec mtab -s.

La persistance

Je tiens à saluer ici l’équipe de Slitaz, dont j’ai entièrement repris le principe de persistance. Il tient en 2 points:

  • La méthode la plus simple pour sauvegarder les données est de refaire l’initramfs.
  • Le répertoire qui va être le plus long (le plus inutile ?) à archiver/compresser est /home.

Par conséquent, on va utiliser un script de sauvegarde, qu’il faudra lancer à la main, et on va monter la clé dans /home !

Le script de sauvegarde

Créez le fichier rootbase/usr/bin/save_liveusb.sh avec ceci:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh

ROOTFS_IMG=RIM.cpio.gz

if mountpoint /home > /dev/null
then
  echo "Saving current rootfs"
  cp /home/boot/$ROOTFS_IMG /home/boot/$ROOTFS_IMG.bak
  echo "Generating new rootfs ..."
  find /* -print | grep -v boot | grep -v home | grep -v tmp | grep -v proc | grep -v sys | cpio -o -H newc | gzip -9 > /tmp/$ROOTFS_IMG
  echo "Saving new rootfs"
  mv /tmp/$ROOTFS_IMG /home/boot/$ROOTFS_IMG
else
  echo "Usb-stick not mounted !"
fi

Il ressemble un peu au premier script pour générer l’archive cpio, mais avec quelques ajouts:

  • Il faut stocker la nouvelle archive dans la clé, il faut donc qu’elle soit montée, ce qu’on vérifie avec mountpoint /home. On redirige la sortie de cette commande dans le vide cosmique parce qu’elle sort « c’est bien une partition », ce dont on n’a pas besoin puisque c’est un script, et donc on ne veut pas polluer la sortie à l’écran avec n’importe quoi.
  • grep permet de ne prendre que les résultats comportant l’expression passée en paramètre. L’option -v permet d’inverser ce fonctionnement : grep filtre tout les résultats contenant l’expression en question en les enlevant.
Le montage de /home

On va monter la partition de la clé sur /home, ce qui permettra, en plus de réduire le temps de création du nouvel initramfs, de permettre aux utilisateurs de bénéficier de tout l’espace disponible sur la clé ainsi que de sauvegarder (via notre script) une image modifiée.

Ce montage va se faire le plus simplement du monde par un mount dans les scripts d’init. Sauf que pour cela, il nous faut 2 informations:

  1. La partition à monter.
  2. Si on souhaite effectivement monter cette partition.

En effet, pour le point 2, on peut souhaiter utiliser la distribution uniquement en LiveCD (ce qui permet de retirer la clé après le boot).

Comment passer ces informations ?

Au boot ! En effet, le bootloader passe des paramètres au noyau, qui va les mettre dans des variables d’environnements, qui sont donc exploitables par nos scripts.

En pratique

Vous allez rajouter dans le champ option de votre bootloader deux paramètres, home=[partition], où [partition] est égal à l’UUID.

Exemple : supposons que l’UUID de ma partition est truc-muche. Je mettrais donc home=truc-muche.

Ensuite, vous rajoutez le paramètre ifmount, qui prendra la valeur yes pour monter la partition, et no sinon.

Exemple pour une entrée type LiveUSB : dans option, on rajoute home=truc-muche ifmount=yes. Et voilà. ^^

Finalisation

Fin des scripts d’init

Fichier rootbase/etc/init.d/rcS:

 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
#!/bin/sh

# Recreate missing directories (ignored when re-creating initramfs)
/bin/mkdir /home
/bin/mkdir /boot
/bin/mkdir /tmp
/bin/mkdir /proc
/bin/mkdir /sys

# Mount pseudo file systems
mount -n -a

# Start asynchronous shell script
/etc/init.d/helper.rcs&

# === HOTPLUG ===

# Example with udev WARNING : may be outdated

#/sbin/udevd --daemon&
#/sbin/udevstart&
#echo "/sbin/udev" > /proc/sys/kernel/hotplug

# Example with mdev

#mdev -s
#echo "/sbin/mdev" > /proc/sys/kernel/hotplug

# ===============

# Syslog in circular buffer ( -C ) or not
/sbin/syslog -C

# Klogd
/sbin/klogd -c 2

# === KEYBOARD ===

# Example with busybox
#busybox loadkmap < /etc/fr.kmap

# ================

# Hostname
/bin/hostname rim-linux

# Loopback
/sbin/ifconfig lo up

# Clear screen
clear

Fichier /etc/init.d/helper.rcs:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/sh

# Checking if we need to mount usb-stick
if [ $ifmount = no ]
then
# Recreating user repositories
  my_dir=$(cat /etc/passwd | cut -d : -f 1 | grep -v root)
  for i in $my_dir
  do
      mkdir /home/$i
      chown $i:$i /home/$i
  done

else
# Waiting system full-boot to mount usb-stick
  sleep 3
  /bin/mount -U $home /home
fi

Fichier /etc/init.d/rc.shutdown:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/sh
echo "Umounting all filesystems..."

if mountpoint /home > /dev/null
then
  /bin/umount -r /home
fi
/bin/umount -a -r
echo "Shutting off swap ..."
/sbin/swapoff -a

Les applications

Le réseau

Connexion câblée

On a déjà les net-tools (ifconfig, route) par busybox, il ne vous reste donc qu’à faire un script pour spécifier l’adresse IP, le DNS et la route par défaut.

En pratique : Créez le fichier opt/wired_net.sh (vous pouvez le faire à partir de la distribution bootée si vous le souhaitez) avec:

1
2
 ifconfig [interface] [adresse_ip]
 route add -net default gw [adresse_ip_de_la_box_ou_du_rooteur]

Puis ensuite, on édite le fichier etc/resolv.conf et on y met:

1
nameserver [adresse_ip_du_serveur_dns]

Oui mais moi je veux faire du DHCP !

Vous voulez faire du DHCP ? Et bien vous allez dans la configuration de busybox, vous cochez le client DHCP, et vous le faites tourner en root, et il se débrouille tout seul ! Rien à faire !

Pour aller plus loin

On peut envisager ces quelques points:

  • Optimisation de la place : utilisation d’un noyau et d’un initramfs en LZMA, suppression de certaines fonctionnalités non essentielles.
  • Accélération de la distribution : utilisation d’un noyau et d’un initramfs en LZO, utilisation de plusieurs points de montages (donc de nombreuses partitions sur la clé), utilisation des asmutils quand ceux-ci sont plus rapide que busybox.
  • Ajout de logiciels.
  • Intégration de tous les programmes permettant de développer sur la distribution.
  • Création d’un installeur, d’une méthode de « vampirisation » d’un LiveUSB déjà existant.
  • Création de scripts d’automatisation de configuration, notamment pour le réseau.
  • Faire en sorte que la distribution soit plus adaptée avec un portable : wifi (via wpa_supplicant), économie d’énergie, par exemple avec l’arrêt complet des disques durs (voir du côté de hdparm).

Bref, vous avez du boulot. :lol:


Eh bien voilà ! Vous avez un système fonctionnel, avec support du hotplug et de la persistance. Vous pouvez maintenant ajouter ce que vous voulez à votre système, pour en faire, pourquoi pas, la prochaine distribution Linux qui déchire. ;)

Vous avez toutes les armes pour conquérir le monde ! :pirate:

N’hésitez pas à utiliser le forum, notamment si problèmes techniques, ou tout simplement pour faire connaître votre distro.

Si ce tuto vous a plu (ou non d’ailleurs), que vous avez des remarques à faire, je suis preneur ! Entre les MP, les commentaires ici et le topic de présentation sur le forum, vous avez de la place pour vous exprimer.

Sinon, vous pouvez m’envoyer un mail à l’adresse suivante: dosmpm at gmail dot com (mais la réponse sera plus lente à venir)

Sources et remerciements:

  • Un vieux numéro de GNU/Linux Magazine France (le n°80, de février 2006) pour le principe de base, le premier RIM-Linux, ainsi qu’une partie du second (udev, un bout des scripts d’init).
  • La distribution Slitaz, pour le principe de la persistance.
  • La documentation busybox, pour mdev.
  • Le wiki archlinux pour l’installation détaillée de syslinux.
  • Le site de rodsmith sur tux et l’UEFI, ainsi que le wiki d’archlinux, pour le boot en UEFI.

Remerciements seuls :

  • La distro core linux (anciennement micro-core linux), une branche de Tiny Core Linux, pour m’avoir donné l’envie de faire mieux. :p
  • La distribution Slackware, pour m’avoir permis de faire quelques tests de recompilation de noyau sans me cracher à la figure (je la recommande d’ailleurs si d’aventure vous souhaitez faire la même chose).
  • La distribution Archlinux, pour m’avoir forcé à connaître wpa_supplicant et gummiboot. <3
  • Ubuntu, pour m’avoir fait passer à d’autres distros pour plusieurs raisons. :lol:
  • Le projet busybox, sans qui rien n’aurait été possible dans ce tuto.
  • Le projet du noyau Linux, pour nous donner une stabilité et une performance très satisfaisante.
  • Le projet GNU, pour avoir initié cette grande aventure qu’est le logiciel libre.
  • ZdS pour permettre de partager tout cela.
  • Et enfin Arius, qui me supporte, et c’est déjà beaucoup.

 

 

 


Publié :

Auteur : dosmpmLicence CC 0
Catégorie : Systèmes d’exploitation

SOURCE & + d’infos @ https://zestedesavoir.com/tutoriels/268/creer-son-premier-rim-linux/

  • Workshop CHATONS aux RMLL le 7 juillet 22 juin 2017
    Nous vous avons déjà parlé des Rencontres Mondiales du Logiciel Libre, qui auront lieu cette année à St-Étienne, du 1er au 7 juillet (très bientôt, donc !). Si vous n’avez pas encore lu l’interview d’une partie de l’organisation, foncez-y, ça donne … Lire la suite­­
    pyg
  • La face cachée du web, de la vie, de l’univers, du reste 20 juin 2017
    Nous sommes bombardés presque chaque semaine d’alertes à la catastrophe numérique ou de pseudo-enquêtes au cœur du Dark Web, censé receler des dangers et des malfaisants, quand il ne s’agit pas d’une conspiration pour diriger le monde. Une fois retombé … Lire la suite­­
    framasoft
  • Framapic : un nouvel outil pour créer une galerie photo ! 16 juin 2017
    Framapic, notre outil d’hébergement d’images, est basé sur Lutim, un logiciel développé par Luc, notre administrateur-système, souvent sur son temps libre. Inutile de vous dire que nous aussi, on se demande quand il prend le temps de dormir, quand on … Lire la suite­­
    framasoft
  • Framavox : faites encore mieux entendre votre voix ! 16 juin 2017
    Il y a quelques mois, nous vous présentions Framavox, un outil de prise de décisions en groupe, de manière horizontale. Aujourd’hui, découvrons ensemble les nouvelles fonctionnalités de ce service. Loomio, l’outil que les GAFAM n’ont même pas :p ! Le principe … Lire la suite­­
    framasoft
  • La Nef des loups, un framabook au XIIème siècle 15 juin 2017
    Le nouveau Framabook est… un polar historique ! Ce premier tome des aventures d’Ernaut de Jérusalem va vous faire aimer le Moyen Âge (ou encore plus, si vous l’aimiez déjà ^^). Gênes, 1156. Le Falconus quitte le port. À son bord, pèlerins, … Lire la suite­­
    framasoft
  • Docs.Framasoft.org : un site pour apprendre à utiliser tous nos services ! 12 juin 2017
    Mine de rien, entre les services Dégooglisons Internet et les projets Framasoft, nous maintenons près d’une cinquantaine de sites/projets ouverts au public. C’est bien joli, mais si on n’accompagne pas ces sites des savoir-faire et outils pour mieux vous aider … Lire la suite­­
    framasoft
  • Les Rencontres mondiales du logiciel libre se mettent au vert 10 juin 2017
    Les Rencontres mondiales du logiciel libre sont organisées, chaque année dans une ville différente, par le groupe d’utilisateurs de logiciels libres local. C’est un grand pouvoir et une grande responsabilité pour le GULL qui s’y colle. Il s’agit de proposer … Lire la suite­­
    framasoft
  • L’écosystème des contenus piratés 2 juin 2017
    Catalogué illégal, le piratage de films et de séries fait pourtant partie du quotidien de beaucoup d’internautes, et il n’y a plus grand-monde pour faire semblant de s’en offusquer. Des études ont même prouvé que les plus gros consommateurs de … Lire la suite­­
    Framalang
  • La confidentialité bientôt twitterminée ? 31 mai 2017
    Le succès de Twitter est toujours aussi impressionnant (des statistiques nombreuses et significatives ici), même si l’entreprise continue d’enregistrer des pertes, trimestre après trimestre. Ce qui est constant aussi avec Twitter c’est sa désinvolture caractérisée vis-à-vis des données que nous … Lire la suite­­
    Framalang
  • Paris est Ludique les 24 et 25 juin 2017 — Le festival de jeux où l’on joue #PeL2017 20 juin 2017
    Certains d’entre‐vous le connaissent déjà, Paris est Ludique revient comme chaque année depuis sept ans. Ce n’est pas un salon, mais bien un festival de jeux de société modernes où l’on joue aux jeux présentés qui nous font envie. Il y en a pour tous les âges et tous les publics. C’est grand public et ouvert à tous. […]
    Florent Zara
  • Revue de presse de l’April pour la semaine 24 de l’année 2017 19 juin 2017
    La revue de presse de l’April est régulièrement éditée par les membres de l’association. Elle couvre l’actualité de la presse en ligne, liée au logiciel libre. Il s’agit donc d’une sélection d’articles de presse et non de prises de position de l’association de promotion et de défense du logiciel libre. Sommaire [Numerama] Vous avez un […]
    echarp
  • Printemps 2017 de Mozilla : Firefox 52 à 54 et Thunderbird 52 19 juin 2017
    Mozilla a annoncé début 2017 que le cycle de sortie de Firefox ne sera plus fixe à huit semaines, mais qu’il pourra être plus rapide grâce à l’abandon des versions Firefox Aurora. Cette annonce s’est clairement concrétisée ce printemps avec trois sorties de versions de Firefox à quatre mois d’intervalle (version 52 le 7 mars 2017, version 53 le 19 avril […]
    Adrien Dorsaz
  • Debian 9 : Stretch déploie ses tentacules 18 juin 2017
    Debian GNU/Linux 9, nom de code Stretch (en référence à la pieuvre violette de Toy Story 3) est sortie le 17 juin 2017. (par Emoji One via Wikipédia) Alors que la version 8 intégrait systemd, cette version intègre pour sa part quelques autres nouveautés technologiques de taille comme Wayland (cela concernera surtout les utilisateurs du bureau GNOME), Flatpak ou encore le pilote noyau unifié […]
    antistress
  • OpenSSH : configuration des algorithmes de cryptographie 18 juin 2017
    Le logiciel OpenSSH permet d’avoir un shell sécurisé sur un serveur distant ou du transfert de fichiers de ou vers un serveur. Divers algorithmes de cryptographie sont utilisés pour le chiffrement, la génération ou l’échange de clefs. Et ces algorithmes peuvent s’affaiblir, être remplacés par de meilleurs algorithmes, connaître des portes dérobées, nécessiter des clefs […]
    Benoît Sibaud
  • Lstu sort en version 0.08 18 juin 2017
    Plus de trois ans après ses débuts, Lstu arrive en version 0.08 et l’on peut dire qu’il s’en est passé des choses sous le capot ! Petite rétrospective sur ce raccourcisseur d’URL qui devient grand…lien n°1 : L’annonce de la création de Lstulien n°2 : Le dépôt Gitlien n°3 : L’instance officiellelien n°4 : Le journal des […]
    Framasky
  • Agenda du Libre pour la semaine 25 de l’année 2017 17 juin 2017
    Calendrier Web, regroupant des événements liés au Libre (logiciel, salon, atelier, install party, conférence), annoncés par leurs organisateurs. Voici un récapitulatif de la semaine à venir. Le détail de chacun de ces 35 événements (0 en Belgique, 32 en France, 3 au Québec et 0 en Suisse) est en seconde partie de dépêche.lien n°1 : Aprillien n°2 […]
    Xavier Claude
  • Sortie de Linphone Desktop 4.0, logiciel libre de voix sur IP 17 juin 2017
    Après neuf mois de développement intense, c’est avec plaisir que nous vous annonçons la naissance de notre nouveau bébé : Linphone 4. Pour rappel, Linphone est un logiciel de téléphonie par Internet utilisant le protocole SIP qui est distribué sous licence (propriétaire et GPL v2) compatible GNU/Linux, Windows et macOS. Développé précédemment avec la bibliothèque graphique GTK 3, ce dernier […]
    Wescoeur
  • Thème Sécurité RMLL 2017 : de la confidentialité à l'IoT en passant par… 14 juin 2017
    Les RMLL sont de retour cette année et cela se passera du 1er au 7 juillet à Saint‐Étienne. Pour ce qui concerne le thème Sécurité, ce sera deux jours et demi de conférences, tables rondes et ateliers du lundi 3 au mercredi 5 juillet. Les thématiques couvertes cette année seront des plus diverses et nous espérons que cette diversité attisera votre intérêt. […]
    christophe brocas
  • Framablog : Workshop CHATONS aux RMLL le 7 juillet 22 juin 2017
    Nous vous avons déjà parlé des Rencontres Mondiales du Logiciel Libre, qui auront lieu cette année à St-Étienne, du 1er au 7 juillet (très bientôt, donc !). Si vous n’avez pas encore lu l’interview d’une partie de l’organisation, foncez-y, ça donne envie de venir :) Framasoft […]
    Framablog
  • Benoît Boudaud : #Python : classes et méthodes (partie 2) – mise en pratique 21 juin 2017
    Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python. Nous allons confier à deux programmeurs en herbe, Briface et Jobriel, le soin de rédiger le code d’une petite application à caractère […]
    Benoît Boudaud
  • Yannic Arnoux : Deux installations de OpenBSD 21 juin 2017
    Déjà un peu évoqué sur Diaspora, j'ai migré mon serveur vers OpenBSD depuis deux mois à une période où les planètes étaient alignées : j'avais du temps et l'envie, et aussi une revanche à prendre suite à une installation ratée l'année dernière sur mon portable. Les BSD […]
    Yannic Arnoux
  • RaspbianFrance : Créez votre propre seedbox pour télécharger vos torrent à distance avec Transmission 21 juin 2017
    Vous rêvez d’avoir une seedbox mais les offres du marché son trop cher ? La raspberry pi est un parfait outil pour héberger sa propre seedbox par le fait qu’elle peut tourner 24h/24 7j/7 sans déranger et avec un faible coût en électricité. Mais avant de vous expliquer comment créer […]
    RaspbianFrance
  • Full Circle Magazine FR : Voici le numéro 121 21 juin 2017
    Bonjour ! C'est avec grand plaisir que l'équipe du FCMfr vous présente le numéro 121, celui de mai 2017, en français. Il est disponible au visionnage et au téléchargement sur notre page NUMÉROS ou en cliquant directement sur l'image ci-dessous. Cette fois-ci, nous vous proposons, […]
    Full Circle Magazine FR
  • Max Koder : L’auto-hébergement, c’est parti ! 21 juin 2017
    Ça y est, je me lance. Après plusieurs années à louer du mutualisé, je me décide enfin à monter un serveur chez moi. Rien de technique dans ce billet, j’explique surtout pourquoi l’auto-hébergement et à quel prix, mais d’autres articles avec mes mésaventures devraient […]
    Max Koder
  • Cyprien Pouzenc : Variation, logiciel de gestion des dossiers d'usagers aux RMLL 2017 21 juin 2017
    Variation est un logiciel libre dédié aux établissements et services du social et médico-social (ESSMS). Il permet de construire un outil adapté au mode de fonctionnement de chaque établissement afin de proposer aux équipes d'encadrement un accès simple et centralisé à l'ensemble des […]
    Cyprien Pouzenc
  • Okki : En bref : GUADEC 2017, Fichiers, Photos… 21 juin 2017
    Le planning du GUADEC 2017 vient d’être publié. Anniversaire des vingt ans du projet oblige, il y aura un certain nombre de conférences sur le passé et le futur de GNOME ou sur ce qui définit notre projet. Il y aura également les habituelles conférences sur le présent et le futur d’un […]
    Okki
  • Okki : Gérez facilement vos dossiers d’applications 21 juin 2017
    Il y a peu, je signalais à quel point je trouvais que la gestion des dossiers d’applications laissait à désirer. Surtout au vu de la simplicité déconcertante que peuvent offrir certains systèmes concurrents sur une telle fonctionnalité. Alors non, il n’y a malheureusement rien de nouveau […]
    Okki
  • Full Circle Mag FR: Voici le numéro 121 21 juin 2017
    Bonjour ! C'est avec grand plaisir que l'équipe du FCMfr vous présente le numéro 121, celui de mai 2017, en français. Il est disponible au visionnage et au téléchargement sur notre page NUMÉROS ou en cliquant directement sur l'image ci-dessous. Cette fois-ci, nous vous proposons, notamment : Un tutoriel sur comment installer une nouvelle version […]
  • kmelia: Alerte : le site va disparaître ! 19 juin 2017
    Le Whois du domaine « kmelia.net » indique une date d’expiration au 2017-07-19T19:47:12.0Z. Cela veut dire que ce blog va bientôt disparaître ! Vous pouvez sauver ce qui peut l’être avant qu’il ne soit trop tard :( Je vous ai préparé des exports de tous les articles publiés, par année : export-posts-2015.xml.gz export-posts-2014.xml.gz Merci à tous pour […]
  • Nizarus: Un bureau Unity avec Gnome Shell 2 juin 2017
    Dans le billet précédent “De Ubuntu à Ubuntu Gnome” j’ai publié une copie d’écran de mon bureau Gnome Shell que j’ai personnalisé pour être le plus proche d’un bureau Unity. Je rappelle ici que je suis parti d’une nouvelle installation de la variante officielle Ubuntu Gnome (voir le billet précédent cité ci-dessus). Voici donc les […]
  • Influence PC: Ubuntu : petit tour de mes extensions Gnome-Shell 22 mai 2017
    Canonical a abandonné Unity. Pendant ce temps, Gnome-Shell s’est peaufiné, j’ai été étonné de trouver de nombreuses nouvelles extensions dans le top « popular » et « download » du store. Voici celles que j’utilise. AlternateTab – lien Modifie le comportement du Alt+Tab en bouclant sur les fenêtres plutôt que sur les applications. Auto Move Window – lien Permet […]
  • kmelia: Hearthstone : ne cliquez pas sur le bouton Fireside Gathering ;) 17 mai 2017
    Je sais pas pour vous, mais moi quand un nouveau bouton apparaît dans un logiciel, j’ai tendance à cliquer dessus. Bon là pas de chance, il fallait pas :( Symptôme : le jeu se lance et se coupe juste après le splash screen. Pourquoi ? Si j’ai bien compris, on active une option pour chercher […]
  • Nizarus: De Ubuntu à Ubuntu Gnome 15 mai 2017
    J’ai profité de la sortie de la dernière version de Ubuntu, la 17.04, pour faire une réinstallation complète de mon système sur mon PC de bureau et mon portable. Pour cette installation j’ai opté pour la variante officielle Ubuntu Gnome pour remplacer la version Ubuntu classique. Les motivations de ce choix sont principalement deux. Premièrement, […]
  • Full Circle Mag FR: Sortie du numéro 119 25 avril 2017
    Bonjour ! L'équipe du FCMfr est heureuse de pouvoir vous présenter le numéro 119 (celui de mars 2017) traduit en français. Vous pouvez le visionner ou le télécharger sur notre Page Numéros ou le télécharger directement en cliquant sur la photo de couverture ci-dessous, En plus des rubriques et des tutoriels habituels (Inkscape, Coin KODI, […]
  • Nizarus: Wilfried est un utilisateur Libre 17 avril 2017
    Pour ce nouveau billet de la série d’articles sur les utilisateurs Libres, je vous invite à faire un voyage en Côte d’Ivoire pour faire connaissance avec mon ami Wilfried N’Guessan. J’ai connu Wilfried, comme d’autres amis de la communauté du Libre, via le monde virtuel. Mais, j’ai eu la chance de le rencontrer avec notre […]
  • Influence PC: Ruse pour compresser efficacement une image de partition sous Linux 1 avril 2017
    Quand on a fini d’installer une machine, on revient de loin ! Une fois que tout est bien configuré je vous conseille de faire une image disque (sauvegarde « bit à bit ») de votre disque dur avant de commencer à mettre vos données. L’ennui, c’est qu’un disque neuf ou réinitialisé avec un « formatage rapide » n’a pas […]
  • Quelles libertés avons-nous face à Internet - É Guichard - PY Gosset 21 juin 2017
    Titre : Quelles libertés avons-nous face à Internet ? Intervenants : Éric Guichard, maître de conférences à l'ENSSIB - Pierre-Yves Gosset, délégué général de Framasoft. Lieu : Café éthique - École centrale - Lyon Date : Mai 2015 Durée : 1 h 11 min 11 Visualiser la vidéo Licence de la transcription : Verbatim Transcription Présentateur : Bonjour à tous et merci à […]
    mmorandi
  • L'April participe à la Fête des Possibles, du 18 au 30 septembre 2017 20 juin 2017
    Du 18 au 30 septembre 2017, nous participons avec 60 autres organisations et réseaux de la transition à la Fête des Possibles (nouveau nom de la Journée de la Transition). Plus de 2000 rendez-vous sont attendus aux quatre coins de la France et de la Belgique pour rendre visibles les milliers d’initiatives locales qui embellissent […]
    fcouchet
  • Revue de presse de l'April pour la semaine 24 de l'année 2017 19 juin 2017
    La revue de presse de l'April est régulièrement éditée par les membres de l'association. Elle couvre l'actualité de la presse en ligne, liée au logiciel libre. Il s'agit donc d'une sélection d'articles de presse et non de prises de position de l'association de promotion et de défense du logiciel libre. En podcast. Sommaire de la […]
    echarpentier
  • Nouvelle législature : déjà 26 député⋅e⋅s engagé⋅e⋅s en faveur de la priorité au logiciel libre dans les administrations publiques 19 juin 2017
    Dans le cadre des élections législatives 2017 l'April a mené une nouvelle campagne du « Pacte du Logiciel Libre ». L'objectif était de sensibiliser candidat·e·s et élu·e·s aux enjeux du logiciel libre mais aussi de créer du lien entre les citoyens et citoyennes et les candidat⋅e⋅s. Au total 26 député⋅e⋅s nouvellement élu⋅e⋅s se sont engagé⋅e⋅s à défendre […]
    egonnu
  • Loi de finances 2016 : une doctrine fiscale qui reconnait les logiciels libres mais avec une marge de progression certaine 16 juin 2017
    Mise à jour du 16 juin 2017 : précision sur le champ d'application suite à une déclaration du cabinet du ministre de l'Action et des Comptes publics. Comme indiqué dans notre dernier point d'étape sur ce dossier l'article 88 de la loi de finances de 2016 marque la volonté du gouvernement français de lutter contre […]
    egonnu
  • itopie - Et si on voulait des technologies éthiques 16 juin 2017
    Titre : itopie - Et si on voulait des technologies éthiques ? Intervenants : Samuel Chenal, itopie - Héloïse Pierre, journaliste pour Radio Alto - Amélie Delalain, journaliste du blog EspritCréateur. Lieu : Émission TIC - éthique #7 - Radio Alto Date : Février 2017 Durée : 46 min 27 Écouter l'enregistrement de l'émission Licence de la transcription : Verbatim Transcription Voix […]
    mmorandi
  • Ambitions numériques du gouvernement : mission impossible sans logiciels libres 15 juin 2017
    Communiqué de presse, le 15 juin 2017. Mounir Mahjoubi, secrétaire d’État chargé du Numérique, a présenté en Conseil des ministres les « priorités du gouvernement en matière de numérique ». L'April appelle le gouvernement à mettre en œuvre une véritable politique publique en faveur du logiciel libre. À l'occasion du Conseil des ministres du 14 juin 2017, […]
    fcouchet
  • Législatives 2017 - Pacte du logiciel libre : le deuxième tour, c'est maintenant ! 13 juin 2017
    L'April mène la campagne du « Pacte du Logiciel Libre », dans le cadre des élections législatives 2017, afin de sensibiliser les futur⋅e⋅s élu·e·s aux enjeux du logiciel libre. Le deuxième tour, c'est maintenant et nous avons besoin de votre aide ! Ce sont 577 circonscriptions et environ 1 000 candidats finalistes. Le fichier officiel […]
    fcouchet
  • Revue de presse de l'April pour la semaine 23 de l'année 2017 12 juin 2017
    La revue de presse de l'April est régulièrement éditée par les membres de l'association. Elle couvre l'actualité de la presse en ligne, liée au logiciel libre. Il s'agit donc d'une sélection d'articles de presse et non de prises de position de l'association de promotion et de défense du logiciel libre. En podcast. Sommaire de la […]
    echarpentier
  • Pas Sages en Seine 2017 : Atelier de préparation du calendrier de l’Avent du domaine public 2018 15 juin 2017
    Venez nous aider à identifier et à choisir les auteurs qui seront retenus pour figurer dans l’édition 2018 du Calendrier de l’Avent du domaine public. Le domaine public est à vous, venez le valoriser ! Après Apollinaire et Zweig en 2013, Camille Claudel, Soutine et Rachmaninov en 2014, Munch et Giraudoux en 2015, Ravel en […]
    SavoirsCom1
  • Rendez-vous samedi 17 juin à la librarie A livr’ouvert pour soutenir le projet Communauthèque ! 12 juin 2017
    Samedi 17 juin, à partir de 14h30, la librarie A livr’ouvert accueillera Hervé le Crosnier pour une présentation des activités de C&F Editions et une rencontre autour du thème : « culture numérique et connaissances partagées. Des livres pour comprendre la société de la connaissance. » Hervé le Crosnier est l’un des deux parrains du collectif SavoirsCom1 […]
    SavoirsCom1
  • Participez au projet Communauthèque lors d’une soirée jeux ! (mercredi 31 mai) 26 mai 2017
    Mercredi 31 mai, le collectif SavoirsCom1 vous invite à participer à une soirée jeux pour découvrir le jeu « Cartes en Commun ». Il s’agit d’un jeu de stratégie politique sous licence libre (plus d’informations ici), dans lequel les joueurs doivent protéger leurs ressources contre des accaparements en créant des arènes politiques ! Apprenez à gérer un […]
    calimaq
  • Appel à dons d’ouvrages pour la création d’une Communauthèque 14 mai 2017
    La Communauthèque késako ? La Communauthèque est un projet documentaire sur les Communs, lancé par SavoirsCom1 (collectif engagé pour le développement de politiques et d’initiatives liées aux communs de la connaissance). Il se décline en deux branches : un travail bibliographique visant à référencer les documents de tous types touchant au concept de communs. Au […]
    SavoirsCom1
  • Marchons pour les Sciences (mais pour les Sciences Ouvertes !) 18 avril 2017
    Le collectif SavoirsCom1 s’associe à la Marche pour les Sciences qui sera organisée le 22 avril prochain, Jour de la terre, pour protester contre l’attitude de l’administration Trump vis-à-vis de la recherche publique aux États-Unis. L’administration Trump instrumentalise les crédits fédéraux pour réorienter les projets de recherche dans le sens de ses orientations idéologiques. Il […]
    SavoirsCom1
  • Participez à la consultation d’Etalab sur la nouvelle version de la Licence Ouverte 12 avril 2017
    La mission Etalab a lancé en début de semaine un appel public à commentaires à propos de la nouvelle version de la Licence Ouverte / Open Licence (LO). Le collectif SavoirsCom1 salue cette démarche et incite tous les acteurs intéressés par le développement de l’Open Data en France à y contribuer. Cette décision fait suite […]
    SavoirsCom1
  • Participez à notre atelier “Communauthèque” : une bibliographie pour les Communs ! 4 avril 2017
    Depuis quelques mois, le Collectif SavoirsCom1 mène un chantier de Bibliographie collaborative des Communs dans le but de créer une « Communauthèque », ou un fonds de référence sur les Communs. Cette bibliographie est accessible en mode collaboratif et vous pouvez d’ores et déjà participer à son enrichissement (voir ce groupe Zotero). Cet atelier aura […]
    SavoirsCom1
  • 14 propositions pour le développement des licences libres en France 4 avril 2017
    Le collectif SavoirsCom1 a été auditionné la semaine dernière par le CSPLA (Conseil Supérieur de la Propriété Littéraire et Artistique) dans le cadre d’une mission consacrée à l’économie des licences libres. Nous publions à la suite une liste de 14 propositions que nous estimons importantes pour le développement des licences libres en France.   1) […]
    calimaq
  • Rapport « Musées Du XXIe siècle » : la culture toujours sans ouverture 7 mars 2017
    Rapport Musées Du XXIe siècle : la culture toujours sans ouverture La mission « Musées du XXIe siècle » a remis la semaine dernière son rapport au Ministère de la Culture, au terme de près de 10 mois de travail, jalonnés par une consultation citoyenne en ligne. La lettre de mission du Ministère de la Culture demandait […]
    SavoirsCom1
  • Street Art et liberté de panorama : et si on arrêtait la désinformation ? 12 juin 2017
    En marge des élections législatives, il s’est produit la semaine dernière un incident qui mérite que l’on s’y attarde, surtout quand on voit la manière dont il a été traité dans la presse. Le graffeur C215 a dénoncé l’utilisation qui était faite d’une de ses fresques par le comité électoral du parti « En Marche » du […]
    calimaq
  • Quel modèle économique pour une numérisation patrimoniale respectueuse du domaine public ? 6 juin 2017
    Le mois dernier est paru au Cercle de la Librairie le livre « Communs du savoir et bibliothèques« , pour lequel Lionel Dujol, qui coordonnait l’ouvrage, m’a demandé d’écrire une contribution. La publication de ce livre est un signe de plus de l’importance croissante de la thématique des Communs dans la sphère professionnelle des bibliothèques. On peut […]
    calimaq
  • L’exclusion forcée du marché comme enclosure des biens communs 29 mai 2017
    La semaine dernière est paru sur le site Reporterre un intéressant article consacré à Jean-Luc Danneyrolles, le fondateur du « Potager d’un curieux » : un lieu situé dans le Vaucluse dédié à la préservation et à la promotion des semences libres. Le papier explique notamment le parcours du combattant que ce paysan a dû traverser pour […]
    calimaq
  • La cuisine va-t-elle cesser d’être Open Source ? 25 mai 2017
    Du point de vue du droit d’auteur, et de la propriété intellectuelle en général, la cuisine possédait jusqu’à présent un statut très particulier. Alors qu’il s’agit incontestablement d’un des champs de la création, les juges considérent que les recettes de cuisine ne sont pas protégeables par le droit d’auteur. Il en résulte que les cuisiniers sont libres de […]
    calimaq
  • Ridley Scott et la saga Alien : quand l’auteur devient son propre monstre… 14 mai 2017
    Cette semaine est sorti sur les écrans le film Alien : Covenant qui ajoute un nouvel épisode de la saga initiée par Ridley Scott en 1979. Après le déjà très controversé Prometheus en 2012, Ridley Scott revient aux commandes d’un film qui est en train de déclencher parmi les fans un véritable torrent de critiques négatives, accusant le […]
    calimaq
  • Lawrence Lessig, les dérives du web et la « mort des éditeurs » 5 mai 2017
    S’il y a une personne qui a compté dans mon cheminement intellectuel, c’est bien le juriste américain Lawrence Lessig. Je me souviens encore de l’avoir découvert à travers ses incroyables conférences TED, puis la lecture d’ouvrages marquants comme L’Avenir des Idées, Remix ou Code Is Law. Initiateur du projet Creative Commons, défenseur infatigable du domaine […]
    calimaq
  • « Information will be mine ! » : vers un droit de propriété sur les données en Europe ? 3 mai 2017
    Le Conseil National du Numérique a rendu, il y a quelques jours, un avis à propos d’une consultation lancée en janvier dernier par la Commission européenne sur la question de la « libre de circulation des données en Europe ». Cela fait un moment que la Commission veut lancer une initiative en faveur du « Free Flow of Data » – la […]
    calimaq
  • Liberté d’expression : le web européen subira-t-il la « malédiction du Titanic » ? 30 avril 2017
    Cette semaine, le vidéaste Mozinor a posté sur YouTube une vidéo intitulée « Titanic Strike » qui nous montre ce qui pourrait arriver au web en Europe, si la réforme du droit d’auteur en cours de discussion au Parlement européen tournait mal. En exil pour un strike… Il y a quelques semaines, Mozinor a essayé de remettre […]
    calimaq
  • L’Open Data culturel est possible (et les bibliothèques le prouvent !) 13 avril 2017
    C’est sans doute dans le champ de la culture que le développement de l’Open Data s’est jusqu’à présent avéré le plus difficile. Mais il s’est produit cette semaine un événement important qui prouve que la démarche est possible, à condition que la volonté politique soit au rendez-vous. C’est la bibliothèque de l’INHA (Institut National d’Histoire […]
    calimaq
  • ePrivacy : une étape cruciale pour la vie privée 13 juin 2017
    Paris, 13 juin 2017 — Le mois de juin sera décisif pour le futur de notre vie privée et la confidentialité de nos communications électroniques. Actuellement en débat au Parlement européen, le futur règlement « ePrivacy » divise et réveille de désagréables souvenirs du temps des négociations du Règlement général sur la protection des données […]
    neurone648
  • Sous le capot: votez pour une infrastructure télécoms décentralisée! 12 juin 2017
    Paris, 13 juin 2017 — La nature décentralisée d'Internet est en jeu avec les négociations sur le code européen des communications électroniques. La Quadrature du Net publie ses premières listes de vote sur les amendements qui ont été déposés au Parlement européen1 et soutient les fiches d'informations (pdf) élaborées par netCommons. Comme prévu, le lobbying […]
    neurone130
  • Directive copyright : le Parlement européen sous la menace des lobbies et des manoeuvres françaises 6 juin 2017
    Paris, le 6 juin 2017 —  Alors que toutes les commissions concernées au Parlement européen ont rendu leurs avis sur la proposition de directive sur la réforme du droit d'auteur, la situation est plus que complexe : les rapports constructifs des différentes commissions ont été pilonnés à la fois par la Commission européenne, mécontente de voir ses dispositions […]
    neurone259
  • Neutralité du Net : un an après, un bilan gris foncé 31 mai 2017
    Paris, le 31 mai 2017 — A l'occasion du premier anniversaire de l'adoption du règlement sur l'internet ouvert qui régit notamment les aspects liés à la neutralité du Net, et tandis que l'ARCEP sort son premier rapport sur l'état de l'Internet, nous dressons ci-dessous un bilan assez mitigé de sa mise en œuvre en France […]
    neurone1000
  • Appel à la non prorogation de l'état d'urgence : lettre au Président de la République 24 mai 2017
    Paris, 24 mai 2017 — À l'issue du conseil de Défense tenu ce mercredi matin, le Président de la République a annoncé qu'il demanderait au Parlement la prolongation de l'état d'urgence jusqu'au 1er novembre 2017, ainsi que la discussion d'une nouvelle loi pour lutter contre le terrorisme. La veille de cette réunion, nous, associations de […]
    neurone259
  • Lettre ouverte aux institutions européennes : WIFI4EU doit promouvoir la diversité, le local et les droits humains 22 mai 2017
    Paris, le 22 mai 2017 — Alors que le Conseil de l'Union européenne et la Commission européenne entrent dans la phase obscure des trilogues pour le projet de réglement WIFI4EU, les réseaux associatifs européens ainsi que la communauté du wifi-ouvert veulent leur rappeler l'importance d'inclure tous les acteurs dans le développement de la connectivité locale. […]
    neurone130
  • Présidentielles 2017 : changer de méthode pour changer de cap 20 avril 2017
    Paris, 21 avril 2017 — La campagne électorale française donne peu de satisfaction depuis des mois. Entre affaires, discours sécuritaire et coups bas, la politique au sens noble du terme a peu de place, les propositions positives sont quasiment absentes. Dans sa volonté d'action positive et de long terme, La Quadrature du Net s'associe avec […]
    neurone259
  • Youtube : invisibilisation au profit de la publicité 5 avril 2017
    La Quadrature du Net publie ici une tribune de Okhin. Paris, 5 avril 2017 — Les plateformes de vidéos en ligne (Youtube et Facebook en tête) supplantent maintenant la télévision en nombre d'audiences, rendant ces médias extrêmement importants dans la représentation de la société qu'ils fournissent. Elles constituent un espace public d'expression, régi par des […]
    neurone130
  • État d'urgence : lettre à Bernard Cazeneuve pour une transparence des données 31 mars 2017
    Paris, 31 mars 2017 — L'état d'urgence est instauré en France depuis le 14 novembre 2015, soit 503 jours. Mais ses effets ne sont pas connus du public, notamment parce que les promesses de transparence qui avaient été faites il y a un an et demi n'ont pas été respectées. Le Parlement a certes effectué […]
    neurone259
  • Dernier article 16 janvier 2017
    tout est dans le titre ... préparez les mouchoirs HandyLinux est une belle aventure démarrée en 2013 et qui a montré que le besoin d'un outil facilitant pour les débutants n'était pas entièrement comblé par des distributions comme Ubuntu ou LinuxMint.bien sûr, HandyLinux ne s'est jamais hissée au niveau de ces grandes distributions, mais c'était […]
    arpinux
  • HandyLinux et le changement d'hébergement 13 janvier 2017
    bonjour @tout-e-s j'espère que les fêtes de fin d'année se sont bien passées pour vos et vos proches encore tous mes vœux pour 2017 ! Dans le dernier article, je parlais de nom de domaine et d'hébergement : petite explication.La situation de départ : HandyLinux-1.9 va passer en fin de vie : documentation et dépôts […]
    arpinux
  • Bonne Année 2017 31 décembre 2016
    Bonjour @ toutes et à tous Quelle année 2016 ! la fusion avec Debian-Facile et la naissance du projet DFLinux, la mise en place des cahiers du débutant, l'accueil sur le forum Debian-Facile ... une belle année qui a vu notre distribution disparaître au profit d'un projet plus vaste, plus généraliste, et qui fait entrer […]
    arpinux
  • The Beginner's HandBook is on line ! 21 décembre 2016
    bonjour @toutes et tous Une brêve pour vous annoncer la première version anglaise des cahiers du débutant !Grâce à Saby43 du collectif Emmabuntüs , le projet tient le roadmap et The beginner's HandBook est en ligne pour nowel Un immense merci à Saby43 pour son travail de fou (et je sais de quoi je parle) […]
    arpinux
  • Fermeture du forum HandyLinux 11 décembre 2016
    bonjour à toutes et tous et voilà, ça devait arriver ... bye bye le forum'handylinux ... depuis juillet dernier et notre fusion avec la communauté Debian-Facile, nous avons développé les outils de la transition : les cahiers du débutants et l'image ISO facilitante DFLinux , le tout sous le regard bienveillant de la communauté Debian-Facile […]
    arpinux
  • Comment migrer d'HandyLinux vers DFLinux 29 novembre 2016
    bonjour à tou-te-s Autant le dire clairement, point de g33kerie ou de bidouillage au programme : la migration vers DFLinux est d'une simplicité élémentaire car il ne s'agit en fait que d'un ajout (ou changement) de dépôts de paquets Avant de migrer ... comprendre les différencesLa distribution HandyLinux est une dérivée Debian, ce qui veut […]
    arpinux
  • Projet DFLinux : arrivée des ISOs stables 26 novembre 2016
    Elles sont fraîches, elles sont bonnes, elles sont stables, elles sont prêtes !!! Le projet DFLinux vous présente ses images ISO Debian "Jessie" en version stable !Un petit mois d'avance sur le programme, mais quand on aime ...Les derniers changements depuis la version "beta2"suppression de gparted du système installé (gnome-disk suffit largement pour le formatage […]
    arpinux
  • Les cahiers du débutant : mise à jour et gel de la version "Jessie" 18 novembre 2016
    Bonjour à tout-es J'ai le plaisir de vous présenter la dernière mise à jour des cahiers du débutant sur Debian, qui sera la dernière version pour Debian Jessie.Les changementsAjout de nouvelles sections :la gestion des utilisateurs ,les backports  avec l'exemple LibreOffice,les dépôts externes avec l'exemple Firefox et les dépôts Mozilla .Ajout de sites dans l'annuaire […]
    arpinux
  • La Dynamique du Libre en Côte d’Ivoire 12 juin 2017
    Une fois de plus, nous voici plongés au cœur des actions de la brillante jeunesse de Côte d’Ivoire. @yiyikoh, Ovillage, JerryClan de Côte d’Ivoire, etc, sont autant de lieux et de projets mis sur pied par de jeunes ivoiriens très ambitieux, ceci dans le but entre autres de promouvoir les logiciels libres, d’instaurer des plateformes […]
    shihtzu
  • Release Emmabuntüs Debian Edition 1.02 with Lilo and UEFI included! 24 mars 2017
    On March 20, 2017, the Emmabuntüs Collective is happy to announce the release of the new Emmabuntüs Debian Edition 1.02 (32 and 64 bits), based on Debian 8.7 distribution and featuring the XFCE desktop environment. This distribution was originally designed to facilitate the reconditioning of computers donated to humanitarian organizations, starting with the Emmaüs communities (which is where the distribution’s name obviously comes from), […]
    shihtzu
  • Sortie de l’Emmabuntüs Debian Edition 1.02 avec Lilo et UEFI inclus ! 24 mars 2017
    Le Collectif Emmabuntüs est heureux d’annoncer la sortie pour le 20 mars 2017, de la nouvelle Emmabuntüs Debian Édition 1.02 (32 et 64 bits) basée sur la Debian 8.7 et XFCE. Cette distribution a été conçue pour faciliter le reconditionnement des ordinateurs donnés aux associations humanitaires, à l’origine aux communautés Emmaüs (d’où son nom), pour […]
    shihtzu
  • Yes, Jerry Can in Africa ! 22 février 2017
    Friday May 25th 2012, has been a very special day for the Free Software community in the Ivory Coast country. The Yamoussoukro town, commonly called Yakro by the Ivorians, experienced a significant event in the whole coworking history. “The sharing night” gathering, as the coworkers decided to name it, was hosted in the City Hall […]
    yves
  • YES, JERRY CAN ! (Jerrycan) 16 février 2017
    Le vendredi 25 mai 2012 a été un jour pas comme les autres pour la communauté du Libre de Côte d’Ivoire. La ville de Yamoussoukro, communément appelée Yakro par les Ivoiriens, a vécu un événement des plus marquants de l’histoire du coworking2. « La nuit du partage », comme ont décidé de la nommer les coworkers, a […]
    shihtzu
  • A Distro For All Seasons 1 novembre 2016
    In its September 2016 edition, the Linux Format English magazine published a long interview of our Emmabuntüs collective, conducted by their journalist Jonni Bidwell. The paper begins with a brief history of the first voluntary actions made by Patrick at Emmaüs community of Neuilly-Plaisance, and the first traveling companions who started the Emmabuntüs collective adventure. Next […]
    yves
  • Une distro pour l’éternité ! 30 octobre 2016
    Dans son édition de Septembre 2016 la revue anglaise Linux Format publie une longue interview du collectif Emmabuntüs conduite par leur journaliste Jonni Bidwell. L’article débute avec un historique rapide des premières actions de Patrick bénévole à la Communauté Emmaüs de Neuilly-Plaisance, et les premiers compagnons de route qui ont démarré l’aventure du collectif Emmabuntüs. […]
    shihtzu
  • On September 5 2016, EmmaDE on the roof of the world ! 15 septembre 2016
    On September 5, 2016, the Emmabuntüs Collective is happy to announce the release of the new Emmabuntüs Debian Edition 1.01 available for 32 and 64 bits, based on Debian 8.5 distribution featuring the XFCE desktop environment. We hope that this new Debian based version will be adopted by the associations with which we collaborate : YovoTogo […]
    shihtzu
  • Montpel’libre : the dragonfly of Liberty, from Equality to Fraternity. 24 août 2016
    Eight years spent weaving its web beyond its boundaries, disseminating ideas on computers, on technologies and on social actions, thanks to its couple of antennae; and a couple of eyes to understand the mysteries of the world around, in order to better serve it; and a couple of wings to better cover the world through […]
    yves
Welcome , today is vendredi, 23 juin 2017