UTX's build own GNU-Linux
This page is outdated and contains invalid information. Please go to
OSBuilder.
Česká verze
Build own GNU-Linux! This is the request for all of them, who wants to go inside
of GNU-Linux and wants to have all under control.
This project contains lots of useful tools, patches etc., using this you can
build complete GNU-Linuxu environment from source codes.
Build own GNU-Linux doesn't mean save time (at least first time)
not money, but on the other side you can customize anything for
own system and requirements - e. g. current ix86 distributions
are propared for i486 and better, but we can compile i686 only code.
We can also enable special options, libraries, functions etc.
Currently is documentation incomplete, explicitly configuration files
are widely copied only and inconsistent.
Project is and forever will be unfinished, because any new version of anything
can change situation.
News
There is available prerelease build-0.0.tar.gz and build-data-20000517.tar.gz.
There is new pkgshell, package compiler, offering commands, currently
without docs, alpha version.
There is new autoadm providing automatic administration of some files.
Construction rules
Principles
Basic principle is: Build complete system from source codes. System is optimized
to own requirements, system configuration, processor etc. Even more we can
learn much about construction inside and connections.
My wish was to build GNU-Linux on latest base source codes (linux-2.3,
GNU libc-2.1.1, egcs-1.1.2, forced multithreading). This causes some troubles
during compilation. Some of the are sent to authors, other are present
as patches.
Next rule is forcing of dynamic libraries rather than static
everywhere, where is reason for it. This causes few problems
during autoconfiguration (see lower). Dynamic libraries are
slower, but they saves memory and disk space, because they
can be shared between applications. This is explicitly good
for GUIs and for specialised, rarely called libraries for
special functions.
Any system must make consistency of paths for particular programs,
There is more ways: Config sources, config files, and symlinks (used
in this order).
Prefixes
Here is place for user. Good choice makes system more transparent
and makes backup easier.
The goal is:
<root> (empty prefix) will contain files for system
startup, basic communication and backup unpacking.
/usr will be main prefix for most packages.
/usr/X11R6 will be prefix of packages requiring X.
/usr/local will be prefix of concrete computer.
During work it shadows files from other prefixes.
/usr/{package} will be prefix of large program packages (gtk,
gnome, netpbm...).
/usr/games will be prefix of games (nearly empty ;-)
Files layout
Next question is file layout. Here I respect GNU conventions.
Some of them are without prefix (for transparency reasons).
If program installs many files, it is good there,
where prefixes are not used, to do a separate directory or
force files to start of package name (naturally except /tmp).
System is solved as single platform, but small changes
can cause file shareability between platforms.
The goal is:
/etc (no prefix) will contain config files and will not be
changed by programs
bin will contain ordinary user's executables
sbin will contain superuser's executables
man will contain manual pages
info will contain .info pages
lib will contain libraries
libexec will contain special executables
/usr/doc will contain docs
include will contain include files for compiler
share will not changed except installation
/var (no prefix) will be used for permanent storage of variable data
/usr/src (no prefix) will contain source files
/tmp (no prefix) will be used for temporary storage of data
Sources
Sources coming from Internet. Main archives are:
All of the I have at home on HD. If I get more requests for data,
I will think about CD writer.
GNU configure
Many programs uses this package for system config. This is very flexible,
but some system parameters can be detected incorrectly. So watch carefully
messages from it. After some timewe can easy detectm if something is not
correct (standard function or library not found etc.). Then we need some
effort to fing the trouble. It is most often:
- Referring dynamic library linker required resolving of all symbols
in library. It requires adding a library to list
(e. g. shadow => crypt).
- Any file is on other place than searched by configure.
Then either fix path to it or make temporary symlink (e. g. include
ndbm.h => db1/ndbm.h).
Disk space
Sources requires many space on disk. Mostly you can delete it after succesfull
install. The only exception is kernel source (you need at least include),
and glibc (ony
Zdrojové soubory zaujímají mnoho místa na disku. Většinou je po úspěšné kompilaci
můžete smazat. Jedinou výjimkou jsou zdrojové kódy jádra - zde je nutné si uschovat
z nich alespoň include, a glibc (only if you want debug also in it).
It is an advantage, if it is possible, to compile in separate directory.
After install you can delete temporary files, but we can look inside sources
and trace.
Next save-space is compression. For info (after setup in site-start) and man
(with changed makewhatis) files, source sodes is good slower but powerful bzip2;
účinný bzip2, for fonts or run-time decompressed files is good less powerfull
but faster gzip. If you have enough space on disk, you need no decompression
of man and info files.
For largest projects (XFree86, GNU libc) count at least 200MB of free space
to compile.
Cross dependencies avoiding
Coming soon...
Basic system
This list do not want to be complete.
Basic packages for system self re-generation (self recompilation):
egcs (gcc)
binutils
any Bourne shell compatible program (bash)
termcap or ncurses (for more, less)
make
fetish (fileutils, textutils, sh-utils)
sed
diffutils a patch (cmp is nearly required, others recommended)
Packages required (or highly recommended) for system startup:
sysvinit
update
ldconfig (standalone or from ld.so)
util-linux
e2fsprogs
modutils (if you use any modules)
psmisc, procps (psmisc required for system shutdown, others for statistics)
Packages required (or highly recommended) for basic administration:
inetutils and net-tools (if you want network support)
gzip or bzip2 (if you want compression)
tar (if you want unpack archives)
less (replacement for more)
any editor (e. g. vi clone)
Enhanced developing system, required for some packages, X, etc.:
m4
automake, autoconf, libtool
bison
lex
findutils
texinfo (for docs formatting)
perl (not required for nearly any instalation, but many scripts uses it)
tcl/tk (not required for nearly any instalation, but many scripts uses it, cross
dependency while building X).
Basic extensions of user system:
readline
zlib
emacs
Packages for hardware setup:
scanpci
isapnptools
hdparm
scsifmt
mtools
setserial
To do
Not correct terminfo and termcap (colors, keys, Alt, 8bit keycodes
at least on: linux, xterm).
Missing functional mailcap and good printcap with auto conversion.
Missing session managing for X.
Missing MAKEDEV.
Doesn't work under glibc:
GNU finger-1.37 (but here is BSD finger)
Reentrantn code for w3c-libwww-5.2.1
gcl-2.2.2
quota-1.51
sudo-1.2-shadow
GNU ispell-3.1.20 (but we have ispell-4.0 from other sources)
awk nor perl was not succesfull in all tests
xview toolkit
GNUStep
System skeleton
Here will be system skeleton (directories, its usage and access rights).
Description doesn't contain directories commented otherwhere
and its access is rwxr-xr-x (basic access).
- / rwxr-xr-x
Kořen stromu adresářů. Neměl by obsahovat soubory, pouze adresáře.
- /dist rwxr-xr-x
Zde si ukládám zdrojové kódy (viz Build DO log).
- /dev rwxr-xr-x
Standardní umístění devices. Práva některých devices
jsou pevně dána, ale u externích disků, disket ap. lze výhodně využít následující
postup:
Příkazem groupadd přidáme skupinu (např. floppy). Pak dáme
chgrp floppy /dev/fd*
a nastavíme příslušná práva. Těm uživatelům, kterým chceme povolit
přístup k těmto zařízením, přidáme floppy jako druhotnou skupinu.
- /boot rwx------
Informace pro start systému (program LILO).
Je vhodné buď povolit čtení pro běžného uživatele, nebo provést instalaci psdatabase,
aby např. ps l mohl ukázat symbolická jména.
- /tmp rwxrwxrwt ????
Dočasné soubory.
- /home rwxr-xr-x
Zde jsou domovské adresáře uživatelů. Uživatele
lze přidat pomocí useradd.
- /root rwx?-??-?
Soubory superuživatele. Nikdo sem explicitně nic
neukládá, záleží jen na správci, jak s ním naloží a jaká práva mu dá.
- /usr rwxr-xr-x
- /usr/lib rwxr-xr-x
- /usr/lib/_old rwxr-xr-x
"Smetiště" dynamických knihoven. Po instalaci nové knihovny starou přesuneme sem
a zde zůstane, dokud ji některý program vyžaduje k činnosti.
Popis souborů
- Build DO log: (Mon Jan 17 13:37:32 2000)
Hlavní soubor celého projektu. Jedná se o textový soubor,
kde jsou popsány jednotlivé kroky.
Je určen k použití typu "zkopírovat a vložit do shellu".
Je nejčastěji měněným souborem projektu (zhruba několikrát týdně).
Dokumentace obsahuje nutné informace o konfiguraci a umístění zdroje na Internetu.
To bývá většinou aktuálnější, než výše uvedené zdroje.
Naleznete zde také ukázky administračních akcí a použití níže uvedených skriptů.
Doporučené umístění: /usr/src/Build/
- config.site: Konfigurační soubor GNU.
Ačkoliv by logicky patřil jinam, je zmíněn zde. Konfigurační soubor GNU. Nastaví
cesty pro všechny programy GNU kompatibilní.
Speciální funkce config.site: Pokud je proměnná DEBUG
nedefinovaná nebo je prázdný řetězec, je nastaven produkční režim
(maximální optimalizace, nepoužívat -g), jinak ladící režim.
Optimalizovaný režim používá volby optimalizované na poměr
rychlost/velikost, bez možnosti trasování. U některých programu je
přesto nutné nastavit CFLAGS, CXXFLAGS, OPT či něco jiného i z
příkazového řádku.
Pokud je u vašeho počítače důležitější velikost dat, budete
zřejmě chtít tento soubor zeditovat.
Doporučené umístění: /etc/, chown +x
Nutné provést: CONFIG_SITE=/etc/config.site nebo vytvořit symbolické
odkazy z /usr/local/{share nebo etc}/config.site a všech prefixů
- Postavte si GNU-Linux, skripty.
Většina z nich vyžaduje bash, fetish (file, text, shell-utils), sed a
grep. Některé vyžadují jejich GNU verze (na začátku takových soborů je
upozornění) a awk.
- Skripty užitečné při kompilaci.
- sedfile: Jednoduchý skript na "seditaci" souborů.
Hojně používaný při kompilaci k úpravám zdrojových kódů.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- prepend: Jednoduchý skript na předřazení
textu před soubor. Hojně používaný při kompilaci k úpravám zdrojových kódů,
zvláště pro přidávání include.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu. Není shodné (z dobrých důvodů) s jiným skriptem
stejného jména a funkce, nacházejícího se na síti.
- autofix: Sofistikovaný opravář zdrojových
souborů pro kompilaci pro glibc-2.1. Používaný při kompilaci k opravám
některých nekompilovatelných zdrojových kódů. Občas může nadělat v
souborech chyby, proto s ním opatrně.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- difforig: Pokud si při úpravach
zdrojového souboru zazálohujete každý upravovaný soubor
do .orig zálohy, pak tento skript vytvoří unidiff z celého balíku.
Pokud editujete na jedno sezení emacsu, pak se vám hodí druhý
argument '~' (závorky jsou nutné), který změní typ zálohy.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- findbins: Prohlédne si aktuální
adresář a podadresáře a nalezne stejnojmenné soubory v cestě.
Slouží jako pojistka před přepsáním důležitých souborů.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- cmtr: Program pro sledování,
co se kam instaluje.
Používá nečistý trik (vymění některé fileutils za sledovací skripty).
Skript vyžaduje právo zápisu do /bin.
V průběhu zapnutého cmtr se nedoporučují jiné aktivity, než je instalace
programového vybavení.
Nelze bez úprav použít k instalaci fileutils :-)
Lze použít namísto programu GNU stow, který vytváří množství odkazů.
Doporučené umístění: /usr/local/sbin/
Užití popsáno ve skriptu.
cmtr.proc: Pomocný soubor.
Doporučené umístění: /usr/local/libexec/
cmtrproc: Skript pro zpracování
výsledků cmtr.
Doporučené umístění: /usr/local/sbin/
Umístění databází: /var/log/cmtr ... nezpracovaný záznam, /var/pkgdb ... zpracovaný seznam.
Užití: cmtrproc, cmtrproc -t ... "suchý" běh (pouze vypisuje zprávy),
cmtrproc [-t .. pouze vypisuje zprávy] [-d .. nemaže zpracovaný
protokol] [-r .. ruší z hotové databáze neexistující soubory,
nezpracovává protokol]
- Skripty užitečné při administaci.
- fif: Informace o souboru.
Vypíše umístění spustitelného souboru, informace o dynamickém linkování
a příslušnosti do programového balíku.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- prefixes: Správce prefixů systému.
Projde prefixy dle /etc/prefixes a zedituje systémové soubory
(/etc/profile, /etc/ld.so.conf, man.conf, site-start.el, chkdupexe)
Doporučené umístění: /usr/local/sbin/, man stránka /usr/local/man/man8/
Užití viz man stránka.
- customize: Pětice skriptů pro přizpůsobení konfiguračních
souborů. Jedná se o záplaty na konfigurační soubory, které se při instalaci
přepíší. Tato metoda se zdá být spolehlivější, než uchovávání zeditovaných
konfiguračních souborů starých verzí. Používá bezkontextový unidiff formát
nebo unidiff s kontextem jednoho řádku.
customin: Registrace změn. Spouští se před
instalací.
customout: Zanesení změn. Spouští se po
instalaci. Zazálohuje originály konfiguračních souborů.
customoff: Vymaže zálohy originálních
souborů. Spouští se při nouzi o místo na disku. Po jeho spuštění již není
vhodné editovat konfigurační soubory.
customon: Regeneruje zálohy originálních
souborů. Spouští se po customoff, chcete-li opět editovat konfigurační soubory.
custominfo: Informuje o stavu souborů registrovaných
pomocí mechanismu customize.
Doporučené umístění skriptů: /usr/local/sbin/
Umístění záplat: /usr/src/Customize/
Užití popsáno ve skriptech.
- addstring: Off-line editor souborů.
Zapracuje řetězec do souboru. Speciální komentáře zajistí,
že je schopen jej rozpoznat a při příští editaci nahradit nebo vymazat.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- bz2repack: Přepakuje .gz na .bz2.
Bez argumentů vše .gz v adresáři a podadresářích, s argumentem "on
fly" ze stdin do souboru.
Doporučené umístění: /usr/local/bin/
Užití popsáno ve skriptu.
- stripall: Odstraní trasovací informace
a tabulky symbolů ze všech souborů v adresáři/cestě.
Před použitím zvažte, zda odstranit tabulky symbolů i z dynamických
knihoven (znemožníte tím trasování). V produkční verzi to lze doporučit,
v ladící ne.
Doporučené umístění: /usr/local/sbin/
Užití popsáno ve skriptu.
- mklibusage: Informace o užití dynamických knihoven.
Vygeneruje v aktuálním adresáři soubory se statistickými informacemi o použití knihoven.
Upraveno tak, aby rozpoznalo programy ze staré distribuce (Slackware, možné zeditovat).
Pomocný soubor se jmenuje mklibusage.sh:
libusage: užití dynamických knihoven
libusage_bad: neslinkovatelné programy
libusage_slackware: užití dynamických knihoven ze staré distribuce
libusage_ndyn: programy které nejsou dynamicky linkované, a nevypadají jako skripty
libusage_old: užití dynamických knihoven z adresáře /usr/lib/_old
libusage_script: nalezené skripty pro jakýkoliv interpreter
libusage_count: křížové součty užití dynamických knihoven
Doporučené umístění: /usr/local/sbin/ (mklibusage), /usr/local/libexec/ ((mklibusage.sh)
Užití: mklibusage v adresáři, kam chceme zapsat výsledky
- pkgls: Vypíše seznam instalovaných
souborů v balíku.
Doporučené umístění: /usr/local/bin/
Užití: pkgls balík(y)
- pkgmk: Vytvoří v aktuálním adresáři
soubor balík.tar.gz s daty. Před použitím pro produkční verzi
je vhodné použít stripall.
Doporučené umístění: /usr/local/bin/
Užití: pkgmk balík(y), volba -r nastaví kořenový adresář, -z gzip
kompresi, -y bzip2 kompresi, -v upovídanost.
- pkgadd: Nainstaluje binární balík
vytvořený pkgmk.
Doporučené umístění: /usr/local/sbin/
Užití: pkgadd balík(y), volba -r nastaví kořenový adresář, -z gzip
kompresi, -y bzip2 kompresi, -v upovídanost.
- pkginfo: Vypíše informace o instalovaných
souborech v balíku.
Doporučené umístění: /usr/local/bin/
Užití: pkginfo balík(y)
- pkgask: Vypíše informace o náležitosti
souboru k balíku.
Doporučené umístění: /usr/local/bin/
Užití: pkgask soubor(y)
- pkgrm: Smaže instalovaný balík.
Doporučené umístění: /usr/local/sbin/
Užití: pkgrm balík(y)
- pkgdup: Nalezne programy
instalované duplicitně dvěma balíky. Tedy přesně tu
situaci, kterou neodhalí chkdupexe (a naopak).
Doporučené umístění: /usr/local/bin/
Užití: pkgdup
- chkdupexe: Je součástí util-linux, ale připomínám
jej zde jako užitečný program k nalezení duplicitních souborů
v cestě.
- patchtz: Pokouší se srovnáváním se soubory
odvodit časovou zónu, ve které jsou ovedeny časy v záplatovém souboru.
Nedokáže obsloužit chybová hlášení, "./" bere jako součást cesty (narozdíl od patch).
Doporučené umístění: /usr/local/bin/
Užití: fif soubor (bez cesty)
tzdb: Vytváří databázi časových zón
z informací "zoneinfo" (kterou instaluje glibc).
Doporučené umístění: /usr/local/sbin/
Umístění databáze: /usr/local/share/zonelist
Užití: tzdb
- patchtouch: Skript nastavuje data
souborů podle záplaty.
Užití popsáno ve skriptu.
- gzipmodtime: Skript nastavuje
čas modifikace pro .gz soubory podle času zapsaného při kompresi.
Užití popsáno ve skriptu.
- gpart.c: Sice není skript, ale je to
triviální C program. Máte-li kredit na počítači s rychlým připojením
(navíc s nízkou quota) a sami stahujete po modemu, poslouží vám
program pro "vyseknutí" určité (např. chybně stažené) části souboru.
Má jediný argument - číslo bloku, pracuje jako filtr. Vše ostatní
(délka bloku) je "zadrátováno" ve zdrojáku (zeditujte si dle quota,
rychlosti modemu, paměti atd.). Výhodný ve spojení se sum nebo md5sum
a split k nalezení chybně stažené části souboru a jeho opravě. Způsob
zdlouhavý, ale u 15MB dlouhého souboru se vyplatí.
Doporučené umístění: tam, kde máte kredit s rychlým připojením
Užití popsáno ve skriptu.
- lslrfind.c: Sice není skript, ale
je to triviální C program. Slouží k hledání v rozsáhlých ls-lR
souborech. Při hledání záleží na velikosti písmen.
Doporučené umístění binární verze: /usr/local/bin
Užití: např. bz2cat ls-lR-soubor.bz2 | lslrfind string
- install-all-infos: Nalezne
info soubory, které chybějí v souboru dir a nainstaluje je.
Nutné zeditovat podle typu komprese info souborů.
Doporučené umístění binární verze: /usr/local/sbin
Užití: install-all-infos, poté ručně zeditovat vložené řádky
anebo opravit problémy
- update-manuals: Slouží pro
instalaci balíku man-pages (instalujeme si ho do zvláštního adresáře).
Vyřadí z něj soubory, které jsou v hlavním manuálovém adresáři jiné, a
naopak z hlavního manuálového adresáře vyřadí ty, které jsou totožné.
Po této kontrole vyžaduje ruční srovnání vyřazených souborů
(man-pages/updated) a smazání duplicitních manuálů (dup_man).
Před instalací vyžaduje editaci (nastavení zda a jak komprimujete man stránky).
Doporučené umístění binární verze: /usr/local/sbin
Užití: update-manuals a dále ruční kontrola.
- Skeletové soubory.
Soubory skeletu systému, které nejsou součástí žádného balíku.
Značně nekompletní!!!
- Soubory pro kompilaci.
Používá je Build DO log.
- Místní soubory, vyžadují nutně editaci.
- Soubory s nastavením, vyžadují nutně editaci.
Berte je jako inspiraci, jak co řešit. Jsou určeny pro administrační
skripty customize.
Používá je Build DO log při instalaci konfiguračních
souborů. Berte je jako inspiraci. Základní změny jsou provedeny při instalaci,
zde uvedené jsou např. nastavení adres, znakových sad ap.
- Čeština.
Pokud použijete XFree86 alespoň ve verzi 3.3.3.1 a GNU libc-2.1 se správně
nastaveným locale (řeší jiné zdroje), pak nebudete mít mnoho problémů.
Přesto jsem však cítil potřebu napsat si vlastní klávesnici.
Od standardní se liší tím, že přes <Alt> napíšete to, co se původně
(v americké klávesnici psalo přes <Přeřaďovač>. Navíc na <Alt>+<9>
a <Alt>+<0> jsou složené závorky (česká klávesnice bylo to jediné
co se mi líbilo na Macintoshi :-). Je t jak pro XFree86,
tak pro konzoli. Protože však nedosahuje kvalit
mé vlastní klávesnice pro Amigu (všech 256 znaků přímo z klávesnice), zatím
ji najdete jenom zde. ;-)
Soubory jsou dostupné i přes ftp.penguin.cz/pub/users/utx
a jako build.tar.gz. Ten však neobsahuje češtinu.
Na hlavní stránku Penguin's UTX WWW
Připomínky posílejte na utx@penguin.cz (Stanislav Brabec)