1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <!-- Copyright (C) 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. -->
- <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <title>Dragora 3.0 Handbook</title>
- <meta name="description" content="Dragora 3.0 Handbook">
- <meta name="keywords" content="Dragora 3.0 Handbook">
- <meta name="resource-type" content="document">
- <meta name="distribution" content="global">
- <meta name="Generator" content="makeinfo">
- <link href="#Top" rel="start" title="Top">
- <link href="#Index" rel="index" title="Index">
- <style type="text/css">
- <!--
- /*
- * handbook.css
- * CSS stylesheet based on the Dragora GNU/Linux-Libre website
- * (https://www.dragora.org)
- *
- *
- * Copyright (C)
- * 2019-2021, Matias Fonzo and Michael Siegel
- * 2019 Chris F. A. Johnson
- * 2023 Matias Fonzo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- a.summary-letter {text-decoration: none}
- blockquote.indentedblock {margin-right: 0em}
- div.display {margin-left: 3.2em}
- div.example {margin-left: 3.2em}
- div.lisp {margin-left: 3.2em}
- kbd {font-style: oblique}
- pre.display {font-family: inherit}
- pre.format {font-family: inherit}
- pre.menu-comment {font-family: serif}
- pre.menu-preformatted {font-family: serif}
- span.nolinebreak {white-space: nowrap}
- span.roman {font-family: initial; font-weight: normal}
- span.sansserif {font-family: sans-serif; font-weight: normal}
- ul.no-bullet {list-style: none}
- body {
- font-family:Helvetica,"Helvetica Neue",DejaVuSans,FreeSans,"Nimbus Sans L",sans-serif;
- font-size:18px;
- background-color:#ffffff;
- color:#000000;
- }
- /** Headings **/
- h1 {
- margin:0;
- font-size:2.33rem;
- color:#4169e1;
- }
- h2 {
- margin-top:1.5rem;
- margin-bottom:1.33rem;
- font-size:1.67rem;
- color:#4682b4;
- }
- h3 {
- margin-top:1.33rem;
- margin-bottom:1.17rem;
- font-size:1.5rem;
- color:#4682b4;
- }
- h4 {
- margin-top:1.17rem;
- margin-bottom:1rem;
- font-size:1.17rem;
- color:#4682b4;
- }
- /** Paragraphs **/
- p {
- margin:1rem 0;
- text-align:justify;
- }
- /** Quote blocks **/
- blockquote {
- margin:1rem 2rem;
- }
- /** Lists **/
- dl, ol, ul {
- margin:1rem 0;
- padding-left:2rem;
- }
-
- dl dd {
- margin-left:1rem;
- }
- /* Add space between each list item. */
- li {
- margin:0.3em 0;
- }
- /* Switch vertical margins off for nested lists. */
- dl dl, ol ol, ul ul {
- margin:0;
- }
- /** Tables **/
- table {
- margin:1rem auto;
- margin-left:3rem;
- border:1px solid #999999;
- border-collapse:collapse;
- }
- table.alt_rows tbody tr:nth-child(odd) {
- background-color:#ffffcc;
- }
- th, td {
- border:1px solid #999999;
- padding:.33rem;
- text-align:justify;
- }
- th {
- background-color:#cccccc;
- }
- /** Misc **/
- hr {
- margin:.5rem auto;
- border: 1px inset;
- }
- /*** Inline elements ***/
- code {
- padding:0 .25rem;
- font-family:monospace;
- font-weight:lighter;
- background-color:#fffafa;
- }
- kbd {
- padding:0 .25rem;
- font-family:monospace;
- font-weight:normal;
- background-color:#fffafa;
- }
- /** Links **/
- a:link {
- color:#00008b;
- /* color:#002288; */
- }
- a:visited {
- color:#666666;
- }
- a:hover {
- color:#ff69b4;
- }
- a:active {
- color:#bc8f8f;
- }
- -->
- </style>
- </head>
- <body lang="en">
- <h1 class="settitle" align="center">Dragora 3.0 Handbook</h1>
- <span id="Top"></span><div class="header">
- <p>
- Next: <a href="#About-this-handbook" accesskey="n" rel="next">About this handbook</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="SEC_Top"></span>
- <p>This Handbook is for Dragora
- (version 3.0, initial revision, 26 Apr 2023).
- </p>
- <table class="menu" border="0" cellspacing="0">
- <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">Preface
- </pre></th></tr><tr><td align="left" valign="top">• <a href="#About-this-handbook" accesskey="1">About this handbook</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Revision-history-_0028ChangeLog_0029" accesskey="2">Revision history (ChangeLog)</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
- About Dragora
- </pre></th></tr><tr><td align="left" valign="top">• <a href="#What-is-Dragora_003f" accesskey="3">What is Dragora?</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Why-should-I-use-Dragora_003f" accesskey="4">Why should I use Dragora?</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#History" accesskey="5">History</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Maintainers" accesskey="6">Maintainers</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#A-quick-glance-at-Dragora" accesskey="7">A quick glance at Dragora</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
- Setting up a Dragora system
- </pre></th></tr><tr><td align="left" valign="top">• <a href="#Boot-options-from-live-medium" accesskey="8">Boot options from live medium</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Using-dragora_002dinstaller" accesskey="9">Using dragora-installer</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Installing-the-system-manually-_0028as-an-alternative_0029">Installing the system manually (as an alternative)</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
- Basic system configuration
- Package Management
- </pre></th></tr><tr><td align="left" valign="top">• <a href="#Introduction-to-package-management-in-Dragora">Introduction to package management in Dragora</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Package-management-in-a-nutshell">Package management in a nutshell</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Using-third_002dparty-free-software">Using third-party free software</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Introduction-to-Qi">Introduction to Qi</a></td><td> </td><td align="left" valign="top">Description and features of qi
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Invoking-qi">Invoking qi</a></td><td> </td><td align="left" valign="top">Command-line options
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#The-qirc-file">The qirc file</a></td><td> </td><td align="left" valign="top">Configuration file
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Packages">Packages</a></td><td> </td><td align="left" valign="top">Managing packages
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Recipes">Recipes</a></td><td> </td><td align="left" valign="top">Building packages
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Order-files">Order files</a></td><td> </td><td align="left" valign="top">Handling build order
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Creating-packages">Creating packages</a></td><td> </td><td align="left" valign="top">Making Qi packages
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Examining-packages">Examining packages</a></td><td> </td><td align="left" valign="top">Debugging purposes
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Qi-exit-status">Qi exit status</a></td><td> </td><td align="left" valign="top">Exit codes
- </td></tr>
- <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
- Additional Chapters
- </pre></th></tr><tr><td align="left" valign="top">• <a href="#Getting-support">Getting support</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Contributing-to-Dragora">Contributing to Dragora</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
- </pre></th></tr><tr><td align="left" valign="top">• <a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- <tr><td align="left" valign="top">• <a href="#Index" rel="index">Index</a></td><td> </td><td align="left" valign="top">
- </td></tr>
- </table>
- <br>
- <p>Copyright © 2020-2023 The Dragora Team.
- </p>
- <p>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.
- </p>
- <hr>
- <span id="About-this-handbook"></span><div class="header">
- <p>
- Next: <a href="#Revision-history-_0028ChangeLog_0029" accesskey="n" rel="next">Revision history (ChangeLog)</a>, Previous: <a href="#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="About-this-handbook-1"></span><h2 class="chapter">1 About this handbook</h2>
- <span id="index-about-this-handbook"></span>
- <p>TODO (Add intro + versioning scheme paragraph).
- </p>
- <span id="Typographic-conventions"></span><h3 class="section">1.1 Typographic conventions</h3>
- <span id="index-typographic-conventions"></span>
- <p>TODO (appendix).
- </p>
- <hr>
- <span id="Revision-history-_0028ChangeLog_0029"></span><div class="header">
- <p>
- Next: <a href="#What-is-Dragora_003f" accesskey="n" rel="next">What is Dragora?</a>, Previous: <a href="#About-this-handbook" accesskey="p" rel="prev">About this handbook</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Revision-history-_0028ChangeLog_0029-1"></span><h2 class="unnumbered">Revision history (ChangeLog)</h2>
- <span id="index-revision-history-_0028changelog_0029"></span>
- <p>TODO (appendix).
- </p>
- <hr>
- <span id="What-is-Dragora_003f"></span><div class="header">
- <p>
- Next: <a href="#Why-should-I-use-Dragora_003f" accesskey="n" rel="next">Why should I use Dragora?</a>, Previous: <a href="#Revision-history-_0028ChangeLog_0029" accesskey="p" rel="prev">Revision history (ChangeLog)</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="What-is-Dragora_003f-1"></span><h2 class="chapter">2 What is Dragora?</h2>
- <span id="index-what-is-dragora_003f"></span>
- <p><strong>Dragora</strong> 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. <strong>Dragora</strong> 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.
- </p>
- <p>To put it in a nutshell, <strong>Dragora</strong> is...
- </p><ul>
- <li> Minimalist.
- </li><li> Free as in freedom.
- </li><li> Getting better by the day.
- </li><li> A whole lot of fun (not suitable for old vinegars).
- </li></ul>
- <p>Some of the features of Dragora are:
- </p>
- <ul>
- <li> SysV init as the classic, documented initialization program (PID 1).
- </li><li> Perp to reliably start, monitor, log and control "critical" system daemons.
- </li><li> Lightweight alternatives to popular free software; i.e, musl libc, libressl,
- mksh, scron, pkgconf.
- </li><li> The Trinity Desktop Environment (TDE).
- </li><li> Window managers such as TWM, DWM.
- </li><li> Graft for managing multiple packages under a single directory hierarchy
- using symbolic links mechanisms.
- </li><li> Qi as a simple local package manager that complements Graft to create,
- install, remove and upgrade software packages.
- </li></ul>
- <span id="Free-software"></span><h3 class="section">2.1 Free software</h3>
- <span id="index-free-software"></span>
- <p>TODO.
- </p>
- <span id="GNU"></span><h3 class="section">2.2 GNU</h3>
- <span id="index-gnu"></span>
- <p>TODO.
- </p>
- <span id="Linux-and-Linux_002dlibre"></span><h3 class="section">2.3 Linux and Linux-libre</h3>
- <span id="index-linux-or-linux_002dlibre"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Why-should-I-use-Dragora_003f"></span><div class="header">
- <p>
- Next: <a href="#History" accesskey="n" rel="next">History</a>, Previous: <a href="#What-is-Dragora_003f" accesskey="p" rel="prev">What is Dragora?</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Why-should-I-use-Dragora_003f-1"></span><h2 class="chapter">3 Why should I use Dragora?</h2>
- <span id="index-why-should-I-use-dragora_003f"></span>
- <p>We cannot and do not intend to decide for you, we can only cite what we
- believe to be Dragora’s main strengths:
- </p>
- <ul>
- <li> <strong>Independent</strong>:
- 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.
- </li><li> <strong>Simple:</strong> 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.
- </li><li> <strong>Ethical:</strong> 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.
- </li><li> <strong>Language:</strong> Native support.
- </li><li> <strong>Community:</strong> Dragora is not a closed project. On the contrary, anyone
- person with good intentions is welcome - and encouraged! - to join and help.
- </li></ul>
- <hr>
- <span id="History"></span><div class="header">
- <p>
- Next: <a href="#Maintainers" accesskey="n" rel="next">Maintainers</a>, Previous: <a href="#Why-should-I-use-Dragora_003f" accesskey="p" rel="prev">Why should I use Dragora?</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="History-1"></span><h2 class="chapter">4 History</h2>
- <span id="index-history"></span>
- <p>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.
- </p>
- <p>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.
- </p>
- <span id="Releases"></span><h3 class="section">4.1 Releases</h3>
- <span id="index-releases"></span>
- <p>Below are the dates and code names used for all the Dragora releases:
- </p>
- <ul>
- <li> <em><strong>Dragora 1.0 Beta 1:</strong> June 13th, 2008 - "hell".</em>
- </li><li> <em><strong>Dragora 1.0 Beta 2:</strong> September 18th, 2008.</em>
- </li><li> <em><strong>Dragora 1.0 Release Candidate 1:</strong> February 12th, 2009.</em>
- </li><li> <em><strong>Dragora 1.0 Stable:</strong> March 13th, 2009 - "starlight".</em>
- </li><li> <em><strong>Dragora 1.1 Release Candidate 1:</strong> August 25th, 2009.</em>
- </li><li> <em><strong>Dragora 1.1 Stable:</strong> October 8th, 2009 - "stargazer".</em>
- </li><li> <em><strong>Dragora 2.0 Release Candidate 1:</strong> January 24th, 2010.</em>
- </li><li> <em><strong>Dragora 2.0 Release Candidate 2:</strong> March 28th, 2010.</em>
- </li><li> <em><strong>Dragora 2.0 Stable:</strong> April 13th, 2010 - "ardi".</em>
- </li><li> <em><strong>Dragora 2.1 Release Candidate 1:</strong> December 4th, 2010.</em>
- </li><li> <em><strong>Dragora 2.1 Stable:</strong> December 31st, 2010 - "dio".</em>
- </li><li> <em><strong>Dragora 2.2 Release Candidate 1:</strong> March 2nd, 2012.</em>
- </li><li> <em><strong>Dragora 2.2 Stable:</strong> April 21st, 2012 - "rafaela".</em>
- </li><li> <em><strong>Dragora 3.0 Alpha 1:</strong> December 31st, 2017.</em>
- </li><li> <em><strong>Dragora 3.0 Alpha 2:</strong> September 28th, 2018.</em>
- </li><li> <em><strong>Dragora 3.0 Beta 1:</strong> October 16th, 2019.</em>
- </li></ul>
- <hr>
- <span id="Maintainers"></span><div class="header">
- <p>
- Next: <a href="#A-quick-glance-at-Dragora" accesskey="n" rel="next">A quick glance at Dragora</a>, Previous: <a href="#History" accesskey="p" rel="prev">History</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Maintainers-1"></span><h2 class="chapter">5 Maintainers</h2>
- <span id="index-maintainers"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="A-quick-glance-at-Dragora"></span><div class="header">
- <p>
- Next: <a href="#Boot-options-from-live-medium" accesskey="n" rel="next">Boot options from live medium</a>, Previous: <a href="#Maintainers" accesskey="p" rel="prev">Maintainers</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="A-quick-glance-at-Dragora-1"></span><h2 class="chapter">6 A quick glance at Dragora</h2>
- <span id="index-a-quick-glance-at-dragora"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Boot-options-from-live-medium"></span><div class="header">
- <p>
- Next: <a href="#Using-dragora_002dinstaller" accesskey="n" rel="next">Using dragora-installer</a>, Previous: <a href="#A-quick-glance-at-Dragora" accesskey="p" rel="prev">A quick glance at Dragora</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Boot-options-from-live-medium-1"></span><h2 class="chapter">7 Boot options from live medium</h2>
- <span id="index-boot-options-from-live-medium"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Using-dragora_002dinstaller"></span><div class="header">
- <p>
- Next: <a href="#Installing-the-system-manually-_0028as-an-alternative_0029" accesskey="n" rel="next">Installing the system manually (as an alternative)</a>, Previous: <a href="#Boot-options-from-live-medium" accesskey="p" rel="prev">Boot options from live medium</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Using-dragora_002dinstaller-1"></span><h2 class="chapter">8 Using dragora-installer</h2>
- <span id="index-using-dragora_002dinstaller"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Installing-the-system-manually-_0028as-an-alternative_0029"></span><div class="header">
- <p>
- Next: <a href="#Introduction-to-package-management-in-Dragora" accesskey="n" rel="next">Introduction to package management in Dragora</a>, Previous: <a href="#Using-dragora_002dinstaller" accesskey="p" rel="prev">Using dragora-installer</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Installing-the-system-manually-_0028as-an-alternative_0029-1"></span><h2 class="chapter">9 Installing the system manually (as an alternative)</h2>
- <span id="index-installing-the-system-manually-_0028as-an-alternative_0029"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Introduction-to-package-management-in-Dragora"></span><div class="header">
- <p>
- Next: <a href="#Package-management-in-a-nutshell" accesskey="n" rel="next">Package management in a nutshell</a>, Previous: <a href="#Installing-the-system-manually-_0028as-an-alternative_0029" accesskey="p" rel="prev">Installing the system manually (as an alternative)</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Introduction-to-package-management-in-Dragora-1"></span><h2 class="chapter">10 Introduction to package management in Dragora</h2>
- <span id="index-package-management-in-dragora"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Package-management-in-a-nutshell"></span><div class="header">
- <p>
- Next: <a href="#Using-third_002dparty-free-software" accesskey="n" rel="next">Using third-party free software</a>, Previous: <a href="#Introduction-to-package-management-in-Dragora" accesskey="p" rel="prev">Introduction to package management in Dragora</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Package-management-in-a-nutshell-1"></span><h2 class="chapter">11 Package management in a nutshell</h2>
- <span id="index-package-management-in-a-nutshell"></span>
- <p>TODO.
- </p>
- <hr>
- <span id="Using-third_002dparty-free-software"></span><div class="header">
- <p>
- Next: <a href="#Introduction-to-Qi" accesskey="n" rel="next">Introduction to Qi</a>, Previous: <a href="#Package-management-in-a-nutshell" accesskey="p" rel="prev">Package management in a nutshell</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Using-third_002dparty-free-software-1"></span><h2 class="unnumbered">Using third-party free software</h2>
- <span id="index-using-third_002dparty-free-software"></span>
- <p>TODO (appendix).
- </p>
- <hr>
- <span id="Introduction-to-Qi"></span><div class="header">
- <p>
- Next: <a href="#Invoking-qi" accesskey="n" rel="next">Invoking qi</a>, Previous: <a href="#Using-third_002dparty-free-software" accesskey="p" rel="prev">Using third-party free software</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Introduction-to-Qi-1"></span><h2 class="chapter">12 Introduction to Qi</h2>
- <span id="index-introduction-to-qi"></span>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <hr>
- <span id="Invoking-qi"></span><div class="header">
- <p>
- Next: <a href="#The-qirc-file" accesskey="n" rel="next">The qirc file</a>, Previous: <a href="#Introduction-to-Qi" accesskey="p" rel="prev">Introduction to Qi</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Invoking-qi-1"></span><h2 class="chapter">13 Invoking qi</h2>
- <span id="index-invocation"></span>
- <p>This chapter describes the synopsis for invoking Qi.
- </p>
- <div class="example">
- <pre class="example">Usage: qi COMMAND [<var>OPTION</var>...] [<var>FILE</var>]...
- </pre></div>
- <p>One mandatory command specifies the operation that ‘<samp>qi</samp>’ should
- perform, options are meant to detail how this operation should be
- performed during or after the process.
- </p>
- <p>Qi supports the following commands:
- </p>
- <dl compact="compact">
- <dt><code>warn</code></dt>
- <dd><p>Warn about files that will be installed.
- </p>
- </dd>
- <dt><code>install</code></dt>
- <dd><p>Install packages.
- </p>
- </dd>
- <dt><code>remove</code></dt>
- <dd><p>Remove packages.
- </p>
- </dd>
- <dt><code>upgrade</code></dt>
- <dd><p>Upgrade packages.
- </p>
- </dd>
- <dt><code>extract</code></dt>
- <dd><p>Extract packages for debugging purposes.
- </p>
- </dd>
- <dt><code>create</code></dt>
- <dd><p>Create a .tlz package from directory.
- </p>
- </dd>
- <dt><code>build</code></dt>
- <dd><p>Build packages using recipe names.
- </p>
- </dd>
- <dt><code>order</code></dt>
- <dd><p>Resolve build order through .order files
- </p></dd>
- </dl>
- <p>Options when installing, removing, or upgrading software packages:
- </p>
- <dl compact="compact">
- <dt><code>-f</code></dt>
- <dt><code>--force</code></dt>
- <dd><p>Force upgrade of pre-existing packages.
- </p>
- </dd>
- <dt><code>-k</code></dt>
- <dt><code>--keep</code></dt>
- <dd><p>Keep directories when build/remove/upgrade.
- </p>
- <p>Keep (don’t delete) the package directory when using remove/upgrade command.
- </p>
- <p>This will also try to preserve the directories ‘<samp>${srcdir}</samp>’ and
- ‘<samp>${destdir}</samp>’ when using build command. Its effect is available in
- recipes as ‘<samp>${keep_srcdir}</samp>’ and ‘<samp>${keep_destdir}</samp>’. See
- <a href="#Recipes">Special variables</a> for details.
- </p>
- </dd>
- <dt><code>-p</code></dt>
- <dt><code>--prune</code></dt>
- <dd><p>Prune conflicts.
- </p>
- </dd>
- <dt><code>-P</code></dt>
- <dt><code>--packagedir=<dir></code></dt>
- <dd><p>Set directory for package installations.
- </p>
- </dd>
- <dt><code>-t</code></dt>
- <dt><code>--targetdir=<dir></code></dt>
- <dd><p>Set target directory for symbolic links.
- </p>
- </dd>
- <dt><code>-r</code></dt>
- <dt><code>--rootdir=<dir></code></dt>
- <dd><p>Use the fully qualified named directory as the root directory for all qi
- operations.
- </p>
- <p>Note: the target directory and the package directory will be
- relative to the specified directory, excepting the graft log file.
- </p></dd>
- </dl>
- <p>Options when building software packages using recipes:
- </p>
- <dl compact="compact">
- <dt><code>-a</code></dt>
- <dt><code>--architecture</code></dt>
- <dd><p>Set architecture name for the package.
- </p>
- </dd>
- <dt><code>-j</code></dt>
- <dt><code>--jobs</code></dt>
- <dd><p>Parallel jobs for the compiler.
- </p>
- <p>This option sets the variable ‘<samp>${jobs}</samp>’. If not specified, default
- sets to 1.
- </p>
- </dd>
- <dt><code>-S</code></dt>
- <dt><code>--skip-questions</code></dt>
- <dd><p>Skip questions on completed recipes.
- </p>
- </dd>
- <dt><code>-1</code></dt>
- <dt><code>--increment</code></dt>
- <dd><p>Increment release number (‘<samp>${release}</samp>’ + 1).
- </p>
- <p>The effect of this option will be omitted if –no-package is being used.
- </p>
- </dd>
- <dt><code>-n</code></dt>
- <dt><code>--no-package</code></dt>
- <dd><p>Do not create a .tlz package.
- </p>
- </dd>
- <dt><code>-i</code></dt>
- <dt><code>--install</code></dt>
- <dd><p>Install package after the build.
- </p>
- </dd>
- <dt><code>-u</code></dt>
- <dt><code>--upgrade</code></dt>
- <dd><p>Upgrade package after the build.
- </p>
- </dd>
- <dt><code>-o</code></dt>
- <dt><code>--outdir=<dir></code></dt>
- <dd><p>Where the packages produced will be written.
- </p>
- <p>This option sets the variable ‘<samp>${outdir}</samp>’.
- </p>
- </dd>
- <dt><code>-w</code></dt>
- <dt><code>--worktree=<dir></code></dt>
- <dd><p>Where archives, patches, recipes are expected.
- </p>
- <p>This option sets the variable ‘<samp>${worktree}</samp>’.
- </p>
- </dd>
- <dt><code>-s</code></dt>
- <dt><code>--sourcedir=<dir></code></dt>
- <dd><p>Where compressed sources will be found.
- </p>
- <p>This option sets the variable ‘<samp>${tardir}</samp>’.
- </p></dd>
- </dl>
- <p>Other options:
- </p>
- <dl compact="compact">
- <dt><code>-v</code></dt>
- <dt><code>--verbose</code></dt>
- <dd><p>Be verbose (an extra -v gives more).
- </p>
- <p>It sets the verbosity level, default sets to 0.
- </p>
- <p>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.
- </p>
- </dd>
- <dt><code>-N</code></dt>
- <dt><code>--no-rc</code></dt>
- <dd><p>Do not read the configuration file.
- </p>
- <p>This will ignore reading the qirc file.
- </p>
- </dd>
- <dt><code>-L</code></dt>
- <dt><code>--show-location</code></dt>
- <dd><p>Print default directory locations and exit.
- </p>
- <p>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:
- </p>
- <div class="example">
- <pre class="example">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
- </pre></div>
- <p>You can set these environment variables using one of the following methods:
- </p>
- <p><code>eval "$(qi -L)"</code>
- </p>
- <p>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 ‘<samp>-N</samp>’.
- </p>
- <p><code>eval "$(qi -N -L)"</code>
- </p>
- <p>Or you can adjust the new locations using the command-line options, e.g:
- </p>
- <p><code>eval "$(qi -N --targetdir=/directory -L)"</code>
- </p>
- </dd>
- <dt><code>-h</code></dt>
- <dt><code>--help</code></dt>
- <dd><p>Display the usage and exit.
- </p>
- </dd>
- <dt><code>-V</code></dt>
- <dt><code>--version</code></dt>
- <dd>
- <p>This will print the (short) version information and then exit.
- </p>
- <p>The same can be achieved if Qi is invoked as ‘<samp>qi version</samp>’.
- </p></dd>
- </dl>
- <p>When FILE is -, qi can read from the standard input. See examples from
- the <a href="#Packages">Packages</a> section.
- </p>
- <p>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 <a href="#Qi-exit-status">Qi exit status</a> section.
- </p>
- <hr>
- <span id="The-qirc-file"></span><div class="header">
- <p>
- Next: <a href="#Packages" accesskey="n" rel="next">Packages</a>, Previous: <a href="#Invoking-qi" accesskey="p" rel="prev">Invoking qi</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="The-qirc-file-1"></span><h2 class="chapter">14 The qirc file</h2>
- <span id="index-configuration-file"></span>
- <p>The global <samp>qirc</samp> 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.
- </p>
- <p>Variables and their possible values must be declared as any other
- variable in the shell.
- </p>
- <p>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 <samp>qirc</samp>.
- See <a href="#Invoking-qi">Invoking qi</a>.
- </p>
- <p>The order in which qi looks for this file is:
- </p>
- <ol>
- <li> <code>${HOME}/.qirc</code>
- Effective user.
- </li><li> ‘<samp>${sysconfdir}/qirc</samp>’
- System-wide.
- </li></ol>
- <p>If you intend to run qi as effective user, the file
- ‘<samp>${sysconfdir}/qirc</samp>’ could be copied to <code>${HOME}/.qirc</code>
- setting the paths for ‘<samp>${packagedir}</samp>’ and ‘<samp>${targetdir}</samp>’
- according to the <code>$HOME</code>.
- </p>
- <hr>
- <span id="Packages"></span><div class="header">
- <p>
- Next: <a href="#Recipes" accesskey="n" rel="next">Recipes</a>, Previous: <a href="#The-qirc-file" accesskey="p" rel="prev">The qirc file</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Packages-1"></span><h2 class="chapter">15 Packages</h2>
- <span id="index-managing-packages"></span>
- <p>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.
- </p>
- <p>The package format used by qi is a simplified POSIX pax archive
- compressed using lzip<a id="DOCF1" href="#FOOT1"><sup>1</sup></a>. The
- file extension for packages ends in ‘<samp>.tlz</samp>’.
- </p>
- <p>Both package installation and package de-installation are managed using
- two important (internal) variables: ‘<samp>${packagedir}</samp>’ and
- ‘<samp>${targetdir}</samp>’, these values can be changed in the
- configuration file or via options.
- </p>
- <p>‘<samp>${packagedir}</samp>’ is a common directory tree where the package
- contents will be decompressed (will reside).
- </p>
- <p>‘<samp>${targetdir}</samp>’ is a target directory where the links will be
- made by graft(1) taking ‘<samp>${packagedir}/package_name</samp>’ into account.
- </p>
- <p>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.
- </p>
- <span id="Package-conflicts"></span><h3 class="section">15.1 Package conflicts</h3>
- <span id="index-package-conflicts"></span>
- <p>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.
- </p>
- <p>graft<a id="DOCF2" href="#FOOT2"><sup>2</sup></a>
- defines a CONFLICT as one of the following conditions:
- </p>
- <ul>
- <li> If the package object is a directory and the target object exists but is
- not a directory.
- </li><li> If the package object is not a directory and the target object exists
- and is not a symbolic link.
- </li><li> 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.
- </li></ul>
- <p>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.
- </p>
- <span id="Installing-packages"></span><h3 class="section">15.2 Installing packages</h3>
- <span id="index-package-installation"></span>
- <p>To install a single package, simply type:
- </p>
- <div class="example">
- <pre class="example">qi install coreutils_8.30_i586-1@tools.tlz
- </pre></div>
- <p>To install multiple packages at once, type:
- </p>
- <div class="example">
- <pre class="example">qi install gcc_8.3.0_i586-1@devel.tlz rafaela_2.2_i586-1@legacy.tlz ...
- </pre></div>
- <p>Warn about the files that will be linked:
- </p>
- <div class="example">
- <pre class="example">qi warn bash_5.0_i586-1@shells.tlz
- </pre></div>
- <p>This is to verify the content of a package before installing it.
- </p>
- <p>See the process of an installation:
- </p>
- <div class="example">
- <pre class="example">qi install --verbose mariana_3.0_i586-1@woman.tlz
- </pre></div>
- <p>A second –verbose or -v option gives more (very verbose).
- </p>
- <p>Installing package in a different location:
- </p>
- <div class="example">
- <pre class="example">qi install --rootdir=/media/floppy lzip_1.21_i586-1@compressors.tlz
- </pre></div>
- <p>Important: the –rootdir option assumes ‘<samp>${targetdir}</samp>’ and
- ‘<samp>${packagedir}</samp>’. See the following example:
- </p>
- <div class="example">
- <pre class="example">qi install --rootdir=/home/selk lzip_1.21_i586-1@compressors.tlz
- </pre></div>
- <p>The content of "lzip_1.21_i586-1@compressors.tlz" will be decompressed
- into ‘<samp>/home/selk/pkgs/lzip_1.21_i586-1@compressors</samp>’.
- Assuming that the main binary for lzip is under
- ‘<samp>/home/selk/pkgs/lzip_1.21_i586-1@compressors/usr/bin/</samp>’
- the target for "usr/bin" will be created at ‘<samp>/home/selk</samp>’. Considering
- that you have exported the <code>PATH</code> as ‘<samp>${HOME}/usr/bin</samp>’, now the
- system is able to see the recent lzip command.
- </p>
- <p>Installing from a list of packages using standard input:
- </p>
- <div class="example">
- <pre class="example">qi install - < PACKAGELIST.txt
- </pre></div>
- <p>Or in combination with another tool:
- </p><div class="example">
- <pre class="example">sort -u PACKAGELIST.txt | qi install -
- </pre></div>
- <p>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.
- </p>
- <p>An example of a list containing package names is:
- </p><div class="example">
- <pre class="example">/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
- </pre></div>
- <span id="Removing-packages"></span><h3 class="section">15.3 Removing packages</h3>
- <span id="index-package-de_002dinstallation"></span>
- <p>To remove a package, simply type:
- </p>
- <div class="example">
- <pre class="example">qi remove xz_5.2.4_i586-1@compressors.tlz
- </pre></div>
- <p>Remove command will match the package name using ‘<samp>${packagedir}</samp>’ as
- prefix. For example, if the value of ‘<samp>${packagedir}</samp>’ has been
- set to /usr/pkg, this will be equal to:
- </p>
- <div class="example">
- <pre class="example">qi remove /usr/pkg/xz_5.2.4_i586-1@compressors
- </pre></div>
- <p>Detailed output:
- </p>
- <div class="example">
- <pre class="example">qi remove --verbose /usr/pkg/xz_5.2.4_i586-1@compressors
- </pre></div>
- <p>A second –verbose or -v option gives more (very verbose).
- </p>
- <p>By default the remove command does not preserve a package directory after
- removing its links from ‘<samp>${targetdir}</samp>’, but this behavior can be
- changed if the –keep option is passed:
- </p>
- <div class="example">
- <pre class="example">qi remove --keep /usr/pkg/lzip_1.21_i586-1@compressors
- </pre></div>
- <p>This means that the links to the package can be reactivated, later:
- </p>
- <div class="example">
- <pre class="example">cd /usr/pkg && graft -i lzip_1.21_i586-1@compressors
- </pre></div>
- <p>Removing package from a different location:
- </p>
- <div class="example">
- <pre class="example">qi remove --rootdir=/home/cthulhu xz_5.2.4_i586-1@compressors
- </pre></div>
- <p>Removing a package using standard input:
- </p>
- <div class="example">
- <pre class="example">echo vala_0.42.3_amd64-1@devel | qi remove -
- </pre></div>
- <p>This will match with the package directory.
- </p>
- <span id="Upgrading-packages"></span><h3 class="section">15.4 Upgrading packages</h3>
- <span id="index-package-upgrade"></span>
- <p>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 ‘<samp>${packagedir}</samp>’ 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.
- </p>
- <p>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.
- </p>
- <p>To upgrade a package, just type:
- </p>
- <div class="example">
- <pre class="example">qi upgrade gcc_9.0.1_i586-1@devel.tlz
- </pre></div>
- <p>This will proceed to upgrade "gcc_9.0.1_i586-1@devel" removing any other
- version of "gcc" (if any).
- </p>
- <p>If you want to keep the package directories of versions found during the
- upgrade process, just pass:
- </p>
- <div class="example">
- <pre class="example">qi upgrade --keep gcc_9.0.1_i586-1@devel.tlz
- </pre></div>
- <p>To see the upgrade process:
- </p>
- <div class="example">
- <pre class="example">qi upgrade --verbose gcc_9.0.1_i586-1@devel.tlz
- </pre></div>
- <p>A second –verbose or -v option gives more (very verbose).
- </p>
- <p>To force the upgrade of an existing package:
- </p>
- <div class="example">
- <pre class="example">qi upgrade --force gcc_9.0.1_i586-1@devel.tlz
- </pre></div>
- <span id="Package-blacklist"></span><h4 class="subsection">15.4.1 Package blacklist</h4>
- <span id="index-package-blacklist"></span>
- <p>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:
- </p>
- <p>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, <em>especially</em> when transitioning an incoming package
- into its final location during an upgrade.
- </p>
- <p>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.
- </p>
- <p>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
- ‘<samp>${packagedir}</samp>’, while the existing links from
- ‘<samp>${targetdir}</samp>’ 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.
- </p>
- <p>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:
- ‘<samp>${pkgname}_${pkgversion}_${arch}-${release}</samp>’ where
- the package category is avoided for common matching. See
- <a href="#Recipes">Special variables</a> for a description of these variables.
- </p>
- <hr>
- <span id="Recipes"></span><div class="header">
- <p>
- Next: <a href="#Order-files" accesskey="n" rel="next">Order files</a>, Previous: <a href="#Packages" accesskey="p" rel="prev">Packages</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Recipes-1"></span><h2 class="chapter">16 Recipes</h2>
- <span id="index-recipes"></span>
- <p>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.
- </p>
- <p>A recipe has two parts: a list of variable definitions and a list of
- sections. By convention, the syntax of a section is:
- </p>
- <div class="example">
- <pre class="example">section_name()
- {
- section lines
- }
- </pre></div>
- <p>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
- ‘<samp>build</samp>’.
- </p>
- <p>The ‘<samp>build</samp>’ section (or <strong>shell function</strong>) is an augmented
- shell script that contains the main instructions to build software
- from source.
- </p>
- <p>If there are other functions defined by the packager, Qi detects them
- for later execution.
- </p>
- <span id="Variables"></span><h3 class="section">16.1 Variables</h3>
- <span id="index-variables"></span>
- <p>A "variable" is a <strong>shell variable</strong> defined either in <samp>qirc</samp>
- 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.
- </p>
- <p>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.
- </p>
- <p>Definitions of variables in qi have four levels of precedence.
- Options which define variables from the command-line override those
- specified in the <samp>qirc</samp> file, while variables defined in the recipe
- override those specified in <samp>qirc</samp>, taking priority over those
- variables set by command-line options. Finally, the variables have
- default values if they are not defined anywhere.
- </p>
- <p>Options that set variables through the command-line can only reference
- variables defined in <samp>qirc</samp> and variables with default values.
- </p>
- <p>Definitions of variables in <samp>qirc</samp> can only reference variables
- previously defined in <samp>qirc</samp> and variables with default values.
- </p>
- <p>Definitions of variables in the recipe can only reference variables
- set by the command-line, variables previously defined in the recipe,
- variables defined in <samp>qirc</samp>, and variables with default values.
- </p>
- <span id="Special-variables"></span><h3 class="section">16.2 Special variables</h3>
- <span id="index-special-variables"></span>
- <p>There are variables which can only be set using the command line options or
- via <samp>qirc</samp>, there are other special variables which can be defined or
- redefined in a recipe. See the following definitions:
- </p>
- <p>‘<samp>outdir</samp>’ is the directory where the packages produced are written.
- This variable can be redefined per-recipe. Default sets to
- ‘<samp>/var/cache/qi/packages</samp>’.
- </p>
- <p>‘<samp>worktree</samp>’ is the working tree where archives, patches, and recipes
- are expected. This variable can not be redefined in the recipe. Default
- sets to ‘<samp>/usr/src/qi</samp>’.
- </p>
- <p>‘<samp>tardir</samp>’ 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 ‘<samp>${tardir}/$tarname</samp>’. Its value is available in the
- recipe as ‘<samp>${tardir}</samp>’; a value of . for ‘<samp>tardir</samp>’ sets it to
- the value of CWD (Current Working Directory), this is where the recipe
- lives.
- </p>
- <p>‘<samp>arch</samp>’ is the architecture to compose the package name. Its value is
- available in the recipe as ‘<samp>${arch}</samp>’. Default value is the one
- that was set in the Qi configuration.
- </p>
- <p>‘<samp>jobs</samp>’ is the number of parallel jobs to pass to the compiler. Its
- value is available in the recipe as ‘<samp>${jobs}</samp>’. The default value
- is 1.
- </p>
- <p>The two variables ‘<samp>${srcdir}</samp>’ and ‘<samp>${destdir}</samp>’ 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.
- </p>
- <p>‘<samp>srcdir</samp>’ contains the source code to be compiled, and defaults to
- ‘<samp>${program}-${version}</samp>’. ‘<samp>destdir</samp>’ is the place where the
- built package will be installed, and defaults to
- ‘<samp>${TMPDIR}/package-${program}</samp>’.
- </p>
- <p>If ‘<samp>pkgname</samp>’ is left undefined, the special variable ‘<samp>program</samp>’
- is assigned by default. If ‘<samp>pkgversion</samp>’ is left undefined, the
- special variable ‘<samp>version</samp>’ is assigned by default.
- </p>
- <p>‘<samp>pkgname</samp>’ and ‘<samp>pkgversion</samp>’ along with: ‘<samp>version</samp>’, ‘<samp>arch</samp>’,
- ‘<samp>release</samp>’, and (optionally) ‘<samp>pkgcategory</samp>’ are used to produce the
- package name in the form:
- ‘<samp>${pkgname}_${pkgversion}_${arch}-${release}[@${pkgcategory}].tlz</samp>’
- </p>
- <p>‘<samp>pkgcategory</samp>’ 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
- ‘<samp>${pkgname}_${pkgversion}_${arch}-${release}[@${pkgcategory}.tlz</samp>’.
- Automatically, the value of ‘<samp>pkgcategory</samp>’ will be prefixed using the
- ‘<samp>@</samp>’ (at) symbol which will be added to the last part of the package name.
- </p>
- <p>A special variable called ‘<samp>replace</samp>’ can be used to declare package names
- that will be replaced at installation time.
- </p>
- <p>The special variables ‘<samp>keep_srcdir</samp>’ and ‘<samp>keep_destdir</samp>’ are provided
- in order to preserve the directories ‘<samp>${srcdir}</samp>’ or ‘<samp>${destdir}</samp>’,
- 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:
- </p>
- <div class="example">
- <pre class="example">keep_srcdir=keep_srcdir
- keep_destdir=keep_destdir
- </pre></div>
- <p>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:
- </p>
- <div class="example">
- <pre class="example">unset -v keep_srcdir keep_destdir
- </pre></div>
- <p>This will leave the ’keep_srcdir’ and ’keep_destdir’ variables blank to
- continue with the rest of the recipes.
- </p>
- <p>The special variable ‘<samp>opt_skiprecipe</samp>’ 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 ‘<samp>opt_skiprecipe=opt_skiprecipe</samp>’.
- </p>
- <p>The variable ‘<samp>tarlz_compression_options</samp>’ can be used to change the
- default compression options in tarlz(1), default sets to ‘<samp>-9 --solid</samp>’.
- For example if the variable is declared as:
- </p>
- <div class="example">
- <pre class="example">tarlz_compression_options="-0 --bsolid"
- </pre></div>
- <p>It will change the granularity of tarlz(1) by using the ‘<samp>--bsolid</samp>’
- option <a id="DOCF3" href="#FOOT3"><sup>3</sup></a>,
- as well as increasing the compression speed by lowering the compression
- level with ‘<samp>-0</samp>’.
- </p>
- <p>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.
- </p>
- <p>A typical recipe contains the following variables:
- </p>
- <ul>
- <li> ‘<samp>program</samp>’: Software name.
- <p>It matches the source name. It is also used to compose the name of the
- package if ‘<samp>${pkgname}</samp>’ is not specified.
- </p>
- </li><li> ‘<samp>version</samp>’: Software version.
- <p>It matches the source name. It is also used to compose the version of the
- package if ‘<samp>${pkgversion}</samp>’ is not specified.
- </p>
- </li><li> ‘<samp>arch</samp>’: Software architecture.
- <p>It is used to compose the architecture of the package in which it is
- build.
- </p>
- </li><li> ‘<samp>release</samp>’: Release number.
- <p>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.
- </p>
- </li><li> ‘<samp>pkgcategory</samp>’: Package category.
- <p>Optional but recommended variable to categorize the package name when it is
- created.
- </p></li></ul>
- <p>Obtaining sources over the network must be declared in the recipe using
- the ‘<samp>fetch</samp>’ variable.
- </p>
- <p>The variables ‘<samp>netget</samp>’ and ‘<samp>rsync</samp>’ can be defined in <samp>qirc</samp>
- to establish a network downloader in order to get the sources. If they
- are not defined, qi uses default values:
- </p>
- <p>‘<samp>netget</samp>’ is the general network downloader tool, defaults sets to
- ‘<samp>wget2 -c -w1 -t3 --no-check-certificate</samp>’.
- </p>
- <p>‘<samp>rsync</samp>’ is the network tool for sources containing the prefix for
- the RSYNC protocol, default sets to
- ‘<samp>rsync -v -a -L -z -i --progress</samp>’.
- </p>
- <p>The variable ‘<samp>description</samp>’ is used to print the package description
- when a package is installed.
- </p>
- <p>A description has two parts: a brief description, and a long description.
- By convention, the syntax of ‘<samp>description</samp>’ is:
- </p>
- <div class="example">
- <pre class="example">description="
- Brief description.
- Long description.
- "
- </pre></div>
- <p>The first line of the value represented is a brief description of the
- software (called "blurb"). A blank line separates the <em>brief
- description</em> from the <em>long description</em>, which should contain a more
- descriptive description of the software.
- </p>
- <p>An example looks like:
- </p>
- <div class="example">
- <pre class="example">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.
- "
- </pre></div>
- <p>Please consider a length limit of 78 characters as maximum, because the same
- one would be used on the meta file creation. See
- <a href="#Recipes">The meta file</a> section.
- </p>
- <p>The ‘<samp>homepage</samp>’ variable is used to declare the main site or home page:
- </p>
- <div class="example">
- <pre class="example">homepage=https://www.gnu.org/software/gcc
- </pre></div>
- <p>The variable ‘<samp>license</samp>’ is used for license information<a id="DOCF4" href="#FOOT4"><sup>4</sup></a>.
- 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 <strong>|</strong> for a disjunction, <strong>&</strong> 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.
- </p>
- <div class="example">
- <pre class="example">license="LGPL, GPL | Artistic - added permission"
- </pre></div>
- <span id="Writing-recipes"></span><h3 class="section">16.3 Writing recipes</h3>
- <span id="index-writing-recipes"></span>
- <p>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:
- </p>
- <ul>
- <li> <a href="https://git.savannah.nongnu.org/cgit/dragora.git/tree/recipes">https://git.savannah.nongnu.org/cgit/dragora.git/tree/recipes</a>
- </li><li> <a href="https://notabug.org/dragora/dragora/src/master/recipes">https://notabug.org/dragora/dragora/src/master/recipes</a>
- </li><li> <a href="https://notabug.org/dragora/dragora-extras/src/master/recipes">https://notabug.org/dragora/dragora-extras/src/master/recipes</a>
- </li><li> <a href="https://git.savannah.nongnu.org/cgit/dragora/dragora-extras.git/tree/recipes">https://git.savannah.nongnu.org/cgit/dragora/dragora-extras.git/tree/recipes</a>
- </li></ul>
- <span id="Building-packages"></span><h3 class="section">16.4 Building packages</h3>
- <span id="index-package-build"></span>
- <p>A recipe is any valid regular file. Qi sets priorities for reading a
- recipe, the order in which qi looks for a recipe is:
- </p>
- <ol>
- <li> Current working directory.
- </li><li> If the specified path name does not contain "recipe" as the last
- component. Qi will complete it by adding "recipe" to the path name.
- </li><li> If the recipe is not in the current working directory, it will be
- searched under ‘<samp>${worktree}/recipes</samp>’. The last component will be
- completed adding "recipe" to the specified path name.
- </li></ol>
- <p>To build a single package, type:
- </p>
- <div class="example">
- <pre class="example">qi build x-apps/xterm
- </pre></div>
- <p>Multiple jobs can be passed to the compiler to speed up the build process:
- </p>
- <div class="example">
- <pre class="example">qi build --jobs 3 x-apps/xterm
- </pre></div>
- <p>Update or install the produced package (if not already installed) when the
- build command ends:
- </p>
- <div class="example">
- <pre class="example">qi build -j3 --upgrade x-apps/xterm
- </pre></div>
- <p>Only process a recipe but do not create the binary package:
- </p>
- <div class="example">
- <pre class="example">qi build --no-package dict/aspell
- </pre></div>
- <p>The options –install or –upgrade have no effect when –no-package
- is given.
- </p>
- <p>This is useful to inspect the build process of the above recipe:
- </p>
- <p>qi build –keep –no-package dict/aspell 2>&1 | tee aspell-log.txt
- </p>
- <p>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).
- </p>
- <span id="Variables-from-the-environment"></span><h3 class="section">16.5 Variables from the environment</h3>
- <span id="index-environment-variables"></span>
- <p>Qi has environment variables which can be used at build time:
- </p>
- <p>The variable <code>TMPDIR</code> sets the temporary directory for sources, which is
- used for package extractions (see <a href="#Examining-packages">Examining packages</a>) and is
- prepended to the value of ‘<samp>${srcdir}</samp>’ and ‘<samp>${destdir}</samp>’ in
- build command. By convention its default value is equal to
- ‘<samp>/usr/src/qi/build</samp>’.
- </p>
- <p>The variables <code>QICFLAGS</code>, <code>QICXXFLAGS</code>, <code>QILDFLAGS</code>, and
- <code>QICPPFLAGS</code> have no effect by default. The environment variables
- such as <code>CFLAGS</code>, <code>CXXFLAGS</code>, <code>LDFLAGS</code>, and <code>CPPFLAGS</code>
- are unset at compile time:
- </p>
- <p>Recommended practice is to set variables in the command line of
- ‘<samp>configure</samp>’ or <em>make(1)</em> instead of exporting to the
- environment. As follows:
- </p>
- <p><a href="https://www.gnu.org/software/make/manual/html_node/Environment.html">https://www.gnu.org/software/make/manual/html_node/Environment.html</a>
- </p><blockquote>
- <p>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.
- </p></blockquote>
- <p>Setting environment variables for configure is deprecated because running
- configure in varying environments can be dangerous.
- </p>
- <p><a href="https://gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Defining-Variables.html">https://gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Defining-Variables.html</a>
- </p><blockquote>
- <p>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 ‘<samp>VAR=value</samp>’. For example:
- </p>
- <p><code>./configure CC=/usr/local2/bin/gcc</code>
- </p></blockquote>
- <p><a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Setting-Output-Variables.html">https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Setting-Output-Variables.html</a>
- </p><blockquote>
- <p>If for instance the user runs ‘<samp>CC=bizarre-cc ./configure</samp>’, 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 ‘<samp>./config.status --recheck</samp>’, (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 ‘<samp>./configure
- CC=bizarre-cc</samp>’, it is impossible to notice it in ‘<samp>CC=bizarre-cc
- ./configure</samp>’, which, unfortunately, is what most users do.
- [...]
- configure: error: changes in the environment can compromise the build.
- </p></blockquote>
- <p>If the <code>SOURCE_DATE_EPOCH</code> 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
- <a href="https://reproducible-builds.org/specs/source-date-epoch/">https://reproducible-builds.org/specs/source-date-epoch/</a>.
- </p>
- <span id="The-meta-file"></span><h3 class="section">16.6 The meta file</h3>
- <span id="index-the-meta-file"></span>
- <p>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 ‘<samp>${full_pkgname}.tlz.txt</samp>’, 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.
- </p>
- <p>The content of a meta file looks like:
- </p>
- <div class="example">
- <pre class="example">#
- # 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=""
- </pre></div>
- <p>A package descriptions is extracted from the variable ‘<samp>description</samp>’
- where each line is interpreted literally and pre-formatted to fit in
- (exactly) <strong>80 columns</strong>, plus the character ‘<samp>#</samp>’ and a blank
- space is prefixed to every line (shell comments).
- </p>
- <p>In addition to the Special variables, there are implicit variables such as
- ‘<samp>blurb</samp>’:
- </p>
- <p>The ‘<samp>blurb</samp>’ variable is related to the special variable
- ‘<samp>description</samp>’. Its value is made from the first (substantial)
- line of ‘<samp>description</samp>’, mentioned as the "brief description".
- </p>
- <p>The build flags such as ‘<samp>QICFLAGS</samp>’, ‘<samp>QICXXFLAGS</samp>’,
- ‘<samp>QILDFLAGS</samp>’, and ‘<samp>QICPPFLAGS</samp>’ are only added to the meta file
- if the declared variable ‘<samp>arch</samp>’ is not equal to the "noarch" value.
- </p>
- <hr>
- <span id="Order-files"></span><div class="header">
- <p>
- Next: <a href="#Creating-packages" accesskey="n" rel="next">Creating packages</a>, Previous: <a href="#Recipes" accesskey="p" rel="prev">Recipes</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Order-files-1"></span><h2 class="chapter">17 Order files</h2>
- <span id="index-handling-build-order"></span>
- <p>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 <strong>a</strong> depends on <strong>b</strong> and
- <strong>c</strong>, and <strong>c</strong> depends on <strong>b</strong> as well, the file might
- look like:
- </p>
- <div class="example">
- <pre class="example">a: c b
- b:
- c: b
- </pre></div>
- <p>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:
- </p>
- <p><small>OUTPUT</small>
- </p>
- <div class="example">
- <pre class="example">b
- c
- a
- </pre></div>
- <p>Blank lines, colons and parentheses are simply ignored. Comment lines
- beginning with ‘<samp>#</samp>’ are allowed.
- </p>
- <p>An order file could be used to build a series of packages, for example,
- if the content is:
- </p>
- <div class="example">
- <pre class="example"># Image handling libraries
- libs/libjpeg-turbo: devel/nasm
- x-libs/jasper: libs/libjpeg-turbo
- libs/tiff: libs/libjpeg-turbo
- </pre></div>
- <p>To proceed with each recipe, we can type:
- </p>
- <div class="example">
- <pre class="example">qi order imglibs.order | qi build --install -
- </pre></div>
- <p>The output of ‘<samp>qi order imglibs.order</samp>’ tells to qi in which order it
- should build the recipes:
- </p>
- <div class="example">
- <pre class="example">devel/nasm
- libs/libjpeg-turbo
- x-libs/jasper
- libs/tiff
- </pre></div>
- <hr>
- <span id="Creating-packages"></span><div class="header">
- <p>
- Next: <a href="#Examining-packages" accesskey="n" rel="next">Examining packages</a>, Previous: <a href="#Order-files" accesskey="p" rel="prev">Order files</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Creating-packages-1"></span><h2 class="chapter">18 Creating packages</h2>
- <span id="index-package-creation"></span>
- <p>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.
- </p>
- <div class="example">
- <pre class="example">Usage: qi create [<var>Output/PackageName.tlz</var>]...
- </pre></div>
- <p>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
- </p>
- <p><small>EXAMPLE</small>
- </p>
- <div class="example">
- <pre class="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
- </pre></div>
- <p>In this case, the package "claws-mail_3.17.1_amd64-1@x-apps" will be
- written into ‘<samp>/var/cache/qi/packages/</samp>’.
- </p>
- <p>All packages produced are complemented by a checksum file (.sha256).
- </p>
- <hr>
- <span id="Examining-packages"></span><div class="header">
- <p>
- Next: <a href="#Qi-exit-status" accesskey="n" rel="next">Qi exit status</a>, Previous: <a href="#Creating-packages" accesskey="p" rel="prev">Creating packages</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Examining-packages-1"></span><h2 class="chapter">19 Examining packages</h2>
- <span id="index-package-examination"></span>
- <p>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).
- </p>
- <div class="example">
- <pre class="example">Usage: qi extract [<var>packagename.tlz</var>]...
- </pre></div>
- <p><small>EXAMPLE</small>
- </p>
- <div class="example">
- <pre class="example">qi extract mksh_R56c_amd64-1@shells.tlz
- </pre></div>
- <p>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 <strong>u=rwx,g=,o= (0700)</strong>.
- The package content will reside on this location, default mask to deploy
- the content will be equal to <strong>u=rwx,g=rwx,o=rwx (0000)</strong>.
- </p>
- <p>Note: the creation of the custom directory is influenced by the value
- of the <code>TMPDIR</code> variable.
- </p>
- <hr>
- <span id="Qi-exit-status"></span><div class="header">
- <p>
- Next: <a href="#Getting-support" accesskey="n" rel="next">Getting support</a>, Previous: <a href="#Examining-packages" accesskey="p" rel="prev">Examining packages</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Qi-exit-status-1"></span><h2 class="chapter">20 Qi exit status</h2>
- <span id="index-exit-codes"></span>
- <p>All the exit codes are described in this chapter.
- </p>
- <dl compact="compact">
- <dt>‘<samp>0</samp>’</dt>
- <dd><p>Successful completion (no errors).
- </p>
- </dd>
- <dt>‘<samp>1</samp>’</dt>
- <dd><p>Minor common errors:
- </p>
- <ul>
- <li> Help usage on invalid options or required arguments.
- </li><li> Program needed by qi (prerequisite) is not available.
- </li></ul>
- </dd>
- <dt>‘<samp>2</samp>’</dt>
- <dd><p>Command execution error:
- </p>
- <p>This code is used to return the evaluation of an external command or shell
- arguments in case of failure.
- </p>
- </dd>
- <dt>‘<samp>3</samp>’</dt>
- <dd><p>Integrity check error for compressed files.
- </p>
- <p>Compressed files means:
- </p>
- <ul>
- <li> 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
- </li><li> A tarball file from tarlz(1).
- Supported extensions: .tar.lz, .tlz
- </li><li> Zip files from unzip(1).
- Supported extensions: .zip, .ZIP
- </li><li> Gzip files from gzip(1).
- Supported extensions: .gz, .Z
- </li><li> Bzip2 files from bzip2(1).
- Supported extension: .bz2
- </li><li> Lzip files from lzip(1).
- Supported extension: .lz
- </li><li> Xz files from xz(1).
- Supported extension: .xz
- </li><li> Zstd files from zstd(1).
- Supported extension: .zst
- </li></ul>
- </dd>
- <dt>‘<samp>4</samp>’</dt>
- <dd><p>File empty, not regular, or expected.
- </p>
- <p>It’s commonly expected:
- </p>
- <ul>
- <li> An argument for giving commands.
- </li><li> A regular file or readable directory.
- </li><li> An expected extension: .tlz, .sha256, .order.
- </li><li> A protocol supported by the network downloader tool.
- </li></ul>
- </dd>
- <dt>‘<samp>5</samp>’</dt>
- <dd><p>Empty or not defined variable:
- </p>
- <p>This code is used to report empty or undefined variables (usually
- variables coming from a recipe or assigned arrays that are tested).
- </p>
- </dd>
- <dt>‘<samp>6</samp>’</dt>
- <dd><p>Package already installed:
- </p>
- <p>The package directory for an incoming .tlz package already exists.
- </p>
- </dd>
- <dt>‘<samp>10</samp>’</dt>
- <dd><p>Network manager error:
- </p>
- <p>This code is used if the network downloader tool fails for some reason.
- </p></dd>
- </dl>
- <hr>
- <span id="Getting-support"></span><div class="header">
- <p>
- Next: <a href="#Contributing-to-Dragora" accesskey="n" rel="next">Contributing to Dragora</a>, Previous: <a href="#Qi-exit-status" accesskey="p" rel="prev">Qi exit status</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Getting-support-1"></span><h2 class="chapter">21 Getting support</h2>
- <span id="index-getting-support"></span>
- <p>Dragora’s home page can be found at <a href="https://www.dragora.org">https://www.dragora.org</a>.
- Bug reports or suggestions can be sent to <a href="mailto:dragora-users@nongnu.org">dragora-users@nongnu.org</a>.
- </p>
- <hr>
- <span id="Contributing-to-Dragora"></span><div class="header">
- <p>
- Next: <a href="#GNU-Free-Documentation-License" accesskey="n" rel="next">GNU Free Documentation License</a>, Previous: <a href="#Getting-support" accesskey="p" rel="prev">Getting support</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Contributing-to-Dragora-1"></span><h2 class="chapter">22 Contributing to Dragora</h2>
- <span id="index-contributing-to-dragora"></span>
- <p>TODO (introductory text here).
- </p>
- <span id="How-to-place-a-mirror"></span><h3 class="section">22.1 How to place a mirror</h3>
- <span id="index-how-to-place-a-mirror"></span>
- <p>If there’s no Dragora mirror near you, you’re welcome to contribute one.
- </p>
- <p>First, for users or downloaders, the address <em>rsync://rsync.dragora.org/</em>
- contains ISO images and source code (in various formats) taken from the
- original sites and distributed by Dragora.
- </p>
- <p>Mirroring the Dragora server requires approximately 13GB of disk space (as
- of January 2022). You can hit rsync directly from <em>rsync.dragora.org</em> as:
- </p>
- <p><code>rsync -rltpHS --delete-excluded rsync://rsync.dragora.org/dragora /your/dir/</code>
- </p>
- <p>Also, consider mirroring from another site in order to reduce load on the
- Dragora server. The listed sites at
- <a href="https://www.dragora.org/en/get/mirrors/index.html">https://www.dragora.org/en/get/mirrors/index.html</a> 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.
- </p>
- <p>Note:
- </p>
- <p>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.
- </p>
- <hr>
- <span id="GNU-Free-Documentation-License"></span><div class="header">
- <p>
- Next: <a href="#Index" accesskey="n" rel="next">Index</a>, Previous: <a href="#Contributing-to-Dragora" accesskey="p" rel="prev">Contributing to Dragora</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="GNU-Free-Documentation-License-1"></span><h2 class="appendix">Appendix A GNU Free Documentation License</h2>
- <div align="center">Version 1.3, 3 November 2008
- </div>
- <div class="display">
- <pre class="display">Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
- <a href="https://fsf.org/">https://fsf.org/</a>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
- </pre></div>
- <ol start="0">
- <li> PREAMBLE
- <p>The purpose of this License is to make a manual, textbook, or other
- functional and useful document <em>free</em> 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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> APPLICABILITY AND DEFINITIONS
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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”.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>The “publisher” means any person or entity that distributes copies
- of the Document to the public.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> VERBATIM COPYING
- <p>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.
- </p>
- <p>You may also lend copies, under the same conditions stated above, and
- you may publicly display copies.
- </p>
- </li><li> COPYING IN QUANTITY
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> MODIFICATIONS
- <p>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:
- </p>
- <ol type="A" start="1">
- <li> 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.
- </li><li> 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.
- </li><li> State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
- </li><li> Preserve all the copyright notices of the Document.
- </li><li> Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
- </li><li> 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.
- </li><li> Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document’s license notice.
- </li><li> Include an unaltered copy of this License.
- </li><li> 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.
- </li><li> 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.
- </li><li> 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.
- </li><li> 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.
- </li><li> Delete any section Entitled “Endorsements”. Such a section
- may not be included in the Modified Version.
- </li><li> Do not retitle any existing section to be Entitled “Endorsements” or
- to conflict in title with any Invariant Section.
- </li><li> Preserve any Warranty Disclaimers.
- </li></ol>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> COMBINING DOCUMENTS
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.”
- </p>
- </li><li> COLLECTIONS OF DOCUMENTS
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> AGGREGATION WITH INDEPENDENT WORKS
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> TRANSLATION
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> TERMINATION
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- </li><li> FUTURE REVISIONS OF THIS LICENSE
- <p>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
- <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.
- </p>
- <p>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.
- </p>
- </li><li> RELICENSING
- <p>“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.
- </p>
- <p>“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.
- </p>
- <p>“Incorporate” means to publish or republish a Document, in whole or
- in part, as part of another Document.
- </p>
- <p>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.
- </p>
- <p>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.
- </p>
- </li></ol>
- <span id="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></span><h3 class="heading">ADDENDUM: How to use this License for your documents</h3>
- <p>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:
- </p>
- <div class="example">
- <pre class="example"> Copyright (C) <var>year</var> <var>your name</var>.
- 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''.
- </pre></div>
- <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
- replace the “with…Texts.” line with this:
- </p>
- <div class="example">
- <pre class="example"> with the Invariant Sections being <var>list their titles</var>, with
- the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
- being <var>list</var>.
- </pre></div>
- <p>If you have Invariant Sections without Cover Texts, or some other
- combination of the three, merge those two alternatives to suit the
- situation.
- </p>
- <p>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.
- </p>
- <hr>
- <span id="Index"></span><div class="header">
- <p>
- Previous: <a href="#GNU-Free-Documentation-License" accesskey="p" rel="prev">GNU Free Documentation License</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> [<a href="#Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <span id="Index-1"></span><h2 class="unnumbered">Index</h2>
- <table><tr><th valign="top">Jump to: </th><td><a class="summary-letter" href="#Index_cp_letter-A"><b>A</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-B"><b>B</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-C"><b>C</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-E"><b>E</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-F"><b>F</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-G"><b>G</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-H"><b>H</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-I"><b>I</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-L"><b>L</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-M"><b>M</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-P"><b>P</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-R"><b>R</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-S"><b>S</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-T"><b>T</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-U"><b>U</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-V"><b>V</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-W"><b>W</b></a>
-
- </td></tr></table>
- <table class="index-cp" border="0">
- <tr><td></td><th align="left">Index Entry</th><td> </td><th align="left"> Section</th></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-A">A</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-a-quick-glance-at-dragora">a quick glance at dragora</a>:</td><td> </td><td valign="top"><a href="#A-quick-glance-at-Dragora">A quick glance at Dragora</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-about-this-handbook">about this handbook</a>:</td><td> </td><td valign="top"><a href="#About-this-handbook">About this handbook</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-B">B</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-boot-options-from-live-medium">boot options from live medium</a>:</td><td> </td><td valign="top"><a href="#Boot-options-from-live-medium">Boot options from live medium</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-C">C</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-configuration-file">configuration file</a>:</td><td> </td><td valign="top"><a href="#The-qirc-file">The qirc file</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-contributing-to-dragora">contributing to dragora</a>:</td><td> </td><td valign="top"><a href="#Contributing-to-Dragora">Contributing to Dragora</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-E">E</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-environment-variables">environment variables</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-exit-codes">exit codes</a>:</td><td> </td><td valign="top"><a href="#Qi-exit-status">Qi exit status</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-F">F</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-free-software">free software</a>:</td><td> </td><td valign="top"><a href="#What-is-Dragora_003f">What is Dragora?</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-G">G</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-getting-support">getting support</a>:</td><td> </td><td valign="top"><a href="#Getting-support">Getting support</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-gnu">gnu</a>:</td><td> </td><td valign="top"><a href="#What-is-Dragora_003f">What is Dragora?</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-H">H</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-handling-build-order">handling build order</a>:</td><td> </td><td valign="top"><a href="#Order-files">Order files</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-history">history</a>:</td><td> </td><td valign="top"><a href="#History">History</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-how-to-place-a-mirror">how to place a mirror</a>:</td><td> </td><td valign="top"><a href="#Contributing-to-Dragora">Contributing to Dragora</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-I">I</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-installing-the-system-manually-_0028as-an-alternative_0029">installing the system manually (as an alternative)</a>:</td><td> </td><td valign="top"><a href="#Installing-the-system-manually-_0028as-an-alternative_0029">Installing the system manually (as an alternative)</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-introduction-to-qi">introduction to qi</a>:</td><td> </td><td valign="top"><a href="#Introduction-to-Qi">Introduction to Qi</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-invocation">invocation</a>:</td><td> </td><td valign="top"><a href="#Invoking-qi">Invoking qi</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-L">L</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-linux-or-linux_002dlibre">linux or linux-libre</a>:</td><td> </td><td valign="top"><a href="#What-is-Dragora_003f">What is Dragora?</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-M">M</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-maintainers">maintainers</a>:</td><td> </td><td valign="top"><a href="#Maintainers">Maintainers</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-managing-packages">managing packages</a>:</td><td> </td><td valign="top"><a href="#Packages">Packages</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-P">P</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-blacklist">package blacklist</a>:</td><td> </td><td valign="top"><a href="#Packages">Packages</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-build">package build</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-conflicts">package conflicts</a>:</td><td> </td><td valign="top"><a href="#Packages">Packages</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-creation">package creation</a>:</td><td> </td><td valign="top"><a href="#Creating-packages">Creating packages</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-de_002dinstallation">package de-installation</a>:</td><td> </td><td valign="top"><a href="#Packages">Packages</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-examination">package examination</a>:</td><td> </td><td valign="top"><a href="#Examining-packages">Examining packages</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-installation">package installation</a>:</td><td> </td><td valign="top"><a href="#Packages">Packages</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-management-in-a-nutshell">package management in a nutshell</a>:</td><td> </td><td valign="top"><a href="#Package-management-in-a-nutshell">Package management in a nutshell</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-management-in-dragora">package management in dragora</a>:</td><td> </td><td valign="top"><a href="#Introduction-to-package-management-in-Dragora">Introduction to package management in Dragora</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-package-upgrade">package upgrade</a>:</td><td> </td><td valign="top"><a href="#Packages">Packages</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-R">R</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-recipes">recipes</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-releases">releases</a>:</td><td> </td><td valign="top"><a href="#History">History</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-revision-history-_0028changelog_0029">revision history (changelog)</a>:</td><td> </td><td valign="top"><a href="#Revision-history-_0028ChangeLog_0029">Revision history (ChangeLog)</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-S">S</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-special-variables">special variables</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-T">T</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-the-meta-file">the meta file</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-typographic-conventions">typographic conventions</a>:</td><td> </td><td valign="top"><a href="#About-this-handbook">About this handbook</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-U">U</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-using-dragora_002dinstaller">using dragora-installer</a>:</td><td> </td><td valign="top"><a href="#Using-dragora_002dinstaller">Using dragora-installer</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-using-third_002dparty-free-software">using third-party free software</a>:</td><td> </td><td valign="top"><a href="#Using-third_002dparty-free-software">Using third-party free software</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-V">V</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-variables">variables</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- <tr><th id="Index_cp_letter-W">W</th><td></td><td></td></tr>
- <tr><td></td><td valign="top"><a href="#index-what-is-dragora_003f">what is dragora?</a>:</td><td> </td><td valign="top"><a href="#What-is-Dragora_003f">What is Dragora?</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-why-should-I-use-dragora_003f">why should I use dragora?</a>:</td><td> </td><td valign="top"><a href="#Why-should-I-use-Dragora_003f">Why should I use Dragora?</a></td></tr>
- <tr><td></td><td valign="top"><a href="#index-writing-recipes">writing recipes</a>:</td><td> </td><td valign="top"><a href="#Recipes">Recipes</a></td></tr>
- <tr><td colspan="4"> <hr></td></tr>
- </table>
- <table><tr><th valign="top">Jump to: </th><td><a class="summary-letter" href="#Index_cp_letter-A"><b>A</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-B"><b>B</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-C"><b>C</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-E"><b>E</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-F"><b>F</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-G"><b>G</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-H"><b>H</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-I"><b>I</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-L"><b>L</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-M"><b>M</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-P"><b>P</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-R"><b>R</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-S"><b>S</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-T"><b>T</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-U"><b>U</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-V"><b>V</b></a>
-
- <a class="summary-letter" href="#Index_cp_letter-W"><b>W</b></a>
-
- </td></tr></table>
- <div class="footnote">
- <hr>
- <h4 class="footnotes-heading">Footnotes</h4>
- <h5><a id="FOOT1" href="#DOCF1">(1)</a></h3>
- <p>For more details about tarlz and the
- lzip format, visit <a href="https://lzip.nongnu.org/tarlz.html">https://lzip.nongnu.org/tarlz.html</a>.</p>
- <h5><a id="FOOT2" href="#DOCF2">(2)</a></h3>
- <p>The official guide for Graft can be found at
- <a href="https://peters.gormand.com.au/Home/tools/graft/graft.html">https://peters.gormand.com.au/Home/tools/graft/graft.html</a>.</p>
- <h5><a id="FOOT3" href="#DOCF3">(3)</a></h3>
- <p>About the ‘<samp>--bsolid</samp>’ granularity option of tarlz(1),
- <a href="https://www.nongnu.org/lzip/manual/tarlz_manual.html#g_t_002d_002dbsolid">https://www.nongnu.org/lzip/manual/tarlz_manual.html#g_t_002d_002dbsolid</a>.</p>
- <h5><a id="FOOT4" href="#DOCF4">(4)</a></h3>
- <p>The proposal for ‘<samp>license</samp>’ was made by Richard M. Stallman at
- <a href="https://lists.gnu.org/archive/html/gnu-linux-libre/2016-05/msg00003.html">https://lists.gnu.org/archive/html/gnu-linux-libre/2016-05/msg00003.html</a>.</p>
- </div>
- <hr>
- </body>
- </html>
|