1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885 |
- 1 About this handbook
- 1.1 Typographic conventions
- Revision history (ChangeLog)
- 2 What is Dragora?
- 2.1 Free software
- 2.2 GNU
- 2.3 Linux and Linux-libre
- 3 Why should I use Dragora?
- 4 History
- 4.1 Releases
- 5 Maintainers
- 6 A quick glance at Dragora
- 7 Boot options from live medium
- 8 Using dragora-installer
- 9 Installing the system manually (as an alternative)
- 10 Introduction to package management in Dragora
- 11 Package management in a nutshell
- Using third-party free software
- 12 Introduction to Qi
- 13 Invoking qi
- 14 The qirc file
- 15 Packages
- 15.1 Package conflicts
- 15.2 Installing packages
- 15.3 Removing packages
- 15.4 Upgrading packages
- 15.4.1 Package blacklist
- 16 Recipes
- 16.1 Variables
- 16.2 Special variables
- 16.3 Writing recipes
- 16.4 Building packages
- 16.5 Variables from the environment
- 16.6 The meta file
- 17 Order files
- 18 Creating packages
- 19 Examining packages
- 20 Qi exit status
- 21 Getting support
- 22 Contributing to Dragora
- 22.1 How to place a mirror
- Appendix A GNU Free Documentation License
- Index
- Dragora 3.0 Handbook
- ********************
- This Handbook is for Dragora (version 3.0, initial revision, 26 Apr
- 2023).
- Copyright © 2020-2023 The Dragora Team.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- 1 About this handbook
- *********************
- TODO (Add intro + versioning scheme paragraph).
- 1.1 Typographic conventions
- ===========================
- TODO (appendix).
- Revision history (ChangeLog)
- ****************************
- TODO (appendix).
- 2 What is Dragora?
- ******************
- *Dragora* is an independent GNU/Linux distribution project which was
- created from scratch with the intention of providing a reliable
- operating system with maximum respect for the user by including entirely
- free software. *Dragora* is based on the concepts of simplicity and
- elegance, it offers a user-friendly Unix-like environment with emphasis
- on stability and security for long-term durability.
- To put it in a nutshell, *Dragora* is...
- * Minimalist.
- * Free as in freedom.
- * Getting better by the day.
- * A whole lot of fun (not suitable for old vinegars).
- Some of the features of Dragora are:
- * SysV init as the classic, documented initialization program (PID
- 1).
- * Perp to reliably start, monitor, log and control "critical" system
- daemons.
- * Lightweight alternatives to popular free software; i.e, musl libc,
- libressl, mksh, scron, pkgconf.
- * The Trinity Desktop Environment (TDE).
- * Window managers such as TWM, DWM.
- * Graft for managing multiple packages under a single directory
- hierarchy using symbolic links mechanisms.
- * Qi as a simple local package manager that complements Graft to
- create, install, remove and upgrade software packages.
- 2.1 Free software
- =================
- TODO.
- 2.2 GNU
- =======
- TODO.
- 2.3 Linux and Linux-libre
- =========================
- TODO.
- 3 Why should I use Dragora?
- ***************************
- We cannot and do not intend to decide for you, we can only cite what we
- believe to be Dragora's main strengths:
- * *Independent*: As mentioned before, Dragora is an independent
- project, this means that it is based on a voluntary basis where one
- or more people share the same direction or intentions for the sake
- of the project and in benefit of the free software community. But
- above all, it is not a purely commercial project or one that is
- made by a company, where they have commercial interests, and where
- many times they will do anything to catch you and see your face for
- their selfish business.
- * *Simple:* The underlying concept of Dragora's design philosophy is
- simplicity: KISS, "Keep It Simple, Stupid!". This principle, which
- derives from what is known as "Ockham's razor," was developed by
- the first modern critical philosopher: William of Ockham. We
- believe this concept represents the traditional UNIX philosophy -
- so we don't add functionality unnecessarily, nor do we duplicate
- information.
- * *Ethical:* We try to ensure that the included software is
- completely free and allows you to legally run, copy, distribute,
- study, change and improve the software.
- * *Language:* Native support.
- * *Community:* Dragora is not a closed project. On the contrary,
- anyone person with good intentions is welcome - and encouraged! -
- to join and help.
- 4 History
- *********
- Development of Dragora started in 2007 by Matias Andres Fonzo from
- Santiago del Estero, Argentina. After one year of hard work, the first
- beta of Dragora was released on June 13, 2008, which contained the basic
- GNU toolset, boot scripts, package system, and an installer. Whereas
- the intention was to achieve a 100% "free" as in freedom GNU/Linux
- distribution from the beginning, this very first version was not fully
- free (or libre) since all parts were free software, except for the Linux
- Kernel due to blobs or non-free parts. Fortunately, the Linux-Libre
- project appears that same year, which removes or cleans the non-free
- parts of the official versions of the Linux Kernel. This led to the
- second beta of Dragora on September 18, 2008; completing distribution's
- freedom by replacing the Kernel, and becoming the first one available to
- the public. Ongoing work to provide a more complete distribution would
- result in the stable release of Dragora 1.0, achieved on March 13, 2009.
- The series ends with the massive update plus fixes and added software
- for version 1.1 released on October 8, 2009.
- Design of this series was based on a traditional GNU/Linux scheme
- with SysVinit as the init system but using BSD-style boot scripts. The
- package system, the installer, the text menu-mode tools and the boot
- scripts were all written using the syntax and the features offered by
- GNU Bash. Initially the binary packages were provided in .tbz2 format
- (files compressed with bzip2 and packaged using GNU Tar) which later
- migrated to the .tlz format (files compressed with lzip for a higher
- compression plus very safe integrity checking). Dragora's installer
- offered the option of several languages (translations produced by the
- community) to choose between English, Galician, Italian, and Spanish. A
- second CD included the packages for the K Desktop Environment (KDE) 3
- series.
- 4.1 Releases
- ============
- Below are the dates and code names used for all the Dragora releases:
- * _*Dragora 1.0 Beta 1:* June 13th, 2008 - "hell"._
- * _*Dragora 1.0 Beta 2:* September 18th, 2008._
- * _*Dragora 1.0 Release Candidate 1:* February 12th, 2009._
- * _*Dragora 1.0 Stable:* March 13th, 2009 - "starlight"._
- * _*Dragora 1.1 Release Candidate 1:* August 25th, 2009._
- * _*Dragora 1.1 Stable:* October 8th, 2009 - "stargazer"._
- * _*Dragora 2.0 Release Candidate 1:* January 24th, 2010._
- * _*Dragora 2.0 Release Candidate 2:* March 28th, 2010._
- * _*Dragora 2.0 Stable:* April 13th, 2010 - "ardi"._
- * _*Dragora 2.1 Release Candidate 1:* December 4th, 2010._
- * _*Dragora 2.1 Stable:* December 31st, 2010 - "dio"._
- * _*Dragora 2.2 Release Candidate 1:* March 2nd, 2012._
- * _*Dragora 2.2 Stable:* April 21st, 2012 - "rafaela"._
- * _*Dragora 3.0 Alpha 1:* December 31st, 2017._
- * _*Dragora 3.0 Alpha 2:* September 28th, 2018._
- * _*Dragora 3.0 Beta 1:* October 16th, 2019._
- 5 Maintainers
- *************
- TODO.
- 6 A quick glance at Dragora
- ***************************
- TODO.
- 7 Boot options from live medium
- *******************************
- TODO.
- 8 Using dragora-installer
- *************************
- TODO.
- 9 Installing the system manually (as an alternative)
- ****************************************************
- TODO.
- 10 Introduction to package management in Dragora
- ************************************************
- TODO.
- 11 Package management in a nutshell
- ***********************************
- TODO.
- Using third-party free software
- *******************************
- TODO (appendix).
- 12 Introduction to Qi
- *********************
- Qi is a simple but well-integrated package manager. It can create,
- install, remove, and upgrade software packages. Qi produces binary
- packages using recipes, which are files containing specific instructions
- to build each package from source. Qi can manage multiple packages
- under a single directory hierarchy. This method allows to maintain a
- set of packages and multiple versions of them. This means that Qi could
- be used as the main package manager or complement the existing one.
- Qi offers a friendly command line interface, a global configuration
- file, a simple recipe layout to deploy software packages; also works
- with binary packages in parallel, speeding up installations and packages
- in production. The format used for packages is a simplified and safer
- variant of POSIX pax archive compressed in lzip format.
- Qi is a modern (POSIX-compliant) shell script released under the
- terms of the GNU General Public License. There are only two major
- dependencies for the magic: graft(1) and tarlz(1), the rest is expected
- to be found in any Unix-like system.
- 13 Invoking qi
- **************
- This chapter describes the synopsis for invoking Qi.
- Usage: qi COMMAND [OPTION...] [FILE]...
- One mandatory command specifies the operation that 'qi' should perform,
- options are meant to detail how this operation should be performed
- during or after the process.
- Qi supports the following commands:
- 'warn'
- Warn about files that will be installed.
- 'install'
- Install packages.
- 'remove'
- Remove packages.
- 'upgrade'
- Upgrade packages.
- 'extract'
- Extract packages for debugging purposes.
- 'create'
- Create a .tlz package from directory.
- 'build'
- Build packages using recipe names.
- 'order'
- Resolve build order through .order files
- Options when installing, removing, or upgrading software packages:
- '-f'
- '--force'
- Force upgrade of pre-existing packages.
- '-k'
- '--keep'
- Keep directories when build/remove/upgrade.
- Keep (don't delete) the package directory when using remove/upgrade
- command.
- This will also try to preserve the directories '${srcdir}' and
- '${destdir}' when using build command. Its effect is available in
- recipes as '${keep_srcdir}' and '${keep_destdir}'. See *note
- Special variables: Recipes. for details.
- '-p'
- '--prune'
- Prune conflicts.
- '-P'
- '--packagedir=<dir>'
- Set directory for package installations.
- '-t'
- '--targetdir=<dir>'
- Set target directory for symbolic links.
- '-r'
- '--rootdir=<dir>'
- Use the fully qualified named directory as the root directory for
- all qi operations.
- Note: the target directory and the package directory will be
- relative to the specified directory, excepting the graft log file.
- Options when building software packages using recipes:
- '-a'
- '--architecture'
- Set architecture name for the package.
- '-j'
- '--jobs'
- Parallel jobs for the compiler.
- This option sets the variable '${jobs}'. If not specified, default
- sets to 1.
- '-S'
- '--skip-questions'
- Skip questions on completed recipes.
- '-1'
- '--increment'
- Increment release number ('${release}' + 1).
- The effect of this option will be omitted if -no-package is being
- used.
- '-n'
- '--no-package'
- Do not create a .tlz package.
- '-i'
- '--install'
- Install package after the build.
- '-u'
- '--upgrade'
- Upgrade package after the build.
- '-o'
- '--outdir=<dir>'
- Where the packages produced will be written.
- This option sets the variable '${outdir}'.
- '-w'
- '--worktree=<dir>'
- Where archives, patches, recipes are expected.
- This option sets the variable '${worktree}'.
- '-s'
- '--sourcedir=<dir>'
- Where compressed sources will be found.
- This option sets the variable '${tardir}'.
- Other options:
- '-v'
- '--verbose'
- Be verbose (an extra -v gives more).
- It sets the verbosity level, default sets to 0.
- The value 1 is used for more verbosity while the value 2 is too
- detailed. Although at the moment it is limited to graft(1)
- verbosity.
- '-N'
- '--no-rc'
- Do not read the configuration file.
- This will ignore reading the qirc file.
- '-L'
- '--show-location'
- Print default directory locations and exit.
- This will print the target directory, package directory, working
- tree, the directory for sources, and the output directory for the
- packages produced. The output will appear on STDOUT as follows:
- QI_TARGETDIR=/usr/local
- QI_PACKAGEDIR=/usr/local/pkgs
- QI_WORKTREE=/usr/src/qi
- QI_TARDIR=/usr/src/qi/sources
- QI_OUTDIR=/var/cache/qi/packages
- You can set these environment variables using one of the following
- methods:
- 'eval "$(qi -L)"'
- This will display the default locations taking into account the
- values set from the qirc configuration file. You can deny the
- influence of the configuration file by setting the option '-N'.
- 'eval "$(qi -N -L)"'
- Or you can adjust the new locations using the command-line options,
- e.g:
- 'eval "$(qi -N --targetdir=/directory -L)"'
- '-h'
- '--help'
- Display the usage and exit.
- '-V'
- '--version'
- This will print the (short) version information and then exit.
- The same can be achieved if Qi is invoked as 'qi version'.
- When FILE is -, qi can read from the standard input. See examples
- from the *note Packages:: section.
- Exit status: 0 for a normal exit, 1 for minor common errors (help
- usage, support not available, etc), 2 to indicate a command execution
- error; 3 for integrity check error on compressed files, 4 for empty, not
- regular, or expected files, 5 for empty or not defined variables, 6 when
- a package already exist, 10 for network manager errors. For more
- details, see the *note Qi exit status:: section.
- 14 The qirc file
- ****************
- The global 'qirc' file offers a way to define variables and tools (such
- as a download manager) for default use. This file is used by qi at
- runtime, e.g., to build, install, remove or upgrade packages.
- Variables and their possible values must be declared as any other
- variable in the shell.
- The command line options related to the package directory and target
- directory and some of the command line options used for the build
- command, have the power to override the values declared on 'qirc'. See
- *note Invoking qi::.
- The order in which qi looks for this file is:
- 1. '${HOME}/.qirc' Effective user.
- 2. '${sysconfdir}/qirc' System-wide.
- If you intend to run qi as effective user, the file
- '${sysconfdir}/qirc' could be copied to '${HOME}/.qirc' setting the
- paths for '${packagedir}' and '${targetdir}' according to the '$HOME'.
- 15 Packages
- ***********
- A package is a suite of programs usually distributed in binary form
- which may also contain manual pages, documentation, or any other file
- associated to a specific software.
- The package format used by qi is a simplified POSIX pax archive
- compressed using lzip(1). The file extension for packages ends in
- '.tlz'.
- Both package installation and package de-installation are managed using
- two important (internal) variables: '${packagedir}' and '${targetdir}',
- these values can be changed in the configuration file or via options.
- '${packagedir}' is a common directory tree where the package contents
- will be decompressed (will reside).
- '${targetdir}' is a target directory where the links will be made by
- graft(1) taking '${packagedir}/package_name' into account.
- Packages are installed in self-contained directory trees and symbolic
- links from a common area are made to the package files. This allows
- multiple versions of the same package to coexist on the same system.
- 15.1 Package conflicts
- ======================
- All the links to install or remove a package are handled by graft(1).
- Since multiple packages can be installed or removed at the same time,
- certain conflicts may arise between the packages.
- graft(2) defines a CONFLICT as one of the following conditions:
- * If the package object is a directory and the target object exists
- but is not a directory.
- * If the package object is not a directory and the target object
- exists and is not a symbolic link.
- * If the package object is not a directory and the target object
- exists and is a symbolic link to something other than the package
- object.
- The default behavior of qi for an incoming package is to ABORT if a
- conflict arises. When a package is going to be deleted, qi tells to
- graft(1) to remove those parts that are not in conflict, leaving the
- links to the belonging package. This behavior can be forced if the
- -prune option is given.
- 15.2 Installing packages
- ========================
- To install a single package, simply type:
- qi install coreutils_8.30_i586-1@tools.tlz
- To install multiple packages at once, type:
- qi install gcc_8.3.0_i586-1@devel.tlz rafaela_2.2_i586-1@legacy.tlz ...
- Warn about the files that will be linked:
- qi warn bash_5.0_i586-1@shells.tlz
- This is to verify the content of a package before installing it.
- See the process of an installation:
- qi install --verbose mariana_3.0_i586-1@woman.tlz
- A second -verbose or -v option gives more (very verbose).
- Installing package in a different location:
- qi install --rootdir=/media/floppy lzip_1.21_i586-1@compressors.tlz
- Important: the -rootdir option assumes '${targetdir}' and
- '${packagedir}'. See the following example:
- qi install --rootdir=/home/selk lzip_1.21_i586-1@compressors.tlz
- The content of "lzip_1.21_i586-1@compressors.tlz" will be
- decompressed into '/home/selk/pkgs/lzip_1.21_i586-1@compressors'.
- Assuming that the main binary for lzip is under
- '/home/selk/pkgs/lzip_1.21_i586-1@compressors/usr/bin/' the target for
- "usr/bin" will be created at '/home/selk'. Considering that you have
- exported the 'PATH' as '${HOME}/usr/bin', now the system is able to see
- the recent lzip command.
- Installing from a list of packages using standard input:
- qi install - < PACKAGELIST.txt
- Or in combination with another tool:
- sort -u PACKAGELIST.txt | qi install -
- The sort command will read and sorts the list of declared packages,
- while trying to have unique entries for each statement. The output
- produced is captured by Qi to install each package.
- An example of a list containing package names is:
- /var/cache/qi/packages/amd64/tcl_8.6.9_amd64-1@devel.tlz
- /var/cache/qi/packages/amd64/tk_8.6.9.1_amd64-1@devel.tlz
- /var/cache/qi/packages/amd64/vala_0.42.3_amd64-1@devel.tlz
- 15.3 Removing packages
- ======================
- To remove a package, simply type:
- qi remove xz_5.2.4_i586-1@compressors.tlz
- Remove command will match the package name using '${packagedir}' as
- prefix. For example, if the value of '${packagedir}' has been set to
- /usr/pkg, this will be equal to:
- qi remove /usr/pkg/xz_5.2.4_i586-1@compressors
- Detailed output:
- qi remove --verbose /usr/pkg/xz_5.2.4_i586-1@compressors
- A second -verbose or -v option gives more (very verbose).
- By default the remove command does not preserve a package directory
- after removing its links from '${targetdir}', but this behavior can be
- changed if the -keep option is passed:
- qi remove --keep /usr/pkg/lzip_1.21_i586-1@compressors
- This means that the links to the package can be reactivated, later:
- cd /usr/pkg && graft -i lzip_1.21_i586-1@compressors
- Removing package from a different location:
- qi remove --rootdir=/home/cthulhu xz_5.2.4_i586-1@compressors
- Removing a package using standard input:
- echo vala_0.42.3_amd64-1@devel | qi remove -
- This will match with the package directory.
- 15.4 Upgrading packages
- =======================
- The upgrade command inherits the properties of the installation and
- removal process. To make sure that a package is updated, the package is
- installed in a temporary directory taking '${packagedir}' into account.
- Once the incoming package is pre-installed, qi can proceed to search and
- delete packages that have the same name (considered as previous ones).
- Finally, the package is re-installed at its final location and the
- temporary directory is removed.
- Since updating a package can be crucial and so to perform a
- successful upgrade, from start to finish, you will want to ignore some
- important system signals during the upgrade process, those signals are
- SIGHUP, SIGINT, SIGQUIT, SIGABRT, and SIGTERM.
- To upgrade a package, just type:
- qi upgrade gcc_9.0.1_i586-1@devel.tlz
- This will proceed to upgrade "gcc_9.0.1_i586-1@devel" removing any
- other version of "gcc" (if any).
- If you want to keep the package directories of versions found during the
- upgrade process, just pass:
- qi upgrade --keep gcc_9.0.1_i586-1@devel.tlz
- To see the upgrade process:
- qi upgrade --verbose gcc_9.0.1_i586-1@devel.tlz
- A second -verbose or -v option gives more (very verbose).
- To force the upgrade of an existing package:
- qi upgrade --force gcc_9.0.1_i586-1@devel.tlz
- 15.4.1 Package blacklist
- ------------------------
- To implement general package facilities, either to install, remove or
- maintain the hierarchy of packages in a clean manner, qi makes use of
- the pruning operation via graft(1) by default:
- There is a risk if those are crucial packages for the proper
- functioning of the system, because it implies the deactivation of
- symbolic from the target directory, _especially_ when transitioning an
- incoming package into its final location during an upgrade.
- A blacklist of package names has been devised for the case where a user
- decides to upgrade all the packages in the system, or just the crucial
- ones, such as the C library.
- The blacklist is related to the upgrade command only, consists in
- installing a package instead of updating it or removing previous
- versions of it; the content of the package will be updated over the
- existing content at '${packagedir}', while the existing links from
- '${targetdir}' will be preserved. A pruning of links will be carried
- out in order to re-link possible differences with the recent content,
- this helps to avoid leaving dead links in the target directory.
- Package names for the blacklist to be declared must be set from the
- configuration file. By default, it is declared using the package name,
- which is more than enough for critical system packages, but if you want
- to be more specific, you can declare a package using:
- '${pkgname}_${pkgversion}_${arch}-${release}' where the package category
- is avoided for common matching. See *note Special variables: Recipes.
- for a description of these variables.
- ---------- Footnotes ----------
- (1) For more details about tarlz and the lzip format, visit
- <https://lzip.nongnu.org/tarlz.html>.
- (2) The official guide for Graft can be found at
- <https://peters.gormand.com.au/Home/tools/graft/graft.html>.
- 16 Recipes
- **********
- A recipe is a file telling qi what to do. Most often, the recipe tells
- qi how to build a binary package from a source tarball.
- A recipe has two parts: a list of variable definitions and a list of
- sections. By convention, the syntax of a section is:
- section_name()
- {
- section lines
- }
- The section name is followed by parentheses, one newline and an
- opening brace. The line finishing the section contains just a closing
- brace. The section names or the function names currently recognized are
- 'build'.
- The 'build' section (or *shell function*) is an augmented shell
- script that contains the main instructions to build software from
- source.
- If there are other functions defined by the packager, Qi detects them
- for later execution.
- 16.1 Variables
- ==============
- A "variable" is a *shell variable* defined either in 'qirc' or in a
- recipe to represent a string of text, called the variable's "value".
- These values are substituted by explicit request in the definitions of
- other variables or in calls to external commands.
- Variables can represent lists of file names, options to pass to
- compilers, programs to run, directories to look in for source files,
- directories to write output to, or anything else you can imagine.
- Definitions of variables in qi have four levels of precedence.
- Options which define variables from the command-line override those
- specified in the 'qirc' file, while variables defined in the recipe
- override those specified in 'qirc', taking priority over those variables
- set by command-line options. Finally, the variables have default values
- if they are not defined anywhere.
- Options that set variables through the command-line can only
- reference variables defined in 'qirc' and variables with default values.
- Definitions of variables in 'qirc' can only reference variables
- previously defined in 'qirc' and variables with default values.
- Definitions of variables in the recipe can only reference variables
- set by the command-line, variables previously defined in the recipe,
- variables defined in 'qirc', and variables with default values.
- 16.2 Special variables
- ======================
- There are variables which can only be set using the command line options
- or via 'qirc', there are other special variables which can be defined or
- redefined in a recipe. See the following definitions:
- 'outdir' is the directory where the packages produced are written.
- This variable can be redefined per-recipe. Default sets to
- '/var/cache/qi/packages'.
- 'worktree' is the working tree where archives, patches, and recipes
- are expected. This variable can not be redefined in the recipe.
- Default sets to '/usr/src/qi'.
- 'tardir' is defined in the recipe to the directory where the tarball
- containing the source can be found. The full name of the tarball is
- composed as '${tardir}/$tarname'. Its value is available in the recipe
- as '${tardir}'; a value of . for 'tardir' sets it to the value of CWD
- (Current Working Directory), this is where the recipe lives.
- 'arch' is the architecture to compose the package name. Its value is
- available in the recipe as '${arch}'. Default value is the one that was
- set in the Qi configuration.
- 'jobs' is the number of parallel jobs to pass to the compiler. Its
- value is available in the recipe as '${jobs}'. The default value is 1.
- The two variables '${srcdir}' and '${destdir}' can be set in the
- recipe, as any other variable, but if they are not, qi uses default
- values for them when building a package.
- 'srcdir' contains the source code to be compiled, and defaults to
- '${program}-${version}'. 'destdir' is the place where the built package
- will be installed, and defaults to '${TMPDIR}/package-${program}'.
- If 'pkgname' is left undefined, the special variable 'program' is
- assigned by default. If 'pkgversion' is left undefined, the special
- variable 'version' is assigned by default.
- 'pkgname' and 'pkgversion' along with: 'version', 'arch', 'release',
- and (optionally) 'pkgcategory' are used to produce the package name in
- the form:
- '${pkgname}_${pkgversion}_${arch}-${release}[@${pkgcategory}].tlz'
- 'pkgcategory' is an optional special variable that can be defined on
- the recipe to categorize the package name. If it is defined, then the
- package output will be composed as
- '${pkgname}_${pkgversion}_${arch}-${release}[@${pkgcategory}.tlz'.
- Automatically, the value of 'pkgcategory' will be prefixed using the '@'
- (at) symbol which will be added to the last part of the package name.
- A special variable called 'replace' can be used to declare package
- names that will be replaced at installation time.
- The special variables 'keep_srcdir' and 'keep_destdir' are provided
- in order to preserve the directories '${srcdir}' or '${destdir}', if
- those exists as such. Note: The declaration of these variables are
- subject to manual deactivation; its purpose in recipes is to preserve
- the directories that relate to the package's build (source) and
- destination directory, that is so that another recipe can get a new
- package (or meta package) from there. For example, the declarations can
- be done as:
- keep_srcdir=keep_srcdir
- keep_destdir=keep_destdir
- Then from another recipe you would proceed to copy the necessary
- files that will compose the meta package, from the main function you
- must deactivate the variables at the end:
- unset -v keep_srcdir keep_destdir
- This will leave the 'keep_srcdir' and 'keep_destdir' variables blank
- to continue with the rest of the recipes.
- The special variable 'opt_skiprecipe' is available when you need to
- ignore a recipe cleanly, continuing with the next recipe. May you add a
- conditional test then set it as 'opt_skiprecipe=opt_skiprecipe'.
- The variable 'tarlz_compression_options' can be used to change the
- default compression options in tarlz(1), default sets to '-9 --solid'.
- For example if the variable is declared as:
- tarlz_compression_options="-0 --bsolid"
- It will change the granularity of tarlz(1) by using the '--bsolid'
- option (1), as well as increasing the compression speed by lowering the
- compression level with '-0'.
- This is only recommended for recipes where testing, or faster
- processing is desired to create the packaged file more quickly. It is
- not recommended for production or general distribution of binary
- packages.
- A typical recipe contains the following variables:
- * 'program': Software name.
- It matches the source name. It is also used to compose the name of
- the package if '${pkgname}' is not specified.
- * 'version': Software version.
- It matches the source name. It is also used to compose the version
- of the package if '${pkgversion}' is not specified.
- * 'arch': Software architecture.
- It is used to compose the architecture of the package in which it
- is build.
- * 'release': Release number.
- This is used to reflect the release number of the package. It is
- recommended to increase this number after any significant change in
- the recipe or post-install script.
- * 'pkgcategory': Package category.
- Optional but recommended variable to categorize the package name
- when it is created.
- Obtaining sources over the network must be declared in the recipe using
- the 'fetch' variable.
- The variables 'netget' and 'rsync' can be defined in 'qirc' to
- establish a network downloader in order to get the sources. If they are
- not defined, qi uses default values:
- 'netget' is the general network downloader tool, defaults sets to
- 'wget2 -c -w1 -t3 --no-check-certificate'.
- 'rsync' is the network tool for sources containing the prefix for the
- RSYNC protocol, default sets to 'rsync -v -a -L -z -i --progress'.
- The variable 'description' is used to print the package description
- when a package is installed.
- A description has two parts: a brief description, and a long
- description. By convention, the syntax of 'description' is:
- description="
- Brief description.
- Long description.
- "
- The first line of the value represented is a brief description of the
- software (called "blurb"). A blank line separates the _brief
- description_ from the _long description_, which should contain a more
- descriptive description of the software.
- An example looks like:
- description="
- The GNU core utilities.
- The GNU core utilities are the basic file, shell and text manipulation
- utilities of the GNU operating system. These are the core utilities
- which are expected to exist on every operating system.
- "
- Please consider a length limit of 78 characters as maximum, because
- the same one would be used on the meta file creation. See *note The
- meta file: Recipes. section.
- The 'homepage' variable is used to declare the main site or home
- page:
- homepage=https://www.gnu.org/software/gcc
- The variable 'license' is used for license information(2). Some code
- in the program can be covered by license A, license B, or license C. For
- "separate licensing" or "heterogeneous licensing", we suggest using *|*
- for a disjunction, *&* for a conjunction (if that ever happens in a
- significant way), and comma for heterogeneous licensing. Comma would
- have lower precedence, plus added special terms.
- license="LGPL, GPL | Artistic - added permission"
- 16.3 Writing recipes
- ====================
- Originally, Qi was designed for the series of Dragora GNU/Linux-Libre 3;
- this doesn't mean you can't use it in another distribution, just that if
- you do, you'll have to try it out for yourself. To help with this, here
- are some references to well-written recipes:
- * <https://git.savannah.nongnu.org/cgit/dragora.git/tree/recipes>
- * <https://notabug.org/dragora/dragora/src/master/recipes>
- * <https://notabug.org/dragora/dragora-extras/src/master/recipes>
- *
- <https://git.savannah.nongnu.org/cgit/dragora/dragora-extras.git/tree/recipes>
- 16.4 Building packages
- ======================
- A recipe is any valid regular file. Qi sets priorities for reading a
- recipe, the order in which qi looks for a recipe is:
- 1. Current working directory.
- 2. If the specified path name does not contain "recipe" as the last
- component. Qi will complete it by adding "recipe" to the path
- name.
- 3. If the recipe is not in the current working directory, it will be
- searched under '${worktree}/recipes'. The last component will be
- completed adding "recipe" to the specified path name.
- To build a single package, type:
- qi build x-apps/xterm
- Multiple jobs can be passed to the compiler to speed up the build
- process:
- qi build --jobs 3 x-apps/xterm
- Update or install the produced package (if not already installed) when
- the build command ends:
- qi build -j3 --upgrade x-apps/xterm
- Only process a recipe but do not create the binary package:
- qi build --no-package dict/aspell
- The options -install or -upgrade have no effect when -no-package is
- given.
- This is useful to inspect the build process of the above recipe:
- qi build -keep -no-package dict/aspell 2>&1 | tee aspell-log.txt
- The -keep option could preserve the source directory and the
- destination directory for later inspection. A log file of the build
- process will be created redirecting both, standard error and standard
- output to tee(1).
- 16.5 Variables from the environment
- ===================================
- Qi has environment variables which can be used at build time:
- The variable 'TMPDIR' sets the temporary directory for sources, which
- is used for package extractions (see *note Examining packages::) and is
- prepended to the value of '${srcdir}' and '${destdir}' in build command.
- By convention its default value is equal to '/usr/src/qi/build'.
- The variables 'QICFLAGS', 'QICXXFLAGS', 'QILDFLAGS', and 'QICPPFLAGS'
- have no effect by default. The environment variables such as 'CFLAGS',
- 'CXXFLAGS', 'LDFLAGS', and 'CPPFLAGS' are unset at compile time:
- Recommended practice is to set variables in the command line of
- 'configure' or _make(1)_ instead of exporting to the environment. As
- follows:
- <https://www.gnu.org/software/make/manual/html_node/Environment.html>
- It is not wise for makefiles to depend for their functioning on
- environment variables set up outside their control, since this
- would cause different users to get different results from the same
- makefile. This is against the whole purpose of most makefiles.
- Setting environment variables for configure is deprecated because
- running configure in varying environments can be dangerous.
- <https://gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Defining-Variables.html>
- Variables not defined in a site shell script can be set in the
- environment passed to configure. However, some packages may run
- configure again during the build, and the customized values of
- these variables may be lost. In order to avoid this problem, you
- should set them in the configure command line, using 'VAR=value'.
- For example:
- './configure CC=/usr/local2/bin/gcc'
- <https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Setting-Output-Variables.html>
- If for instance the user runs 'CC=bizarre-cc ./configure', then the
- cache, config.h, and many other output files depend upon bizarre-cc
- being the C compiler. If for some reason the user runs ./configure
- again, or if it is run via './config.status --recheck', (See
- Automatic Remaking, and see config.status Invocation), then the
- configuration can be inconsistent, composed of results depending
- upon two different compilers. [...] Indeed, while configure can
- notice the definition of CC in './configure CC=bizarre-cc', it is
- impossible to notice it in 'CC=bizarre-cc ./configure', which,
- unfortunately, is what most users do. [...] configure: error:
- changes in the environment can compromise the build.
- If the 'SOURCE_DATE_EPOCH' environment variable is set to a UNIX
- timestamp (defined as the number of seconds, excluding leap seconds,
- since 01 Jan 1970 00:00:00 UTC.); then the given timestamp will be used
- to overwrite any newer timestamps on the package contents (when it is
- created). More information about this can be found at
- <https://reproducible-builds.org/specs/source-date-epoch/>.
- 16.6 The meta file
- ==================
- The "meta file" is a regular file created during the build process, it
- contains information about the package such as package name, package
- version, architecture, release, fetch address, description, and other
- minor data extracted from processed recipes. The name of the file is
- generated as '${full_pkgname}.tlz.txt', and its purpose is to reflect
- essential information to the user without having to look inside the
- package content. The file format is also intended to be used by other
- scripts or by common Unix tools.
- The content of a meta file looks like:
- #
- # Pattern scanning and processing language.
- #
- # The awk utility interprets a special-purpose programming language
- # that makes it possible to handle simple data-reformatting jobs
- # with just a few lines of code. It is a free version of 'awk'.
- #
- # GNU awk implements the AWK utility which is part of
- # IEEE Std 1003.1 Shell and Utilities (XCU).
- #
- QICFLAGS="-O2"
- QICXXFLAGS="-O2"
- QILDFLAGS=""
- QICPPFLAGS=""
- pkgname=gawk
- pkgversion=5.0.1
- arch=amd64
- release=1
- pkgcategory="tools"
- full_pkgname=gawk_5.0.1_amd64-1@tools
- blurb="Pattern scanning and processing language."
- homepage="https://www.gnu.org/software/gawk"
- license="GPLv3+"
- fetch="https://ftp.gnu.org/gnu/gawk/gawk-5.0.1.tar.lz"
- replace=""
- A package descriptions is extracted from the variable 'description'
- where each line is interpreted literally and pre-formatted to fit in
- (exactly) *80 columns*, plus the character '#' and a blank space is
- prefixed to every line (shell comments).
- In addition to the Special variables, there are implicit variables such
- as 'blurb':
- The 'blurb' variable is related to the special variable
- 'description'. Its value is made from the first (substantial) line of
- 'description', mentioned as the "brief description".
- The build flags such as 'QICFLAGS', 'QICXXFLAGS', 'QILDFLAGS', and
- 'QICPPFLAGS' are only added to the meta file if the declared variable
- 'arch' is not equal to the "noarch" value.
- ---------- Footnotes ----------
- (1) About the '--bsolid' granularity option of tarlz(1),
- <https://www.nongnu.org/lzip/manual/tarlz_manual.html#g_t_002d_002dbsolid>.
- (2) The proposal for 'license' was made by Richard M. Stallman at
- <https://lists.gnu.org/archive/html/gnu-linux-libre/2016-05/msg00003.html>.
- 17 Order files
- **************
- The order command has the purpose of resolving the build order through
- .order files. An order file contains a list of recipe names, by default
- does not perform any action other than to print a resolved list in
- descending order. For example, if *a* depends on *b* and *c*, and *c*
- depends on *b* as well, the file might look like:
- a: c b
- b:
- c: b
- Each letter represents a recipe name, complete dependencies for the
- first recipe name are listed in descending order, which is printed from
- right to left, and removed from left to right:
- OUTPUT
- b
- c
- a
- Blank lines, colons and parentheses are simply ignored. Comment
- lines beginning with '#' are allowed.
- An order file could be used to build a series of packages, for example,
- if the content is:
- # Image handling libraries
- libs/libjpeg-turbo: devel/nasm
- x-libs/jasper: libs/libjpeg-turbo
- libs/tiff: libs/libjpeg-turbo
- To proceed with each recipe, we can type:
- qi order imglibs.order | qi build --install -
- The output of 'qi order imglibs.order' tells to qi in which order it
- should build the recipes:
- devel/nasm
- libs/libjpeg-turbo
- x-libs/jasper
- libs/tiff
- 18 Creating packages
- ********************
- The creation command is an internal function of qi to make new Qi
- compatible packages. A package is produced using the contents of the
- Current Working Directory and the package file is written out.
- Usage: qi create [OUTPUT/PACKAGENAME.TLZ]...
- The argument for the file name to be written must contain a fully
- qualified named directory as the output directory where the package
- produced will be written. The file name should be composed using the
- full name: name-version-architecture-release[@pkgcategory].tlz
- EXAMPLE
- cd /usr/pkg
- cd claws-mail_3.17.1_amd64-1@x-apps
- qi create /var/cache/qi/packages/claws-mail_3.17.1_amd64-1@x-apps
- In this case, the package "claws-mail_3.17.1_amd64-1@x-apps" will be
- written into '/var/cache/qi/packages/'.
- All packages produced are complemented by a checksum file (.sha256).
- 19 Examining packages
- *********************
- The extraction command serves to examine binary packages for debugging
- purposes. It decompresses a package into a single directory, verifying
- its integrity and preserving all of its properties (owner and
- permissions).
- Usage: qi extract [PACKAGENAME.TLZ]...
- EXAMPLE
- qi extract mksh_R56c_amd64-1@shells.tlz
- This action will put the content of "mksh_R56c_amd64-1@shells.tlz"
- into a single directory, this is a private directory for the user who
- requested the action, creation operation will be equal to *u=rwx,g=,o=
- (0700)*. The package content will reside on this location, default mask
- to deploy the content will be equal to *u=rwx,g=rwx,o=rwx (0000)*.
- Note: the creation of the custom directory is influenced by the value of
- the 'TMPDIR' variable.
- 20 Qi exit status
- *****************
- All the exit codes are described in this chapter.
- '0'
- Successful completion (no errors).
- '1'
- Minor common errors:
- * Help usage on invalid options or required arguments.
- * Program needed by qi (prerequisite) is not available.
- '2'
- Command execution error:
- This code is used to return the evaluation of an external command
- or shell arguments in case of failure.
- '3'
- Integrity check error for compressed files.
- Compressed files means:
- * A tarball file from tar(1), typically handled by the GNU tar
- implementation. Supported extensions: .tar, .tar.gz, .tgz,
- .tar.Z, .tar.bz2, .tbz2, .tbz, .tar.xz, .txz, .tar.zst, .tzst
- * A tarball file from tarlz(1). Supported extensions: .tar.lz,
- .tlz
- * Zip files from unzip(1). Supported extensions: .zip, .ZIP
- * Gzip files from gzip(1). Supported extensions: .gz, .Z
- * Bzip2 files from bzip2(1). Supported extension: .bz2
- * Lzip files from lzip(1). Supported extension: .lz
- * Xz files from xz(1). Supported extension: .xz
- * Zstd files from zstd(1). Supported extension: .zst
- '4'
- File empty, not regular, or expected.
- It's commonly expected:
- * An argument for giving commands.
- * A regular file or readable directory.
- * An expected extension: .tlz, .sha256, .order.
- * A protocol supported by the network downloader tool.
- '5'
- Empty or not defined variable:
- This code is used to report empty or undefined variables (usually
- variables coming from a recipe or assigned arrays that are tested).
- '6'
- Package already installed:
- The package directory for an incoming .tlz package already exists.
- '10'
- Network manager error:
- This code is used if the network downloader tool fails for some
- reason.
- 21 Getting support
- ******************
- Dragora's home page can be found at <https://www.dragora.org>. Bug
- reports or suggestions can be sent to <dragora-users@nongnu.org>.
- 22 Contributing to Dragora
- **************************
- TODO (introductory text here).
- 22.1 How to place a mirror
- ==========================
- If there's no Dragora mirror near you, you're welcome to contribute one.
- First, for users or downloaders, the address
- _rsync://rsync.dragora.org/_ contains ISO images and source code (in
- various formats) taken from the original sites and distributed by
- Dragora.
- Mirroring the Dragora server requires approximately 13GB of disk
- space (as of January 2022). You can hit rsync directly from
- _rsync.dragora.org_ as:
- 'rsync -rltpHS --delete-excluded rsync://rsync.dragora.org/dragora
- /your/dir/'
- Also, consider mirroring from another site in order to reduce load on
- the Dragora server. The listed sites at
- <https://www.dragora.org/en/get/mirrors/index.html> provide access to
- all the material on rsync.dragora.org. They update from us nightly (at
- least), and you may access them via rsync with the same options as
- above.
- Note:
- We keep a file called "timestamp" under the main tree after each
- synchronization. This file can be used to verify, instead of
- synchronizing all the content at once, you can check if this file has
- been updated and then continue with the full synchronization.
- Appendix A GNU Free Documentation License
- *****************************************
- Version 1.3, 3 November 2008
- Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
- <https://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
- 0. PREAMBLE
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book. We
- recommend this License principally for works whose purpose is
- instruction or reference.
- 1. APPLICABILITY AND DEFINITIONS
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it can
- be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You accept
- the license if you copy, modify or distribute the work in a way
- requiring permission under copyright law.
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in the
- notice that says that the Document is released under this License.
- If a section does not fit the above definition of Secondary then it
- is not allowed to be designated as Invariant. The Document may
- contain zero Invariant Sections. If the Document does not identify
- any Invariant Sections then there are none.
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images composed
- of pixels) generic paint programs or (for drawings) some widely
- available drawing editor, and that is suitable for input to text
- formatters or for automatic translation to a variety of formats
- suitable for input to text formatters. A copy made in an otherwise
- Transparent file format whose markup, or absence of markup, has
- been arranged to thwart or discourage subsequent modification by
- readers is not Transparent. An image format is not Transparent if
- used for any substantial amount of text. A copy that is not
- "Transparent" is called "Opaque".
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and standard-conforming
- simple HTML, PostScript or PDF designed for human modification.
- Examples of transparent image formats include PNG, XCF and JPG.
- Opaque formats include proprietary formats that can be read and
- edited only by proprietary word processors, SGML or XML for which
- the DTD and/or processing tools are not generally available, and
- the machine-generated HTML, PostScript or PDF produced by some word
- processors for output purposes only.
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
- The "publisher" means any person or entity that distributes copies
- of the Document to the public.
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
- 2. VERBATIM COPYING
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow the
- conditions in section 3.
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
- 3. COPYING IN QUANTITY
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the title
- equally prominent and visible. You may add other material on the
- covers in addition. Copying with changes limited to the covers, as
- long as they preserve the title of the Document and satisfy these
- conditions, can be treated as verbatim copying in other respects.
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a machine-readable
- Transparent copy along with each Opaque copy, or state in or with
- each Opaque copy a computer-network location from which the general
- network-using public has access to download using public-standard
- network protocols a complete Transparent copy of the Document, free
- of added material. If you use the latter option, you must take
- reasonably prudent steps, when you begin distribution of Opaque
- copies in quantity, to ensure that this Transparent copy will
- remain thus accessible at the stated location until at least one
- year after the last time you distribute an Opaque copy (directly or
- through your agents or retailers) of that edition to the public.
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of copies,
- to give them a chance to provide you with an updated version of the
- Document.
- 4. MODIFICATIONS
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with the
- Modified Version filling the role of the Document, thus licensing
- distribution and modification of the Modified Version to whoever
- possesses a copy of it. In addition, you must do these things in
- the Modified Version:
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of previous
- versions (which should, if there were any, be listed in the
- History section of the Document). You may use the same title
- as a previous version if the original publisher of that
- version gives permission.
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
- D. Preserve all the copyright notices of the Document.
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
- H. Include an unaltered copy of this License.
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on the
- Title Page. If there is no section Entitled "History" in the
- Document, create one stating the title, year, authors, and
- publisher of the Document as given on its Title Page, then add
- an item describing the Modified Version as stated in the
- previous sentence.
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in the
- "History" section. You may omit a network location for a work
- that was published at least four years before the Document
- itself, or if the original publisher of the version it refers
- to gives permission.
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section
- all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
- L. Preserve all the Invariant Sections of the Document, unaltered
- in their text and in their titles. Section numbers or the
- equivalent are not considered part of the section titles.
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
- O. Preserve any Warranty Disclaimers.
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option designate
- some or all of these sections as invariant. To do this, add their
- titles to the list of Invariant Sections in the Modified Version's
- license notice. These titles must be distinct from any other
- section titles.
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end of
- the list of Cover Texts in the Modified Version. Only one passage
- of Front-Cover Text and one of Back-Cover Text may be added by (or
- through arrangements made by) any one entity. If the Document
- already includes a cover text for the same cover, previously added
- by you or by arrangement made by the same entity you are acting on
- behalf of, you may not add another; but you may replace the old
- one, on explicit permission from the previous publisher that added
- the old one.
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
- 5. COMBINING DOCUMENTS
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination all
- of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
- 6. COLLECTIONS OF DOCUMENTS
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the documents
- in all other respects.
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow this
- License in all other respects regarding verbatim copying of that
- document.
- 7. AGGREGATION WITH INDEPENDENT WORKS
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of a
- storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
- 8. TRANSLATION
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
- 9. TERMINATION
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense, or distribute it is void,
- and will automatically terminate your rights under this License.
- However, if you cease all violation of this License, then your
- license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the
- copyright holder fails to notify you of the violation by some
- reasonable means prior to 60 days after the cessation.
- Moreover, your license from a particular copyright holder is
- reinstated permanently if the copyright holder notifies you of the
- violation by some reasonable means, this is the first time you have
- received notice of violation of this License (for any work) from
- that copyright holder, and you cure the violation prior to 30 days
- after your receipt of the notice.
- Termination of your rights under this section does not terminate
- the licenses of parties who have received copies or rights from you
- under this License. If your rights have been terminated and not
- permanently reinstated, receipt of a copy of some or all of the
- same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- <https://www.gnu.org/licenses/>.
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If the
- Document does not specify a version number of this License, you may
- choose any version ever published (not as a draft) by the Free
- Software Foundation. If the Document specifies that a proxy can
- decide which future versions of this License can be used, that
- proxy's public statement of acceptance of a version permanently
- authorizes you to choose that version for the Document.
- 11. RELICENSING
- "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
- World Wide Web server that publishes copyrightable works and also
- provides prominent facilities for anybody to edit those works. A
- public wiki that anybody can edit is an example of such a server.
- A "Massive Multiauthor Collaboration" (or "MMC") contained in the
- site means any set of copyrightable works thus published on the MMC
- site.
- "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
- license published by Creative Commons Corporation, a not-for-profit
- corporation with a principal place of business in San Francisco,
- California, as well as future copyleft versions of that license
- published by that same organization.
- "Incorporate" means to publish or republish a Document, in whole or
- in part, as part of another Document.
- An MMC is "eligible for relicensing" if it is licensed under this
- License, and if all works that were first published under this
- License somewhere other than this MMC, and subsequently
- incorporated in whole or in part into the MMC, (1) had no cover
- texts or invariant sections, and (2) were thus incorporated prior
- to November 1, 2008.
- The operator of an MMC Site may republish an MMC contained in the
- site under CC-BY-SA on the same site at any time before August 1,
- 2009, provided the MMC is eligible for relicensing.
- ADDENDUM: How to use this License for your documents
- ====================================================
- To use this License in a document you have written, include a copy of
- the License in the document and put the following copyright and license
- notices just after the title page:
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
- Texts, replace the "with...Texts." line with this:
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
- If you have Invariant Sections without Cover Texts, or some other
- combination of the three, merge those two alternatives to suit the
- situation.
- If your document contains nontrivial examples of program code, we
- recommend releasing these examples in parallel under your choice of free
- software license, such as the GNU General Public License, to permit
- their use in free software.
- Index
- *****
- * Menu:
- * a quick glance at dragora: A quick glance at Dragora.
- (line 215)
- * about this handbook: About this handbook.
- (line 61)
- * boot options from live medium: Boot options from live medium.
- (line 220)
- * configuration file: The qirc file. (line 470)
- * contributing to dragora: Contributing to Dragora.
- (line 1312)
- * environment variables: Recipes. (line 1014)
- * exit codes: Qi exit status. (line 1231)
- * free software: What is Dragora?. (line 107)
- * getting support: Getting support. (line 1306)
- * gnu: What is Dragora?. (line 112)
- * handling build order: Order files. (line 1136)
- * history: History. (line 155)
- * how to place a mirror: Contributing to Dragora.
- (line 1317)
- * installing the system manually (as an alternative): Installing the system manually (as an alternative).
- (line 230)
- * introduction to qi: Introduction to Qi. (line 250)
- * invocation: Invoking qi. (line 272)
- * linux or linux-libre: What is Dragora?. (line 117)
- * maintainers: Maintainers. (line 210)
- * managing packages: Packages. (line 495)
- * package blacklist: Packages. (line 678)
- * package build: Recipes. (line 968)
- * package conflicts: Packages. (line 520)
- * package creation: Creating packages. (line 1183)
- * package de-installation: Packages. (line 601)
- * package examination: Examining packages. (line 1208)
- * package installation: Packages. (line 545)
- * package management in a nutshell: Package management in a nutshell.
- (line 240)
- * package management in dragora: Introduction to package management in Dragora.
- (line 235)
- * package upgrade: Packages. (line 640)
- * recipes: Recipes. (line 718)
- * releases: History. (line 188)
- * revision history (changelog): Revision history (ChangeLog).
- (line 71)
- * special variables: Recipes. (line 773)
- * the meta file: Recipes. (line 1071)
- * typographic conventions: About this handbook.
- (line 66)
- * using dragora-installer: Using dragora-installer.
- (line 225)
- * using third-party free software: Using third-party free software.
- (line 245)
- * variables: Recipes. (line 744)
- * what is dragora?: What is Dragora?. (line 76)
- * why should I use dragora?: Why should I use Dragora?.
- (line 122)
- * writing recipes: Recipes. (line 954)
|