guix.fr.texi 984 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924
  1. \input texinfo
  2. @c ===========================================================================
  3. @c
  4. @c This file was generated with po4a. Translate the source file.
  5. @c
  6. @c ===========================================================================
  7. @c -*-texinfo-*-
  8. @c %**start of header
  9. @setfilename guix.fr.info
  10. @documentencoding UTF-8
  11. @documentlanguage fr
  12. @frenchspacing on
  13. @settitle Manuel de référence de GNU Guix
  14. @c %**end of header
  15. @include version-fr.texi
  16. @c Identifier of the OpenPGP key used to sign tarballs and such.
  17. @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
  18. @set KEY-SERVER pool.sks-keyservers.net
  19. @copying
  20. Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic
  21. Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@* Copyright
  22. @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014, 2015,
  23. 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
  24. Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
  25. 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
  26. Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo
  27. Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
  28. 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018
  29. Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright
  30. @copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017,
  31. 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
  32. Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017,
  33. 2018 Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
  34. Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
  35. 2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
  36. Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
  37. Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
  38. Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
  39. Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
  40. Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
  41. Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
  42. @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
  43. Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
  44. Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
  45. @copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
  46. Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
  47. 2018 Alex Vong@*
  48. Vous avez la permission de copier, distribuer ou modifier ce document sous
  49. les termes de la Licence GNU Free Documentation, version 1.3 ou toute
  50. version ultérieure publiée par la Free Software Foundation ; sans section
  51. invariante, texte de couverture et sans texte de quatrième de couverture.
  52. Une copie de la licence est incluse dans la section intitulée « GNU Free
  53. Documentation License ».
  54. @end copying
  55. @dircategory Administration système
  56. @direntry
  57. * Guix: (guix.fr). Gérer les logiciels installés et la
  58. configuration du système.
  59. * guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et
  60. mettre à jour des
  61. paquets.
  62. * guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
  63. inutilisé.
  64. * guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
  65. paquets disponibles.
  66. * guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
  67. système d'exploitation.
  68. @end direntry
  69. @dircategory Développement logiciel
  70. @direntry
  71. * guix environment : (guix.fr)Invoquer guix environment. Construire des
  72. environnements
  73. de construction
  74. avec Guix.
  75. * guix build : (guix.fr)Invoquer guix build. Construire des paquets.
  76. * guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
  77. @end direntry
  78. @titlepage
  79. @title Manuel de référence de GNU Guix
  80. @subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
  81. @author Les développeurs de GNU Guix
  82. @page
  83. @vskip 0pt plus 1filll
  84. Édition @value{EDITION} @* @value{UPDATED} @*
  85. @insertcopying
  86. @end titlepage
  87. @contents
  88. @c *********************************************************************
  89. @node Top
  90. @top GNU Guix
  91. Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
  92. gestion de paquets fonctionnel écrit pour le système GNU@.
  93. @c TRANSLATORS: You can replace the following paragraph with information on
  94. @c how to join your own translation team and how to report issues with the
  95. @c translation.
  96. Ce manuel est aussi disponible en anglais (@pxref{Top,,, guix, GNU Guix
  97. Reference Manual}) et en allemand (@pxref{Top,,, guix.de, Referenzhandbuch
  98. zu GNU Guix}). Si vous souhaitez nous aider à traduire ce manuel en
  99. français, vous pouvez nous rejoindre sur le
  100. @uref{https://translationproject.org/domain/guix-manual.html, projet de
  101. traduction} et sur la liste de diffusion
  102. @uref{https://listes.traduc.org/mailman/listinfo/traduc/,
  103. traduc@@traduc.org}.
  104. @menu
  105. * Introduction:: Qu'est-ce que Guix ?
  106. * Installation:: Installer Guix.
  107. * Gestion de paquets:: Installation des paquets, mises à jour, etc.
  108. * Interface de programmation:: Utiliser Guix en Scheme.
  109. * Utilitaires:: Commandes de gestion de paquets.
  110. * Distribution GNU:: Des logiciels pour un système GNU convivial.
  111. * Contribuer:: Nous avons besoin de votre aide !
  112. * Remerciements:: Merci !
  113. * La licence GNU Free Documentation:: La licence de ce manuel.
  114. * Index des concepts:: Les concepts.
  115. * Index de programmation:: Types de données, fonctions et variables.
  116. @detailmenu
  117. --- Liste détaillée des nœuds ---
  118. Installation
  119. * Installation binaire:: Commencer à utiliser Guix en un rien de temps
  120. !
  121. * Prérequis:: Logiciels requis pour construire et lancer
  122. Guix.
  123. * Lancer la suite de tests:: Tester Guix.
  124. * Paramétrer le démon:: Préparer l'environnement du démon de
  125. construction.
  126. * Invoquer guix-daemon:: Lancer le démon de construction.
  127. * Réglages applicatifs:: Réglages spécifiques pour les application.
  128. Paramétrer le démon
  129. * Réglages de l'environnement de construction:: Préparer l'environnement
  130. de construction isolé.
  131. * Réglages du délestage du démon:: Envoyer des constructions à des
  132. machines distantes.
  133. * Support de SELinux:: Utiliser une politique SELinux pour le démon.
  134. Gestion de paquets
  135. * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
  136. * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
  137. * Substituts:: Télécharger des binaire déjà construits.
  138. * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
  139. résultats.
  140. * Invoquer guix gc:: Lancer le ramasse-miettes.
  141. * Invoquer guix pull:: Récupérer la dernière version de Guix et de
  142. la distribution.
  143. * Canaux:: Personnaliser la collection des paquets.
  144. * Inférieurs:: Interagir avec une autre révision de Guix.
  145. * Invoquer guix describe:: Affiche des informations sur la révision Guix
  146. actuelle.
  147. * Invoquer guix pack:: Créer des lots de logiciels.
  148. * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
  149. Substituts
  150. * Serveur de substituts officiel:: Une source particulière de substituts.
  151. * Autoriser un serveur de substituts:: Comment activer ou désactiver les
  152. substituts.
  153. * Authentification des substituts:: Coment Guix vérifie les substituts.
  154. * Paramètres de serveur mandataire:: Comment récupérer des substituts à
  155. travers un serveur mandataire.
  156. * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
  157. * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
  158. un paquet binaire ?
  159. Interface de programmation
  160. * Définition des paquets:: Définir de nouveaux paquets.
  161. * Systèmes de construction:: Spécifier comment construire les paquets.
  162. * Le dépôt:: Manipuler le dépôt de paquets.
  163. * Dérivations:: Interface de bas-niveau avec les dérivations
  164. de paquets.
  165. * La monad du dépôt:: Interface purement fonctionnelle avec le
  166. dépôt.
  167. * G-Expressions:: Manipuler les expressions de construction.
  168. * Invoquer guix repl:: S'amuser avec Guix de manière interactive.
  169. Définition des paquets
  170. * Référence de paquet:: Le type de donnée des paquets.
  171. * Référence d'origine:: Le type de données d'origine.
  172. Utilitaires
  173. * Invoquer guix build:: Construire des paquets depuis la ligne de
  174. commande.
  175. * Invoquer guix edit:: Modifier les définitions de paquets.
  176. * Invoquer guix download:: Télécharger un fichier et afficher son hash.
  177. * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
  178. * Invoquer guix import:: Importer des définitions de paquets.
  179. * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
  180. * Invoquer guix lint:: Trouver des erreurs dans les définitions de
  181. paquets.
  182. * Invoquer guix size:: Profiler l'utilisation du disque.
  183. * Invoquer guix graph:: Visualiser le graphe des paquets.
  184. * Invoquer guix environment:: Mettre en place des environnements de
  185. développement.
  186. * Invoquer guix publish:: Partager des substituts.
  187. * Invoquer guix challenge:: Défier les serveurs de substituts.
  188. * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
  189. * Invoquer guix container:: Isolation de processus.
  190. * Invoquer guix weather:: Mesurer la disponibilité des substituts.
  191. * Invoquer guix processes:: Lister les processus clients.
  192. Invoquer @command{guix build}
  193. * Options de construction communes:: Options de construction pour la
  194. plupart des commandes.
  195. * Options de transformation de paquets:: Créer des variantes de paquets.
  196. * Options de construction supplémentaires:: Options spécifiques à «
  197. guix build ».
  198. * Débogage des échecs de construction:: La vie d'un empaqueteur.
  199. Distribution GNU
  200. * Installation du système:: Installer le système d'exploitation complet.
  201. * Configuration système:: Configurer le système d'exploitation.
  202. * Documentation:: Visualiser les manuels d'utilisateur des
  203. logiciels.
  204. * Installer les fichiers de débogage:: Nourrir le débogueur.
  205. * Mises à jour de sécurité:: Déployer des correctifs de sécurité
  206. rapidement.
  207. * Modules de paquets:: Les paquets du point de vu du programmeur.
  208. * Consignes d'empaquetage:: Faire grandir la distribution.
  209. * Bootstrapping:: GNU/Linux depuis zéro.
  210. * Porter:: Cibler une autre plateforme ou un autre noyau.
  211. Installation du système
  212. * Limitations:: Ce à quoi vous attendre.
  213. * Considérations matérielles:: Matériel supporté.
  214. * Installation depuis une clef USB ou un DVD:: Préparer le média
  215. d'installation.
  216. * Préparer l'installation:: Réseau, partitionnement, etc.
  217. * Effectuer l'installation:: Pour de vrai.
  218. * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
  219. * Construire l'image d'installation:: D'où vient tout cela.
  220. Configuration système
  221. * Utiliser le système de configuration:: Personnaliser votre système
  222. GNU@.
  223. * Référence de système d'exploitation:: Détail sur la déclaration de
  224. système d'exploitation.
  225. * Systèmes de fichiers:: Configurer les montages de systèmes de
  226. fichiers.
  227. * Périphériques mappés:: Gestion des périphériques de bloc.
  228. * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
  229. * Régionalisation:: Paramétrer la langue et les conventions
  230. culturelles.
  231. * Services:: Spécifier les services du système.
  232. * Programmes setuid:: Programmes tournant avec les privilèges root.
  233. * Certificats X.509:: Authentifier les serveurs HTTPS@.
  234. * Name Service Switch:: Configurer le « name service switch » de la
  235. libc.
  236. * Disque de RAM initial:: Démarrage de Linux-Libre.
  237. * Configuration du chargeur d'amorçage:: Configurer le chargeur
  238. d'amorçage.
  239. * Invoquer guix system:: Instantier une configuration du système.
  240. * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
  241. virtuelle.
  242. * Définir des services:: Ajouter de nouvelles définitions de services.
  243. Services
  244. * Services de base:: Services systèmes essentiels.
  245. * Exécution de tâches planifiées:: Le service mcron.
  246. * Rotation des journaux:: Le service rottlog.
  247. * Services réseau:: Paramétres réseau, démon SSH, etc.
  248. * Système de fenêtrage X:: Affichage graphique.
  249. * Services d'impression:: Support pour les imprimantes locales et
  250. distantes.
  251. * Services de bureaux:: D-Bus et les services de bureaux.
  252. * Services de son:: Services ALSA et Pulseaudio.
  253. * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
  254. * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
  255. * Services de messagerie:: Services de messagerie.
  256. * Services de téléphonie:: Services de téléphonie.
  257. * Services de surveillance:: Services de surveillance.
  258. * Services Kerberos:: Services Kerberos.
  259. * Services web:: Services web.
  260. * Services de certificats:: Certificats TLS via Let's Encrypt.
  261. * Services DNS:: Démons DNS@.
  262. * Services VPN:: Démons VPN
  263. * Système de fichiers en réseau:: Services liés à NFS@.
  264. * Intégration continue:: Le service Cuirass.
  265. * Services de gestion de l'énergie:: Augmenter la durée de vie de la
  266. batterie.
  267. * Services audio:: MPD@.
  268. * Services de virtualisation:: Services de virtualisation.
  269. * Services de contrôle de version:: Fournit des accès distants à des
  270. dépôts Git.
  271. * Services de jeu:: Serveurs de jeu.
  272. * Services divers:: D'autres services.
  273. Définir des services
  274. * Composition de services:: Le modèle de composition des services.
  275. * Types service et services:: Types et services.
  276. * Référence de service:: Référence de l'API@.
  277. * Services Shepherd:: Un type de service particulier.
  278. Consignes d'empaquetage
  279. * Liberté logiciel:: Ce que la distribution peut contenir.
  280. * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
  281. * Numéros de version:: Lorsque le nom n'est pas suffisant.
  282. * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
  283. paquet.
  284. * Modules python:: Un peu de comédie anglaise.
  285. * Modules perl:: Petites perles.
  286. * Paquets java:: Pause café.
  287. * Polices de caractères:: À fond les fontes.
  288. Contribuer
  289. * Construire depuis Git:: toujours le plus récent.
  290. * Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers.
  291. * La configuration parfaite:: Les bons outils.
  292. * Style de code:: Hygiène du contributeur.
  293. * Envoyer des correctifs:: Partager votre travail.
  294. Style de code
  295. * Paradigme de programmation:: Comment composer vos éléments.
  296. * Modules:: Où stocker votre code ?
  297. * Types de données et reconnaissance de motif:: Implémenter des
  298. structures de données.
  299. * Formatage du code:: Conventions d'écriture.
  300. @end detailmenu
  301. @end menu
  302. @c *********************************************************************
  303. @node Introduction
  304. @chapter Introduction
  305. @cindex but
  306. GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
  307. « s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
  308. outil de gestion de paquets pour le système GNU@. Guix facilite pour les
  309. utilisateurs non privilégiés l'installation, la mise à jour et la
  310. suppression de paquets, la restauration à un ensemble de paquets précédent,
  311. la construction de paquets depuis les sources et plus généralement aide à la
  312. création et à la maintenance d'environnements logiciels.
  313. @cindex interfaces utilisateurs
  314. Guix fournit une interface de gestion des paquets par la ligne de commande
  315. (@pxref{Invoquer guix package}), un ensemble d'utilitaires en ligne de
  316. commande (@pxref{Utilitaires}) ainsi que des interfaces de programmation
  317. Scheme (@pxref{Interface de programmation}).
  318. @cindex démon de construction
  319. Son @dfn{démon de construction} est responsable de la construction des
  320. paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
  321. téléchargement des binaires pré-construits depuis les sources autorisées
  322. (@pxref{Substituts}).
  323. @cindex extensibilité de la distribution
  324. @cindex personnalisation, des paquets
  325. Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
  326. respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
  327. libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
  328. peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
  329. indépendants (@pxref{Modules de paquets}). Il est aussi
  330. @emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
  331. définitions de paquets spécialisées à partir de définitions existantes, même
  332. depuis la ligne de commande (@pxref{Options de transformation de paquets}).
  333. @cindex Distribution Système Guix
  334. @cindex GuixSD
  335. Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
  336. compléter les outils disponibles sans interférence (@pxref{Installation}) ou
  337. vous pouvez l'utiliser à travers la @dfn{Distribution Système Guix} ou
  338. GuixSD (@pxref{Distribution GNU}) distincte. Avec GNU@tie{}GuixSD, vous
  339. @emph{déclarez} tous les aspects de la configuration du système
  340. d'exploitation et Guix s'occupe de créer la configuration d'une manière
  341. transactionnelle, reproductible et sans état (@pxref{Configuration
  342. système}).
  343. @cindex gestion de paquet fonctionnelle
  344. @cindex isolation
  345. Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
  346. fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
  347. processus de construction et d'installation des paquets est vu comme une
  348. @emph{fonction} dans le sens mathématique du terme. Cette fonction a des
  349. entrées (comme des scripts de construction, un compilateur et des
  350. bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
  351. son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
  352. faire référence à des logiciels ou des scripts qui n'ont pas été
  353. explicitement passés en entrée. Une fonction de construction produit
  354. toujours le même résultat quand on lui donne le même ensemble d'entrée.
  355. Elle ne peut pas modifier l'environnement du système en cours d'exécution
  356. d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
  357. des fichiers en dehors de ses répertoires de construction et
  358. d'installation. Ce résultat s'obtient en lançant les processus de
  359. construction dans des environnements isolés (ou des @dfn{conteneurs}) où
  360. seules les entrées explicites sont visibles.
  361. @cindex dépôt
  362. Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
  363. dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
  364. (@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
  365. dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
  366. contient un hash de toutes les entrées utilisées pour construire le paquet ;
  367. ainsi, changer une entrée donnera un nom de répertoire différent.
  368. Cette approche est le fondement des fonctionnalités les plus importante de
  369. Guix : le support des mises à jour des paquets et des retours en arrière
  370. transactionnels, l'installation différenciée par utilisateur et le ramassage
  371. de miettes pour les paquets (@pxref{Fonctionnalités}).
  372. @c *********************************************************************
  373. @node Installation
  374. @chapter Installation
  375. @cindex installer Guix
  376. @cindex site officiel
  377. GNU Guix est disponible au téléchargement depuis son site web sur
  378. @url{http://www.gnu.org/software/guix/}. Cette section décrit les
  379. pré-requis logiciels de Guix ainsi que la manière de l'installer et de se
  380. préparer à l'utiliser.
  381. Remarquez que cette section concerne l'installation du gestionnaire de
  382. paquet, ce qui se fait sur un système GNU/Linux en cours d'exécution. Si
  383. vous souhaitez plutôt installer le système d'exploitation GNU complet,
  384. @pxref{Installation du système}.
  385. @cindex distro extérieure
  386. @cindex répertoires liés aux distro extérieures
  387. Lorsqu'il est installé sur un système GNU/Linux existant — ci-après nommé
  388. @dfn{distro extérieure} — GNU@tie{}Guix complète les outils disponibles sans
  389. interférence. Ses données se trouvent exclusivement dans deux répertoires,
  390. typiquement @file{/gnu/store} et @file{/var/guix} ; les autres fichiers de
  391. votre système comme @file{/etc} sont laissés intacts.
  392. Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
  393. (@pxref{Invoquer guix pull}).
  394. @menu
  395. * Installation binaire:: Commencer à utiliser Guix en un rien de temps
  396. !
  397. * Prérequis:: Logiciels requis pour construire et lancer
  398. Guix.
  399. * Lancer la suite de tests:: Tester Guix.
  400. * Paramétrer le démon:: Préparer l'environnement du démon de
  401. construction.
  402. * Invoquer guix-daemon:: Lancer le démon de construction.
  403. * Réglages applicatifs:: Réglages spécifiques pour les application.
  404. @end menu
  405. @node Installation binaire
  406. @section Installation binaire
  407. @cindex installer Guix depuis les binaires
  408. @cindex script d'installation
  409. Cette section décrit comment intaller Guix sur un système quelconque depuis
  410. un archive autonome qui fournit les binaires pour Guix et toutes ses
  411. dépendances. C'est souvent plus rapide que d'installer depuis les sources,
  412. ce qui est décrit dans les sections suivantes. Le seul pré-requis est
  413. d'avoir GNU@tie{}tar et Xz.
  414. Nous fournissons un script
  415. @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
  416. script d'intallation shell} qui automatise le téléchargement, l'installation
  417. et la configuration initiale de Guix. Il devrait être lancé en tant
  418. qu'utilisateur root.
  419. L'installation se comme ceci :
  420. @enumerate
  421. @item
  422. @cindex téléchargement du Guix binaire
  423. Téléchargez l'archive binaire depuis
  424. @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
  425. où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
  426. laquelle tourne déjà le noyau Linux, etc.
  427. @c The following is somewhat duplicated in ``System Installation''.
  428. Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
  429. l'authenticité de l'archive avec, comme ceci :
  430. @example
  431. $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
  432. $ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
  433. @end example
  434. Si cette commande échoue parce que vous n'avez pas la clef publique requise,
  435. lancez cette commande pour l'importer :
  436. @example
  437. $ gpg --keyserver @value{KEY-SERVER} \
  438. --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
  439. @end example
  440. @noindent
  441. @c end authentication part
  442. et relancez la commande @code{gpg --verify}.
  443. @item
  444. Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
  445. votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
  446. tant que @code{root}, lancez :
  447. @example
  448. # cd /tmp
  449. # tar --warning=no-timestamp -xf \
  450. guix-binary-@value{VERSION}.@var{système}.tar.xz
  451. # mv var/guix /var/ && mv gnu /
  452. @end example
  453. Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
  454. deuxième dossier contient un profil pret à être utilisé pour @code{root}
  455. (voir les étapes suivantes).
  456. Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
  457. écraserait ses propres fichiers essentiels.
  458. L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
  459. pas d'avertissement disant que « l'horodatage est trop vieux pour être
  460. plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
  461. précédents ; les versions récentes n'ont pas ce problème). Cela vient du
  462. fait que les fichiers de l'archive ont pour date de modification zéro (ce
  463. qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
  464. contenu de l'archive ne dépende pas de la date de création, ce qui la rend
  465. reproductible.
  466. @item
  467. Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
  468. l'emplacement où @command{guix pull} installera les mises à jour
  469. (@pxref{Invoquer guix pull}) :
  470. @example
  471. # mkdir -p ~root/.config/guix
  472. # ln -sf /var/guix/profiles/per-user/root/current-guix \
  473. ~root/.config/guix/current
  474. @end example
  475. Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
  476. variables d'environnement nécessaires :
  477. @example
  478. # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
  479. source $GUIX_PROFILE/etc/profile
  480. @end example
  481. @item
  482. Créez le groupe et les comptes utilisateurs pour les utilisateurs de
  483. construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
  484. @item
  485. Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
  486. Si votre distribution hôte utilise le système d'initialisation systemd, cela
  487. peut se faire avec ces commandes :
  488. @c Versions of systemd that supported symlinked service files are not
  489. @c yet widely deployed, so we should suggest that users copy the service
  490. @c files into place.
  491. @c
  492. @c See this thread for more information:
  493. @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
  494. @example
  495. # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
  496. /etc/systemd/system/
  497. # systemctl start guix-daemon && systemctl enable guix-daemon
  498. @end example
  499. Si votre distribution hôte utilise le système d'initialisation Upstart :
  500. @example
  501. # initctl reload-configuration
  502. # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
  503. /etc/init/
  504. # start guix-daemon
  505. @end example
  506. Sinon, vous pouvez toujours démarrer le démon manuellement avec :
  507. @example
  508. # ~root/.config/guix/current/bin/guix-daemon \
  509. --build-users-group=guixbuild
  510. @end example
  511. @item
  512. Rendez la commande @command{guix} disponible pour les autres utilisateurs
  513. sur la machine, par exemple avec :
  514. @example
  515. # mkdir -p /usr/local/bin
  516. # cd /usr/local/bin
  517. # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
  518. @end example
  519. C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
  520. ici :
  521. @example
  522. # mkdir -p /usr/local/share/info
  523. # cd /usr/local/share/info
  524. # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
  525. do ln -s $i ; done
  526. @end example
  527. Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
  528. de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
  529. Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
  530. changer le chemin de recherche de Info).
  531. @item
  532. @cindex substituts, autorisations
  533. Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs
  534. (@pxref{Substituts}), autorisez-les :
  535. @example
  536. # guix archive --authorize < \
  537. ~root/.config/guix/current/share/guix/hydra.gnu.org.pub
  538. @end example
  539. @item
  540. Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
  541. pour que leur environnement Guix soit prêt à être utilisé,
  542. @pxref{Réglages applicatifs}.
  543. @end enumerate
  544. Voilà, l'installation est terminée !
  545. Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
  546. dans le profil de root :
  547. @example
  548. # guix package -i hello
  549. @end example
  550. Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
  551. ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
  552. retrouveriez gravement handicapé par l'absence de la commande
  553. @command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
  554. @code{guix package -r guix}.
  555. L'archive d'installation binaire peut être (re)produite et vérifiée
  556. simplement en lançaint la commande suivante dans l'arborescence des sources
  557. de Guix :
  558. @example
  559. make guix-binary.@var{system}.tar.xz
  560. @end example
  561. @noindent
  562. ...@: which, in turn, runs:
  563. @example
  564. guix pack -s @var{system} --localstatedir \
  565. --profile-name=current-guix guix
  566. @end example
  567. @xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
  568. @node Prérequis
  569. @section Prérequis
  570. Cette section dresse la liste des pré-requis pour la construction de Guix
  571. depuis les sources. La procédure de construction pour Guix est la même que
  572. pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
  573. fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
  574. Guix pour plus de détails.
  575. GNU Guix dépend des paquets suivants :
  576. @itemize
  577. @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 ou
  578. supérieure, dont 2.2.x,
  579. @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
  580. 0.1.0 ou supérieure,
  581. @item
  582. @uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
  583. (@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
  584. gnutls-guile, GnuTLS-Guile}),
  585. @item
  586. @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
  587. version 0.1.0 ou supérieure,
  588. @item
  589. @c FIXME: Specify a version number once a release has been made.
  590. @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
  591. ultérieur,
  592. @item @url{http://zlib.net, zlib},
  593. @item @url{http://www.gnu.org/software/make/, GNU Make}.
  594. @end itemize
  595. Les dépendances suivantes sont facultatives :
  596. @itemize
  597. @item
  598. Installer @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
  599. vous permettra d'utiliser la commande @command{guix import pypi}
  600. (@pxref{Invoquer guix import}). Il est surtout utile pour les développeurs
  601. et pas pour les utilisateurs occasionnels.
  602. @item
  603. @c Note: We need at least 0.10.2 for 'channel-send-eof'.
  604. Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
  605. et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
  606. @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
  607. 0.10.2 ou ulltérieure.
  608. @item
  609. Lorsque @url{http://www.bzip.org, libbz2} est disponible,
  610. @command{guix-daemon} peut l'utiliser pour compresser les journaux de
  611. construction.
  612. @end itemize
  613. À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
  614. paquets suivants sont aussi requis :
  615. @itemize
  616. @item @url{http://gnupg.org/, GNU libgcrypt},
  617. @item @url{http://sqlite.org, SQLite 3},
  618. @item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
  619. standard C++11.
  620. @end itemize
  621. @cindex répertoire d'état
  622. Lorsque vous configurez Guix sur un système qui a déjà une installation de
  623. Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
  624. existante avec l'option @code{--localstatedir} du script @command{configure}
  625. (@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
  626. Standards}). Le script @command{configure} vous protège des mauvaises
  627. configurations involontaires de @var{localstatedir} pour éviter que vous ne
  628. corrompiez votre dépôt (@pxref{Le dépôt}).
  629. @cindex Nix, compatibilité
  630. Lorsque vous avez une installation fonctionnelle du
  631. @url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
  632. configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
  633. trois dépendances au dessus.
  634. Guix est compatible avec Nix, donc il est possible de partager le même dépôt
  635. entre les deux. Pour cela, vous devez passer à @command{configure} non
  636. seulement la même valeur de @code{--with-store-dir} mais aussi la même
  637. valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
  638. spécifie l'emplacement de la base de données qui stocke les métadonnées sur
  639. le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
  640. @code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
  641. Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
  642. partager le dépôt avec Nix.
  643. @node Lancer la suite de tests
  644. @section Lancer la suite de tests
  645. @cindex suite de tests
  646. Après avoir lancé @command{configure} et @code{make} correctement, c'est une
  647. bonne idée de lancer la suite de tests. Elle peut aider à trouver des
  648. erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
  649. lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
  650. d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
  651. @example
  652. make check
  653. @end example
  654. Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
  655. l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
  656. lancement peut prendre plusieurs minutes sur une machine récente ; les
  657. lancements suivants seront plus rapides car le dépôt créé pour les tests
  658. aura déjà plusieurs choses en cache.
  659. Il est aussi possible de lancer un sous-ensemble des tests en définissant la
  660. variable makefile @code{TESTS} comme dans cet exemple :
  661. @example
  662. make check TESTS="tests/store.scm tests/cpio.scm"
  663. @end example
  664. Par défaut, les résultats des tests sont affichés au niveau du fichier.
  665. Pour voir les détails de chaque cas de test individuel, il est possible de
  666. définire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
  667. exemple :
  668. @example
  669. make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
  670. @end example
  671. Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
  672. le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
  673. ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
  674. dans votre message.
  675. Guix possède aussi une suite de tests de systèmes complets qui test des
  676. instances complètes du système d'exploitation GuixSD@. Elle ne peut être
  677. lancée qui sur un système où Guix est déjà installé, avec :
  678. @example
  679. make check-system
  680. @end example
  681. @noindent
  682. Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
  683. des tests à lancer :
  684. @example
  685. make check-system TESTS="basic mcron"
  686. @end example
  687. Ces tests systèmes sont définis dans les modules @code{(gnu tests
  688. @dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
  689. avec une instrumentation légère dans une machine virtuelle (VM). Ils
  690. peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
  691. la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
  692. Certains requièrent beaucoup d'espace disque pour contenir les images des
  693. VM@.
  694. De nouveau, en cas d'échec, envoyez tous les détails à
  695. @email{bug-guix@@gnu.org}.
  696. @node Paramétrer le démon
  697. @section Paramétrer le démon
  698. @cindex démon
  699. Les opérations comme la construction d'un paquet ou le lancement du
  700. ramasse-miettes sont toutes effectuées par un processus spécialisé, le
  701. @dfn{démon de construction}, pour le compte des clients. Seul le démon peut
  702. accéder au dépôt et à sa base de données associée. Ainsi, toute opération
  703. manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
  704. commande comme @command{guix package} et @command{guix build} communiquent
  705. avec le démon (@i{via} des appels de procédures distantes) pour lui dire
  706. quoi faire.
  707. Les sections suivantes expliquent comment préparer l'environnement du démon
  708. de construction. Voir aussi @ref{Substituts} pour apprendre comment
  709. permettre le téléchargement de binaires pré-construits.
  710. @menu
  711. * Réglages de l'environnement de construction:: Préparer l'environnement
  712. de construction isolé.
  713. * Réglages du délestage du démon:: Envoyer des constructions à des
  714. machines distantes.
  715. * Support de SELinux:: Utiliser une politique SELinux pour le démon.
  716. @end menu
  717. @node Réglages de l'environnement de construction
  718. @subsection Réglages de l'environnement de construction
  719. @cindex environnement de construction
  720. Dans une installation standard multi-utilisateurs, Guix et son démon — le
  721. programme @command{guix-daemon} — sont installé par l'administrateur système
  722. ; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
  723. lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
  724. outils Guix pour construire des paquets ou accéder au dépôt et le démon le
  725. fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
  726. permet le partage des paquets déjà construits entre les utilisateurs.
  727. @cindex utilisateurs de construction
  728. Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
  729. forcément envie que les processus de construction de paquets tournent aussi
  730. en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
  731. vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
  732. que les processus de construction démarrés par le démon utiliseront. Ces
  733. utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
  734. personnel ; ils seront seulement utilisés quand le démon délaissera ses
  735. privilèges @code{root} dans les processus de construction. En ayant
  736. plusieurs de ces utilisateurs, vous permettez au démon de lancer des
  737. processus de construction distincts sous des UID différent, ce qui garanti
  738. qu'aucune interférence n'ait lieu entre les uns et les autres — une
  739. fonctionnalité essentielle puisque les constructions sont supposées être des
  740. fonctions pures (@pxref{Introduction}).
  741. Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
  742. construction comme ceci (avec la syntaxe Bash et les commandes
  743. @code{shadow}) :
  744. @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
  745. @c for why `-G' is needed.
  746. @example
  747. # groupadd --system guixbuild
  748. # for i in `seq -w 1 10`;
  749. do
  750. useradd -g guixbuild -G guixbuild \
  751. -d /var/empty -s `which nologin` \
  752. -c "Utilisateur de construction Guix $i" --system \
  753. guixbuilder$i;
  754. done
  755. @end example
  756. @noindent
  757. Le nombre d'utilisateurs de construction détermine le nombre de tâches de
  758. constructions qui peuvent tourner en parallèle, tel que spécifié par
  759. l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
  760. @option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
  761. commandes liées, vous devrez ajouter les utilisateurs de construction au
  762. groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
  763. @code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
  764. Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
  765. la commande suivante@footnote{Si votre machine utilise le système
  766. d'initialisation systemd, copiez le fichier
  767. @file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
  768. @file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
  769. démarré automatiquement. De même, si votre machine utilise le système
  770. d'initialisation Upstart, copiez le fichier
  771. @file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
  772. @file{/etc/init}.} :
  773. @example
  774. # guix-daemon --build-users-group=guixbuild
  775. @end example
  776. @cindex chroot
  777. @noindent
  778. De cette façon, le démon démarre les processus de construction dans un
  779. chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
  780. défaut, l'environnement chroot ne contient rien d'autre que :
  781. @c Keep this list in sync with libstore/build.cc! -----------------------
  782. @itemize
  783. @item
  784. un répertoire @code{/dev} minimal, créé presque indépendamment du
  785. @code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
  786. fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
  787. l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
  788. a pas.} ;
  789. @item
  790. le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
  791. on utilise une espace de nom séparé pour les PID ;
  792. @item
  793. @file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
  794. pour l'utilisateur @file{nobody} ;
  795. @item
  796. @file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
  797. @item
  798. @file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
  799. @code{127.0.0.1} ;
  800. @item
  801. un répertoire @file{/tmp} inscriptible.
  802. @end itemize
  803. Vous pouvez influencer le répertoire où le démon stocke les arbres de
  804. construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
  805. l'arbre de construction dans le chroot sera toujours appelé
  806. @file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
  807. dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
  808. @code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
  809. ce qui évite des différences lorsque le processus de construction retient le
  810. nom de leur répertoire de construction.
  811. @vindex http_proxy
  812. Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
  813. pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
  814. fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
  815. Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
  816. toujours possible de lancer @command{guix-daemon} si vous passez
  817. @code{--disable-chroot}. Cependant, les processus de construction ne seront
  818. pas isolés les uns des autres ni du reste du système. Ainsi les processus
  819. de construction peuvent interférer les uns avec les autres, et peuvent
  820. accéder à des programmes, des bibliothèques et d'autres fichiers présents
  821. sur le système — ce qui rend plus difficile de les voir comme des fonctions
  822. @emph{pures}.
  823. @node Réglages du délestage du démon
  824. @subsection Utiliser le dispositif de déchargement
  825. @cindex déchargement
  826. @cindex crochet de construction
  827. Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
  828. constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
  829. de construction} @code{offload}@footnote{Cette fonctionnalité n'est
  830. disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
  831. Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
  832. lit une liste de machines de constructions spécifiée par l'utilisateur dans
  833. @file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
  834. demandée, par exemple par @code{guix build}, le démon essaie de la décharger
  835. sur une des machines qui satisfont les contraintes de la dérivation, en
  836. particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
  837. prérequis manquants pour la construction sont copiés par SSH sur la machine
  838. de construction qui procède ensuite à la construction ; si elle réussi, les
  839. sorties de la construction sont copiés vers la machine de départ.
  840. Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
  841. @example
  842. (list (build-machine
  843. (name "eightysix.example.org")
  844. (system "x86_64-linux")
  845. (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
  846. (user "bob")
  847. (speed 2.)) ;très rapide !
  848. (build-machine
  849. (name "meeps.example.org")
  850. (system "mips64el-linux")
  851. (host-key "ssh-rsa AAAAB3Nza@dots{}")
  852. (user "alice")
  853. (private-key
  854. (string-append (getenv "HOME")
  855. "/.ssh/identity-for-guix"))))
  856. @end example
  857. @noindent
  858. Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
  859. construction, une pour l'architecture @code{x86_64} et une pour
  860. l'architecture @code{mips64el}.
  861. En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
  862. fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
  863. valeur de retour doit être une liste d'objets @code{build-machine}. Même si
  864. cet exemple montre une liste fixée de machines de construction, on pourrait
  865. imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
  866. constructions potentielles découvertes sur le réseau local
  867. (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
  868. Programs}). Le type de données @code{build-machine} est détaillé plus bas.
  869. @deftp {Type de données} build-machine
  870. Ce type de données représente les machines de construction sur lesquelles le
  871. démon peut décharger des constructions. Les champs importants sont :
  872. @table @code
  873. @item name
  874. Le nom d'hôte de la machine distante.
  875. @item system
  876. Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
  877. @item user
  878. Le compte utilisateur à utiliser lors de la connexion à la machine distante
  879. par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
  880. protégée par mot de passe pour permettre des connexions non-interactives.
  881. @item host-key
  882. Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
  883. OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
  884. connexion. C'est une longue chaîne qui ressemble à cela :
  885. @example
  886. ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
  887. @end example
  888. Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
  889. trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
  890. Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
  891. @file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
  892. convertie au format OpenSSH avec @command{lsh-export-key}
  893. (@pxref{Converting keys,,, lsh, LSH Manual}) :
  894. @example
  895. $ lsh-export-key --openssh < /etc/lsh/host-key.pub
  896. ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
  897. @end example
  898. @end table
  899. Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
  900. @table @asis
  901. @item @code{port} (par défaut : @code{22})
  902. Numéro de port du serveur SSH sur la machine.
  903. @item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
  904. Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
  905. au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
  906. passe.
  907. Remarquez que la valeur par défaut est la clef privée @emph{du compte
  908. root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
  909. @item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
  910. @itemx @code{compression-level} (par défaut : @code{3})
  911. Les méthodes de compression au niveau SSH et le niveau de compression
  912. demandé.
  913. Remarquez que le déchargement utilise la compression SSH pour réduire la
  914. bande passante utilisée lors du transfert vers et depuis les machines de
  915. construction.
  916. @item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
  917. Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
  918. écoute sur cette machine.
  919. @item @code{parallel-builds} (par défaut : @code{1})
  920. Le nombre de constructions qui peuvent tourner simultanément sur la machine.
  921. @item @code{speed} (par défaut : @code{1.0})
  922. Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
  923. à préférer les machines avec un plus grand facteur de vitesse.
  924. @item @code{features} (par défaut : @code{'()})
  925. Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
  926. par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
  927. module Linux KVM et le support matériel correspondant. Les dérivations
  928. peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
  929. les machines de construction correspondantes.
  930. @end table
  931. @end deftp
  932. La commande @code{guile} doit être dans le chemin de recherche des machines
  933. de construction. En plus, les modules Guix doivent se trouver dans
  934. @code{$GUILE_LOAD_PATH} sur la machine de construction. Vous pouvez
  935. vérifier si c'est le cas en lançant :
  936. @example
  937. ssh build-machine guile -c "'(use-modules (guix config))'"
  938. @end example
  939. Il reste une dernière chose à faire maintenant que @file{machines.scm} est
  940. en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
  941. transférés entre les dépôts des machines. Pour que cela fonctionne, vous
  942. devez d'abord générer une paire de clef sur chaque machine pour permettre au
  943. démon d'exporter des archives signées des fichiers de son dépôt
  944. (@pxref{Invoquer guix archive}) :
  945. @example
  946. # guix archive --generate-key
  947. @end example
  948. @noindent
  949. Chaque machine de construction doit autoriser la clef de la machine
  950. maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
  951. @example
  952. # guix archive --authorize < master-public-key.txt
  953. @end example
  954. @noindent
  955. De même, la machine maîtresse doit autoriser les clefs de chaque machine de
  956. construction.
  957. Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
  958. deux-à-deux entre le maître et les machines de construction. Concrètement,
  959. lorsque le maître reçoit des fichiers d'une machine de construction (et
  960. vice-versa), son démon de construction s'assure qu'ils sont authentiques,
  961. n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
  962. autorisée.
  963. @cindex test du déchargement
  964. Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
  965. nœud maître :
  966. @example
  967. # guix offload test
  968. @end example
  969. Cela essaiera de se connecter à toutes les machines de construction
  970. spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
  971. modules Guix sont disponibles sur toutes les machines et tentera d'exporter
  972. vers la machine et d'importer depuis elle, et rapportera toute erreur
  973. survenu pendant le processus.
  974. Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
  975. la ligne de commande :
  976. @example
  977. # guix offload test machines-qualif.scm
  978. @end example
  979. Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
  980. correspond à une expression rationnelle comme ceci :
  981. @example
  982. # guix offload test machines.scm '\.gnu\.org$'
  983. @end example
  984. @cindex statut du déchargement
  985. Pour afficher la charge actuelle de tous les hôtes de construction, lancez
  986. cette commande sur le nœud principal :
  987. @example
  988. # guix offload status
  989. @end example
  990. @node Support de SELinux
  991. @subsection Support de SELinux
  992. @cindex SELinux, politique du démon
  993. @cindex contrôle d'accès obligatoire, SELinux
  994. @cindex sécurité, guix-daemon
  995. Guix inclus un fichier de politique SELniux dans @file{etc/guix-daemon.cil}
  996. qui peut être installé sur un système où SELinux est activé pour que les
  997. fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
  998. démon. Comme GuixSD ne fournit pas de politique SELniux de base, la
  999. politique du démon ne peut pas être utilisée sur GuixSD@.
  1000. @subsubsection Installer la politique SELinux
  1001. @cindex SELinux, installation de la politique
  1002. Pour installer la politique, lancez cette commande en root :
  1003. @example
  1004. semodule -i etc/guix-daemon.cil
  1005. @end example
  1006. Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
  1007. mécanisme différent fournit par votre système.
  1008. Une fois la politique installée, le système de fichier ré-étiqueté et le
  1009. démon redémarré, il devrait être lancé dans le contexte
  1010. @code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
  1011. @example
  1012. ps -Zax | grep guix-daemon
  1013. @end example
  1014. Surveillez les fichiers journaux de SELinux pendant que vous lancez une
  1015. commande comme @code{guix build hello} pour vous convaincre que SELniux
  1016. permet toutes les opérations nécessaires.
  1017. @subsubsection Limitations
  1018. @cindex SELinux, limites
  1019. La politique n'et pas parfaite. Voici une liste de limitations et de
  1020. bizarreries qui vous devriez prendre en compte avant de déployer la
  1021. politique SELinux fournie pour le démon Guix.
  1022. @enumerate
  1023. @item
  1024. @code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
  1025. opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
  1026. soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
  1027. une étiquette inutilisée, mais il serait préférable de définir des règles
  1028. sur les sockets uniquement pour cette étiquette.
  1029. @item
  1030. @code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
  1031. Par conception, l'étiquette de fichier de la destination d'un lien
  1032. symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
  1033. les profils sous $localstatedir aient une étiquette, les liens vers ces
  1034. profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
  1035. Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
  1036. Mais pour les liens du répertoire personnel de l'utilisateur root, ou
  1037. @file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
  1038. fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
  1039. ces liens.
  1040. @item
  1041. La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
  1042. fonctionner. Cela demande des règles supplémentaires car SELinux traite les
  1043. sockets réseau différemment des fichiers.
  1044. @item
  1045. Actuellement tous les fichiers qui correspondent à l'expression rationnelle
  1046. @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
  1047. @code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
  1048. nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
  1049. @code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
  1050. un paquet qui fournit cet exécutable et convaincre un utilisateur de
  1051. l'installer et de le lancer, ce qui l'élève dans le domaine
  1052. @code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
  1053. d'accéder à des fichiers autorisés pour les processus de ce domaine.
  1054. Nous pourrions générer une politique bien plus restrictive à l'installation,
  1055. pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
  1056. @code{guix-daemon} actuellement installé soit étiqueté avec
  1057. @code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
  1058. plus large. L'inconvénient c'est que root devrait installer ou mettre à
  1059. jour la politique à l'installation à chaque fois que le paquet Guix qui
  1060. fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
  1061. jour.
  1062. @end enumerate
  1063. @node Invoquer guix-daemon
  1064. @section Invoquer @command{guix-daemon}
  1065. Le programme @command{guix-daemon} implémente toutes les fonctionnalités
  1066. d'accès au dépôt. Cela inclus le lancement des processus de construction,
  1067. le lancement du ramasse-miettes, la demande de disponibilité des résultats
  1068. de construction, etc. Il tourne normalement en @code{root} comme ceci :
  1069. @example
  1070. # guix-daemon --build-users-group=guixbuild
  1071. @end example
  1072. @noindent
  1073. Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
  1074. @cindex chroot
  1075. @cindex conteneur, environnement de construction
  1076. @cindex environnement de construction
  1077. @cindex constructions reproductibles
  1078. Par défaut, @command{guix-daemon} lance les processus de construction sous
  1079. différents UID récupérés depuis le groupe de construction spécifié avec
  1080. @code{--build-users-group}. En plus, chaque processus de construction est
  1081. lancé dans un environnement chroot qui ne contient que le sous-ensemble du
  1082. dépôt dont le processus de construction dépend, tel que spécifié par sa
  1083. dérivation (@pxref{Interface de programmation, dérivation}), plus un
  1084. ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
  1085. contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
  1086. l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
  1087. propre arborescence du système de fichier, elle a un espace de montage
  1088. séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
  1089. obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
  1090. Lorsque le démon effectue une construction pour le compte de l'utilisateur,
  1091. il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
  1092. variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
  1093. conteneur pendant la durée de la construction, bien que dans le conteneur,
  1094. l'arborescence de construction est toujours appelée
  1095. @file{/tmp/guix-build-@var{name}.drv-0}.
  1096. Le répertoire de construction est automatiquement supprimé à la fin, à moins
  1097. que la construction n'ait échoué et que le client ait spécifié
  1098. @option{--keep-failed} (@pxref{Invoquer guix build,
  1099. @option{--keep-failed}}).
  1100. Le démon écoute les connexions et démarre un sous-processus pour chaque
  1101. session démarrée par un client (l'une des sous-commandes de
  1102. @command{guix}). La commande @command{guix processes} vous permet d'obtenir
  1103. un aperçu de l'activité sur votre système en affichant chaque session et
  1104. client actif. @xref{Invoquer guix processes} pour plus d'informations.
  1105. Les options en ligne de commande suivantes sont disponibles :
  1106. @table @code
  1107. @item --build-users-group=@var{groupe}
  1108. Prendre les utilisateurs de @var{group} pour lancer les processus de
  1109. construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
  1110. @item --no-substitutes
  1111. @cindex substituts
  1112. Ne pas utiliser de substitut pour les résultats de la construction.
  1113. C'est-à-dire, toujours construire localement plutôt que de permettre le
  1114. téléchargement de binaires pré-construits (@pxref{Substituts}).
  1115. Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
  1116. toujours activer explicitement la substitution @i{via} l'appel de procédure
  1117. distante @code{set-build-options} (@pxref{Le dépôt}).
  1118. @item --substitute-urls=@var{urls}
  1119. @anchor{daemon-substitute-urls}
  1120. Considèrer @var{urls} comme la liste séparée par des espaces des URL des
  1121. sources de substituts par défaut. Lorsque cette option est omise,
  1122. @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé
  1123. (@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}).
  1124. Cela signifie que les substituts sont téléchargés depuis les @var{urls},
  1125. tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
  1126. @cindex crochet de construction
  1127. @item --no-build-hook
  1128. Ne pas utiliser le @dfn{crochet de construction}.
  1129. Le crochet de construction est un programme d'aide qui le démon peut
  1130. démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
  1131. utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
  1132. @item --cache-failures
  1133. Mettre les échecs de construction en cache. Par défaut, seules les
  1134. constructions réussies sont mises en cache.
  1135. Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
  1136. être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
  1137. échoués ; @command{guix gc --clear-failures} vide la liste des éléments
  1138. aillant échoué. @xref{Invoquer guix gc}.
  1139. @item --cores=@var{n}
  1140. @itemx -c @var{n}
  1141. Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
  1142. signifie autant que possible.
  1143. La valeur par défaut est @code{0}, mais elle peut être modifiée par les
  1144. clients comme avec l'option @code{--cores} de @command{guix build}
  1145. (@pxref{Invoquer guix build}).
  1146. L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
  1147. dans le processus de construction, qui peut ensuite l'utiliser pour
  1148. exploiter le parallélisme en interne — par exemple en lançant @code{make
  1149. -j$NIX_BUILD_CORES}.
  1150. @item --max-jobs=@var{n}
  1151. @itemx -M @var{n}
  1152. Permettre au plus @var{n} travaux de construction en parallèle. La valeur
  1153. par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
  1154. construction ne sera effectuée localement ; à la place, le démon déchargera
  1155. les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
  1156. @item --max-silent-time=@var{secondes}
  1157. Lorsque le processus de construction ou de substitution restent silencieux
  1158. pendant plus de @var{secondes}, le terminer et rapporter une erreur de
  1159. construction.
  1160. La valeur par défaut est @code{0}, ce qui désactive le délai.
  1161. La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
  1162. @item --timeout=@var{secondes}
  1163. De même, lorsque le processus de construction ou de substitution dure plus
  1164. de @var{secondes}, le terminer et rapporter une erreur de construction.
  1165. La valeur par défaut est @code{0}, ce qui désactive le délai.
  1166. La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
  1167. @item --rounds=@var{N}
  1168. Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
  1169. si les résultats de construction consécutifs ne sont pas identiques
  1170. bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
  1171. comme @command{guix build} (@pxref{Invoquer guix build}).
  1172. Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
  1173. dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
  1174. l'étude des différences entre les deux résultats.
  1175. @item --debug
  1176. Produire une sortie de débogage.
  1177. Cela est utile pour déboguer des problèmes de démarrage du démon, mais
  1178. ensuite elle peut être modifiée par les clients, par exemple par l'option
  1179. @code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
  1180. @item --chroot-directory=@var{rép}
  1181. Ajouter @var{rép} au chroot de construction
  1182. Cela peut changer le résultat d'un processus de construction — par exemple
  1183. s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
  1184. est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
  1185. d'utiliser cette option. À la place, assurez-vous que chaque dérivation
  1186. déclare toutes les entrées dont elle a besoin.
  1187. @item --disable-chroot
  1188. Désactive les constructions dans un chroot.
  1189. Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
  1190. processus de construction d'accéder à des dépendances non déclarées. Elle
  1191. est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
  1192. qu'utilisateur non privilégié.
  1193. @item --log-compression=@var{type}
  1194. Compresser les journaux de construction suivant le @var{type}, parmi
  1195. @code{gzip}, @code{bzip2} ou @code{none}.
  1196. À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
  1197. construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
  1198. le démon les compresse automatiquement avec bzip2 par défaut.
  1199. @item --disable-deduplication
  1200. @cindex déduplication
  1201. Désactiver la « déduplication » automatique des fichiers dans le dépôt.
  1202. Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
  1203. » : si un nouveau fichier est identique à un autre fichier trouvé dans le
  1204. dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
  1205. considérablement l'utilisation de l'espace disque au prix d'une charge en
  1206. entrée/sortie plus grande à la fin d'un processus de construction. Cette
  1207. option désactive cette optimisation.
  1208. @item --gc-keep-outputs[=yes|no]
  1209. Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
  1210. utilisées.
  1211. @cindex racines du GC
  1212. @cindex racines du ramasse-miettes
  1213. Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
  1214. dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
  1215. valeur par défaut est « no », ce qui signifie que les sorties des
  1216. dérivations ne sont gardées que si elles sont accessibles à partir d'une
  1217. racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
  1218. racines du GC.
  1219. @item --gc-keep-derivations[=yes|no]
  1220. Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
  1221. des sorties utilisées.
  1222. Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
  1223. dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
  1224. leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
  1225. trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
  1226. peu d'espace disque.
  1227. De cette manière, avec @code{--gc-keep-derivations} à « yes »,
  1228. l'accessibilité des sorties s'étend des sorties aux dérivations et avec
  1229. @code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
  1230. sorties. Quand les deux options sont à « yes », le GC gardera tous les
  1231. prérequis de construction (les sources, le compilateur, les bibliothèques,
  1232. et les autres outils de construction) des objets accessibles dans le dépôt,
  1233. indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
  1234. GC. Cela est pratique pour les développeurs car ça leur fait gagner du
  1235. temps de reconstruction et de téléchargement.
  1236. @item --impersonate-linux-2.6
  1237. Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
  1238. signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
  1239. numéro de version.
  1240. Cela peut être utile pour construire des programmes qui dépendent
  1241. (généralement sans fondement) du numéro de version du noyau.
  1242. @item --lose-logs
  1243. Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
  1244. @code{@var{localstatedir}/guix/log}.
  1245. @item --system=@var{système}
  1246. Supposer que @var{système} est le type de système actuel. Par défaut c'est
  1247. la paire architecture-noyau trouvée à la configuration, comme
  1248. @code{x86_64-linux}.
  1249. @item --listen=@var{extrémité}
  1250. Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
  1251. comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
  1252. (barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
  1253. domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
  1254. @table @code
  1255. @item --listen=/gnu/var/daemon
  1256. Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
  1257. le créant si besoin.
  1258. @item --listen=localhost
  1259. @cindex démon, accès distant
  1260. @cindex accès distant au démon
  1261. @cindex démon, paramètres de grappes
  1262. @cindex grappes, paramètres du démon
  1263. Écouter les connexions TCP sur l'interface réseau correspondant à
  1264. @code{localhost} sur le port 44146.
  1265. @item --listen=128.0.0.42:1234
  1266. Écouter les connexions TCP sur l'interface réseau correspondant à
  1267. @code{128.0.0.42} sur le port 1234.
  1268. @end table
  1269. Cette option peut être répétée plusieurs fois, auquel cas
  1270. @command{guix-daemon} accepte des connexions sur toutes les extrémités
  1271. spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
  1272. extrémité se connecter en paramétrant la variable d'environnement
  1273. @code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
  1274. @quotation Remarque
  1275. Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
  1276. @code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
  1277. grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
  1278. démon de construction. Dans les autres cas où l'accès à distance au démon
  1279. est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
  1280. @end quotation
  1281. Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
  1282. connexions sur le socket Unix-domain situé à
  1283. @file{@var{localstatedir}/guix/daemon-socket/socket}.
  1284. @end table
  1285. @node Réglages applicatifs
  1286. @section Réglages applicatifs
  1287. @cindex distro extérieure
  1288. Lorsque vous utilisez Guix par dessus une distribution GNU/Linux différente
  1289. de GuixSD — ce qu'on appelle une @dfn{distro externe} — quelques étapes
  1290. supplémentaires sont requises pour que tout soit en place. En voici
  1291. certaines.
  1292. @subsection Régionalisation
  1293. @anchor{locales-and-locpath}
  1294. @cindex régionalisation, en dehors de GuixSD
  1295. @vindex LOCPATH
  1296. @vindex GUIX_LOCPATH
  1297. Les paquets installés @i{via} Guix n'utiliseront pas les données de
  1298. régionalisation du système hôte. À la place, vous devrez d'abord installer
  1299. l'un des paquets linguistiques disponibles dans Guix puis définir la
  1300. variable d'environnement @code{GUIX_LOCPATH} :
  1301. @example
  1302. $ guix package -i glibc-locales
  1303. $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
  1304. @end example
  1305. Remarquez que le paquet @code{glibc-locales} contient les données pour tous
  1306. les environnement linguistiques supportés par la GNU@tie{}libc et pèse
  1307. environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
  1308. petit mais limité à quelques environnements UTF-8.
  1309. La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
  1310. (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
  1311. Manual}). Il y a deux différences importantes cependant :
  1312. @enumerate
  1313. @item
  1314. @code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
  1315. libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
  1316. vous permet de vous assurer que les programmes de la distro externe ne
  1317. chargeront pas de données linguistiques incompatibles.
  1318. @item
  1319. La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
  1320. @code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
  1321. @code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
  1322. de programmes liés avec des versions différentes de la libc, chaque version
  1323. de la libc essaiera de charger les environnements linguistiques dans le bon
  1324. format.
  1325. @end enumerate
  1326. Cela est important car le format des données linguistiques utilisés par
  1327. différentes version de la libc peuvent être incompatibles.
  1328. @subsection Name Service Switch
  1329. @cindex name service switch, glibc
  1330. @cindex NSS (name service switch), glibc
  1331. @cindex nscd (name service caching daemon)
  1332. @cindex name service caching daemon (nscd)
  1333. Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
  1334. fortement} que ce système fasse tourner le @dfn{démon de cache de service de
  1335. noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
  1336. le socket @file{/var/run/nscd/socket}. Sans cela, les applications
  1337. installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
  1338. d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
  1339. pourquoi.
  1340. @cindex @file{nsswitch.conf}
  1341. La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
  1342. est un mécanisme d'extension pour les « résolutions de noms » en général :
  1343. résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
  1344. @cindex Network information service (NIS)
  1345. @cindex NIS (Network information service)
  1346. Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
  1347. nouvelle implémentation de résolution de nom : par exemple le greffon
  1348. @code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
  1349. greffon @code{nis} permet la résolution de comptes utilisateurs avec le
  1350. Network Information Service (NIS), etc. Ces « services de recherches »
  1351. supplémentaires sont configurés au niveau du système dans
  1352. @file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
  1353. système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
  1354. GNU C Reference Manual})
  1355. Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
  1356. appelant la fonction @code{getaddrinfo} en C — les applications essayent
  1357. d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
  1358. résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectue la
  1359. résolution eux-même, en changeant les service de résolution dans leur propre
  1360. espace d'adressage et en le lançant. Ce services de résolution de noms —
  1361. les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils peuvent
  1362. provenir de la bibliothèque C du système, plutôt que de la bibliothèque C à
  1363. laquelle l'application est liée (la bibliothèque C de Guix).
  1364. Et c'est là que se trouve le problème : si votre application est liée à la
  1365. bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
  1366. greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
  1367. glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
  1368. échoue de manière inattendue.
  1369. Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
  1370. problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
  1371. chargés par le processus @command{nscd}, pas par l'application elle-même.
  1372. @subsection Polices X11
  1373. @cindex polices
  1374. La majorité des applications graphiques utilisent fontconfig pour trouver et
  1375. charger les police et effectuer le rendu côté client X11. Le paquet
  1376. @code{fontconfig} dans Guix cherche les polices dans
  1377. @file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
  1378. applications graphiques installées avec Guix d'afficher des polices, vous
  1379. devez aussi installer des polices avec Guix. Les paquets de polices
  1380. essentiels sont @code{gs-fonts}, @code{font-dejavu} et
  1381. @code{font-gnu-freefont-ttf}.
  1382. Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
  1383. les applications graphiques, installez @code{font-adobe-source-han-sans} ou
  1384. @code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
  1385. langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
  1386. suivante installe les polices pour le chinois :
  1387. @example
  1388. guix package -i font-adobe-source-han-sans:cn
  1389. @end example
  1390. @cindex @code{xterm}
  1391. Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
  1392. s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
  1393. spécifier le nom complet de la police en utlisant XLFD (X Logical Font
  1394. Description), comme ceci :
  1395. @example
  1396. -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
  1397. @end example
  1398. Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
  1399. dans votre profil Guix, vous devez étendre le chemin des polices du serveur
  1400. X :
  1401. @c Note: 'xset' does not accept symlinks so the trick below arranges to
  1402. @c get at the real directory. See <https://bugs.gnu.org/30655>.
  1403. @example
  1404. xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
  1405. @end example
  1406. @cindex @code{xlsfonts}
  1407. Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
  1408. vous assurer que vos polices TrueType y sont listées.
  1409. @cindex @code{fc-cache}
  1410. @cindex cache de polices
  1411. Après l'installation des polices vous devrez peut-être rafraîchir le cache
  1412. des polices pour pouvoir les utiliser dans les applications. Ça s'applique
  1413. aussi lorsque les applications installées avec Guix n'ont pas l'air de
  1414. trouver les polices. Pour forcer la reconstruction du cache de polices
  1415. lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
  1416. paquet @code{fontconfig}.
  1417. @subsection Certificats X.509
  1418. @cindex @code{nss-certs}
  1419. Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
  1420. programmes d'authentifier les serveurs web par HTTPS@.
  1421. Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
  1422. installer ce paquet et définir les variables d'environnement adéquates pour
  1423. que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
  1424. @subsection Paquets emacs
  1425. @cindex @code{emacs}
  1426. Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
  1427. peuvent être placés soit dans
  1428. @file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
  1429. sous-répertoires de
  1430. @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
  1431. car il existe potentiellement des milliers de paquets Emacs et stocker leurs
  1432. fichiers dans un seul répertoire peut ne pas être fiable (à cause de
  1433. conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
  1434. bonne idée. C'est très similaire à la manière dont le système de paquet
  1435. d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
  1436. The GNU Emacs Manual}).
  1437. Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
  1438. donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
  1439. ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
  1440. installés avec Guix, vous pouvez le faire en lançaint Emacs avec l'option
  1441. @code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
  1442. @subsection La chaîne d'outils GCC
  1443. @cindex GCC
  1444. @cindex ld-wrapper
  1445. Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
  1446. vous avez besoin d'une chaîne de compilation complète pour compiler et lier
  1447. du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
  1448. paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
  1449. lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
  1450. symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
  1451. pour l'éditeur de liens.
  1452. @cindex tentative d'utiliser une bibliothèque impure, message d'erreur
  1453. Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
  1454. passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
  1455. correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
  1456. ensemble d'arguments. Par défaut, l'enveloppe refuse de lier des
  1457. bibliothèques en dehors du dépôt pour assure la « pureté ». Cela peut être
  1458. embêtant lorsque vous utilisez la chaîne d'outils pour lier des
  1459. bibliothèques locales. Pour permettre des références à des bibliothèques en
  1460. dehors du dépôt, vous devrez définir la variable d'environnement
  1461. @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
  1462. @c TODO What else?
  1463. @c *********************************************************************
  1464. @node Gestion de paquets
  1465. @chapter Gestion de paquets
  1466. @cindex paquets
  1467. Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
  1468. jour et supprimer facilement des paquets logiciels sans devoir connaître
  1469. leur procédure de construction ou leurs dépendances. Guix va aussi plus
  1470. loin que ces fonctionnalités évidentes.
  1471. Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
  1472. outils de gestion des paquets qu'il fournit. En plus de l'interface en
  1473. ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
  1474. @code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
  1475. (@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
  1476. avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
  1477. guix-help} pour le démarrer) :
  1478. @example
  1479. guix package -i emacs-guix
  1480. @end example
  1481. @menu
  1482. * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
  1483. * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
  1484. * Substituts:: Télécharger des binaire déjà construits.
  1485. * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
  1486. résultats.
  1487. * Invoquer guix gc:: Lancer le ramasse-miettes.
  1488. * Invoquer guix pull:: Récupérer la dernière version de Guix et de
  1489. la distribution.
  1490. * Canaux:: Personnaliser la collection des paquets.
  1491. * Inférieurs:: Interagir avec une autre révision de Guix.
  1492. * Invoquer guix describe:: Affiche des informations sur la révision Guix
  1493. actuelle.
  1494. * Invoquer guix pack:: Créer des lots de logiciels.
  1495. * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
  1496. @end menu
  1497. @node Fonctionnalités
  1498. @section Fonctionnalités
  1499. Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
  1500. paquets}, dans son propre répertoire — quelque chose comme
  1501. @file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
  1502. Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
  1503. propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
  1504. utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
  1505. utilisateur dans @code{$HOME/.guix-profile}.
  1506. Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
  1507. @file{/home/alice/.guix-profile/bin/gcc} pointe vers
  1508. @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
  1509. machine, @code{bob} a déjà intallé GCC 4.8.0. Le profil de @code{bob}
  1510. continue simplement de pointer vers
  1511. @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
  1512. GCC coexistent surs le même système sans aucune interférence.
  1513. La commande @command{guix package} est l'outil central pour gérer les
  1514. paquets (@pxref{Invoquer guix package}). Il opère sur les profils
  1515. utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
  1516. normaux}.
  1517. @cindex transactions
  1518. La commande fournit les opérations évidentes d'installation, de suppression
  1519. et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
  1520. soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
  1521. processus @command{guix package} est terminé pendant la transaction ou si
  1522. une panne de courant arrive pendant la transaction, le profil de
  1523. l'utilisateur reste dans son état précédent et reste utilisable.
  1524. En plus, il est possible @emph{d'annuler} toute transaction sur les
  1525. paquets. Donc si par exemple un mise à jour installe une nouvelle version
  1526. d'un paquet qui révèle un bogue sérieux, les utilisateurs peuvent revenir en
  1527. arrière à l'instance précédente de leur profil qui est connu pour bien
  1528. fonctionner. De manière similaire, la configuration globale du système dans
  1529. GuixSD est sujette aux mises à jour transactionnelles et aux annulations
  1530. (@pxref{Utiliser le système de configuration}).
  1531. Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
  1532. déterminer quels paquets sont toujours référencés par les profils des
  1533. utilisateurs et supprimer ceux qui ne sont plus référencés de manière
  1534. prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
  1535. explicitement supprimer les anciennes générations de leur profil pour que
  1536. les paquets auxquels elles faisaient référence puissent être glanés.
  1537. @cindex reproductibilité
  1538. @cindex constructions reproductibles
  1539. Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
  1540. paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
  1541. Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
  1542. de toutes les entrées qui ont été utilisées pendant la construction de ce
  1543. paquet — le compilateur, les bibliothèques, les scripts de construction,
  1544. etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
  1545. l'installation d'un paquet donné correspond à l'état actuel de leur
  1546. distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
  1547. aux environnements de construction utilisés, une construction donnée à de
  1548. forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
  1549. effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
  1550. container}).
  1551. @cindex substituts
  1552. Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
  1553. binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
  1554. @file{/gnu/store} est disponible depuis une source externe (un
  1555. @dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
  1556. il construit le paquet depuis les sources localement (@pxref{Substituts}).
  1557. Comme les résultats des constructions sont généralement reproductibles au
  1558. bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
  1559. fournissent les substituts : vous pouvez forcer une construction locale et
  1560. @emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
  1561. Le contrôle de l'environnement de construction est aussi une fonctionnalité
  1562. utile pour les développeurs. La commande @command{guix environment} permet
  1563. aux développeurs d'un paquet de mettre en place rapidement le bon
  1564. environnement de développement pour leur paquet, sans avoir à installer
  1565. manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
  1566. @cindex réplication, des environnements logiciels
  1567. @cindex suivi de la provenance, des artefacts logiciels
  1568. La totalité de Guix et des définitions de paquets sont placés sous contrôle
  1569. de version, et @command{guix pull} vous permet de « voyager dans le temps »
  1570. de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
  1571. rend possible la réplication d'une instance Guix sur une machine différente
  1572. ou plus tard, ce qui vous permet de @emph{répliquer des environnements
  1573. logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
  1574. précis des logiciels.
  1575. @node Invoquer guix package
  1576. @section Invoquer @command{guix package}
  1577. @cindex installer des paquets
  1578. @cindex supprimer des paquets
  1579. @cindex installation de paquets
  1580. @cindex suppression de paquets
  1581. La commande @command{guix package} est l'outil qui permet d'installer,
  1582. mettre à jour et supprimer les paquets ainsi que de revenir à une
  1583. configuration précédente. Elle n'opère que dans le profil de l'utilisateur
  1584. et fonctionne avec les privilèges utilisateurs normaux
  1585. (@pxref{Fonctionnalités}). Sa syntaxe est :
  1586. @example
  1587. guix package @var{options}
  1588. @end example
  1589. @cindex transactions
  1590. @var{options} spécifie d'abord les opérations à effectuer pendant la
  1591. transaction. À la fin, une nouvelle génération du profil est créée mais les
  1592. @dfn{générations} précédentes du profil restent disponibles si l'utilisateur
  1593. souhaite y revenir.
  1594. Par exemple, pour supprimer @code{lua} et installer @code{guile} et
  1595. @code{guile-cairo} en une seule transaction :
  1596. @example
  1597. guix package -r lua -i guile guile-cairo
  1598. @end example
  1599. @command{guix package} supporte aussi une @dfn{approche déclarative} où
  1600. l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
  1601. disponibles le passe @i{via} l'option @option{--manifest}
  1602. (@pxref{profile-manifest, @option{--manifest}}).
  1603. @cindex profil
  1604. Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
  1605. utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
  1606. lien symbolique pointe toujours vers la génération actuelle du profil par
  1607. défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
  1608. @file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
  1609. etc.
  1610. @cindex chemins de recherche
  1611. Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
  1612. les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
  1613. Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
  1614. ensuite aient les bonnes définitions des variables d'environnement :
  1615. @example
  1616. GUIX_PROFILE="$HOME/.guix-profile" ; \
  1617. source "$HOME/.guix-profile/etc/profile"
  1618. @end example
  1619. Dans un environnement multi-utilisateur, les profils utilisateurs sont
  1620. stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
  1621. @file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
  1622. normalement
  1623. @code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
  1624. @var{localstatedir} est la valeur passée à @code{configure} avec
  1625. @code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
  1626. répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
  1627. démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
  1628. package}.
  1629. Les @var{options} peuvent être les suivante :
  1630. @table @code
  1631. @item --install=@var{paquet} @dots{}
  1632. @itemx -i @var{paquet} @dots{}
  1633. Installer les @var{paquet}s spécifiés.
  1634. Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
  1635. @code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
  1636. version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
  1637. dernier cas, la version la plus récente commençant par @code{1.8} est
  1638. utilisée).
  1639. Si aucun numéro de version n'est spécifié, la version la plus récente
  1640. disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
  1641. suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
  1642. @code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
  1643. paquets avec un nom correspondant et (éventuellement une version) sont
  1644. recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
  1645. @cindex entrées propagées
  1646. Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
  1647. dépendances qui sont installées automatiquement avec le paquet demandé
  1648. (@pxref{package-propagated-inputs, @code{propagated-inputs} in
  1649. @code{package} objects} pour plus d'informations sur les entrées propagées
  1650. dans les définitions des paquets).
  1651. @anchor{package-cmd-propagated-inputs}
  1652. Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
  1653. réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
  1654. ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
  1655. bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
  1656. MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
  1657. installés explicitement par l'utilisateur.
  1658. D'autre part, les paquets dépendent parfois de la définition de variables
  1659. d'environnement pour leur chemin de recherche (voir les explications sur
  1660. @code{--search-paths} plus bas). Toute définition de variable
  1661. d'environnement manquante ou possiblement incorrecte est rapportée ici.
  1662. @item --install-from-expression=@var{exp}
  1663. @itemx -e @var{exp}
  1664. Installer le paquet évalué par @var{exp}
  1665. @var{exp} doit être une expression Scheme qui s'évalue en un objet
  1666. @code{<package>}. Cette option est notamment utile pour distinguer les
  1667. variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
  1668. (gnu packages base) guile-final)}.
  1669. Remarquez que cette option installe la première sortie du paquet, ce qui
  1670. peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
  1671. paquet à plusieurs sorties.
  1672. @item --install-from-file=@var{fichier}
  1673. @itemx -f @var{fichier}
  1674. Installer le paquet évalué par le code dans le @var{fichier}.
  1675. Par exemple, @var{fichier} peut contenir une définition comme celle-ci
  1676. (@pxref{Définition des paquets}) :
  1677. @example
  1678. @verbatiminclude package-hello.scm
  1679. @end example
  1680. Les développeurs peuvent trouver utile d'inclure un tel fichier
  1681. @file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
  1682. pourrait être utilisé pour tester des versions de développement et créer des
  1683. environnements de développement reproductibles (@pxref{Invoquer guix environment}).
  1684. @item --remove=@var{paquet} @dots{}
  1685. @itemx -r @var{paquet} @dots{}
  1686. Supprimer les @var{paquet}s spécifiés.
  1687. Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
  1688. version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
  1689. glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
  1690. @item --upgrade[=@var{regexp} @dots{}]
  1691. @itemx -u [@var{regexp} @dots{}]
  1692. @cindex mettre à jour des paquets
  1693. Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
  1694. spécifiée, la mise à jour n'installera que les paquets dont le nom
  1695. correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
  1696. dessous.
  1697. Remarquez que cela met à jour vers la dernière version des paquets trouvée
  1698. dans la distribution actuellement installée. Pour mettre à jour votre
  1699. distribution, vous devriez lancer régulièrement @command{guix pull}
  1700. (@pxref{Invoquer guix pull}).
  1701. @item --do-not-upgrade[=@var{regexp} @dots{}]
  1702. Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
  1703. mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
  1704. exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
  1705. de ceux qui contiennent la chaîne « emacs » :
  1706. @example
  1707. $ guix package --upgrade . --do-not-upgrade emacs
  1708. @end example
  1709. @item @anchor{profile-manifest}--manifest=@var{fichier}
  1710. @itemx -m @var{fichier}
  1711. @cindex déclaration de profil
  1712. @cindex manifest de profil
  1713. Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
  1714. le code Scheme dans @var{fichier}.
  1715. Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
  1716. construire avec une série de @code{--install} et de commandes similaires.
  1717. L'avantage étant que le @var{fichier} peut être placé sous contrôle de
  1718. version, copié vers d'autres machines pour reproduire le même profil, etc.
  1719. @c FIXME: Add reference to (guix profile) documentation when available.
  1720. @var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
  1721. liste de paquets :
  1722. @findex packages->manifest
  1723. @example
  1724. (use-package-modules guile emacs)
  1725. (packages->manifest
  1726. (list emacs
  1727. guile-2.0
  1728. ;; Utiliser une sortie spécifique d'un paquet.
  1729. (list guile-2.0 "debug")))
  1730. @end example
  1731. @findex specifications->manifest
  1732. Dans cet exemple on doit savoir quels modules définissent les variables
  1733. @code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
  1734. @code{use-package-modules} ce qui peut être embêtant. On peut à la place
  1735. fournir des spécifications de paquets normales et laisser
  1736. @code{specifications->manifest} rechercher les objets de paquets
  1737. correspondants, comme ceci :
  1738. @example
  1739. (specifications->manifest
  1740. '("emacs" "guile@@2.2" "guile@@2.2:debug"))
  1741. @end example
  1742. @item --roll-back
  1743. @cindex revenir en arrière
  1744. @cindex défaire des transactions
  1745. @cindex transactions, défaire
  1746. Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
  1747. dernière transaction.
  1748. Lorsqu'elle est combinée avec des options comme @code{--install}, cette
  1749. option revient en arrière avant toute autre action.
  1750. Lorsque vous revenez de la première génération qui contient des fichiers, le
  1751. profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
  1752. fichier en dehors de ses propres métadonnées.
  1753. Après être revenu en arrière, l'installation, la suppression et la mise à
  1754. jour de paquets réécrit les futures générations précédentes. Ainsi,
  1755. l'historique des générations dans un profil est toujours linéaire.
  1756. @item --switch-generation=@var{motif}
  1757. @itemx -S @var{motif}
  1758. @cindex générations
  1759. Basculer vers une génération particulière définie par le @var{motif}.
  1760. Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
  1761. de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
  1762. d'un nombre donné de générations. Par exemple, si vous voulez retourner à
  1763. la dernière génération après @code{--roll-back}, utilisez
  1764. @code{--switch-generation=+1}.
  1765. La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
  1766. que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
  1767. donc si la génération demandée n'existe pas la génération actuelle ne
  1768. changera pas.
  1769. @item --search-paths[=@var{genre}]
  1770. @cindex chemins de recherche
  1771. Rapporter les définitions des variables d'environnement dans la syntaxe Bash
  1772. qui peuvent être requises pour utiliser l'ensemble des paquets installés.
  1773. Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
  1774. de recherche} de fichiers utilisés par les paquets installés.
  1775. Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
  1776. @code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
  1777. profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
  1778. Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
  1779. installés dans le profil, alors @code{--search-paths} suggérera
  1780. d'initialiser ces variables à @code{@var{profil}/include} et
  1781. @code{@var{profil}/lib}, respectivement.
  1782. Le cas d'utilisation typique est de définir ces variables d'environnement
  1783. dans le shell :
  1784. @example
  1785. $ eval `guix package --search-paths`
  1786. @end example
  1787. @var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
  1788. @code{suffix}, ce qui signifie que les définitions des variables
  1789. d'environnement retournées seront soit les paramètres exactes, ou placés
  1790. avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
  1791. @var{genre} a pour valeur par défaut @code{exact}.
  1792. Cette option peut aussi être utilisé pour calculer les chemins de recherche
  1793. @emph{combinés} de plusieurs profils. Regardez cet exemple :
  1794. @example
  1795. $ guix package -p foo -i guile
  1796. $ guix package -p bar -i guile-json
  1797. $ guix package -p foo -p bar --search-paths
  1798. @end example
  1799. La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
  1800. bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
  1801. donné cette recommendation.
  1802. @item --profile=@var{profil}
  1803. @itemx -p @var{profil}
  1804. Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
  1805. @cindex collisions, dans un profil
  1806. @cindex faire des collisions de paquets dans des profils
  1807. @cindex profil, collisions
  1808. @item --allow-collisions
  1809. Permettre des collisions de paquets dans le nouveau profil. À utiliser à
  1810. vos risques et périls !
  1811. Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
  1812. profil comme des erreurs. Les collisions ont lieu quand deux version ou
  1813. variantes d'un paquet donné se retrouvent dans le profil.
  1814. @item --verbose
  1815. Produire une sortie verbeuse. En particulier, fournir les journaux de
  1816. construction de l'environnement sur le port d'erreur standard.
  1817. @item --bootstrap
  1818. Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
  1819. option n'est utile que pour les développeurs de la distriibution.
  1820. @end table
  1821. En plus de ces actions, @command{guix package} supporte les options
  1822. suivantes pour demander l'état actuel d'un profil ou la disponibilité des
  1823. paquets :
  1824. @table @option
  1825. @item --search=@var{regexp}
  1826. @itemx -s @var{regexp}
  1827. @cindex chercher des paquets
  1828. Lister les paquets disponibles dont le nom, le synopsis ou la description
  1829. correspondent à la @var{regexp}, triés par pertinence. Afficher toutes les
  1830. métadonnées des paquets correspondants au format @code{recutils}
  1831. (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
  1832. Cela permet à des champs spécifiques d'être extraits avec la commande
  1833. @command{recsel}, par exemple :
  1834. @example
  1835. $ guix package -s malloc | recsel -p name,version,relevance
  1836. name: jemalloc
  1837. version: 4.5.0
  1838. relevance: 6
  1839. name: glibc
  1840. version: 2.25
  1841. relevance: 1
  1842. name: libgc
  1843. version: 7.6.0
  1844. relevance: 1
  1845. @end example
  1846. De manière similaire, pour montrer le nom de tous les paquets disponibles
  1847. sous license GNU@tie{}LGPL version 3 :
  1848. @example
  1849. $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
  1850. name: elfutils
  1851. name: gmp
  1852. @dots{}
  1853. @end example
  1854. Il est aussi possible de raffiner les résultats de la recherche avec
  1855. plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
  1856. liste des jeux de plateau :
  1857. @example
  1858. $ guix package -s '\<board\>' -s game | recsel -p name
  1859. name: gnubg
  1860. @dots{}
  1861. @end example
  1862. Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
  1863. qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
  1864. les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
  1865. parlent de clavier (en anglais : key@emph{board}).
  1866. Et maintenant un exemple plus élaboré. La commande suivante recherche les
  1867. bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
  1868. Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
  1869. @example
  1870. $ guix package -s crypto -s library | \
  1871. recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
  1872. @end example
  1873. @noindent
  1874. @xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
  1875. d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
  1876. @item --show=@var{paquet}
  1877. Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
  1878. au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
  1879. GNU recutils manual}).
  1880. @example
  1881. $ guix package --show=python | recsel -p name,version
  1882. name: python
  1883. version: 2.7.6
  1884. name: python
  1885. version: 3.3.5
  1886. @end example
  1887. Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
  1888. détails concernant une version spécifique :
  1889. @example
  1890. $ guix package --show=python@@3.4 | recsel -p name,version
  1891. name: python
  1892. version: 3.4.3
  1893. @end example
  1894. @item --list-installed[=@var{regexp}]
  1895. @itemx -I [@var{regexp}]
  1896. Liste les paquets actuellement installés dans le profil spécifié, avec les
  1897. paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
  1898. spécifié, liste uniquement les paquets installés dont le nom correspond à
  1899. @var{regexp}.
  1900. Pour chaque paquet installé, affiche les éléments suivants, séparés par des
  1901. tabulations : le nom du paquet, sa version, la partie du paquet qui est
  1902. installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
  1903. pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
  1904. @item --list-available[=@var{regexp}]
  1905. @itemx -A [@var{regexp}]
  1906. Lister les paquets actuellement disponibles dans la distribution pour ce
  1907. système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
  1908. liste uniquement les paquets dont le nom correspond à @var{regexp}.
  1909. Pour chaque paquet, affiche les éléments suivants séparés par des
  1910. tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
  1911. @item --list-generations[=@var{motif}]
  1912. @itemx -l [@var{motif}]
  1913. @cindex générations
  1914. Renvoyer la liste des générations avec leur date de création ; pour chaque
  1915. génération, montre les paquets installés avec les paquets installés les plus
  1916. récemment en dernier. Remarquez que la zéroième génération n'est jamais
  1917. montrée.
  1918. Pour chaque paquet installé, afficher les éléments suivants, séparés par des
  1919. tabulations : le nom du paquet, sa version, la partie du paquet qui a été
  1920. installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
  1921. paquet dans le dépôt.
  1922. Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
  1923. correspondantes. Les motifs valides sont :
  1924. @itemize
  1925. @item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
  1926. à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
  1927. la première.
  1928. Et @code{--list-generations=1,8,2} renvoie les trois générations dans
  1929. l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
  1930. @item @emph{Des interval}. @code{--list-generations=2..9} affiche les
  1931. générations demandées et tout ce qui se trouvent entre elles. Remarquez que
  1932. le début d'un interval doit être plus petit que sa fin.
  1933. Il est aussi possible d'omettre le numéro final. Par exemple,
  1934. @code{--list-generations=2..} renvoie toutes les générations à partir de la
  1935. deuxième.
  1936. @item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
  1937. ou moins en passant un entier avec la première lettre de la durée (en
  1938. anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
  1939. générations qui sont agées d'au plus 20 jours.
  1940. @end itemize
  1941. @item --delete-generations[=@var{motif}]
  1942. @itemx -d [@var{motif}]
  1943. Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
  1944. l'actuelle.
  1945. Cette commande accepte les même motifs que @option{--list-generations}.
  1946. Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
  1947. Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
  1948. que la durée spécifiée correspondent. Par exemple
  1949. @code{--delete-generations=1m} supprime les générations vieilles de plus
  1950. d'un mois.
  1951. Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
  1952. zéroième génération n'est elle non plus jamais supprimée.
  1953. Remarquez que supprimer des générations empêche de revenir en arrière vers
  1954. elles. Ainsi, cette commande doit être utilisée avec précaution.
  1955. @end table
  1956. Enfin, comme @command{guix package} peut démarrer des processus de
  1957. construction, elle supporte les options de construction communes
  1958. (@pxref{Options de construction communes}). Elle supporte aussi les options de
  1959. transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
  1960. paquets sont perdues à la mise à jour ; pour les préserver à travers les
  1961. mises à jours, vous devriez définir vos propres variantes des paquets dans
  1962. une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
  1963. @node Substituts
  1964. @section Substituts
  1965. @cindex substituts
  1966. @cindex binaires pré-construits
  1967. Guix gère le déploiement depuis des binaires ou des sources de manière
  1968. transparente ce qui signifie qu'il peut aussi bien construire localement que
  1969. télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
  1970. appelons ces éléments pré-construits des @dfn{substituts} — ils se
  1971. substituent aux résultats des constructions locales. Dans la plupart des
  1972. cas, télécharger un substitut est bien plus rapide que de construire les
  1973. choses localement.
  1974. Les substituts peuvent être tout ce qui résulte d'une construction de
  1975. dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
  1976. de paquets binaires pré-construits, mais les archives des sources par
  1977. exemple résultent aussi de la construction d'une dérivation qui peut aussi
  1978. être disponible en tant que substitut.
  1979. @menu
  1980. * Serveur de substituts officiel:: Une source particulière de substituts.
  1981. * Autoriser un serveur de substituts:: Comment activer ou désactiver les
  1982. substituts.
  1983. * Authentification des substituts:: Coment Guix vérifie les substituts.
  1984. * Paramètres de serveur mandataire:: Comment récupérer des substituts à
  1985. travers un serveur mandataire.
  1986. * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
  1987. * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
  1988. un paquet binaire ?
  1989. @end menu
  1990. @node Serveur de substituts officiel
  1991. @subsection Serveur de substituts officiel
  1992. @cindex hydra
  1993. @cindex ferme de construction
  1994. Le serveur @code{mirror.hydra.gnu.org} est une interface à la ferme de
  1995. construction officielle qui construit des paquets pour Guix continuellement
  1996. pour certaines architectures et les rend disponibles en tant que
  1997. substituts. C'est la source par défaut des substituts ; elle peut être
  1998. modifiée en passant l'option @option{--substitute-urls} soit à
  1999. @command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
  2000. --substitute-urls}}) soit aux outils clients comme @command{guix package}
  2001. (@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
  2002. Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
  2003. est recommandé parce que les communications sont chiffrées ; à l'inverse
  2004. HTTP rend les communications visibles pour un espion qui peut utiliser les
  2005. informations accumulées sur vous pour déterminer par exemple si votre
  2006. système a des vulnérabilités de sécurités non corrigées.
  2007. Les substituts de la ferme de construction officielle sont activés par
  2008. défaut dans la distribution système Guix (@pxref{Distribution GNU}).
  2009. Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
  2010. distribution externe, à moins que vous ne les ayez explicitement activés via
  2011. l'une des étapes d'installation recommandées (@pxref{Installation}). Les
  2012. paragraphes suivants décrivent comment activer ou désactiver les substituts
  2013. de la ferme de construction ; la même procédure peut être utilisée pour
  2014. activer les substituts de n'importe quel autre serveur de substituts.
  2015. @node Autoriser un serveur de substituts
  2016. @subsection Autoriser un serveur de substituts
  2017. @cindex sécurité
  2018. @cindex substituts, autorisations
  2019. @cindex liste de contrôle d'accès (ACL), pour les substituts
  2020. @cindex ACL (liste de contrôle d'accès), pour les substituts
  2021. Pour permettre à Guix de télécharger les substituts depuis
  2022. @code{hydra.gnu.org} ou un mirroir, vous devez ajouter sa clef publique à la
  2023. liste de contrôle d'accès (ACL) des imports d'archives, avec la commande
  2024. @command{guix archive} (@pxref{Invoquer guix archive}). Cela implique que
  2025. vous faîtes confiance à @code{hydra.gnu.org} pour ne pas être compromis et
  2026. vous servir des substituts authentiques.
  2027. La clef publique pour @code{hydra.gnu.org} est installée avec Guix, dans
  2028. @code{@var{préfixe}/share/guix/hydra.gnu.org.pub}, où @var{préfixe} est le
  2029. préfixe d'installation de Guix. Si vous avez installé Guix depuis les
  2030. sources, assurez-vous d'avoir vérifié la signature GPG de
  2031. @file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
  2032. publique. Ensuite vous pouvez lancer quelque chose comme ceci :
  2033. @example
  2034. # guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.pub
  2035. @end example
  2036. @quotation Remarque
  2037. De même, le fichier @file{berlin.guixsd.org.pub} contient la clef publique
  2038. de la nouvelle ferme de construction du projet, disponible depuis
  2039. @indicateurl{https://berlin.guixsd.org}.
  2040. Au moment où ces lignes sont écrites, @code{berlin.guixsd.org} est mis à
  2041. niveau pour mieux passer à l'échelle, mais vous pourriez vouloir le tester.
  2042. Il est associé à 20 nœuds de construction x86_64/i686 et pourrait fournir
  2043. des substituts plus rapidement que @code{mirror.hydra.gnu.org}
  2044. @end quotation
  2045. Une fois que cela est en place, la sortie d'une commande comme @code{guix
  2046. build} devrait changer de quelque chose comme :
  2047. @example
  2048. $ guix build emacs --dry-run
  2049. Les dérivations suivantes seraient construites :
  2050. /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
  2051. /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
  2052. /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
  2053. /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
  2054. @dots{}
  2055. @end example
  2056. @noindent
  2057. à quelque chose comme :
  2058. @example
  2059. $ guix build emacs --dry-run
  2060. 112.3 Mo seraient téléchargés :
  2061. /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
  2062. /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
  2063. /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
  2064. /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
  2065. @dots{}
  2066. @end example
  2067. @noindent
  2068. Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et
  2069. seront téléchargés, si possible, pour les futures constructions.
  2070. @cindex substituts, comment les désactiver
  2071. Le mécanisme de substitution peut être désactivé globalement en lançant
  2072. @code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
  2073. l'option @code{--no-substitutes} à @command{guix package}, @command{guix
  2074. build} et aux autres outils en ligne de commande.
  2075. @node Authentification des substituts
  2076. @subsection Authentification des substituts
  2077. @cindex signatures numériques
  2078. Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
  2079. qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
  2080. ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
  2081. Il y a une exception cependant : si un serveur non autorisé fournit des
  2082. substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
  2083. serveur autorisé, alors le serveur non autorisé devient disponible pour les
  2084. téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
  2085. substituts avec cette option :
  2086. @example
  2087. --substitute-urls="https://a.example.org https://b.example.org"
  2088. @end example
  2089. @noindent
  2090. @cindex constructions reproductibles
  2091. Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
  2092. @code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
  2093. téléchargera les substituts de @code{a.example.org} parce qu'il vient en
  2094. premier dans la liste et peut être considéré comme un mirroir de
  2095. @code{b.example.org}. En pratique, des machines de constructions produisent
  2096. souvent les mêmes binaires grâce à des construction reproductibles au bit
  2097. près (voir plus bas).
  2098. Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
  2099. validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
  2100. à ce que des clients HTTPS comme des navigateurs web font habituellement.
  2101. Cela est dû au fait que Guix authentifie les informations sur les substituts
  2102. eux-même, comme expliqué plus haut, ce dont on se soucie réellement (alors
  2103. que les certificats X.509 authentifie la relation entre nom de domaine et
  2104. clef publique).
  2105. @node Paramètres de serveur mandataire
  2106. @subsection Paramètres de serveur mandataire
  2107. @vindex http_proxy
  2108. Les substituts sont téléchargés par HTTP ou HTTPS. La variable
  2109. d'environnement @code{http_proxy} peut être initialisée dans l'environnement
  2110. de @command{guix-daemon} et est respectée pour le téléchargement des
  2111. substituts. Remarquez que la valeur de @code{http_proxy} dans
  2112. l'environnement où tournent @command{guix build}, @command{guix package} et
  2113. les autres clients n'a @emph{absolument aucun effet}.
  2114. @node Échec de substitution
  2115. @subsection Échec de substitution
  2116. Même lorsqu'un substitut pour une dérivation est disponible, la substitution
  2117. échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
  2118. substitut peut être hors ligne, le substitut a récemment été supprimé du
  2119. serveur, la connexion peut avoir été interrompue, etc.
  2120. Lorsque les substituts sont activés et qu'un substitut pour une dérivation
  2121. est disponible, mais que la tentative de substitution échoue, Guix essaiera
  2122. de construire la dérivation localement si @code{--fallback} a été passé en
  2123. argument (@pxref{option de repli,, common build option @code{--fallback}}).
  2124. Plus spécifiquement, si cet option n'a pas été passée en argument, alors
  2125. aucune construction locale n'est effectuée et la dérivation est considérée
  2126. comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
  2127. alors Guix essaiera de construire la dérivation localement et l'échec ou le
  2128. succès de la dérivation dépend de l'échec ou du succès de la construction
  2129. locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
  2130. substitut n'est disponible pour la dérivation en question, une construction
  2131. locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
  2132. @code{--fallback} ait été ou non passé.
  2133. Pour se donner une idée du nombre de substituts disponibles maintenant, vous
  2134. pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
  2135. fournis par un serveur.
  2136. @node De la confiance en des binaires
  2137. @subsection De la confiance en des binaires
  2138. @cindex confiance, en des binaires pré-construits
  2139. De nos jours, le contrôle individuel sur son utilisation propre de
  2140. l'informatique est à la merci d'institutions, de sociétés et de groupes avec
  2141. assez de pouvoir et de détermination pour contourner les infrastructures
  2142. informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
  2143. substituts de @code{hydra.gnu.org} soit pratique, nous encourageons les
  2144. utilisateurs à construire aussi par eux-même, voir à faire tourner leur
  2145. propre ferme de construction, pour que @code{hydra.gnu.org} devienne une
  2146. cible moins intéressante. Une façon d'aider est de publier les logiciels
  2147. que vous construisez avec @command{guix publish} pour que les autres aient
  2148. plus de choix de serveurs où télécharger les substituts (@pxref{Invoquer guix publish}).
  2149. Guix possède les fondations pour maximiser la reproductibilité logicielle
  2150. (@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
  2151. indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
  2152. résultats identiques au bit près. Ainsi, à travers un ensemble de
  2153. constructions de paquets indépendantes il est possible de renforcer
  2154. l'intégrité du système. La commande @command{guix challenge} a pour but
  2155. d'aider les utilisateurs à tester les serveurs de substituts et à aider les
  2156. développeurs à trouver les constructions de paquets non-déterministes
  2157. (@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
  2158. @command{guix build} permet aux utilisateurs de vérifier si les substituts
  2159. précédemment installés sont authentiques en les reconstruisant localement
  2160. (@pxref{vérification de la construction, @command{guix build --check}}).
  2161. Dans le futur, nous aimerions que Guix puisse publier et recevoir des
  2162. binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
  2163. discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
  2164. @node Des paquets avec plusieurs résultats
  2165. @section Des paquets avec plusieurs résultats
  2166. @cindex paquets avec plusieurs résultats
  2167. @cindex sorties de paquets
  2168. @cindex sorties
  2169. Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
  2170. c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
  2171. dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
  2172. la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
  2173. @code{out} mais son nom peut être omis comme le montre cette commande. Dans
  2174. ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
  2175. fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
  2176. statiques, la documentation Info et les autres fichiers de support.
  2177. Parfois il est plus approprié de séparer les divers types de fichiers
  2178. produits par un même paquet source en plusieurs sorties. Par exemple, la
  2179. bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
  2180. plus de 20 Mo de documentation de référence dans des pages HTML. Pour
  2181. préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
  2182. documentation va dans une sortie séparée nommée @code{doc}. Pour installer
  2183. la sortie principale de GLib, qui contient tout sauf la documentation, on
  2184. devrait lancer :
  2185. @example
  2186. guix package -i glib
  2187. @end example
  2188. @cindex documentation
  2189. La commande pour installer la documentation est :
  2190. @example
  2191. guix package -i glib:doc
  2192. @end example
  2193. Certains paquets installent des programmes avec des « empreintes dépendances
  2194. » différentes. Par exemple le paquet WordNet installe à la fois les outils
  2195. en ligne de commande et les interfaces graphiques (GUI). La première ne
  2196. dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
  2197. et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
  2198. en ligne de commande dans la sortie par défaut et l'interface graphique dans
  2199. une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
  2200. d'interface graphique de gagner de la place. La commande @command{guix
  2201. size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
  2202. Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
  2203. D'autres noms de sorties conventionnels sont @code{lib} pour les
  2204. bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
  2205. programmes indépendants et @code{debug} pour les informations de débogage
  2206. (@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
  2207. dans la troisième colonne de la sortie de @command{guix package
  2208. --list-available} (@pxref{Invoquer guix package}).
  2209. @node Invoquer guix gc
  2210. @section Invoquer @command{guix gc}
  2211. @cindex ramasse-miettes
  2212. @cindex espace disque
  2213. Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
  2214. La commande @command{guix gc} permet aux utilisateurs de lancer
  2215. explicitement le ramasse-miettes pour récupérer de l'espace dans le
  2216. répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
  2217. des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
  2218. répertoires à la main peut le casser de manière impossible à réparer !
  2219. @cindex racines du GC
  2220. @cindex racines du ramasse-miettes
  2221. Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
  2222. dans @file{/gnu/store} atteignable depuis une racine est considéré comme
  2223. @dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
  2224. considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
  2225. racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
  2226. les profils par défaut des utilisateurs ; par défaut les liens symboliques
  2227. sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
  2228. racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
  2229. exemple (@pxref{Invoquer guix build}).
  2230. Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
  2231. c'est souvent utile de supprimer les anciennes génération des profils
  2232. utilisateurs ; de cette façon les anciennes constructions de paquets
  2233. référencées par ces générations peuvent être glanées. Cela se fait en
  2234. lançaint @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
  2235. Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
  2236. avez besoin d'espace disque. Par exemple pour garantir qu'au moins
  2237. 5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
  2238. @example
  2239. guix gc -F 5G
  2240. @end example
  2241. Il est parfaitement possible de le lancer comme une tâche périodique
  2242. non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
  2243. paramétrer une telle tâche sur GuixSD). Lancer @command{guix gc} sans
  2244. argument ramassera autant de miettes que possible mais ça n'est pas le plus
  2245. pratique : vous pourriez vous retrouver à reconstruire ou re-télécharger des
  2246. logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
  2247. construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
  2248. La command @command{guix gc} a trois modes d'opération : il peut être
  2249. utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
  2250. fichiers spécifiques (l'option @code{--delete}), pour afficher des
  2251. informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
  2252. options du ramasse-miettes sont :
  2253. @table @code
  2254. @item --collect-garbage[=@var{min}]
  2255. @itemx -C [@var{min}]
  2256. Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
  2257. @file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
  2258. lorsqu'aucune option n'est spécifiée.
  2259. Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
  2260. collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
  2261. d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
  2262. (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
  2263. Lorsque @var{min} est omis, tout glaner.
  2264. @item --free-space=@var{libre}
  2265. @itemx -F @var{libre}
  2266. Glaner jusqu'à ce que @var{libre} espace soit disponible dans
  2267. @file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
  2268. comme @code{500MiB} comme décrit ci-dessus.
  2269. Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
  2270. faire et s'arrêter immédiatement.
  2271. @item --delete
  2272. @itemx -d
  2273. Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
  2274. en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
  2275. ou s'ils sont toujours utilisés.
  2276. @item --list-failures
  2277. Lister les éléments du dépôt qui correspondent à des échecs de construction
  2278. Cela n'affiche rien à moins que le démon n'ait été démarré avec
  2279. @option{--cache-failures} (@pxref{Invoquer guix-daemon,
  2280. @option{--cache-failures}}).
  2281. @item --clear-failures
  2282. Supprimer les éléments du dépôt spécifiés du cache des constructions
  2283. échouées.
  2284. De nouveau, cette option ne fait de sens que lorsque le démon est démarré
  2285. avec @option{--cache-failures}. Autrement elle ne fait rien.
  2286. @item --list-dead
  2287. Montrer la liste des fichiers et des répertoires inutilisés encore présents
  2288. dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
  2289. atteignables par aucune racine.
  2290. @item --list-live
  2291. Montrer la liste des fichiers et des répertoires du dépôt utilisés.
  2292. @end table
  2293. En plus, les références entre les fichiers existants du dépôt peuvent être
  2294. demandés :
  2295. @table @code
  2296. @item --references
  2297. @itemx --referrers
  2298. @cindex dépendances des paquets
  2299. Lister les références (respectivement les référents) des fichiers du dépôt
  2300. en argument.
  2301. @item --requisites
  2302. @itemx -R
  2303. @cindex closure
  2304. Lister les prérequis des fichiers du dépôt passés en argument. Les
  2305. prérequis sont le fichier du dépôt lui-même, leur références et les
  2306. références de ces références, récursivement. En d'autre termes, la liste
  2307. retournée est la @dfn{closure transitive} des fichiers du dépôt.
  2308. @xref{Invoquer guix size} pour un outil pour surveiller la taille de la
  2309. closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
  2310. visualiser le graphe des références.
  2311. @item --derivers
  2312. @cindex dérivation
  2313. Renvoie les dérivations menant aux éléments du dépôt donnés
  2314. (@pxref{Dérivations}).
  2315. Par exemple cette commande :
  2316. @example
  2317. guix gc --derivers `guix package -I ^emacs$ | cut -f4`
  2318. @end example
  2319. @noindent
  2320. renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
  2321. votre profil.
  2322. Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
  2323. ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
  2324. @file{.drv} correspondant à cause de dérivations à sortie fixées.
  2325. @end table
  2326. Enfin, les options suivantes vous permettent de vérifier l'intégrité du
  2327. dépôt et de contrôler l'utilisation du disque.
  2328. @table @option
  2329. @item --verify[=@var{options}]
  2330. @cindex intégrité, du dépôt
  2331. @cindex vérification d'intégrité
  2332. Vérifier l'intégrité du dépôt.
  2333. Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
  2334. dans la base de données du démon existent bien dans @file{/gnu/store}.
  2335. Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
  2336. virgule de l'un ou plus parmi @code{contents} et @code{repair}.
  2337. Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
  2338. contenu de chaque élément du dépôt et le compare au hash de sa base de
  2339. données. Les différences de hash sont rapportées comme des corruptions de
  2340. données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
  2341. commande peut prendre très longtemps pour terminer, surtout sur un système
  2342. avec un disque lent.
  2343. @cindex réparer le dépôt
  2344. @cindex corruption, récupérer de
  2345. Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
  2346. que le démon essaie de réparer les objets du dépôt corrompus en récupérant
  2347. leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
  2348. atomique et donc potentiellement dangereuse, elle n'est disponible que pour
  2349. l'administrateur système. Une alternative plus légère lorsque vous
  2350. connaissez exactement quelle entrée est corrompue consiste à lancer
  2351. @command{guix build --repair} (@pxref{Invoquer guix build}).
  2352. @item --optimize
  2353. @cindex déduplication
  2354. Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
  2355. @dfn{déduplication}.
  2356. Le démon effectue une déduplication à chaque construction réussie ou import
  2357. d'archive à moins qu'il n'ait été démarré avec
  2358. @code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
  2359. @code{--disable-deduplication}}). Ainsi, cette option est surtout utile
  2360. lorsque le démon tourne avec @code{--disable-deduplication}.
  2361. @end table
  2362. @node Invoquer guix pull
  2363. @section Invoquer @command{guix pull}
  2364. @cindex mettre à niveau Guix
  2365. @cindex mettre à jour Guix
  2366. @cindex @command{guix pull}
  2367. @cindex pull
  2368. Les paquets sont installés ou mis à jour vers la dernière version disponible
  2369. dans la distribution actuellement disponible sur votre machine locale. Pour
  2370. mettre à jour cette distribution, en même temps que les outils Guix, vous
  2371. devez lancer @command{guix pull} ; la commande télécharge le dernier code
  2372. source de Guix et des descriptions de paquets et le déploie. Le code source
  2373. est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
  2374. le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
  2375. À la fin, @command{guix package} utilisera les paquets et les versions des
  2376. paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
  2377. toutes les commandes Guix et les modules Scheme seront aussi récupérés
  2378. depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
  2379. ajoutés par la mise à jour sont aussi maintenant disponibles.
  2380. Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
  2381. pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
  2382. pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
  2383. pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
  2384. vice-versa
  2385. Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
  2386. disponible sous @file{~/.config/guix/current} contenant la dernière version
  2387. de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
  2388. recherche pour que vous utilisiez la dernière version. Le même conseil
  2389. s'applique au manuel Info (@pxref{Documentation}) :
  2390. @example
  2391. export PATH="$HOME/.config/guix/current/bin:$PATH"
  2392. export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
  2393. @end example
  2394. L'option @code{--list-generations} ou @code{-l} liste les anciennes
  2395. générations produites par @command{guix pull}, avec des détails sur leur
  2396. origine :
  2397. @example
  2398. $ guix pull -l
  2399. Génération 1 10 juin 2018 00:18:18
  2400. guix 65956ad
  2401. URL du dépôt : https://git.savannah.gnu.org/git/guix.git
  2402. branche : origin/master
  2403. commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
  2404. Génération 2 11 juin 2018 11:02:49
  2405. guix e0cc7f6
  2406. URL du dépôt : https://git.savannah.gnu.org/git/guix.git
  2407. branche : origin/master
  2408. commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
  2409. 2 nouveaux paquets : keepalived, libnfnetlink
  2410. 6 paquets mis à jour : emacs-nix-mode@@2.0.4,
  2411. guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
  2412. heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
  2413. Génération 3 13 juin 2018 23:31:07 (actuelle)
  2414. guix 844cc1c
  2415. URL du dépôt : https://git.savannah.gnu.org/git/guix.git
  2416. branche : origin/master
  2417. commit : 844cc1c8f394f03b404c5bb3aee086922373490c
  2418. 28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
  2419. 69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
  2420. @end example
  2421. @ref{Invoquer guix describe, @command{guix describe}} pour d'autres manières
  2422. de décrire le statut actuel de Guix.
  2423. Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
  2424. créés par @command{guix package} (@pxref{Invoquer guix package}).
  2425. C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
  2426. une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
  2427. @example
  2428. $ guix package -p ~/.config/guix/current --roll-back
  2429. passé de la génération 3 à 2
  2430. $ guix package -p ~/.config/guix/current --delete-generations=1
  2431. suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
  2432. @end example
  2433. La commande @command{guix pull} est typiquement invoquée sans arguments mais
  2434. il supporte les options suivantes :
  2435. @table @code
  2436. @item --url=@var{url}
  2437. @itemx --commit=@var{commit}
  2438. @itemx --branch=@var{branche}
  2439. Télécharger le code depuis l'@var{url} spécifié, au @var{commit} donné (un
  2440. commit Git valide représenté par une chaîne hexadécimale) ou à la branche
  2441. @var{branch}.
  2442. @cindex @file{channels.scm}, fichier de configuration
  2443. @cindex fichier de configuration pour les canaux
  2444. Ces options sont fournies pour votre confort, mais vous pouvez aussi
  2445. spécifier votre configuration dans le fichier
  2446. @file{~/.config/guix/channels.scm} ou en utilisant l'option
  2447. @option{--channels} (voir plus bas).
  2448. @item --channels=@var{file}
  2449. @itemx -C @var{file}
  2450. Lit la liste des canaux dans @var{file} plutôt que dans
  2451. @file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
  2452. qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
  2453. d'informations.
  2454. @item --list-generations[=@var{motif}]
  2455. @itemx -l [@var{motif}]
  2456. Liste toutes les générations de @file{~/.config/guix/current} ou, si
  2457. @var{motif} est fournit, le sous-ensemble des générations qui correspondent
  2458. à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
  2459. package --list-generations} (@pxref{Invoquer guix package}).
  2460. @ref{Invoquer guix describe}, pour une manière d'afficher des informations
  2461. sur la génération actuelle uniquement.
  2462. @item --profile=@var{profil}
  2463. @itemx -p @var{profil}
  2464. Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
  2465. @item --dry-run
  2466. @itemx -n
  2467. Montrer quels commits des canaux seraient utilisés et ce qui serait
  2468. construit ou substitué mais ne pas le faire vraiment.
  2469. @item --verbose
  2470. Produire une sortie verbeuse, en écrivant les journaux de construction sur
  2471. la sortie d'erreur standard.
  2472. @item --bootstrap
  2473. Utiliser le programme d'amorçage Guile pour construire la dernière version
  2474. de Guix. Cette option n'est utile que pour les développeurs de Guix.
  2475. @end table
  2476. Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
  2477. répertoires et branches récupérer, ainsi que les dépôts
  2478. @emph{supplémentaires} contenant des modules de paquets qui devraient être
  2479. déployés. @xref{Canaux} pour plus d'information.
  2480. En plus, @command{guix pull} supporte toutes les options de construction
  2481. communes (@pxref{Options de construction communes}).
  2482. @node Canaux
  2483. @section Canaux
  2484. @cindex canaux
  2485. @cindex @file{channels.scm}, fichier de configuration
  2486. @cindex fichier de configuration pour les canaux
  2487. @cindex @command{guix pull}, fichier de configuration
  2488. @cindex configuration de @command{guix pull}
  2489. Guix et sa collection de paquets sont mis à jour en lançant @command{guix
  2490. pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
  2491. télécharge et déploie Guix lui-même depuis le dépôt officiel de
  2492. GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
  2493. dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
  2494. et la branche d'un répertoire Git à déployer et on peut demander à
  2495. @command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
  2496. termes, les canaux peuvent être utilisés pour personnaliser et pour
  2497. @emph{étendre} Guix, comme on le verra plus bas.
  2498. @subsection Utiliser un canal Guix personnalisé
  2499. Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
  2500. de commande ainsi que sa collection de paquets — sera téléchargé. Par
  2501. exemple, supposons que vous voulez effectuer les mises à jour depuis votre
  2502. propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
  2503. depuis la branche @code{super-hacks}. Vous pouvez écrire cette
  2504. spécification dans @code{~/.config/guix/channels.scm} :
  2505. @lisp
  2506. ;; Dit à « guix pull » d'utiliser mon propre dépôt.
  2507. (list (channel
  2508. (name 'guix)
  2509. (url "https://example.org/my-guix.git")
  2510. (branch "super-hacks")))
  2511. @end lisp
  2512. @noindent
  2513. Maintenant, @command{guix pull} récupérera le code depuis la branche
  2514. @code{super-hacks} du dépôt sur @code{example.org}.
  2515. @subsection Spécifier des canaux supplémentaires
  2516. @cindex étendre la collection de paquets (canaux)
  2517. @cindex paquets personnels (canaux)
  2518. @cindex canaux, pour des paquets personnels
  2519. Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
  2520. Disons que vous avez un ensemble de paquets personnels ou de variantes
  2521. personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
  2522. mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
  2523. de commande. Vous écririez d'abord des modules contenant ces définitions de
  2524. paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
  2525. vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
  2526. supplémentaire où trouver ces paquets. Sympa, non ?
  2527. @c What follows stems from discussions at
  2528. @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
  2529. @c earlier discussions on guix-devel@gnu.org.
  2530. @quotation Attention
  2531. Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
  2532. @emph{super génial} ! » et que vous ne publiez vos canaux personnels
  2533. publiquement, nous voudrions vous donner quelques avertissements :
  2534. @itemize
  2535. @item
  2536. Avant de publier un canal, envisagez de contribuer vos définitions de
  2537. paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
  2538. ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
  2539. Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
  2540. des processus d'assurance qualité du projet.
  2541. @item
  2542. Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
  2543. les développeurs de Guix, considérons que @emph{la charge de la
  2544. compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
  2545. les définitions de paquets ne sont que du code Scheme qui utilise diverses
  2546. interfaces de programmation (API). Nous souhaitons rester libres de changer
  2547. ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
  2548. casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
  2549. ne nous engageons @emph{pas} à geler les API non plus.
  2550. @item
  2551. Corollaire : si vous utilisez un canal externe et que le canal est cassé,
  2552. merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
  2553. Guix.
  2554. @end itemize
  2555. Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
  2556. sont une manière pratique d'exercer votre liberté pour augmenter la
  2557. collection de paquets de Guix et de partager vos améliorations, qui sont les
  2558. principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
  2559. logiciel libe}. Contactez-nous par courriel sur @email{guix-devel@@gnu.org}
  2560. si vous souhaitez discuter à ce propos.
  2561. @end quotation
  2562. Une fois que vous avez un dépôt Git contenant vos propres modules de
  2563. paquets, vous pouvez écrire @code{~/.config/guix/channels.scm} pour dire à
  2564. @command{guix pull} de récupérer votre canal personnel @emph{en plus} des
  2565. canaux Guix par défaut :
  2566. @vindex %default-channels
  2567. @lisp
  2568. ;; Ajouter mes paquets personnels à ceux fournis par Guix.
  2569. (cons (channel
  2570. (name 'my-personal-packages)
  2571. (url "https://example.org/personal-packages.git"))
  2572. %default-channels)
  2573. @end lisp
  2574. @noindent
  2575. Note that the snippet above is (as always!)@: Scheme code; we use
  2576. @code{cons} to add a channel the list of channels that the variable
  2577. @code{%default-channels} is bound to (@pxref{Pairs, @code{cons} and lists,,
  2578. guile, GNU Guile Reference Manual}). With this file in place, @command{guix
  2579. pull} builds not only Guix but also the package modules from your own
  2580. repository. The result in @file{~/.config/guix/current} is the union of
  2581. Guix with your own package modules:
  2582. @example
  2583. $ guix pull --list-generations
  2584. @dots{}
  2585. Génération 19 Aug 27 2018 16:20:48
  2586. guix d894ab8
  2587. URL du dépôt : https://git.savannah.gnu.org/git/guix.git
  2588. branche : master
  2589. commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
  2590. my-personal-packages dd3df5e
  2591. URL du dépôt : https://example.org/personal-packages.git
  2592. branche : master
  2593. commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
  2594. 11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
  2595. 4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
  2596. @end example
  2597. @noindent
  2598. La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
  2599. contient aussi bien Guix que les paquets du canal
  2600. @code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
  2601. à jour qui sont listés, certains comme @code{my-gimp} et
  2602. @code{my-emacs-with-cool-features} peuvent provenir de
  2603. @code{my-personal-packages}, tandis que d'autres viennent du canal par
  2604. défaut de Guix.
  2605. @subsection Répliquer Guix
  2606. @cindex épinglage, canaux
  2607. @cindex répliquer Guix
  2608. @cindex reproductibilité, de Guix
  2609. La sortie de @command{guix pull --list-generations} ci-dessus montre
  2610. précisément quels commits ont été utilisés pour construire cette instance de
  2611. Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
  2612. fournissant une spécification de canal dans
  2613. @file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
  2614. @lisp
  2615. ;; Déployer des commits précis de mes canaux préférés.
  2616. (list (channel
  2617. (name 'guix)
  2618. (url "https://git.savannah.gnu.org/git/guix.git")
  2619. (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
  2620. (channel
  2621. (name 'my-personal-packages)
  2622. (url "https://example.org/personal-packages.git")
  2623. (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
  2624. @end lisp
  2625. La commande @command{guix describe --format=channels} peut même générer
  2626. cette liste de canaux directement (@pxref{Invoquer guix describe}).
  2627. À ce moment les deux machines font tourner @emph{exactement le même Guix},
  2628. avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
  2629. build gimp} sur une machine sera exactement la même, au bit près, que la
  2630. sortie de la même commande sur l'autre machine. Cela signifie aussi que les
  2631. deux machines ont accès à tous les codes sources de Guix, et transitivement,
  2632. à tous les codes sources de tous les paquets qu'il définit.
  2633. Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
  2634. provenance des artefacts binaires avec un grain très fin et de reproduire
  2635. les environnements logiciels à volonté — une sorte de capacité de «
  2636. méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
  2637. manière d'utiliser ces super-pouvoirs.
  2638. @node Inférieurs
  2639. @section Inférieurs
  2640. @c TODO: Remove this once we're more confident about API stability.
  2641. @quotation Remarque
  2642. La fonctionnalité décrite ici est un « démonstrateur technique » à la
  2643. version @value{VERSION}. Ainsi, l'interface est sujette à changements.
  2644. @end quotation
  2645. @cindex inférieurs
  2646. @cindex composition de révisions de Guix
  2647. Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
  2648. avec des paquets disponibles dans une révision différente de Guix. Les
  2649. @dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
  2650. composant différentes versions de Guix de manière arbitraire.
  2651. @cindex paquets inférieurs
  2652. Techniquement, un « inférieur » est surtout un processus Guix séparé
  2653. connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
  2654. inférieurs et de communiquer avec eux. Il fournit aussi une interface de
  2655. haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
  2656. inférieurs} — et les manipuler.
  2657. Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
  2658. fournissent une manière simple d'interagir avec un révision de Guix
  2659. séparée. Par exemple, disons que vous souhaitiez installer dans votre
  2660. profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
  2661. révision de Guix — peut-être parce que la nouvelle version de
  2662. @code{guile-json} a une API incompatible et que vous voulez lancer du code
  2663. avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
  2664. utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
  2665. ; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
  2666. Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
  2667. l'inférieur :
  2668. @lisp
  2669. (use-modules (guix inferior) (guix channels)
  2670. (srfi srfi-1)) ;pour « first »
  2671. (define channels
  2672. ;; L'ancienne révision depuis laquelle on veut
  2673. ;; extraire guile-json.
  2674. (list (channel
  2675. (name 'guix)
  2676. (url "https://git.savannah.gnu.org/git/guix.git")
  2677. (commit
  2678. "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
  2679. (define inferior
  2680. ;; Un inférieur représentant la révision ci-dessus.
  2681. (inferior-for-channels channels))
  2682. ;; Maintenant on crée un manifeste avec le paquet « guile » actuel
  2683. ;; et l'ancien paquet « guile-json ».
  2684. (packages->manifest
  2685. (list (first (lookup-inferior-packages inferior "guile-json"))
  2686. (specification->package "guile")))
  2687. @end lisp
  2688. Durant la première exécution, @command{guix package --manifest} pourrait
  2689. avoir besoin de construire le canal que vous avez spécifié avant de créer
  2690. l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
  2691. révision de Guix sera déjà en cache.
  2692. Le module @code{(guix inferior)} fournit les procédures suivantes pour
  2693. ouvrir un inférieur :
  2694. @deffn {Procédure Scheme} inferior-for-channels @var{channels} @
  2695. [#:cache-directory] [#:ttl]
  2696. Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
  2697. le cache dans @var{cache-directory}, où les entrées peuvent être glanées
  2698. après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
  2699. démon de construction.
  2700. Elle a pour effet de bord de construire ou de substituer des binaires pour
  2701. @var{channels}, ce qui peut prendre du temps.
  2702. @end deffn
  2703. @deffn {Procédure Scheme} open-inferior @var{directory} @
  2704. [#:command "bin/guix"]
  2705. Ouvre le Guix inférieur dans @var{directory} et lance
  2706. @code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
  2707. si l'inférieur n'a pas pu être lancé.
  2708. @end deffn
  2709. @cindex paquets inférieurs
  2710. Les procédures listées plus bas vous permettent d'obtenir et de manipuler
  2711. des paquets inférieurs.
  2712. @deffn {Procédure Scheme} inferior-packages @var{inferior}
  2713. Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
  2714. @end deffn
  2715. @deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
  2716. [@var{version}]
  2717. Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
  2718. dans @var{inferior}, avec le plus haut numéro de version en premier. Si
  2719. @var{version} est vrai, renvoie seulement les paquets avec un numéro de
  2720. version préfixé par @var{version}.
  2721. @end deffn
  2722. @deffn {Procédure Scheme} inferior-package? @var{obj}
  2723. Renvoie vrai si @var{obj} est un paquet inférieur.
  2724. @end deffn
  2725. @deffn {Procédure Scheme} inferior-package-name @var{package}
  2726. @deffnx {Procédure Scheme} inferior-package-version @var{package}
  2727. @deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
  2728. @deffnx {Procédure Scheme} inferior-package-description @var{package}
  2729. @deffnx {Procédure Scheme} inferior-package-home-page @var{package}
  2730. @deffnx {Procédure Scheme} inferior-package-location @var{package}
  2731. @deffnx {Procédure Scheme} inferior-package-inputs @var{package}
  2732. @deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
  2733. @deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
  2734. @deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
  2735. @deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
  2736. @deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
  2737. @deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
  2738. Ces procédures sont la contrepartie des accesseurs des enregistrements de
  2739. paquets (@pxref{Référence de paquet}). La plupart fonctionne en effectuant
  2740. des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
  2741. doit toujours être disponible lorsque vous appelez ces procédures.
  2742. @end deffn
  2743. Les paquets inférieurs peuvent être utilisés de manière transparente comme
  2744. tout autre paquet ou objet simili-fichier dans des G-expressions
  2745. (@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
  2746. la procédure @code{packages->manifest}, qui est typiquement utilisée dans
  2747. des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
  2748. de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
  2749. à peu près n'importe où vous utiliseriez un paquet normal : dans des
  2750. manifestes, dans le champ @code{packages} de votre déclaration
  2751. @code{operating-system}, etc.
  2752. @node Invoquer guix describe
  2753. @section Invoquer @command{guix describe}
  2754. @cindex reproductibilité
  2755. @cindex répliquer Guix
  2756. Souvent vous voudrez répondre à des questions comme « quelle révision de
  2757. Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
  2758. information utile dans de nombreuses situations : si vous voulez
  2759. @emph{répliquer} un environnement sur une machine différente ou un compte
  2760. utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
  2761. changement dans les canaux que vous utilisez l'a causé ou si vous voulez
  2762. enregistrer l'état de votre système pour le reproduire. La commande
  2763. @command{guix describe} répond à ces questions.
  2764. Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
  2765. @command{guix pull}, @command{guix describe} affiche les canaux qui ont été
  2766. construits, avec l'URL de leur dépôt et l'ID de leur commit
  2767. (@pxref{Canaux}) :
  2768. @example
  2769. $ guix describe
  2770. Generation 10 03 sep. 2018 17:32:44 (actuelle)
  2771. guix e0fa68c
  2772. URL du dépôt : https://git.savannah.gnu.org/git/guix.git
  2773. branche : master
  2774. commit : e0fa68c7718fffd33d81af415279d6ddb518f727
  2775. @end example
  2776. Si vous connaissez bien le système de contrôle de version Git, cela
  2777. ressemble en essence à @command{git describe} ; la sortie est aussi
  2778. similaire à celle de @command{guix pull --list-generations}, mais limitée à
  2779. la génération actuelle (@pxref{Invoquer guix pull, l'option
  2780. @option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
  2781. réfère sans aucune ambiguïté à un instantané de Guix, cette information est
  2782. tout ce dont vous avez besoin pour décrire la révision de Guix que vous
  2783. utilisez et pour la répliquer.
  2784. Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
  2785. aussi renvoyer une liste de canaux plutôt que la description lisible par un
  2786. humain au-dessus :
  2787. @example
  2788. $ guix describe -f channels
  2789. (list (channel
  2790. (name 'guix)
  2791. (url "https://git.savannah.gnu.org/git/guix.git")
  2792. (commit
  2793. "e0fa68c7718fffd33d81af415279d6ddb518f727")))
  2794. @end example
  2795. @noindent
  2796. Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
  2797. pull -C} sur une autre machine ou plus tard, ce qui instantiera
  2798. @emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
  2799. l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
  2800. révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
  2801. logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
  2802. espérons que vous aimerez ça aussi !
  2803. Voici les détails des options supportées par @command{guix describe} :
  2804. @table @code
  2805. @item --format=@var{format}
  2806. @itemx -f @var{format}
  2807. Produire la sortie dans le @var{format} donné, parmi :
  2808. @table @code
  2809. @item human
  2810. produire une sortie lisible par un humain,
  2811. @item canaux
  2812. produire une liste de spécifications de canaux qui peut être passée à
  2813. @command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
  2814. (@pxref{Invoquer guix pull}),
  2815. @item json
  2816. @cindex JSON
  2817. produire une liste de spécifications de canaux dans le format JSON,
  2818. @item recutils
  2819. produire une liste de spécifications de canaux dans le format Recutils.
  2820. @end table
  2821. @item --profile=@var{profil}
  2822. @itemx -p @var{profil}
  2823. Afficher les informations sur le @var{profil}.
  2824. @end table
  2825. @node Invoquer guix pack
  2826. @section Invoquer @command{guix pack}
  2827. Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
  2828. la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
  2829. package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
  2830. C'est là que @command{guix pack} entre en jeu.
  2831. @quotation Remarque
  2832. Si vous cherchez comment échanger des binaires entre des machines où Guix
  2833. est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
  2834. et @ref{Invoquer guix archive}.
  2835. @end quotation
  2836. @cindex pack
  2837. @cindex lot
  2838. @cindex lot d'applications
  2839. @cindex lot de logiciels
  2840. La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
  2841. : elle crée une archive tar ou un autre type d'archive contenunt les
  2842. binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
  2843. L'archive qui en résulte peut être utilisée sur toutes les machines qui
  2844. n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
  2845. ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
  2846. reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
  2847. contient bien les résultats que vous prétendez proposer.
  2848. Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
  2849. leurs dépendances, vous pouvez lancer :
  2850. @example
  2851. $ guix pack guile emacs geiser
  2852. @dots{}
  2853. /gnu/store/@dots{}-pack.tar.gz
  2854. @end example
  2855. Le résultat ici est une archive tar contenant un répertoire
  2856. @file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
  2857. résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
  2858. ; le profil est le même qui celui qui aurait été créé avec @command{guix
  2859. package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
  2860. binaires indépendantes de Guix (@pxref{Installation binaire}).
  2861. Les utilisateurs de ce pack devraient lancer
  2862. @file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
  2863. pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
  2864. symbolique @file{/opt/gnu/bin} vers le profil :
  2865. @example
  2866. guix pack -S /opt/gnu/bin=bin guile emacs geiser
  2867. @end example
  2868. @noindent
  2869. De cette façon, les utilisateurs peuvent joyeusement taper
  2870. @file{/opt/gnu/bin/guile} et profiter.
  2871. @cindex binaires repositionnables, avec @command{guix pack}
  2872. Et si le destinataire de votre pack n'a pas les privilèges root sur sa
  2873. machine, et ne peut donc pas le décompresser dans le système de fichiers
  2874. racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
  2875. (voir plus bas). Cette option produite des @dfn{binaire repositionnables},
  2876. ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
  2877. du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
  2878. décompresser votre archive dans leur répertoire personnel et lancer
  2879. directement @file{./opt/gnu/bin/guile}.
  2880. @cindex Docker, construire une image avec guix pack
  2881. Autrement, vous pouvez produire un pack au format d'image Docker avec la
  2882. commande suivante :
  2883. @example
  2884. guix pack -f docker guile emacs geiser
  2885. @end example
  2886. @noindent
  2887. Le résultat est une archive tar qui peut être passée à la commande
  2888. @command{docker load}. Voir la
  2889. @uref{https://docs.docker.com/engine/reference/commandline/load/,
  2890. documentation de Docker} pour plus d'informations.
  2891. @cindex Singularity, construire une image avec guix pack
  2892. @cindex SquashFS, construire une image avec guix pack
  2893. Autrement, vous pouvez produire une image SquashFS avec la commande suivante
  2894. :
  2895. @example
  2896. guix pack -f squashfs guile emacs geiser
  2897. @end example
  2898. @noindent
  2899. Le résultat est une image de système de fichiers SquashFS qui peut soit être
  2900. montée directement soit être utilisée comme image de conteneur de système de
  2901. fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
  2902. conteneurisé Singularity}, avec des commandes comme @command{singularity
  2903. shell} ou @command{singularity exec}.
  2904. Diverses options en ligne de commande vous permettent de personnaliser votre
  2905. pack :
  2906. @table @code
  2907. @item --format=@var{format}
  2908. @itemx -f @var{format}
  2909. Produire un pack dans le @var{format} donné.
  2910. Les formats disponibles sont :
  2911. @table @code
  2912. @item tarball
  2913. C'est le format par défaut. Il produit une archive tar contenant tous les
  2914. binaires et les liens symboliques spécifiés.
  2915. @item docker
  2916. Cela produit une archive tar qui suit la
  2917. @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
  2918. spécification des images Docker}.
  2919. @item squashfs
  2920. Cela produit une image SquashFS contenant tous les binaires et liens
  2921. symboliques spécifiés, ainsi que des points de montages vides pour les
  2922. systèmes de fichiers virtuels comme procfs.
  2923. @end table
  2924. @item --relocatable
  2925. @itemx -R
  2926. Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
  2927. vous pouvez placer n'importe où dans l'arborescence du système de fichiers
  2928. et les lancer à partir de là. Par exemple, si vous créez un pack contenant
  2929. Bash avec :
  2930. @example
  2931. guix pack -R -S /mybin=bin bash
  2932. @end example
  2933. @noindent
  2934. ...@: you can copy that pack to a machine that lacks Guix, and from your
  2935. home directory as a normal user, run:
  2936. @example
  2937. tar xf pack.tar.gz
  2938. ./mybin/sh
  2939. @end example
  2940. @noindent
  2941. Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
  2942. @file{/gnu/store} apparaît et contient toutes les dépendances de
  2943. @code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
  2944. C'est sans doute la manière la plus simple de déployer du logiciel construit
  2945. avec Guix sur une machine sans Guix.
  2946. Il y a un inconvénient cependant : cette technique repose sur les
  2947. @dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
  2948. non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
  2949. Les anciennes versions de Linux ne le supportaient pas et certaines
  2950. distributions GNU/Linux les désactivent ; sur ces système, les programme du
  2951. pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
  2952. racine du système de fichiers.
  2953. @item --expression=@var{expr}
  2954. @itemx -e @var{expr}
  2955. Considérer le paquet évalué par @var{expr}.
  2956. Cela a le même but que l'option de même nom de @command{guix build}
  2957. (@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
  2958. build}}).
  2959. @item --manifest=@var{fichier}
  2960. @itemx -m @var{fichier}
  2961. Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
  2962. Scheme dans @var{fichier}
  2963. Elle a un but similaire à l'option de même nom dans @command{guix package}
  2964. (@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
  2965. fichiers manifeste. Ils vous permettent de définir une collection de
  2966. paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
  2967. créer des archives pour des machines qui n'ont pas Guix d'installé.
  2968. Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
  2969. @emph{soit} une liste de paquet, mais pas les deux.
  2970. @item --system=@var{système}
  2971. @itemx -s @var{système}
  2972. Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
  2973. plutôt que pour le type de système de l'hôte de construction.
  2974. @item --target=@var{triplet}
  2975. @cindex compilation croisée
  2976. Effectuer une compilation croisée pour @var{triplet} qui doit être un
  2977. triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
  2978. target triplets, GNU configuration triplets,, autoconf, Autoconf}).
  2979. @item --compression=@var{outil}
  2980. @itemx -C @var{outil}
  2981. Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
  2982. @code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
  2983. @item --symlink=@var{spec}
  2984. @itemx -S @var{spec}
  2985. Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
  2986. option peut apparaître plusieurs fois.
  2987. @var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
  2988. le lien symbolique qui sera créé et @var{cible} est la cible du lien.
  2989. Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
  2990. @file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
  2991. @item --localstatedir
  2992. @itemx --profile-name=@var{nom}
  2993. Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
  2994. résulte, et notamment le profil
  2995. @file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
  2996. @code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
  2997. @file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
  2998. ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
  2999. fournir dans le pack signifie que le dépôt et « complet » et gérable par
  3000. Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
  3001. aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
  3002. Un cas d'utilisation est l'archive binaire indépendante de Guix
  3003. (@pxref{Installation binaire}).
  3004. @item --bootstrap
  3005. Utiliser les programmes d'amorçage pour construire le pack. Cette option
  3006. n'est utile que pour les développeurs de Guix.
  3007. @end table
  3008. En plus, @command{guix pack} supporte toutes les options de construction
  3009. communes (@pxref{Options de construction communes}) et toutes les options de
  3010. transformation de paquets (@pxref{Options de transformation de paquets}).
  3011. @node Invoquer guix archive
  3012. @section Invoquer @command{guix archive}
  3013. @cindex @command{guix archive}
  3014. @cindex archive
  3015. La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
  3016. des fichiers du dépôt dans une simple archive puis ensuite de les
  3017. @dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
  3018. permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
  3019. autre machine.
  3020. @quotation Remarque
  3021. Si vous chercher une manière de produire des archives dans un format adapté
  3022. pour des outils autres que Guix, @pxref{Invoquer guix pack}.
  3023. @end quotation
  3024. @cindex exporter des éléments du dépôt
  3025. Pour exporter des fichiers du dépôt comme une archive sur la sortie
  3026. standard, lancez :
  3027. @example
  3028. guix archive --export @var{options} @var{spécifications}...
  3029. @end example
  3030. @var{spécifications} peut être soit des noms de fichiers soit des
  3031. spécifications de paquets, comme pour @command{guix package}
  3032. (@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
  3033. archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
  3034. principale de @code{emacs} :
  3035. @example
  3036. guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
  3037. @end example
  3038. Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
  3039. les construit automatiquement. Le processus de construction peut être
  3040. contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
  3041. Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
  3042. pourrait lancer :
  3043. @example
  3044. guix archive --export -r emacs | ssh la-machine guix archive --import
  3045. @end example
  3046. @noindent
  3047. De même, on peut transférer un profil utilisateur complet d'une machine à
  3048. une autre comme cela :
  3049. @example
  3050. guix archive --export -r $(readlink -f ~/.guix-profile) | \
  3051. ssh la-machine guix-archive --import
  3052. @end example
  3053. @noindent
  3054. Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
  3055. profil ainsi que toutes leurs dépendances sont transférées (à cause de
  3056. @code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
  3057. de la machine cible. L'option @code{--missing} peut vous aider à comprendre
  3058. les éléments qui manquent dans le dépôt de la machine cible. La commande
  3059. @command{guix copy} simplifie et optimise ce processus, c'est donc ce que
  3060. vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
  3061. @cindex nar, format d'archive
  3062. @cindex archive normalisée (nar)
  3063. Les archives sont stockées au format « archive normalisé » ou « nar », qui
  3064. est comparable dans l'esprit à « tar » mais avec des différences qui le
  3065. rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
  3066. stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
  3067. mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
  3068. les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
  3069. Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
  3070. toujours l'ordre des noms de fichier dans l'environnement linguistique C.
  3071. Cela rend la production des archives entièrement déterministe.
  3072. @c FIXME: Add xref to daemon doc about signatures.
  3073. Lors de l'export, le démon signe numériquement le contenu de l'archive et
  3074. cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
  3075. vérifie la signature et rejette l'import en cas de signature invalide ou si
  3076. la clef de signature n'est pas autorisée.
  3077. Les principales options sont :
  3078. @table @code
  3079. @item --export
  3080. Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
  3081. l'archive résultante sur la sortie standard.
  3082. Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
  3083. @code{--recursive} ne soit passé.
  3084. @item -r
  3085. @itemx --recursive
  3086. En combinaison avec @code{--export}, cette option demande à @command{guix
  3087. archive} d'inclure les dépendances des éléments donnés dans l'archive.
  3088. Ainsi, l'archive résultante est autonome : elle contient la closure des
  3089. éléments du dépôt exportés.
  3090. @item --import
  3091. Lire une archive depuis l'entrée standard et importer les fichiers inclus
  3092. dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
  3093. signée par une clef publique qui ne se trouve pas dans le clefs autorisées
  3094. (voir @code{--authorize} plus bas.)
  3095. @item --missing
  3096. Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
  3097. ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
  3098. manquent dans le dépôt.
  3099. @item --generate-key[=@var{paramètres}]
  3100. @cindex signature, archives
  3101. Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
  3102. avant que les archives ne puissent être exportées avec @code{--export}.
  3103. Remarquez que cette opération prend généralement du temps parce qu'elle doit
  3104. récupère suffisamment d'entropie pour générer la paire de clefs.
  3105. La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
  3106. dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
  3107. privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
  3108. clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
  3109. libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
  3110. @var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
  3111. libgcrypt (@pxref{General public-key related Functions,
  3112. @code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
  3113. @item --authorize
  3114. @cindex autorisation, archives
  3115. Autoriser les imports signés par la clef publique passée sur l'entrée
  3116. standard. La clef publique doit être au « format avancé s-expression » —
  3117. c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
  3118. La liste des clefs autorisées est gardée dans un fichier modifiable par des
  3119. humains dans @file{/etc/guix/acl}. Le fichier contient des
  3120. @url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
  3121. avancé »} et est structuré comme une liste de contrôle d'accès dans
  3122. l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
  3123. simple (SPKI)}.
  3124. @item --extract=@var{répertoire}
  3125. @itemx -x @var{répertoire}
  3126. Lit une archive à un seul élément telle que servie par un serveur de
  3127. substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
  3128. une opération de bas niveau requise seulement dans de rares cas d'usage ;
  3129. voir plus loin.
  3130. Par exemple, la commande suivante extrait le substitut pour Emacs servi par
  3131. @code{hydra.gnu.org} dans @file{/tmp/emacs} :
  3132. @example
  3133. $ wget -O - \
  3134. https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
  3135. | bunzip2 | guix archive -x /tmp/emacs
  3136. @end example
  3137. Les archives à un seul élément sont différentes des archives à plusieurs
  3138. éléments produites par @command{guix archive --export} ; elles contiennent
  3139. un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
  3140. Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
  3141. devrait être considérée comme non sûre.
  3142. Le but principal de cette opération est de faciliter l'inspection du contenu
  3143. des archives venant de serveurs auxquels on ne fait potentiellement pas
  3144. confiance.
  3145. @end table
  3146. @c *********************************************************************
  3147. @node Interface de programmation
  3148. @chapter Interface de programmation
  3149. GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
  3150. définir, construire et faire des requêtes sur des paquets. La première
  3151. interface permet aux utilisateurs d'écrire des définitions de paquets de
  3152. haut-niveau. Ces définitions se réfèrent à des concepts de création de
  3153. paquets familiers, comme le nom et la version du paquet, son système de
  3154. construction et ses dépendances. Ces définitions peuvent ensuite être
  3155. transformées en actions concrètes lors de la construction.
  3156. Les actions de construction sont effectuées par le démon Guix, pour le
  3157. compte des utilisateurs. Dans un environnement standard, le démon possède
  3158. les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
  3159. pas les utilisateurs. La configuration recommandée permet aussi au démon
  3160. d'effectuer la construction dans des chroots, avec un utilisateur de
  3161. construction spécifique pour minimiser les interférences avec le reste du
  3162. système.
  3163. @cindex dérivation
  3164. Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
  3165. Pour demander au démon d'effectuer une action de construction, les
  3166. utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
  3167. une représentation à bas-niveau des actions de construction à entreprendre
  3168. et l'environnement dans lequel elles devraient avoir lieu — les dérivations
  3169. sont aux définitions de paquets ce que l'assembleur est aux programmes C.
  3170. Le terme de « dérivation » vient du fait que les résultats de la
  3171. construction en @emph{dérivent}.
  3172. Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
  3173. paquets à haut-niveau.
  3174. @menu
  3175. * Définition des paquets:: Définir de nouveaux paquets.
  3176. * Systèmes de construction:: Spécifier comment construire les paquets.
  3177. * Le dépôt:: Manipuler le dépôt de paquets.
  3178. * Dérivations:: Interface de bas-niveau avec les dérivations
  3179. de paquets.
  3180. * La monad du dépôt:: Interface purement fonctionnelle avec le
  3181. dépôt.
  3182. * G-Expressions:: Manipuler les expressions de construction.
  3183. * Invoquer guix repl:: S'amuser avec Guix de manière interactive.
  3184. @end menu
  3185. @node Définition des paquets
  3186. @section Définition des paquets
  3187. L'interface de haut-niveau pour les définitions de paquets est implémentée
  3188. dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
  3189. exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
  3190. ressemble à cela :
  3191. @example
  3192. (define-module (gnu packages hello)
  3193. #:use-module (guix packages)
  3194. #:use-module (guix download)
  3195. #:use-module (guix build-system gnu)
  3196. #:use-module (guix licenses)
  3197. #:use-module (gnu packages gawk))
  3198. (define-public hello
  3199. (package
  3200. (name "hello")
  3201. (version "2.10")
  3202. (source (origin
  3203. (method url-fetch)
  3204. (uri (string-append "mirror://gnu/hello/hello-" version
  3205. ".tar.gz"))
  3206. (sha256
  3207. (base32
  3208. "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
  3209. (build-system gnu-build-system)
  3210. (arguments '(#:configure-flags '("--enable-silent-rules")))
  3211. (inputs `(("gawk" ,gawk)))
  3212. (synopsis "Hello, GNU world: An example GNU package")
  3213. (description "Guess what GNU Hello prints!")
  3214. (home-page "http://www.gnu.org/software/hello/")
  3215. (license gpl3+)))
  3216. @end example
  3217. @noindent
  3218. Sans être un expert Scheme, le lecteur peut comprendre la signification des
  3219. différents champs présents. Cette expression lie la variable @code{hello} à
  3220. un objet @code{<package>}, qui est essentiellement un enregistrement
  3221. (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
  3222. peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
  3223. le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
  3224. renvoie — oh surprise ! — @code{"hello"}.
  3225. Avec un peu de chance, vous pourrez importer tout ou partie de la définition
  3226. du paquet qui vous intéresse depuis un autre répertoire avec la commande
  3227. @code{guix import} (@pxref{Invoquer guix import}).
  3228. Dans l'exemple précédent, @var{hello} est défini dans un module à part,
  3229. @code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
  3230. nécessaire, mais c'est pratique : tous les paquets définis dans des modules
  3231. sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
  3232. ligne de commande (@pxref{Modules de paquets}).
  3233. Il y a quelques points à remarquer dans la définition de paquet précédente :
  3234. @itemize
  3235. @item
  3236. Le champ @code{source} du paquet est un objet @code{<origin>} (@pxref{Référence d'origine}, pour la référence complète). Ici, on utilise la méthode
  3237. @code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
  3238. est un fichier à télécharger par FTP ou HTTP.
  3239. Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
  3240. des miroirs GNU définis dans @code{(guix download)}.
  3241. Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
  3242. téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
  3243. fichier. La forme @code{(base32 @dots{})} introduit a représentation en
  3244. base32 du hash. Vous pouvez obtenir cette information avec @code{guix
  3245. download} (@pxref{Invoquer guix download}) et @code{guix hash}
  3246. (@pxref{Invoquer guix hash}).
  3247. @cindex correctifs
  3248. Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
  3249. @code{patches} qui liste les correctifs à appliquer et un champ
  3250. @code{snippet} qui donne une expression Scheme pour modifier le code source.
  3251. @item
  3252. @cindex Système de construction GNU
  3253. Le champ @code{build-system} spécifie la procédure pour construire le paquet
  3254. (@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
  3255. de construction GNU familier, où les paquets peuvent être configurés,
  3256. construits et installés avec la séquence @code{./configure && make && make
  3257. check && make install} habituelle.
  3258. @item
  3259. Le champ @code{arguments} spécifie des options pour le système de
  3260. construction (@pxref{Systèmes de construction}). Ici il est interprété par
  3261. @var{gnu-build-system} comme une demande de lancer @file{configure} avec le
  3262. drapeau @code{--enable-silent-rules}.
  3263. @cindex quote
  3264. @cindex quoting
  3265. @findex '
  3266. @findex quote
  3267. Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
  3268. introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
  3269. @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
  3270. des détails. Ice la valeur du champ @code{arguments} est une liste
  3271. d'arguments passés au système de construction plus tard, comme avec
  3272. @code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
  3273. Reference Manual}).
  3274. La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
  3275. (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
  3276. @code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
  3277. système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
  3278. Reference Manual}).
  3279. @item
  3280. Le champ @code{inputs} spécifie les entrées du processus de construction —
  3281. c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
  3282. on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
  3283. @var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
  3284. @cindex accent grave (quasiquote)
  3285. @findex `
  3286. @findex quasiquote
  3287. @cindex virgule (unquote)
  3288. @findex ,
  3289. @findex unquote
  3290. @findex ,@@
  3291. @findex unquote-splicing
  3292. De nouveau, @code{`} (un accent grave, synonyme de la fonction
  3293. @code{quasiquote}) nous permet d'introduire une liste litérale dans le champ
  3294. @code{inputs}, tandis que @code{,} (une virgule, synonyme de la fonction
  3295. @code{unquote}) nous permet d'insérer une valeur dans cette liste
  3296. (@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
  3297. Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
  3298. besoin d'être spécifiés en tant qu'entrées ici. À la place, le
  3299. @var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
  3300. (@pxref{Systèmes de construction}).
  3301. Cependant, toutes les autres dépendances doivent être spécifiées dans le
  3302. champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
  3303. simplement indisponible pour le processus de construction, ce qui peut mener
  3304. à un échec de la construction.
  3305. @end itemize
  3306. @xref{Référence de paquet}, pour une description complète des champs
  3307. possibles.
  3308. Lorsqu'une définition de paquet est en place, le paquet peut enfin être
  3309. construit avec l'outil en ligne de commande @code{guix build}
  3310. (@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
  3311. vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
  3312. aisément revenir à la définition du paquet avec la commande @command{guix
  3313. edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
  3314. d'inforamtions sur la manière de tester des définitions de paquets et
  3315. @ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
  3316. que la définition réspecte les conventions de style.
  3317. @vindex GUIX_PACKAGE_PATH
  3318. Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
  3319. distribution en ajoutant vos propres définitions de paquets dans un « canal
  3320. ».
  3321. Finalement, la mise à jour de la définition du paquet à une nouvelle version
  3322. amont peut en partie s'automatiser avec la commande @command{guix refresh}
  3323. (@pxref{Invoquer guix refresh}).
  3324. Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
  3325. d'abord calculé par la procédure @code{package-derivation}. Cette
  3326. dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
  3327. Les actions de construction qu'il prescrit peuvent ensuite être réalisées
  3328. par la procédure @code{build-derivation} (@pxref{Le dépôt}).
  3329. @deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
  3330. Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
  3331. (@pxref{Dérivations}).
  3332. @var{paquet} doit être un objet @code{<package>} valide et @var{système} une
  3333. chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
  3334. pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
  3335. connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
  3336. @end deffn
  3337. @noindent
  3338. @cindex compilation croisée
  3339. De manière identique, il est possible de calculer une dérivation qui
  3340. effectue une compilation croisée d'un paquet pour un autre système :
  3341. @deffn {Procédure Scheme} package-cross-derivation @var{store} @
  3342. @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
  3343. duof @var{paquet} construit depuis @var{système} pour @var{cible}.
  3344. @var{cible} doit être un triplet GNU valide indiquant le matériel cible et
  3345. le système d'exploitation, comme @code{"mips64el-linux-gnu"}
  3346. (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
  3347. Configure and Build System}).
  3348. @end deffn
  3349. @cindex transformations de paquets
  3350. @cindex réécriture d'entrées
  3351. @cindex réécriture de l'arbre des dépendances
  3352. On peut manipuler les paquets de manière arbitraire. Une transformation
  3353. utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
  3354. dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
  3355. d'autres :
  3356. @deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
  3357. [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
  3358. paquet, remplace des dépendances directes et indirectes (mais pas ses
  3359. entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
  3360. est une liste de paires de paquets ; le premier élément de chaque pair est
  3361. le paquet à remplacer, le second son remplaçant.
  3362. De manière facultative, @var{nom-réécrit} est une procédure à un argument
  3363. qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
  3364. réécrit.
  3365. @end deffn
  3366. @noindent
  3367. Regardez cet exemple :
  3368. @example
  3369. (define libressl-instead-of-openssl
  3370. ;; Cette procédure remplace OPENSSL par LIBRESSL,
  3371. ;; récursivement.
  3372. (package-input-rewriting `((,openssl . ,libressl))))
  3373. (define git-with-libressl
  3374. (libressl-instead-of-openssl git))
  3375. @end example
  3376. @noindent
  3377. Ici nous définissons d'abord une procédure de réécriture qui remplace
  3378. @var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
  3379. @dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
  3380. @var{openssl}. cela est exactement ce que l'option en ligne de commande
  3381. @option{--with-input} fait (@pxref{Options de transformation de paquets,
  3382. @option{--with-input}}).
  3383. Une procédure plus générique pour réécrire un graphe de dépendance d'un
  3384. paquet est @code{package-mapping} : elle supporte n'importe quel changement
  3385. dans les nœuds du graphe.
  3386. @deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
  3387. Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
  3388. paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
  3389. arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
  3390. @end deffn
  3391. @menu
  3392. * Référence de paquet:: Le type de donnée des paquets.
  3393. * Référence d'origine:: Le type de données d'origine.
  3394. @end menu
  3395. @node Référence de paquet
  3396. @subsection Référence de @code{package}
  3397. Cette section résume toutes les options disponibles dans les déclarations
  3398. @code{package} (@pxref{Définition des paquets}).
  3399. @deftp {Type de données} package
  3400. C'est le type de donnée représentant une recette de paquets
  3401. @table @asis
  3402. @item @code{name}
  3403. Le nom du paquet, comme une chaîne de caractères.
  3404. @item @code{version}
  3405. La version du paquet, comme une chaîne de caractères.
  3406. @item @code{source}
  3407. Un objet qui indique comment le code source du paquet devrait être
  3408. récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
  3409. fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
  3410. s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
  3411. indique un fichier du système de fichier local (@pxref{G-Expressions,
  3412. @code{local-file}}).
  3413. @item @code{build-system}
  3414. Le système de construction qui devrait être utilisé pour construire le
  3415. paquet (@pxref{Systèmes de construction}).
  3416. @item @code{arguments} (par défaut : @code{'()})
  3417. Les arguments à passer au système de construction. C'est une liste qui
  3418. contient typiquement une séquence de paires de clefs-valeurs.
  3419. @item @code{inputs} (par défaut : @code{'()})
  3420. @itemx @code{native-inputs} (par défaut : @code{'()})
  3421. @itemx @code{propagated-inputs} (par défaut : @code{'()})
  3422. @cindex entrées, des paquets
  3423. Ces champs listent les dépendances du paquet. Chacune est une liste de
  3424. tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
  3425. caractères) comme premier élément, un paquet, une origine ou une dérivation
  3426. comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
  3427. est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
  3428. plus d'informations sur les sorties des paquets). Par exemple, la liste
  3429. suivante spécifie trois entrées :
  3430. @example
  3431. `(("libffi" ,libffi)
  3432. ("libunistring" ,libunistring)
  3433. ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
  3434. @end example
  3435. @cindex compilation croisée, dépendances des paquets
  3436. La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
  3437. lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
  3438. les dépendances listées dans @code{inputs} sont construites pour
  3439. l'architecture @emph{cible} ; inversement, les dépendances listées dans
  3440. @code{native-inputs} sont construites pour l'architecture de la machine de
  3441. @emph{construction}.
  3442. @code{native-inputs} est typiquement utilisé pour lister les outils requis à
  3443. la construction mais pas à l'exécution, comme Autoconf, Automake,
  3444. pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
  3445. erreurs de ce type (@pxref{Invoquer guix lint}).
  3446. @anchor{package-propagated-inputs}
  3447. Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
  3448. paquets spécifiés seront automatiquement installés avec le paquet auquel ils
  3449. appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
  3450. package}}, pour des informations sur la manière dont @command{guix package}
  3451. traite les entrées propagées).
  3452. Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
  3453. d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
  3454. pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
  3455. Un autre exemple où @code{propagated-inputs} est utile est pour les langages
  3456. auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
  3457. cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
  3458. et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
  3459. peuvent trouver le code des bibliothèques dont elles dépendent à
  3460. l'exécution, les dépendances à l'exécution doivent être listées dans
  3461. @code{propagated-inputs} plutôt que @code{inputs}.
  3462. @item @code{self-native-input?} (par défaut : @code{#f})
  3463. C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
  3464. comme entrée native lors de la compilation croisée.
  3465. @item @code{outputs} (par défaut : @code{'("out")})
  3466. La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
  3467. supplémentaires.
  3468. @item @code{native-search-paths} (par défaut : @code{'()})
  3469. @itemx @code{search-paths} (par défaut : @code{'()})
  3470. Une liste d'objets @code{search-path-specification} décrivant les variables
  3471. d'environnement de recherche de chemins que ce paquet utilise.
  3472. @item @code{replacement} (par défaut : @code{#f})
  3473. Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
  3474. comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
  3475. plus de détails.
  3476. @item @code{synopsis}
  3477. Une description sur une ligne du paquet.
  3478. @item @code{description}
  3479. Une description plus détaillée du paquet.
  3480. @item @code{license}
  3481. @cindex licence, des paquets
  3482. La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
  3483. liste de ces valeurs.
  3484. @item @code{home-page}
  3485. L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
  3486. @item @code{supported-systems} (par défaut : @var{%supported-systems})
  3487. La liste des systèmes supportés par le paquet, comme des chaînes de
  3488. caractères de la forme @code{architecture-noyau}, par exemple
  3489. @code{"x86_64-linux"}.
  3490. @item @code{maintainers} (par défaut : @code{'()})
  3491. La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
  3492. @item @code{location} (par défaut : emplacement de la source de la forme @code{package})
  3493. L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
  3494. hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
  3495. corrigé.
  3496. @end table
  3497. @end deftp
  3498. @node Référence d'origine
  3499. @subsection Référence de @code{origin}
  3500. Cette section résume toutes les options disponibles dans le déclarations
  3501. @code{origin} (@pxref{Définition des paquets}).
  3502. @deftp {Type de données} origin
  3503. C'est le type de donnée qui représente l'origine d'un code source.
  3504. @table @asis
  3505. @item @code{uri}
  3506. Un objet contenant l'URI de la source. Le type d'objet dépend de la
  3507. @code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
  3508. de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
  3509. représentée par une chaîne de caractères, ou une liste de chaînes de
  3510. caractères.
  3511. @item @code{method}
  3512. Un procédure qui gère l'URI.
  3513. Quelques exemples :
  3514. @table @asis
  3515. @item @var{url-fetch} de @code{(guix download)}
  3516. télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
  3517. champ @code{uri} ;
  3518. @vindex git-fetch
  3519. @item @var{git-fetch} de @code{(guix git-download)}
  3520. clone le dépôt sous contrôle de version Git et récupère la révision
  3521. spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
  3522. un objet @code{git-reference} ressemble à cela :
  3523. @example
  3524. (git-reference
  3525. (url "git://git.debian.org/git/pkg-shadow/shadow")
  3526. (commit "v4.1.5.1"))
  3527. @end example
  3528. @end table
  3529. @item @code{sha256}
  3530. Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
  3531. @code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
  3532. de caractères en base-32.
  3533. Vous pouvez obtenir cette information avec @code{guix download}
  3534. (@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
  3535. @item @code{file-name} (par défaut : @code{#f})
  3536. Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
  3537. @code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
  3538. des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
  3539. fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
  3540. contrôle de version, il est recommandé de fournir un nom de fichier
  3541. explicitement parce que le nom par défaut n'est pas très descriptif.
  3542. @item @code{patches} (par défaut : @code{'()})
  3543. Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
  3544. (@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
  3545. à appliquer sur la source.
  3546. Cette liste de correctifs doit être inconditionnelle. En particulier, elle
  3547. ne peut pas dépendre des valeurs de @code{%current-system} ou
  3548. @code{%current-target-system}.
  3549. @item @code{snippet} (par défaut : @code{#f})
  3550. Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
  3551. dans le répertoire des sources. C'est une manière pratique de modifier la
  3552. source, parfois plus qu'un correctif.
  3553. @item @code{patch-flags} (par défaut : @code{'("-p1")})
  3554. Une liste de drapeaux à passer à la commande @code{patch}.
  3555. @item @code{patch-inputs} (par défaut : @code{#f})
  3556. Paquets d'entrées ou dérivations pour le processus de correction.
  3557. Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
  3558. pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
  3559. @item @code{modules} (par défaut : @code{'()})
  3560. Une liste de modules Guile qui devraient être chargés pendant le processus
  3561. de correction et pendant que le lancement du code du champ @code{snippet}.
  3562. @item @code{patch-guile} (par défaut : @code{#f})
  3563. Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
  3564. à @code{#f}, une valeur par défaut raisonnable est utilisée.
  3565. @end table
  3566. @end deftp
  3567. @node Systèmes de construction
  3568. @section Systèmes de construction
  3569. @cindex système de construction
  3570. Chaque définition de paquet définie un @dfn{système de construction} et des
  3571. arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
  3572. champ @code{build-system} représente la procédure de construction du paquet,
  3573. ainsi que des dépendances implicites pour cette procédure de construction.
  3574. Les systèmes de construction sont des objets
  3575. @code{<build-system>}. L'interface pour les créer et les manipuler est
  3576. fournie par le module @code{(guix build-system)} et les systèmes de
  3577. construction eux-mêmes sont exportés par des modules spécifiques.
  3578. @cindex sac (représentation à bas-niveau des paquets)
  3579. Sous le capot, les systèmes de construction compilent d'abord des objets
  3580. paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
  3581. décoration — en d'autres mots, un sac est une représentation à bas-niveau
  3582. d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
  3583. été implicitement ajoutées par le système de construction. Cette
  3584. représentation intermédiaire est ensuite compilée en une dérivation
  3585. (@pxref{Dérivations}).
  3586. Les systèmes de construction acceptent une liste d'@dfn{arguments}
  3587. facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
  3588. champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
  3589. arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
  3590. Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
  3591. habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
  3592. un processus Guile lancé par le démon (@pxref{Dérivations}).
  3593. Le système de construction principal est le @var{gnu-build-system} qui
  3594. implémente les procédures de construction standard pour les paquets GNU et
  3595. de nombreux autres. Il est fournit par le module @code{(guix build-system
  3596. gnu)}.
  3597. @defvr {Variable Scheme} gnu-build-system
  3598. @var{gnu-build-system} représente le système de construction GNU et ses
  3599. variantes (@pxref{Configuration, configuration and makefile conventions,,
  3600. standards, GNU Coding Standards}).
  3601. @cindex phases de construction
  3602. En résumé, les paquets qui l'utilisent sont configurés, construits et
  3603. installés avec la séquence @code{./configure && make && make check && make
  3604. install} habituelle. En pratique, des étapes supplémentaires sont souvent
  3605. requises. Toutes ces étapes sont séparées dans des @dfn{phases}
  3606. différentes, notamment@footnote{Regardez les modules @code{(guix build
  3607. gnu-build-system)} pour plus de détails sur les phases de construction.}:
  3608. @table @code
  3609. @item unpack
  3610. Décompresse l'archive des sources et se déplace dans l'arborescence des
  3611. sources fraîchement extraites. Si la source est en fait un répertoire, le
  3612. copie dans l'arborescence de construction et entre dans ce répertoire.
  3613. @item patch-source-shebangs
  3614. Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
  3615. réfèrent aux bons noms de fichiers. Par exemple, elle change
  3616. @code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
  3617. @item configure
  3618. Lance le script @code{configure} avec un certain nombre d'options par
  3619. défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
  3620. spécifiées par l'argument @code{#:configure-flags}.
  3621. @item build
  3622. Lance @code{make} avec la liste des drapeaux spécifiés avec
  3623. @code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
  3624. défaut), construit avec @code{make -j}.
  3625. @item check
  3626. Lance @code{make check}, ou une autre cible spécifiée par
  3627. @code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
  3628. l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
  3629. check -j}.
  3630. @item install
  3631. Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
  3632. @item patch-shebangs
  3633. Corrige les shebangs des fichiers exécutables installés.
  3634. @item strip
  3635. Nettoie les symboles de débogage dans les fichiers ELF (à moins que
  3636. @code{#:strip-binaries?} ne soit faux), les copie dans la sortie
  3637. @code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
  3638. @end table
  3639. @vindex %standard-phases
  3640. Le module du côté du constructeur @code{(guix build gnu-build-system)}
  3641. définie @var{%standard-phases} comme la liste par défaut des phases de
  3642. construction. @var{%standard-phases} est une liste de paires de symboles
  3643. et de procédures, où la procédure implémente la phase en question.
  3644. La liste des phases utilisées par un paquet particulier peut être modifiée
  3645. avec le paramètre @code{#:phases}. Par exemple, en passant :
  3646. @example
  3647. #:phases (modify-phases %standard-phases (delete 'configure))
  3648. @end example
  3649. signifie que toutes les procédures décrites plus haut seront utilisées, sauf
  3650. la phase @code{configure}.
  3651. En plus, ce système de construction s'assure que l'environnement « standard
  3652. » pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
  3653. libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
  3654. @code{(guix build-system gnu)} pour une liste complète). Nous les appelons
  3655. les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
  3656. ne les mentionne pas.
  3657. @end defvr
  3658. D'autres objets @code{<build-system>} sont définis pour supporter d'autres
  3659. conventions et outils utilisés par les paquets de logiciels libres. Ils
  3660. héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
  3661. l'ensemble des entrées implicites ajoutées au processus de construction et
  3662. dans la liste des phases exécutées. Certains de ces systèmes de
  3663. construction sont listés ci-dessous.
  3664. @defvr {Variable Scheme} ant-build-system
  3665. Cette variable est exportée par @code{(guix build-system ant)}. Elle
  3666. implémente la procédure de construction pour les paquets Java qui peuvent
  3667. être construits avec @url{http://ant.apache.org/, l'outil de construction
  3668. Ant}.
  3669. Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
  3670. (JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
  3671. paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
  3672. et @code{#:jdk} respectivement.
  3673. Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
  3674. acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
  3675. fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
  3676. construire l'archive jar spécifiée. Dans ce cas, le paramètre
  3677. @code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
  3678. sources, par défaut « src ».
  3679. Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
  3680. construction minimal pour spécifier la classe principale du jar. Cela rend
  3681. le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
  3682. utilisé pour spécifier la liste des tests junit à lancer. Il vaut par
  3683. défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
  3684. peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
  3685. @code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
  3686. peuvent pas être utilisées comme des tests.
  3687. Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
  3688. Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
  3689. tâche « jar » sera lancée.
  3690. @end defvr
  3691. @defvr {Variable Scheme} android-ndk-build-system
  3692. @cindex Distribution android
  3693. @cindex système de construction Android NDK
  3694. Cette variable est exportée par @code{(guix build-system android-ndk)}.
  3695. Elle implémente une procédure de construction pour les paquets du NDK
  3696. Android (@i{native development kit}) avec des processus de construction
  3697. spécifiques à Guix.
  3698. Le système de construction suppose que les paquets installent leur interface
  3699. publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
  3700. « out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
  3701. « out ».
  3702. Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
  3703. pas de fichiers en conflit.
  3704. Pour l'instant, la compilation croisée n'est pas supportées — donc pour
  3705. l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
  3706. des outils de l'hôte.
  3707. @end defvr
  3708. @defvr {Variable Scheme} asdf-build-system/source
  3709. @defvrx {Variable Scheme} asdf-build-system/sbcl
  3710. @defvrx {Variable Scheme} asdf-build-system/ecl
  3711. Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
  3712. les procédures de constructions pour les paquets en Common Lisp qui
  3713. utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
  3714. un dispositif de définition de systèmes pour les programmes et les
  3715. bibliothèques en Common Lisp.
  3716. Le système @code{asdf-build-system/source} installe les paquets au format
  3717. source qui peuvent être chargés avec n'importe quelle implémentation de
  3718. common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
  3719. installent des binaires au format qu'un implémentation particulière
  3720. comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
  3721. produire des programmes exécutables ou des images lisp qui contiennent un
  3722. ensemble de paquets pré-chargés.
  3723. Le système de construction utilise des conventions de nommage. Pour les
  3724. paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
  3725. lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
  3726. En plus, le paquet source correspondant devrait étiquetté avec la même
  3727. convention que les paquets python (voir @ref{Modules python}), avec le
  3728. préfixe @code{cl-}.
  3729. Pour les paquets binaires, chaque système devrait être défini comme un
  3730. paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
  3731. peut créer des variantes du paquet pour construire tous les systèmes. Les
  3732. paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
  3733. contenir plusieurs systèmes.
  3734. Pour créer des programmes exécutables et des images, les procédures côté
  3735. construction @code{build-program} et @code{build-image} peuvent être
  3736. utilisées. Elles devraient être appelées dans une phase de construction
  3737. après la phase @code{create-symlinks} pour que le système qui vient d'être
  3738. construit puisse être utilisé dans l'image créée. @code{build-program}
  3739. requiert une liste d'expressions Common Lisp dans l'argument
  3740. @code{#:entry-program}.
  3741. Si le système n'est pas défini dans son propre fichier @code{.asd} du même
  3742. nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
  3743. spécifier dans quel fichier le système est défini. De plus, si le paquet
  3744. défini un système pour ses tests dans un fichier séparé, il sera chargé
  3745. avant que les tests ne soient lancés s'il est spécifié par le paramètre
  3746. @code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
  3747. @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
  3748. @code{test.asd} seront testés.
  3749. Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
  3750. différente de ce que la convention de nommage suggère, le paramètre
  3751. @code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
  3752. @end defvr
  3753. @defvr {Variable Scheme} cargo-build-system
  3754. @cindex Langage de programmation Rust
  3755. @cindex Cargo (système de construction Rust)
  3756. Cette variable est exportée par @code{(guix build-system cargo)}. Elle
  3757. supporte les construction de paquets avec Cargo, le système de construction
  3758. du @uref{https://www.rust-lang.org, langage de programmation Rust}.
  3759. Dans sa phase @code{configure}, ce système de construction remplace les
  3760. dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
  3761. Guix. La phase @code{install} installe les binaires et installe aussi le
  3762. code source et le fichier @file{Cargo.toml}.
  3763. @end defvr
  3764. @cindex Clojure (langage de programmation)
  3765. @cindex système de construction Clojure simple
  3766. @defvr {Variable Scheme} clojure-build-system
  3767. Cette variable est exportée par @code{(guix build-system clojure)}. Elle
  3768. implémente une procédure de construction des paquets simple qui utilise le
  3769. bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
  3770. encore supportée.
  3771. Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
  3772. entrées. Des paquets différents peuvent être spécifiés avec les paramètres
  3773. @code{#:clojure}, @code{#:jdk} et @code{#:zip}.
  3774. Une liste de répertoires sources, de répertoires de tests et de noms de jar
  3775. peuvent être spécifiés avec les paramètres @code{#:source-dirs},
  3776. @code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
  3777. la classe principale peuvent être spécifiés avec les paramètres
  3778. @code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
  3779. documentés plus bas.
  3780. Ce système de construction est une extension de @var{ant-build-system}, mais
  3781. avec les phases suivantes modifiées :
  3782. @table @code
  3783. @item build
  3784. Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
  3785. sources et lance @command{jar} pour créer les fichiers jar à partir des
  3786. fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
  3787. d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
  3788. La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
  3789. consistent en des symboles représentant des bibliothèque Clojure ou le mot
  3790. clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
  3791. trouvées dans les répertoires des sources. Le paramètre
  3792. @code{#:omit-source?} décide si les sources devraient être incluses dans les
  3793. fichiers jar.
  3794. @item check
  3795. Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
  3796. spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
  3797. signification est analogue à celle de @code{#:aot-include} et
  3798. @code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
  3799. maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
  3800. tests. Le paramètre @code{#:tests?} décide si les tests devraient être
  3801. lancés.
  3802. @item install
  3803. Cette phase installe tous les fichiers jar précédemment construits.
  3804. @end table
  3805. En dehors de cela, le système de construction contient aussi la phase
  3806. suivante :
  3807. @table @code
  3808. @item install-doc
  3809. Cette phase installe tous les fichiers dans le répertoire de plus haut
  3810. niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
  3811. regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
  3812. (récursivement) dans les répertoires de documentations spécifiés dans
  3813. @code{#:doc-dirs} sont aussi installés.
  3814. @end table
  3815. @end defvr
  3816. @defvr {Variable Scheme} cmake-build-system
  3817. Cette variable est exportée par @code{(guix build-system cmake)}. Elle
  3818. implémente la procédure de construction des paquets qui utilisent
  3819. l'@url{http://www.cmake.org, outil de construction CMake}.
  3820. Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
  3821. entrées. Le paquet utilisé peut être spécifié par le paramètre
  3822. @code{#:cmake}.
  3823. Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
  3824. passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
  3825. spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
  3826. par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
  3827. les informations de débogage » en plus court), ce qui signifie en gros que
  3828. le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
  3829. défaut.
  3830. @end defvr
  3831. @defvr {Variable Scheme} go-build-system
  3832. Cette variable est exportée par @code{(guix build-system go)}. Elle
  3833. implémente la procédure pour les paquets Go utilisant les
  3834. @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
  3835. mécanismes de construction Go} standard.
  3836. L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
  3837. dans certains cas, @code{#:unpack-path}. Le
  3838. @url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
  3839. correspond au chemin dans le système de fichiers attendu par le script de
  3840. construction du paquet et les paquets qui s'y réfèrent et fournit une
  3841. manière unique de se référer à un paquet Go. Il est typiquement basé sur
  3842. une combinaison de l'URI du code source du paquet et d'une structure
  3843. hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
  3844. le code source du paquet dans une structure de répertoires différente que
  3845. celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
  3846. utilisé dans ces cas-là.
  3847. Les paquets qui fournissent des bibliothèques Go devraient être installées
  3848. avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
  3849. par défaut, contrôle l'installation du code source. Elle peut être mise à
  3850. @code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
  3851. @end defvr
  3852. @defvr {Variable Scheme} glib-or-gtk-build-system
  3853. Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
  3854. Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
  3855. GTK+.
  3856. Ce système de construction ajoute les deux phases suivantes à celles
  3857. définies par @var{gnu-build-system} :
  3858. @table @code
  3859. @item glib-or-gtk-wrap
  3860. La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
  3861. @file{bin/} sont capable de trouver les « schemas » GLib et les
  3862. @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
  3863. GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
  3864. lancement qui initialisent correctement les variables d'environnement
  3865. @code{XDG_DATA_DIRS} et @code{GTK_PATH}.
  3866. Il est possible d'exclure des sorties spécifiques de ce processus
  3867. d'enveloppage en listant leur nom dans le paramètre
  3868. @code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
  3869. est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
  3870. ajouterait une dépendance inutile vers GLib et GTK+.
  3871. @item glib-or-gtk-compile-schemas
  3872. La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
  3873. @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
  3874. schémas GSettings} de GLib sont compilés. La compilation est effectuée par
  3875. le programme @command{glib-compile-schemas}. Il est fournit par le paquet
  3876. @code{glib:bin} qui est automatiquement importé par le système de
  3877. construction. Le paquet @code{glib} qui fournit
  3878. @command{glib-compile-schemas} peut être spécifié avec le paramètre
  3879. @code{#:glib}.
  3880. @end table
  3881. Ces deux phases sont exécutées après la phase @code{install}.
  3882. @end defvr
  3883. @defvr {Variable Scheme} guile-build-system
  3884. Ce système de construction sert aux paquets Guile qui consistent
  3885. exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
  3886. makefile, sans parler d'un script @file{configure}. Il compile le code
  3887. Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
  3888. GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
  3889. @file{.go} aux bons emplacements. Il installe aussi la documentation.
  3890. Ce système de construction supporte la compilation croisée en utilisant
  3891. l'option @code{--target} de @command{guild compile}.
  3892. Les paquets construits avec @code{guile-build-system} doivent fournir un
  3893. paquet Guile dans leur champ @code{native-inputs}.
  3894. @end defvr
  3895. @defvr {Variable Scheme} minify-build-system
  3896. Cette variable est exportée par @code{(guix build-system minify)}. Elle
  3897. implémente une procédure de minification pour des paquets JavaScript
  3898. simples.
  3899. Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
  3900. compresser tous les fichiers JavaScript du répertoire @file{src}. Un
  3901. minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
  3902. mais il est attendu que ce paquet écrive le code minifié sur la sortie
  3903. standard.
  3904. Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
  3905. répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
  3906. utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
  3907. @end defvr
  3908. @defvr {Variable Scheme} ocaml-build-system
  3909. Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
  3910. implémente une procédure de construction pour les paquets
  3911. @uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
  3912. commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
  3913. des commandes diverses pour être construit. Ce système de construction en
  3914. essaye certaines.
  3915. Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
  3916. haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
  3917. setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
  3918. construction supposera que ces fichiers ont été générés par
  3919. @uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
  3920. d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
  3921. désactivés. Vous pouvez passer des drapeaux de configuration et de
  3922. consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
  3923. @code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
  3924. utilisés pour activer les tests. La clef @code{#:use-make?} peut être
  3925. utilisée pour outrepasser ce système dans les phases de construction et
  3926. d'installation.
  3927. Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
  3928. d'un script configure écrit à la main qui demande un format différent de
  3929. celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
  3930. la clef @code{#:configure-flags}.
  3931. Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
  3932. @code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
  3933. construction et l'installation avec la clef @code{#:make-flags}.
  3934. Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
  3935. plus ou moins standard pour leur système de construction. Dans ce cas, le
  3936. système de construction lancera @code{ocaml pkg/pkg.ml} ou
  3937. @code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
  3938. requis. Des drapeaux supplémentaires peuvent être passés via la clef
  3939. @code{#:bulid-flags}. L'installation se fait avec
  3940. @command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
  3941. ajouté au champ @code{native-inputs} de la définition du paquet.
  3942. Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
  3943. dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
  3944. dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
  3945. leur propre répertoire de module, ce qui est normalement correct puisqu'il
  3946. s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
  3947. bibliothèques ne peuvent pas y être trouvées et on utilise
  3948. @code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
  3949. @file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
  3950. @file{.so} devraient être installées.
  3951. @end defvr
  3952. @defvr {Variable Scheme} python-build-system
  3953. Cette variable est exportée par @code{(guix build-system python)}. Elle
  3954. implémente la procédure de construction plus ou moins standarde utilisée
  3955. pour les paquets Python, qui consiste à lancer @code{python setup.py build}
  3956. puis @code{python setup.py install --prefix=/gnu/store/@dots{}}.
  3957. Pour les paquets qui installent des programmes autonomes dans @code{bin/},
  3958. elle prend soin d'envelopper ces binaires pour que leur variable
  3959. d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
  3960. Python dont ils dépendent.
  3961. Le paquet Python utilisé pour effectuer la construction peut être spécifié
  3962. avec le paramètre @code{#:python}. C'est une manière utile de forcer un
  3963. paquet à être construit avec une version particulière de l'interpréteur
  3964. python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
  3965. une version de l'interpréteur.
  3966. Par défaut Guix appelle @code{setup.py} sous le contrôle de
  3967. @code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
  3968. pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
  3969. en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
  3970. @end defvr
  3971. @defvr {Variable Scheme} perl-build-system
  3972. Cette variable est exportée par @code{(guix build-system perl)}. Elle
  3973. implémente la procédure de construction standarde des paquets Perl, qui
  3974. consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
  3975. suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
  3976. Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
  3977. install}, en fonction de la présence de @code{Build.PL} ou
  3978. @code{Makefile.PL} dans la distribution du paquet. Le premier a la
  3979. préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
  3980. la distribution du paquet. Cette préférence peut être inversée en
  3981. spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
  3982. L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
  3983. passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
  3984. @code{#:module-build-flags}, respectivement.
  3985. Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
  3986. @end defvr
  3987. @defvr {Variable Scheme} r-build-system
  3988. Cette variable est exportée par @code{(guix build-system r)}. Elle
  3989. implémente la procédure de construction utilisée par les paquets
  3990. @uref{http://r-project.org, R} qui consiste à lancer à peine plus que
  3991. @code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
  3992. @code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
  3993. sont lancés après l'installation avec la fonction R
  3994. @code{tools::testInstalledPackage}.
  3995. @end defvr
  3996. @defvr {Variable Scheme} texlive-build-system
  3997. Cette variable est exportée par @code{(guix build-system texlive)}. Elle
  3998. est utilisée pour construire des paquets TeX en mode batch avec le moteur
  3999. spécifié. Le système de construction initialise la variable
  4000. @code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
  4001. Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
  4002. par @code{ins}. Un moteur et un format différent peuvent être spécifiés
  4003. avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
  4004. peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
  4005. liste de noms de fichiers. Le système de construction ajoute uniquement
  4006. @code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
  4007. tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
  4008. arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
  4009. respectivement.
  4010. Le paramètre @code{#:tex-directory} dit au système de construction où
  4011. installer les fichiers construit dans l'arbre texmf.
  4012. @end defvr
  4013. @defvr {Variable Scheme} ruby-build-system
  4014. Cette variable est exportée par @code{(guix build-system ruby)}. Elle
  4015. implémenter la procédure de construction RubyGems utilisée par les paquets
  4016. Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
  4017. Le champ @code{source} d'un paquet qui utilise ce système de construction
  4018. référence le plus souvent une archive gem, puisque c'est le format utilisé
  4019. par les développeurs Ruby quand ils publient leur logiciel. Le système de
  4020. construction décompresse l'archive gem, éventuellement en corrigeant les
  4021. sources, lance la suite de tests, recompresse la gemme et l'installe. En
  4022. plus, des répertoires et des archives peuvent être référencés pour permettre
  4023. de construire des gemmes qui n'ont pas été publiées depuis Git ou une
  4024. archive de sources traditionnelle.
  4025. Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
  4026. Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
  4027. peut être spécifiée avec le paramètre @code{#:gem-flags}.
  4028. @end defvr
  4029. @defvr {Variable Scheme} waf-build-system
  4030. Cette variable est exportée par @code{(guix build-system waf)}. Elle
  4031. implémente une procédure de construction autour du script @code{waf}. Les
  4032. phases usuelles — @code{configure}, @code{build} et @code{install} — sont
  4033. implémentée en passant leur nom en argument au script @code{waf}.
  4034. Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
  4035. Python utilisé pour lancer le script peut être spécifié avec le paramètre
  4036. @code{#:python}.
  4037. @end defvr
  4038. @defvr {Variable Scheme} scons-build-system
  4039. Cette variable est exportée par @code{(guix build-system scons)}. Elle
  4040. implémente la procédure de construction utilisée par l'outil de construction
  4041. SCons. Ce système de construction lance @code{scons} pour construire le
  4042. paquet, @code{scons test} pour lancer les tests puis @code{scons install}
  4043. pour installer le paquet.
  4044. On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
  4045. avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
  4046. lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
  4047. avec le paramètre @code{#:scons}.
  4048. @end defvr
  4049. @defvr {Variable Scheme} haskell-build-system
  4050. Cette variable est exportée par @code{(guix build-system haskell)}. Elle
  4051. implémente la procédure de construction Cabal utilisée par les paquets
  4052. Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
  4053. --prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
  4054. que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
  4055. pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
  4056. dépôt en lecture-seule du compilateur, le système de construction utilise
  4057. @code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
  4058. register}. En plus, le système de construction génère la documentation du
  4059. paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
  4060. @code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
  4061. peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
  4062. fichier @code{Setup.hs} n'est pas trouvé, le système de construction
  4063. cherchera @code{Setup.lhs} à la place.
  4064. Le compilateur Haskell utilisé peut être spécifié avec le paramètre
  4065. @code{#:haskell} qui a pour valeur par défaut @code{ghc}.
  4066. @end defvr
  4067. @defvr {Variable Scheme} dub-build-system
  4068. Cette variable est exportée par @code{(guix build-system dub)}. Elle
  4069. implémente la procédure de construction Dub utilisée par les paquets D qui
  4070. consiste à lancer @code{dub build} et @code{dub run}. L'installation est
  4071. effectuée en copiant les fichiers manuellement.
  4072. Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
  4073. qui vaut par défaut @code{ldc}.
  4074. @end defvr
  4075. @defvr {Variable Scheme} emacs-build-system
  4076. Cette variable est exportée par @code{(guix build-system emacs)}. Elle
  4077. implémente une procédure d'installation similaire au système de gestion de
  4078. paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
  4079. Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
  4080. tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
  4081. gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
  4082. dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
  4083. paquet est installé dans son propre répertoire dans
  4084. @file{share/emacs/site-lisp/guix.d}.
  4085. @end defvr
  4086. @defvr {Variable Scheme} font-build-system
  4087. This variable is exported by @code{(guix build-system font)}. It implements
  4088. an installation procedure for font packages where upstream provides
  4089. pre-compiled TrueType, OpenType, etc.@: font files that merely need to be
  4090. copied into place. It copies font files to standard locations in the output
  4091. directory.
  4092. @end defvr
  4093. @defvr {Variable Scheme} meson-build-system
  4094. Cette variable est exportée par @code{(guix build-system meson)}. Elle
  4095. implémente la procédure de construction des paquets qui utilisent
  4096. @url{http://mesonbuild.com, Meson} comme système de construction.
  4097. Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
  4098. l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
  4099. @code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
  4100. @code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
  4101. @code{RUNPATH} des binaires et les bibliothèques qu'il installe.
  4102. Ce système de construction est une extension de @var{gnu-build-system}, mais
  4103. avec les phases suivantes modifiées pour Meson :
  4104. @table @code
  4105. @item configure
  4106. La phase lance @code{meson} avec les drapeaux spécifiés dans
  4107. @code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
  4108. initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
  4109. dans @code{#:build-type}.
  4110. @item build
  4111. La phase lance @code{ninja} pour construire le paquet en parallèle par
  4112. défaut, mais cela peut être changé avec @code{#:parallel-build?}.
  4113. @item check
  4114. La phase lance @code{ninja} avec la cible spécifiée dans
  4115. @code{#:test-target}, qui est @code{"test"} par défaut.
  4116. @item install
  4117. La phase lance @code{ninja install} et ne peut pas être changée.
  4118. @end table
  4119. En dehors de cela, le système de construction ajoute aussi la phase suivante
  4120. :
  4121. @table @code
  4122. @item fix-runpath
  4123. Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
  4124. dont ils ont besoin. Elle cherche les bibliothèques requises dans les
  4125. sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
  4126. là où c'est nécessaire. Elle supprime aussi les références aux
  4127. bibliothèques laissées là par la phase de construction par
  4128. @code{meson-for-build} comme les dépendances des tests, qui ne sont pas
  4129. vraiment requises pour le programme.
  4130. @item glib-or-gtk-wrap
  4131. Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
  4132. n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
  4133. @item glib-or-gtk-compile-schemas
  4134. Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
  4135. n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
  4136. @end table
  4137. @end defvr
  4138. Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
  4139. système de construction « trivial » est disponible. Il est trivial dans le
  4140. sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
  4141. implicite, et n'a pas de notion de phase de construction.
  4142. @defvr {Variable Scheme} trivial-build-system
  4143. Cette variable est exportée par @code{(guix build-system trivial)}.
  4144. Ce système de construction requiert un argument @code{#:builder}. Cet
  4145. argument doit être une expression Scheme qui construit la sortie du paquet —
  4146. comme avec @code{build-expression->derivation} (@pxref{Dérivations,
  4147. @code{build-expression->derivation}}).
  4148. @end defvr
  4149. @node Le dépôt
  4150. @section Le dépôt
  4151. @cindex dépôt
  4152. @cindex éléments du dépôt
  4153. @cindex chemins dans le dépôt
  4154. Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
  4155. bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
  4156. sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
  4157. parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
  4158. qui contient des informations comme les chemins du dépôt auxquels se
  4159. réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
  4160. @emph{valides} — les résultats d'une construction réussie. Cette base de
  4161. données se trouve dans @file{@var{localstatedir}/guix/db} où
  4162. @var{localstatedir} est le répertoire d'états spécifié @i{via} @option
  4163. {--localstatedir} à la configuration, typiquement @file{/var}.
  4164. C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
  4165. clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
  4166. clients se connectent au démon par un socket Unix-domain, envoient une
  4167. requête dessus et lisent le résultat — ce sont des appels de procédures
  4168. distantes, ou RPC.
  4169. @quotation Remarque
  4170. Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
  4171. @file{/gnu/store} directement. Cela entraînerait des incohérences et
  4172. casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
  4173. (@pxref{Introduction}).
  4174. @xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
  4175. sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
  4176. modifications accidentelles.
  4177. @end quotation
  4178. Le module @code{(guix store)} fournit des procédures pour se connecter au
  4179. démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
  4180. @code{open-connection}, et donc toutes les commandes @command{guix} se
  4181. connectent au démon local ou à l'URI spécifiée par la variable
  4182. d'environnement @code{GUIX_DAEMON_SOCKET}.
  4183. @defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
  4184. Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
  4185. de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
  4186. nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
  4187. des noms de fichiers, les schémas d'URI supportés sont :
  4188. @table @code
  4189. @item file
  4190. @itemx unix
  4191. Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
  4192. est équivalent à @file{/var/guix/daemon-socket/socket}.
  4193. @item guix
  4194. @cindex démon, accès distant
  4195. @cindex accès distant au démon
  4196. @cindex démon, paramètres de grappes
  4197. @cindex grappes, paramètres du démon
  4198. Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
  4199. authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
  4200. éventuellement un numéro de port (par défaut 44146) :
  4201. @example
  4202. guix://master.guix.example.org:1234
  4203. @end example
  4204. Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
  4205. de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
  4206. construction sur @code{master.guix.example.org}.
  4207. L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
  4208. dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
  4209. @code{--listen}}).
  4210. @item ssh
  4211. @cindex accès SSH au démon de construction
  4212. Ces URI vous permettent de vous connecter au démon à distance à travers
  4213. SSH@footnote{Cette fonctionnalité requiert Guile-SSH
  4214. (@pxref{Prérequis}).}.
  4215. @example
  4216. ssh://charlie@@guix.example.org:22
  4217. @end example
  4218. Comme pour @command{guix copy}, les fichiers de configuration du client
  4219. OpenSSH sont respectés (@pxref{Invoquer guix copy}).
  4220. @end table
  4221. Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
  4222. @c XXX: Remove this note when the protocol incurs fewer round trips
  4223. @c and when (guix derivations) no longer relies on file system access.
  4224. @quotation Remarque
  4225. La capacité de se connecter à un démon de construction distant est considéré
  4226. comme expérimental à la version @value{VERSION}. Contactez-nous pour
  4227. partager vos problèmes ou des suggestions que vous pourriez avoir
  4228. (@pxref{Contribuer}).
  4229. @end quotation
  4230. @end defvr
  4231. @deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
  4232. Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
  4233. de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
  4234. réserver un peu de place supplémentaire sur le système de fichiers pour que
  4235. le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
  4236. un objet serveur.
  4237. @var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
  4238. l'emplacement normal en fonction des options données à @command{configure}.
  4239. @end deffn
  4240. @deffn {Procédure Scheme} close-connection @var{server}
  4241. Ferme la connexion au @var{serveur}.
  4242. @end deffn
  4243. @defvr {Variable Scheme} current-build-output-port
  4244. Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
  4245. journaux de construction et d'erreur envoyés par le démon devraient être
  4246. écrits.
  4247. @end defvr
  4248. Les procédures qui font des RPC prennent toutes un objet serveur comme
  4249. premier argument.
  4250. @deffn {Procédure Scheme} valid-path? @var{server} @var{path}
  4251. @cindex éléments du dépôt invalides
  4252. Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
  4253. @code{#f} sinon (un élément invalide peut exister sur le disque mais rester
  4254. invalide, par exemple parce que c'est le résultat d'une construction annulée
  4255. ou échouée).
  4256. Une condition @code{&nix-protocol-error} est levée si @var{path} n'est pas
  4257. préfixée par le répertoire du dépôt (@file{/gnu/store}).
  4258. @end deffn
  4259. @deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
  4260. Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
  4261. chemin. @var{references} est la liste des chemins du dépôt référencés par
  4262. le chemin du dépôt qui en résulte.
  4263. @end deffn
  4264. @deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
  4265. Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
  4266. chemins de dérivations) et retourne quand le travailleur a fini de les
  4267. construire. Renvoie @code{#t} en cas de réussite.
  4268. @end deffn
  4269. Remarque que le module @code{(guix monads)} fournit une monad ainsi que des
  4270. version monadiques des procédures précédentes, avec le but de rendre plus
  4271. facile de travailler avec le code qui accède au dépôt (@pxref{La monad du dépôt}).
  4272. @c FIXME
  4273. @i{Cette section est actuellement incomplète.}
  4274. @node Dérivations
  4275. @section Dérivations
  4276. @cindex dérivations
  4277. Les actions de construction à bas-niveau et l'environnement dans lequel
  4278. elles sont effectuées sont représentés par des @dfn{dérivations}. Une
  4279. dérivation contient cet ensemble d'informations :
  4280. @itemize
  4281. @item
  4282. Les sorties de la dérivation — les dérivations produisent au moins un
  4283. fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
  4284. @item
  4285. Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
  4286. fichiers dans le dépôt (correctifs, scripts de construction, etc).
  4287. @item
  4288. Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
  4289. @item
  4290. Le nom de fichier d'un script de construction dans le dépôt avec les
  4291. arguments à lui passer.
  4292. @item
  4293. Une liste de variables d'environnement à définir.
  4294. @end itemize
  4295. @cindex chemin de dérivation
  4296. Les dérivations permettent aux client du démon de communiquer des actions de
  4297. construction dans le dépôt. Elles existent sous deux formes : en tant que
  4298. représentation en mémoire, à la fois côté client et démon, et en tant que
  4299. fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
  4300. des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
  4301. passés à la procédure @code{build-derivations} pour effectuer les actions de
  4302. construction qu'ils prescrivent (@pxref{Le dépôt}).
  4303. @cindex dérivations à sortie fixe
  4304. Des opérations comme le téléchargement de fichiers et la récupération de
  4305. sources gérés par un logiciel de contrôle de version pour lesquels le hash
  4306. du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
  4307. sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
  4308. dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
  4309. source téléchargé produit le même résultat quelque soit la méthode de
  4310. téléchargement utilisée.
  4311. Le module @code{(guix derivations)} fournit une représentation des
  4312. dérivations comme des objets Scheme, avec des procédures pour créer et
  4313. manipuler des dérivations. La primitive de plus bas-niveau pour créer une
  4314. dérivation est la procédure @code{derivation} :
  4315. @deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
  4316. @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
  4317. [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
  4318. [#:system (%current-system)] [#:references-graphs #f] @
  4319. [#:allowed-references #f] [#:disallowed-references #f] @
  4320. [#:leaked-env-vars #f] [#:local-build? #f] @
  4321. [#:substitutable? #t] [#:properties '()]
  4322. Construit une dérivation avec les arguments donnés et renvoie l'objet
  4323. @code{<derivation>} obtenu.
  4324. Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
  4325. sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
  4326. à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
  4327. @var{recursive?} est vrai, alors la sortie fixe peut être un fichier
  4328. exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
  4329. contenant la sortie.
  4330. Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
  4331. paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
  4332. des références de chaque chemin du dépôt est exporté dans l'environnement de
  4333. construction dans le fichier correspondant, dans un simple format texte.
  4334. Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
  4335. d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
  4336. peut faire référence. De même, @var{disallowed-references}, si vrai, doit
  4337. être une liste de choses que la sortie ne doit @emph{pas} référencer.
  4338. Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
  4339. chaînes de caractères qui désignent les variables d'environnements qui
  4340. peuvent « fuiter » de l'environnement du démon dans l'environnement de
  4341. construction. Ce n'est possible que pour les dérivations à sortie fixe —
  4342. c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
  4343. permettre à des variables comme @code{http_proxy} d'être passées aux
  4344. dérivations qui téléchargent des fichiers.
  4345. Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
  4346. bon candidat pour le déchargement et devrait plutôt être construit
  4347. localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
  4348. dérivations où le coût du transfert de données est plus important que les
  4349. bénéfices.
  4350. Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
  4351. sortie de la dérivation ne devraient pas être utilisés
  4352. (@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
  4353. qui utilisent des détails du jeu d'instruction du CPU hôte.
  4354. @var{properties} doit être une liste d'association décrivant les «
  4355. propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
  4356. interprétée, dans la dérivation.
  4357. @end deffn
  4358. @noindent
  4359. Voici un exemple avec un script shell comme constructeur, en supposant que
  4360. @var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
  4361. exécutable Bash dans le dépôt :
  4362. @lisp
  4363. (use-modules (guix utils)
  4364. (guix store)
  4365. (guix derivations))
  4366. (let ((builder ; ajoute le script Bash au dépôt
  4367. (add-text-to-store store "my-builder.sh"
  4368. "echo hello world > $out\n" '())))
  4369. (derivation store "foo"
  4370. bash `("-e" ,builder)
  4371. #:inputs `((,bash) (,builder))
  4372. #:env-vars '(("HOME" . "/homeless"))))
  4373. @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
  4374. @end lisp
  4375. Comme on pourrait s'en douter, cette primitive est difficile à utiliser
  4376. directement. Une meilleure approche est d'écrire les scripts de
  4377. construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
  4378. le code de construction comme une « G-expression » et de la passer à
  4379. @code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
  4380. Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
  4381. une dérivation donc le code de construction était écrit en Scheme se faisait
  4382. avec @code{build-expression->derivation}, documenté plus bas. Cette
  4383. procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
  4384. est meilleure.
  4385. @deffn {Procédure Scheme} build-expression->derivation @var{store} @
  4386. @var{name} @var{exp} @
  4387. [#:system (%current-system)] [#:inputs '()] @
  4388. [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
  4389. [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
  4390. [#:references-graphs #f] [#:allowed-references #f] @
  4391. [#:disallowed-references #f] @
  4392. [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
  4393. Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
  4394. constructeur pour la dérivation @var{name}. @var{inputs} doit être une
  4395. liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
  4396. omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
  4397. modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
  4398. compilés et rendus disponibles dans le chemin de chargement pendant
  4399. l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
  4400. gnu-build-system))}.
  4401. @var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
  4402. une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
  4403. une liste de paires de chaînes de caractères et de chemin de sortie
  4404. construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
  4405. liste de paires de chaînes de caractères spécifiant le nom et la valeur de
  4406. variables d'environnement visibles pour le constructeur. Le constructeur
  4407. termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
  4408. @var{exp} renvoie @code{#f}, la construction est considérée en échec.
  4409. @var{exp} est construite avec @var{guile-for-build} (une dérivation).
  4410. Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
  4411. @code{%guile-for-build} est utilisée à la place.
  4412. Voir la procédure @code{derivation} pour la signification de
  4413. @var{references-graph}, @var{allowed-references},
  4414. @var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
  4415. @end deffn
  4416. @noindent
  4417. Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
  4418. un fichier :
  4419. @lisp
  4420. (let ((builder '(let ((out (assoc-ref %outputs "out")))
  4421. (mkdir out) ; create /gnu/store/@dots{}-goo
  4422. (call-with-output-file (string-append out "/test")
  4423. (lambda (p)
  4424. (display '(hello guix) p))))))
  4425. (build-expression->derivation store "goo" builder))
  4426. @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
  4427. @end lisp
  4428. @node La monad du dépôt
  4429. @section La monad du dépôt
  4430. @cindex monad
  4431. Les procédures qui travaillent sur le dépôt décrites dans les sections
  4432. précédentes prennent toutes une connexion ouverte au démon de construction
  4433. comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
  4434. elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
  4435. Le premier point est embêtant : on doit se balader avec la connexion au
  4436. démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
  4437. des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
  4438. prennent. Le deuxième point est problématique : comme les opérations sur le
  4439. dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
  4440. être enchaînés correctement.
  4441. @cindex valeurs monadiques
  4442. @cindex fonctions monadiques
  4443. C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
  4444. module fournit un cadre pour travailler avec des @dfn{monads}, en
  4445. particulier une monad très utile pour notre usage, la @dfn{monad du dépôt}.
  4446. Les monads sont des constructions qui permettent deux choses : associer un «
  4447. contexte » avec une valeur (dans notre cas, le contexte est le dépôt) et
  4448. construire une séquence de calculs (ici les calculs comprennent des accès au
  4449. dépôt). Les valeurs dans une monad — les valeurs qui contiennent ce
  4450. contexte supplémentaire — sont appelées des @dfn{valeurs monadiques} ; les
  4451. procédures qui renvoient ce genre de valeur sont appelées des
  4452. @dfn{procédures monadiques}.
  4453. Considérez cette procédure « normale » :
  4454. @example
  4455. (define (sh-symlink store)
  4456. ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
  4457. (let* ((drv (package-derivation store bash))
  4458. (out (derivation->output-path drv))
  4459. (sh (string-append out "/bin/bash")))
  4460. (build-expression->derivation store "sh"
  4461. `(symlink ,sh %output))))
  4462. @end example
  4463. En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
  4464. en une fonction monadique :
  4465. @example
  4466. (define (sh-symlink)
  4467. ;; Pareil, mais renvoie une valeur monadique.
  4468. (mlet %store-monad ((drv (package->derivation bash)))
  4469. (gexp->derivation "sh"
  4470. #~(symlink (string-append #$drv "/bin/bash")
  4471. #$output))))
  4472. @end example
  4473. Il y a plusieurs choses à remarquer avec cette deuxième version : le
  4474. paramètre @code{store} est maintenant implicitement « enfilé » dans les
  4475. appels aux procédures monadiques @code{package->derivation} et
  4476. @code{gexp->derivation}, et la valeur monadique renvoyée par
  4477. @code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
  4478. simple @code{let}.
  4479. Il se trouve que l'appel à @code{package->derivation} peut même être omis
  4480. puisqu'il aura lieu implicitement, comme nous le verrons plus tard
  4481. (@pxref{G-Expressions}) :
  4482. @example
  4483. (define (sh-symlink)
  4484. (gexp->derivation "sh"
  4485. #~(symlink (string-append #$bash "/bin/bash")
  4486. #$output)))
  4487. @end example
  4488. @c See
  4489. @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
  4490. @c for the funny quote.
  4491. L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En
  4492. anglais on pourrait dire « you exit a monad like you exit a building on
  4493. fire: by running »@footnote{NdT : « on sort d'une monad comme d'un immeuble
  4494. en flamme, en courant ». Le jeu de mot est perdu à la traduction : courrir
  4495. et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de
  4496. la monad et obtenir l'effet escompté, on doit utiliser
  4497. @code{run-with-store}.
  4498. @example
  4499. (run-with-store (open-connection) (sh-symlink))
  4500. @result{} /gnu/store/...-sh-symlink
  4501. @end example
  4502. Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
  4503. de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
  4504. procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
  4505. première est utilisée pour « lancer » une seule valeur monadique à travers
  4506. le dépôt :
  4507. @example
  4508. scheme@@(guile-user)> ,run-in-store (package->derivation hello)
  4509. $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
  4510. @end example
  4511. La deuxième entre dans une console récursive, où toutes les valeurs de
  4512. retour sont automatiquement lancées à travers le dépôt :
  4513. @example
  4514. scheme@@(guile-user)> ,enter-store-monad
  4515. store-monad@@(guile-user) [1]> (package->derivation hello)
  4516. $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
  4517. store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
  4518. $3 = "/gnu/store/@dots{}-foo"
  4519. store-monad@@(guile-user) [1]> ,q
  4520. scheme@@(guile-user)>
  4521. @end example
  4522. @noindent
  4523. Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
  4524. @code{store-monad}.
  4525. Les formes syntaxiques principales pour utiliser des monads en général sont
  4526. disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
  4527. @deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
  4528. Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
  4529. comme une @var{monad}.
  4530. @end deffn
  4531. @deffn {Syntaxe Scheme} return @var{val}
  4532. Renvoie une valeur monadique qui encapsule @var{val}.
  4533. @end deffn
  4534. @deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
  4535. @dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
  4536. procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
  4537. souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
  4538. voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
  4539. langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
  4540. cet exemple :
  4541. @example
  4542. (run-with-state
  4543. (with-monad %state-monad
  4544. (>>= (return 1)
  4545. (lambda (x) (return (+ 1 x)))
  4546. (lambda (x) (return (* 2 x)))))
  4547. 'some-state)
  4548. @result{} 4
  4549. @result{} some-state
  4550. @end example
  4551. @end deffn
  4552. @deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
  4553. @var{body} ...
  4554. @deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
  4555. @var{body} ...
  4556. Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
  4557. @var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
  4558. on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
  4559. » dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
  4560. cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
  4561. (@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
  4562. comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
  4563. vers la droite. La dernière expression de @var{body} doit être une
  4564. expression monadique et son résultat deviendra le résultat de @code{mlet} ou
  4565. @code{mlet*} lorsque lancé dans la @var{monad}.
  4566. @code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
  4567. (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
  4568. @end deffn
  4569. @deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
  4570. Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
  4571. renvoie le résultat de la dernière expression. Chaque expression dans la
  4572. séquence doit être une expression monadique.
  4573. Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
  4574. des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
  4575. @code{begin}, mais appliqué à des expressions monadiques.
  4576. @end deffn
  4577. @deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
  4578. Lorsque la @var{condition} est vraie, évalue la séquence des expressions
  4579. monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
  4580. @var{condition} est fausse, renvoie @code{*unspecified*} dans la monad
  4581. actuelle. Cahque expression dans la séquence doit être une expression
  4582. monadique.
  4583. @end deffn
  4584. @deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
  4585. Lorsque la @var{condition} est fausse, évalue la séquence des expressions
  4586. monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
  4587. @var{condition} est vraie, renvoie @code{*unspecified*} dans la monad
  4588. actuelle. Cahque expression dans la séquence doit être une expression
  4589. monadique.
  4590. @end deffn
  4591. @cindex monad d'état
  4592. Le module @code{(guix monads)} fournit la @dfn{monad d'état} qui permet à
  4593. une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
  4594. procédures.
  4595. @defvr {Variable Scheme} %state-monad
  4596. La monad d'état. les procédure dans la monad d'état peuvent accéder et
  4597. modifier l'état qui est enfilé.
  4598. Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
  4599. valeur dans la monad d'état. Elle renvoie le carré de son argument, mais
  4600. incrémente aussi la valeur actuelle de l'état :
  4601. @example
  4602. (define (square x)
  4603. (mlet %state-monad ((count (current-state)))
  4604. (mbegin %state-monad
  4605. (set-current-state (+ 1 count))
  4606. (return (* x x)))))
  4607. (run-with-state (sequence %state-monad (map square (iota 3))) 0)
  4608. @result{} (0 1 4)
  4609. @result{} 3
  4610. @end example
  4611. Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
  4612. d'état supplémentaire, qui est le nombre d'appels à @code{square}.
  4613. @end defvr
  4614. @deffn {Procédure monadique} current-state
  4615. Renvoie l'état actuel dans une valeur monadique.
  4616. @end deffn
  4617. @deffn {Procédure monadique} set-current-state @var{value}
  4618. Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
  4619. valeur monadique.
  4620. @end deffn
  4621. @deffn {Procédure monadique} state-push @var{value}
  4622. Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
  4623. renvoie l'état précédent dans une valeur monadique.
  4624. @end deffn
  4625. @deffn {Procédure monadique} state-pop
  4626. Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
  4627. monadique. L'état est supposé être une liste.
  4628. @end deffn
  4629. @deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
  4630. Lance la valeur monadique @var{mval} avec @var{state} comme valeur
  4631. initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
  4632. résultat.
  4633. @end deffn
  4634. L'interface principale avec la monad du dépôt, fournit par le module
  4635. @code{(guix store)}, est la suivante.
  4636. @defvr {Variable Scheme} %store-monad
  4637. La monad du dépôt — un alias pour @var{%state-monad}.
  4638. Les valeurs dans la monad du dépôt encapsulent des accès au dépôt. Lorsque
  4639. son effet est requis, une valeur de la monad du dépôt doit être « évaluée »
  4640. en la passant à la procédure @code{run-with-store} (voir plus bas).
  4641. @end defvr
  4642. @deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
  4643. Lance @var{mval}, une valeur monadique dans la monad du dépôt, dans
  4644. @var{store}, une connexion ouvert au dépôt.
  4645. @end deffn
  4646. @deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
  4647. Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
  4648. du fichier contenant @var{text}, une chaîne de caractères. @var{references}
  4649. est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
  4650. réfère ; c'est la liste vide par défaut.
  4651. @end deffn
  4652. @deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
  4653. Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
  4654. dépôt du fichier contenant @var{data}, un vecteur d'octets.
  4655. @var{references} est une liste d'éléments du dépôt auxquels le fichier
  4656. binaire en résultat se réfère ; c'est la liste vide par défaut.
  4657. @end deffn
  4658. @deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
  4659. [#:recursive? #t] [#:select? (const #t)]
  4660. Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
  4661. comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
  4662. omis.
  4663. Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
  4664. récursivement ; si @var{file} désigne un fichier simple et que
  4665. @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
  4666. sont préservés.
  4667. Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
  4668. @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
  4669. absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
  4670. l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
  4671. L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
  4672. @example
  4673. (run-with-store (open-connection)
  4674. (mlet %store-monad ((a (interned-file "README"))
  4675. (b (interned-file "README" "LEGU-MIN")))
  4676. (return (list a b))))
  4677. @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
  4678. @end example
  4679. @end deffn
  4680. Le module @code{(guix packages)} exporte les procédures monadiques liées aux
  4681. paquets suivantes :
  4682. @deffn {Procédure monadique} package-file @var{package} [@var{file}] @
  4683. [#:system (%current-system)] [#:target #f] @
  4684. [#:output "out"]
  4685. Renvoie une valeur monadique qui contient le nom de fichier absolu de
  4686. @var{file} dans le répertoire @var{output} de @var{package}. Lorsque
  4687. @var{file} est omis, renvoie le nom du répertoire @var{output} de
  4688. @var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
  4689. cible pour la compilation croisée.
  4690. @end deffn
  4691. @deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
  4692. @deffnx {Procédure monadique} package->cross-derivation @var{package} @
  4693. @var{target} [@var{system}]
  4694. Version monadique de @code{package-derivation} et
  4695. @code{package-cross-derivation} (@pxref{Définition des paquets}).
  4696. @end deffn
  4697. @node G-Expressions
  4698. @section G-Expressions
  4699. @cindex G-expression
  4700. @cindex quoting du code de construction
  4701. On a donc des « dérivations » qui représentent une séquence d'actions de
  4702. construction à effectuer pour produire un élément du dépôt
  4703. (@pxref{Dérivations}). Ces actions de construction sont effectuées
  4704. lorsqu'on demande au démon de construire effectivement les dérivations ;
  4705. elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
  4706. @cindex strate de code
  4707. Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
  4708. construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
  4709. de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
  4710. par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
  4711. sur Hop. Oleg Kiselyov, qui a écrit des
  4712. @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
  4713. et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
  4714. genre de génération de code.} : le « code hôte » — le code qui défini les
  4715. paquets, parle au démon, etc — et le « code côté construction » — le code
  4716. qui effectue effectivement les actions de construction, comme créer des
  4717. répertoires, invoquer @code{make}, etc.
  4718. Pour décrire une dérivation et ses actions de construction, on a typiquement
  4719. besoin d'intégrer le code de construction dans le code hôte. Ça revient à
  4720. manipuler le code de construction comme de la donnée, et l'homoiconicité de
  4721. Scheme — le code a une représentation directe en tant que donnée — est très
  4722. utile pour cela. Mais on a besoin de plus que le mécanisme de
  4723. @code{quasiquote} en Scheme pour construire des expressions de construction.
  4724. Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
  4725. de S-expression adaptée aux expressions de construction. Les G-expression,
  4726. ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
  4727. @code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
  4728. @code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
  4729. @code{quasiquote}, @code{unquote} ett @code{unquote-splicing} respectivement
  4730. (@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
  4731. Manual}). Cependant il y a des différences majeures :
  4732. @itemize
  4733. @item
  4734. Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
  4735. manipulées par d'autres processus.
  4736. @item
  4737. Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
  4738. unquotée dans une gexp, le résultat est comme si le nom de fichier de son
  4739. résultat avait été introduit.
  4740. @item
  4741. Les gexps transportent des informatinos sur les paquets ou les dérivations
  4742. auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
  4743. comme des entrées du processus de construction qui les utilise.
  4744. @end itemize
  4745. @cindex abaissement, des objets haut-niveau dans les gepxs
  4746. Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
  4747. définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
  4748. haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
  4749. aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
  4750. utiles qui pourraient être insérées dans une gexp sont les « objets
  4751. simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
  4752. les références vers eux dans les dérivations et autres (voir
  4753. @code{local-file} et @code{plain-file} ci-dessous).
  4754. Pour illustrer cette idée, voici un exemple de gexp :
  4755. @example
  4756. (define build-exp
  4757. #~(begin
  4758. (mkdir #$output)
  4759. (chdir #$output)
  4760. (symlink (string-append #$coreutils "/bin/ls")
  4761. "list-files")))
  4762. @end example
  4763. Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
  4764. dérivation qui construit une répertoire contenant exactement un lien
  4765. symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
  4766. @example
  4767. (gexp->derivation "the-thing" build-exp)
  4768. @end example
  4769. Comme on pourrait s'y attendre, la chaîne
  4770. @code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
  4771. référence au paquet @var{coreutils} dans le code de construction final, et
  4772. @var{coreutils} est automatiquement devenu une entrée de la dérivation. De
  4773. même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
  4774. une chaîne de caractères contenant le nom du répertoire de la sortie de la
  4775. dérivation.
  4776. @cindex compilation croisée
  4777. Dans le contexte d'une compilation croisée, il est utile de distinguer entre
  4778. des références à la construction @emph{native} d'un paquet — qui peut être
  4779. lancé par l'hôte — et des références à la construction croisée d'un paquet.
  4780. Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
  4781. construction native d'un paquet :
  4782. @example
  4783. (gexp->derivation "vi"
  4784. #~(begin
  4785. (mkdir #$output)
  4786. (system* (string-append #+coreutils "/bin/ln")
  4787. "-s"
  4788. (string-append #$emacs "/bin/emacs")
  4789. (string-append #$output "/bin/vi")))
  4790. #:target "mips64el-linux-gnu")
  4791. @end example
  4792. @noindent
  4793. Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
  4794. utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
  4795. mais ensuite la construction croisée d'@var{emacs} est utilisée.
  4796. @cindex modules importés, pour les gexps
  4797. @findex with-imported-modules
  4798. Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
  4799. voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
  4800. dans la gexp, donc ces modules devraient être importés dans «
  4801. l'environnement de construction ». La forme @code{with-imported-modules}
  4802. vous permet d'exprimer ça :
  4803. @example
  4804. (let ((build (with-imported-modules '((guix build utils))
  4805. #~(begin
  4806. (use-modules (guix build utils))
  4807. (mkdir-p (string-append #$output "/bin"))))))
  4808. (gexp->derivation "empty-dir"
  4809. #~(begin
  4810. #$build
  4811. (display "success!\n")
  4812. #t)))
  4813. @end example
  4814. @noindent
  4815. Dans cet exemple, le module @code{(guix build utils)} est automatiquement
  4816. récupéré dans l'environnement de construction isolé de notre gexp, pour que
  4817. @code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
  4818. @cindex closure de module
  4819. @findex source-module-closure
  4820. Typiquement, vous voudriez que la @emph{closure} complète du mondule soit
  4821. importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
  4822. plutôt que seulement le module ; sinon, une tentative de chargement du
  4823. module échouera à cause des modules dépendants manquants. La procédure
  4824. @code{source-module-closure} calcule la closure d'un module en cherchant
  4825. dans ses en-têtes sources, ce qui est pratique dans ce cas :
  4826. @example
  4827. (use-modules (guix modules)) ;pour 'source-module-closure'
  4828. (with-imported-modules (source-module-closure
  4829. '((guix build utils)
  4830. (gnu build vm)))
  4831. (gexp->derivation "something-with-vms"
  4832. #~(begin
  4833. (use-modules (guix build utils)
  4834. (gnu build vm))
  4835. @dots{})))
  4836. @end example
  4837. @cindex extensions, des gexps
  4838. @findex with-extensions
  4839. Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
  4840. modules en Scheme pur, mais aussi des « extensions » comme des liaisons
  4841. Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
  4842. voulez utiliser le paquet @code{guile-json} du côté de la construction,
  4843. voici comme procéder :
  4844. @example
  4845. (use-modules (gnu packages guile)) ;pour 'guile-json'
  4846. (with-extensions (list guile-json)
  4847. (gexp->derivation "something-with-json"
  4848. #~(begin
  4849. (use-modules (json))
  4850. @dots{})))
  4851. @end example
  4852. La forme syntaxique pour construire des gexps est résumée ci-dessous.
  4853. @deffn {Syntaxe Scheme} #~@var{exp}
  4854. @deffnx {Syntaxe Scheme} (gexp @var{exp})
  4855. Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
  4856. ou plusieurs de ces formes :
  4857. @table @code
  4858. @item #$@var{obj}
  4859. @itemx (ungexp @var{obj})
  4860. Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
  4861. supportés, par exemple un paquet ou une dérivation, auquel cas la forme
  4862. @code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
  4863. @code{"/gnu/store/@dots{}-coreutils-8.22}.
  4864. Si @var{boj} est une liste, elle est traversée et les références aux objets
  4865. supportés sont substitués de manière similaire.
  4866. Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
  4867. sont ajoutées à celle de la gexp qui l'entoure.
  4868. Si @var{obj} est un autre type d'objet, il est inséré tel quel.
  4869. @item #$@var{obj}:@var{output}
  4870. @itemx (ungexp @var{obj} @var{output})
  4871. Cette forme est similaire à la précédente, mais se réfère explicitement à la
  4872. sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
  4873. produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
  4874. @item #+@var{obj}
  4875. @itemx #+@var{obj}:output
  4876. @itemx (ungexp-native @var{obj})
  4877. @itemx (ungexp-native @var{obj} @var{output})
  4878. Comme @code{ungexp}, mais produit une référence à la construction
  4879. @emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
  4880. croisée.
  4881. @item #$output[:@var{output}]
  4882. @itemx (ungexp output [@var{output}])
  4883. Insère une référence à la sortie @var{output} de la dérivation, ou à la
  4884. sortie principale lorsque @var{output} est omis.
  4885. Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
  4886. @item #$@@@var{lst}
  4887. @itemx (ungexp-splicing @var{lst})
  4888. Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
  4889. liste qui la contient.
  4890. @item #+@@@var{lst}
  4891. @itemx (ungexp-native-splicing @var{lst})
  4892. Comme au dessus, mais se réfère à la construction native des objets listés
  4893. dans @var{lst}.
  4894. @end table
  4895. Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
  4896. l'exécution du type @code{gexp?} (voir plus bas).
  4897. @end deffn
  4898. @deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
  4899. Marque les gexps définies dans @var{body}@dots{} comme requérant
  4900. @var{modules} dans leur environnement d'exécution.
  4901. Chaque élément dans @var{module} peut être le nom d'un module, comme
  4902. @code{(guix build utils)} ou le nom d'un module suivi d'une flêche, suivie
  4903. d'un objet simili-fichier :
  4904. @example
  4905. `((guix build utils)
  4906. (guix gcrypt)
  4907. ((guix config) => ,(scheme-file "config.scm"
  4908. #~(define-module @dots{}))))
  4909. @end example
  4910. @noindent
  4911. Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
  4912. chemin de recherche, et le dernier est créé à partir d'un objet
  4913. simili-fichier.
  4914. Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
  4915. directement définies dans @var{body}@dots{}, mais pas sur celles définies
  4916. dans des procédures appelées par @var{body}@dots{}.
  4917. @end deffn
  4918. @deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
  4919. Marque les gexps définies dans @var{body}@dots{} comme requérant
  4920. @var{extensions} dans leur environnement de construction et d'exécution.
  4921. @var{extensions} est typiquement une liste d'objets paquets comme définis
  4922. dans le module @code{(gnu packages guile)}.
  4923. Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
  4924. chemin de chargement lors de la compilation des modules importés dans
  4925. @var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
  4926. gexp renvoyée par @var{body}@dots{}.
  4927. @end deffn
  4928. @deffn {Procédure Scheme} gexp? @var{obj}
  4929. Renvoie @code{#t} si @var{obj} est une G-expression.
  4930. @end deffn
  4931. Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
  4932. que code pour construire une dérivation, soit en tant que fichier normal
  4933. dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
  4934. cela (@pxref{La monad du dépôt}, pour plus d'information sur les monads).
  4935. @deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
  4936. [#:system (%current-system)] [#:target #f] [#:graft? #t] @
  4937. [#:hash #f] [#:hash-algo #f] @
  4938. [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
  4939. [#:module-path @var{%load-path}] @
  4940. [#:effective-version "2.2"] @
  4941. [#:references-graphs #f] [#:allowed-references #f] @
  4942. [#:disallowed-references #f] @ [#:leaked-env-vars #f] @
  4943. [#:script-name (string-append @var{name} "-builder")] @
  4944. [#:deprecation-warnings #f] @
  4945. [#:local-build? #f] [#:substitutable? #t] @
  4946. [#:properties '()] [#:guile-for-build #f]
  4947. Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
  4948. @var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
  4949. stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
  4950. vraie, elle est utilisée comme triplet de cible de compilation croisée pour
  4951. les paquets référencés par @var{exp}.
  4952. @var{modules} est devenu obsolète en faveur de
  4953. @code{with-imported-modules}. Sa signification est de rendre @var{modules}
  4954. disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
  4955. une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
  4956. pour les copier dans le dépôt, les compiler et les rendre disponibles dans
  4957. le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
  4958. @code{((guix build utils) (guix build gnu-build-system))}.
  4959. @var{effective-version} détermine la chaîne à utiliser lors d'ajout
  4960. d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
  4961. recherche — p.@: ex.@: @code{"2.2"}.
  4962. @var{graft?} détermine si les paquets référencés par @var{exp} devraient
  4963. être greffés si possible.
  4964. Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
  4965. tuples de la forme suivante :
  4966. @example
  4967. (@var{file-name} @var{package})
  4968. (@var{file-name} @var{package} @var{output})
  4969. (@var{file-name} @var{derivation})
  4970. (@var{file-name} @var{derivation} @var{output})
  4971. (@var{file-name} @var{store-item})
  4972. @end example
  4973. La partie droite des éléments de @var{references-graphs} est automatiquement
  4974. transformée en une entrée du processus de construction @var{exp}. Dans
  4975. l'environnement de construction, chaque @var{file-name} contient le graphe
  4976. des références de l'élément correspondant, dans un format texte simple.
  4977. @var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
  4978. sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
  4979. dépôt auxquels le résultat a le droit de faire référence. Toute référence à
  4980. un autre élément du dépôt conduira à une erreur à la construction. Comme
  4981. pour @var{disallowed-references}, qui peut lister des éléments qui ne
  4982. doivent pas être référencés par les sorties.
  4983. @var{deprecation-warnings} détermine s'il faut afficher les avertissement
  4984. d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
  4985. @code{t} ou @code{'detailed}.
  4986. Les autres arguments sont les mêmes que pour @code{derivation}
  4987. (@pxref{Dérivations}).
  4988. @end deffn
  4989. @cindex objets simili-fichiers
  4990. Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
  4991. @code{program-file} et @code{scheme-file} ci-dessous renvoient des
  4992. @dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
  4993. une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
  4994. cette G-expression :
  4995. @example
  4996. #~(system* #$(file-append glibc "/sbin/nscd") "-f"
  4997. #$(local-file "/tmp/my-nscd.conf"))
  4998. @end example
  4999. Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
  5000. dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
  5001. G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
  5002. modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
  5003. fait la G-expression. @code{plain-file} peut être utilisé de la même
  5004. manière ; elle est seulement différente par le fait que le contenu du
  5005. fichier est passé directement par une chaîne de caractères.
  5006. @deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
  5007. [#:recursive? #f] [#:select? (const #t)]
  5008. Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
  5009. ; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
  5010. fichier relatif, il est récupéré à partir de la position du fichier source
  5011. dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
  5012. @var{name} — par défaut le nom de base de @var{file}.
  5013. Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
  5014. récursivement ; si @var{file} désigne un fichier simple et que
  5015. @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
  5016. sont préservés.
  5017. Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
  5018. @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
  5019. absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
  5020. l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
  5021. C'est la version déclarative de la procédure monadique @code{interned-file}
  5022. (@pxref{La monad du dépôt, @code{interned-file}}).
  5023. @end deffn
  5024. @deffn {Procédure Scheme} plain-file @var{name} @var{content}
  5025. Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
  5026. contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
  5027. ajouter un dépôt.
  5028. C'est la version déclarative de @code{text-file}.
  5029. @end deffn
  5030. @deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
  5031. [#:options '(#:local-build? #t)]
  5032. Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
  5033. un répertoire calculé par @var{gexp}. @var{options} est une liste
  5034. d'arguments supplémentaires à passer à @code{gexp->derivation}.
  5035. C'est la version déclarative de @code{gexp->derivation}.
  5036. @end deffn
  5037. @deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
  5038. [#:guile (default-guile)] [#:module-path %load-path]
  5039. Renvoie un script exécutable @var{name} qui lance @var{exp} avec
  5040. @var{guile}, avec les modules importés de @var{exp} dans son chemin de
  5041. recherche. Cherche les modules de @var{exp} dans @var{module-path}.
  5042. L'exemple ci-dessous construit un script qui invoque simplement la commande
  5043. @command{ls} :
  5044. @example
  5045. (use-modules (guix gexp) (gnu packages base))
  5046. (gexp->script "list-files"
  5047. #~(execl #$(file-append coreutils "/bin/ls")
  5048. "ls"))
  5049. @end example
  5050. Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt,
  5051. @code{run-with-store}}), on obtient une dérivation qui produit une fichier
  5052. exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
  5053. @example
  5054. #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
  5055. !#
  5056. (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
  5057. @end example
  5058. @end deffn
  5059. @deffn {Procédure Scheme} program-file @var{name} @var{exp} @
  5060. [#:guile #f] [#:module-path %load-path]
  5061. Renvoie un objet représentant un élément du dépôt @var{name} qui lance
  5062. @var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
  5063. script. Les modules importés par @var{gexp} sont recherchés dans
  5064. @var{module-path}.
  5065. C'est la version déclarative de @code{gexp->script}.
  5066. @end deffn
  5067. @deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
  5068. [#:set-load-path? #t] [#:module-path %load-path] @
  5069. [#:splice? #f] @
  5070. [#:guile (default-guile)]
  5071. Renvoie une dérivation qui construit un fichier @var{name} contenant
  5072. @var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
  5073. une liste d'expressions qui seront splicée dans le fichier qui en résulte.
  5074. Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
  5075. résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
  5076. pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
  5077. sont trouvés dans @var{module-path}.
  5078. Le fichier qui en résulte retient les références à toutes les dépendances de
  5079. @var{exp} ou un sous-ensemble.
  5080. @end deffn
  5081. @deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
  5082. Renvoie un objet représentant le fichier Scheme @var{name} qui contient
  5083. @var{exp}.
  5084. C'est la version déclarative de @code{gexp->file}.
  5085. @end deffn
  5086. @deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
  5087. Renvoie une valeur monadique qui construit un ficher texte contenant
  5088. @var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
  5089. objet de n'importe quel type qui peut être utilisé dans une gexp : des
  5090. paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
  5091. dépôt qui en résulte en retient toutes les références.
  5092. Cette variante devrait être préférée à @code{text-file} lorsque vous
  5093. souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
  5094. typiquement lorsque vous construisez un fichier de configuration qui
  5095. contient des noms de fichiers du dépôt, comme ceci :
  5096. @example
  5097. (define (profile.sh)
  5098. ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
  5099. ;; la variable d'environnement « PATH ».
  5100. (text-file* "profile.sh"
  5101. "export PATH=" coreutils "/bin:"
  5102. grep "/bin:" sed "/bin\n"))
  5103. @end example
  5104. Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
  5105. résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
  5106. empêche d'être glanés tant que le script est accessible.
  5107. @end deffn
  5108. @deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
  5109. Renvoie un objet représentant le fichier du dépôt @var{name} contenant
  5110. @var{text}. @var{text} est une séquence de chaînes de caractères et de
  5111. fichiers simili-objets, comme dans :
  5112. @example
  5113. (mixed-text-file "profile"
  5114. "export PATH=" coreutils "/bin:" grep "/bin")
  5115. @end example
  5116. C'est la version déclarative de @code{text-file*}.
  5117. @end deffn
  5118. @deffn {Procédure Scheme} file-union @var{name} @var{files}
  5119. Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
  5120. tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
  5121. une paire où le premier élément est le nom de fichier à utiliser dans le
  5122. nouveau répertoire et le second élément est une gexp dénotant le fichier
  5123. cible. Voici un exemple :
  5124. @example
  5125. (file-union "etc"
  5126. `(("hosts" ,(plain-file "hosts"
  5127. "127.0.0.1 localhost"))
  5128. ("bashrc" ,(plain-file "bashrc"
  5129. "alias ls='ls --color=auto'"))))
  5130. @end example
  5131. Cela crée un répertoire @code{etc} contenant ces deux fichiers.
  5132. @end deffn
  5133. @deffn {Procédure Scheme} directory-union @var{name} @var{things}
  5134. Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
  5135. une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
  5136. :
  5137. @example
  5138. (directory-union "guile+emacs" (list guile emacs))
  5139. @end example
  5140. crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
  5141. @end deffn
  5142. @deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
  5143. Renvoie un objet simili-fichier qui correspond à la concaténation de
  5144. @var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
  5145. @var{suffix} est une chaîne de caractères.
  5146. Par exemple, considérez cette gexp :
  5147. @example
  5148. (gexp->script "run-uname"
  5149. #~(system* #$(file-append coreutils
  5150. "/bin/uname")))
  5151. @end example
  5152. On peut obtenir le même effet avec :
  5153. @example
  5154. (gexp->script "run-uname"
  5155. #~(system* (string-append #$coreutils
  5156. "/bin/uname")))
  5157. @end example
  5158. Il y a une différence cependant : dans le cas @code{file-append}, le script
  5159. qui en résulte contient le nom de fichier absolu comme une chaîne de
  5160. caractère alors que dans le deuxième cas, le script contient une expression
  5161. @code{(string-append @dots{})} pour construire le nom de fichier @emph{à
  5162. l'exécution}.
  5163. @end deffn
  5164. Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
  5165. contiennent des outils de construction. Pour savoir facilement qu'ils sont
  5166. à utiliser dans la strate de construction, ces modules sont gardés dans
  5167. l'espace de nom @code{(guix build @dots{})}.
  5168. @cindex abaissement, des objets haut-niveau dans les gepxs
  5169. En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
  5170. compilateur, soit en des dérivations, soit en des objets du dépôt. Par
  5171. exemple, abaisser un paquet crée une dérivation, et abaisser un
  5172. @code{plain-file} crée un élément du dépôt. Cela est effectué par la
  5173. procédure monadique @code{lower-object}.
  5174. @deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
  5175. [#:target #f]
  5176. Renvoie la dérivation ou l'élément du dépôt comme une valeur de
  5177. @var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
  5178. compilant de manière croisée pour @var{target} si @var{target} est vrai.
  5179. @var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
  5180. @code{<package>}.
  5181. @end deffn
  5182. @node Invoquer guix repl
  5183. @section Invoquer @command{guix repl}
  5184. @cindex REPL, read-eval-print loop
  5185. La commande @command{guix repl} démarre un @dfn{boucle
  5186. lecture-évaluation-affichage} Guile pour la programmation interactive
  5187. (@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
  5188. Comparé au lancement de la commande @command{guile}, @command{guix repl}
  5189. garanti que tous les modules Guix et toutes ses dépendances sont disponibles
  5190. dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
  5191. @example
  5192. $ guix repl
  5193. scheme@@(guile-user)> ,use (gnu packages base)
  5194. scheme@@(guile-user)> coreutils
  5195. $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
  5196. @end example
  5197. @cindex inférieurs
  5198. En plus, @command{guix repl} implémente un protocole REPL simple lisible par
  5199. une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
  5200. interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
  5201. une version potentiellement différente de Guix.
  5202. Les options disponibles sont les suivante :
  5203. @table @code
  5204. @item --type=@var{type}
  5205. @itemx -t @var{type}
  5206. Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
  5207. @table @code
  5208. @item guile
  5209. C'est la valeur par défaut. Elle démarre un REPL Guile standard
  5210. fonctionnel.
  5211. @item machine
  5212. Démarre un REPL qui utilise le protocole lisible par machine. C'est le
  5213. protocole que parle le module @code{(guix inferior)}.
  5214. @end table
  5215. @item --listen=@var{extrémité}
  5216. Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
  5217. sortie standard. Lorsque cette option est passée, il écoutera plutôt les
  5218. connexions sur @var{endpoint}. Voici un exemple d'options valides :
  5219. @table @code
  5220. @item --listen=tcp:37146
  5221. Accepte les connexions sur localhost, sur le port 31.
  5222. @item --listen=unix:/tmp/socket
  5223. Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
  5224. @end table
  5225. @end table
  5226. @c *********************************************************************
  5227. @node Utilitaires
  5228. @chapter Utilitaires
  5229. cette section décrit les utilitaires en ligne de commande de Guix. certains
  5230. sont surtout faits pour les développeurs qui écrivent de nouvelles
  5231. définitions de paquets tandis que d'autres sont plus utiles pour une
  5232. utilisation générale. Ils complètent l'interface de programmation Scheme de
  5233. Guix d'une manière pratique.
  5234. @menu
  5235. * Invoquer guix build:: Construire des paquets depuis la ligne de
  5236. commande.
  5237. * Invoquer guix edit:: Modifier les définitions de paquets.
  5238. * Invoquer guix download:: Télécharger un fichier et afficher son hash.
  5239. * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
  5240. * Invoquer guix import:: Importer des définitions de paquets.
  5241. * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
  5242. * Invoquer guix lint:: Trouver des erreurs dans les définitions de
  5243. paquets.
  5244. * Invoquer guix size:: Profiler l'utilisation du disque.
  5245. * Invoquer guix graph:: Visualiser le graphe des paquets.
  5246. * Invoquer guix environment:: Mettre en place des environnements de
  5247. développement.
  5248. * Invoquer guix publish:: Partager des substituts.
  5249. * Invoquer guix challenge:: Défier les serveurs de substituts.
  5250. * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
  5251. * Invoquer guix container:: Isolation de processus.
  5252. * Invoquer guix weather:: Mesurer la disponibilité des substituts.
  5253. * Invoquer guix processes:: Lister les processus clients.
  5254. @end menu
  5255. @node Invoquer guix build
  5256. @section Invoquer @command{guix build}
  5257. @cindex construction de paquets
  5258. @cindex @command{guix build}
  5259. La commande @command{guix build} construit des paquets ou des dérivations et
  5260. leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
  5261. qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
  5262. commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
  5263. elle est surtout utile pour les développeurs de la distribution.
  5264. La syntaxe générale est :
  5265. @example
  5266. guix build @var{options} @var{package-or-derivation}@dots{}
  5267. @end example
  5268. Par exemple, la commande suivante construit la dernière version d'Emacs et
  5269. de Guile, affiche leur journaux de construction et enfin affiche les
  5270. répertoires des résultats :
  5271. @example
  5272. guix build emacs guile
  5273. @end example
  5274. De même, la commande suivante construit tous les paquets disponibles :
  5275. @example
  5276. guix build --quiet --keep-going \
  5277. `guix package -A | cut -f1,2 --output-delimiter=@@`
  5278. @end example
  5279. @var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
  5280. distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
  5281. soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
  5282. Dans le premier cas, la commande cherchera un paquet avec le nom
  5283. correspondant (et éventuellement la version) dans les modules de la
  5284. distribution GNU (@pxref{Modules de paquets}).
  5285. Autrement, l'option @code{--expression} peut être utilisée pour spécifier
  5286. une expression Scheme qui s'évalue en un paquet ; c'est utile pour
  5287. différencier des paquets avec le même nom ou des variantes de paquets.
  5288. Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
  5289. disponibles sont décrites dans les sous-sections ci-dessous.
  5290. @menu
  5291. * Options de construction communes:: Options de construction pour la
  5292. plupart des commandes.
  5293. * Options de transformation de paquets:: Créer des variantes de paquets.
  5294. * Options de construction supplémentaires:: Options spécifiques à «
  5295. guix build ».
  5296. * Débogage des échecs de construction:: La vie d'un empaqueteur.
  5297. @end menu
  5298. @node Options de construction communes
  5299. @subsection Options de construction communes
  5300. Un certain nombre d'options qui contrôlent le processus de construction sont
  5301. communes avec @command{guix build} et les autres commandes qui peuvent
  5302. générer des constructions, comme @command{guix package} ou @command{guix
  5303. archive}. Voici ces options :
  5304. @table @code
  5305. @item --load-path=@var{répertoire}
  5306. @itemx -L @var{répertoire}
  5307. Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
  5308. (@pxref{Modules de paquets}).
  5309. Cela permet à des utilisateurs de définir leur propres paquets et les rendre
  5310. disponibles aux outils en ligne de commande.
  5311. @item --keep-failed
  5312. @itemx -K
  5313. Garde l'arborescence de construction des constructions en échec. Ainsi, si
  5314. une construction échoue, son arborescence de construction est préservée dans
  5315. @file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
  5316. de construction. Cela est utile pour déboguer des échecs de construction.
  5317. @xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
  5318. des problèmes de construction.
  5319. Cette option n'a pas d'effet lors de la connexion à un démon distant avec
  5320. l'URI @code{guix://} (@pxref{Le dépôt, la variable
  5321. @code{GUIX_DAEMON_SOCKET}}).
  5322. @item --keep-going
  5323. @itemx -k
  5324. Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
  5325. toutes les constructions ont soit réussies, soit échouées.
  5326. Le comportement par défaut est de s'arrêter dès qu'une des dérivations
  5327. spécifiées échoue.
  5328. @item --dry-run
  5329. @itemx -n
  5330. Ne pas construire les dérivations.
  5331. @anchor{option de repli}
  5332. @item --fallback
  5333. Lorsque la substitution d'un binaire pré-compilé échoue, construit les
  5334. paquets localement à la place (@pxref{Échec de substitution}).
  5335. @item --substitute-urls=@var{urls}
  5336. @anchor{client-substitute-urls}
  5337. Considère @var{urls} comme une liste d'URL de sources de substituts séparés
  5338. par des espaces, et remplace la liste par défaut d'URL de
  5339. @command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
  5340. URLs}).
  5341. Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
  5342. tant qu'ils sont signés par une clef autorisée par l'administrateur système
  5343. (@pxref{Substituts}).
  5344. Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
  5345. substitution.
  5346. @item --no-substitutes
  5347. Ne pas utiliser de substitut pour les résultats de la construction.
  5348. C'est-à-dire, toujours construire localement plutôt que de permettre le
  5349. téléchargement de binaires pré-construits (@pxref{Substituts}).
  5350. @item --no-grafts
  5351. Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
  5352. jour des paquets disponibles comme des greffes ne sont pas appliquées.
  5353. @xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
  5354. @item --rounds=@var{n}
  5355. Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
  5356. les constructions consécutives ne sont pas identiques bit-à-bit.
  5357. Cela est une manière utile pour détecter des processus de construction non
  5358. déterministes. Les processus de construction non déterministes sont
  5359. problématiques car ils rendent pratiquement impossible la
  5360. @emph{vérification} par les utilisateurs de l'authenticité de binaires
  5361. tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
  5362. Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
  5363. devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
  5364. résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
  5365. puis en reconstruisant, et enfin en comparant les deux résultats.
  5366. @item --no-build-hook
  5367. N'essaye pas de décharger les constructions via le « crochet de construction
  5368. » du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
  5369. construit localement plutôt que de décharger les constructions à une machine
  5370. distante.
  5371. @item --max-silent-time=@var{secondes}
  5372. Lorsque le processus de construction ou de substitution restent silencieux
  5373. pendant plus de @var{secondes}, le terminer et rapporter une erreur de
  5374. construction.
  5375. Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
  5376. @item --timeout=@var{secondes}
  5377. De même, lorsque le processus de construction ou de substitution dure plus
  5378. de @var{secondes}, le terminer et rapporter une erreur de construction.
  5379. Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
  5380. @item --verbosity=@var{level}
  5381. Utilise le niveau de verbosité donné. @var{level} doit être un entier entre
  5382. 0 et 5 ; les entiers les plus hauts signifient une sortie plus verbeuse. Le
  5383. mettre à 4 ou plus peut être utile pour déboguer des problèmes de
  5384. configuration du démon de construction.
  5385. @item --cores=@var{n}
  5386. @itemx -c @var{n}
  5387. Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
  5388. valeur spéciale @code{0} signifie autant de cœurs que possible.
  5389. @item --max-jobs=@var{n}
  5390. @itemx -M @var{n}
  5391. Permet au plus @var{n} travaux de construction en parallèle. @xref{Invoquer guix-daemon, @code{--max-jobs}}, pour plus de détails sur cette option et
  5392. l'option équivalente pour @command{guix-daemon}.
  5393. @end table
  5394. Sous le capot, @command{guix build} est surtout un interface à la procédure
  5395. @code{package-derivation} du module @code{(guix packages)}, et à la
  5396. procédure @code{build-derivations} du module @code{(guix derivations)}.
  5397. En plus des options passées explicitement par la ligne de commande,
  5398. @command{guix build} et les autres commande @command{guix} qui peuvent
  5399. effectuer des construction honorent la variable d'environnement
  5400. @code{GUIX_BUILD_OPTIONS}.
  5401. @defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
  5402. Les utilisateurs peuvent définir cette variable à une liste d'options de la
  5403. ligne de commande qui seront automatiquement utilisées par @command{guix
  5404. build} et les autres commandes @command{guix} qui peuvent effectuer des
  5405. constructions, comme dans l'exemple suivant :
  5406. @example
  5407. $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
  5408. @end example
  5409. Ces options sont analysées indépendamment, et le résultat est ajouté aux
  5410. options de la ligne de commande analysées.
  5411. @end defvr
  5412. @node Options de transformation de paquets
  5413. @subsection Options de transformation de paquets
  5414. @cindex variantes de paquets
  5415. Un autre ensemble d'options de la ligne de commande supportés par
  5416. @command{guix build} et aussi @command{guix package} sont les @dfn{options
  5417. de transformation de paquets}. Ce sont des options qui rendent possible la
  5418. définition de @dfn{variantes de paquets} — par exemple, des paquets
  5419. construit à partir de sources différentes. C'est une manière simple de
  5420. créer des paquets personnalisés à la volée sans avoir à taper les
  5421. définitions de variantes de paquets (@pxref{Définition des paquets}).
  5422. @table @code
  5423. @item --with-source=@var{source}
  5424. @itemx --with-source=@var{paquet}=@var{source}
  5425. @itemx --with-source=@var{paquet}@@@var{version}=@var{source}
  5426. Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
  5427. son numéro de version. @var{source} doit être un nom de fichier ou une URL,
  5428. comme pour @command{guix download} (@pxref{Invoquer guix download}).
  5429. Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
  5430. spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
  5431. @code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
  5432. De même, lorsque @var{version} est omis, la chaîne de version est inférée à
  5433. partir de @var{source} ; dans l'exemple précédent, il s'agit de
  5434. @code{2.0.10}.
  5435. Cette option permet aux utilisateurs d'essayer des version des paquets
  5436. différentes de celles fournies par la distribution. L'exemple ci-dessous
  5437. télécharge @file{ed-1.7.tar.g} depuis un mirroir GNU et l'utilise comme
  5438. source pour le paquet @code{ed} :
  5439. @example
  5440. guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
  5441. @end example
  5442. En tant que développeur, @code{--with-source} permet de tester facilement
  5443. des version bêta :
  5444. @example
  5445. guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
  5446. @end example
  5447. @dots{} ou pour construire un dépôt de gestion de version dans un
  5448. environnement vierge :
  5449. @example
  5450. $ git clone git://git.sv.gnu.org/guix.git
  5451. $ guix build guix --with-source=guix@@1.0=./guix
  5452. @end example
  5453. @item --with-input=@var{paquet}=@var{remplaçant}
  5454. Remplace la dépendance sur @var{paquet} par une dépendance à
  5455. @var{remplaçant}. @var{paquet} doit être un nom de paquet et
  5456. @var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
  5457. @code{guile@@1.8}.
  5458. Par exemple, la commande suivante construit Guix, mais remplace sa
  5459. dépendance à la version stable actuelle de Guile par une dépendance à une
  5460. ancienne version de Guile, @code{guile@@2.0} :
  5461. @example
  5462. guix build --with-input=guile=guile@@2.0 guix
  5463. @end example
  5464. C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
  5465. @code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
  5466. @code{guile}) sont reconstruits avec @code{guile@@2.0}.
  5467. Cette option est implémentée avec la procédure Scheme
  5468. @code{package-input-rewriting} (@pxref{Définition des paquets,
  5469. @code{package-input-rewriting}}).
  5470. @item --with-graft=@var{paquet}=@var{remplaçant}
  5471. Cette option est similaire à @code{--with-input} mais avec une différence
  5472. importante : plutôt que de reconstruire la chaîne de dépendance complète,
  5473. @var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
  5474. référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
  5475. d'information sur les greffes.
  5476. Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
  5477. Wget et toutes ses dépendances, en remplaçant les références à la version
  5478. actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
  5479. @example
  5480. guix build --with-graft=gnutls=gnutls@@3.5.4 wget
  5481. @end example
  5482. Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
  5483. y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
  5484. sont strictement compatibles — par exemple, s'ils fournissent une
  5485. bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
  5486. doivent être compatibles. Si @var{remplaçant} est incompatible avec
  5487. @var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
  5488. utilisez avec précaution !
  5489. @item --with-branch=@var{package}=@var{branch}
  5490. @cindex Git, using the latest commit
  5491. @cindex latest commit, building
  5492. Build @var{package} from the latest commit of @var{branch}. The
  5493. @code{source} field of @var{package} must be an origin with the
  5494. @code{git-fetch} method (@pxref{Référence d'origine}) or a @code{git-checkout}
  5495. object; the repository URL is taken from that @code{source}.
  5496. For instance, the following command builds @code{guile-sqlite3} from the
  5497. latest commit of its @code{master} branch, and then builds @code{guix}
  5498. (which depends on it) and @code{cuirass} (which depends on @code{guix})
  5499. against this specific @code{guile-sqlite3} build:
  5500. @example
  5501. guix build --with-branch=guile-sqlite3=master cuirass
  5502. @end example
  5503. @cindex intégration continue
  5504. Obviously, since it uses the latest commit of the given branch, the result
  5505. of such a command varies over time. Nevertheless it is a convenient way to
  5506. rebuild entire software stacks against the latest commit of one or more
  5507. packages. This is particularly useful in the context of continuous
  5508. integration (CI).
  5509. Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed
  5510. up consecutive accesses to the same repository. You may want to clean it up
  5511. once in a while to save disk space.
  5512. @item --with-commit=@var{package}=@var{commit}
  5513. This is similar to @code{--with-branch}, except that it builds from
  5514. @var{commit} rather than the tip of a branch. @var{commit} must be a valid
  5515. Git commit SHA1 identifier.
  5516. @end table
  5517. @node Options de construction supplémentaires
  5518. @subsection Options de construction supplémentaires
  5519. Les options de la ligne de commande ci-dessous sont spécifiques à
  5520. @command{guix build}.
  5521. @table @code
  5522. @item --quiet
  5523. @itemx -q
  5524. Construire en silence, sans afficher les journaux de construction. À la
  5525. fin, le journal de construction est gardé dans @file{/var} (ou similaire) et
  5526. on peut toujours l'y trouver avec l'option @option{--log-file}.
  5527. @item --file=@var{fichier}
  5528. @itemx -f @var{fichier}
  5529. Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
  5530. code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
  5531. Par exemple, @var{file} peut contenir une définition de paquet comme ceci
  5532. (@pxref{Définition des paquets}) :
  5533. @example
  5534. @verbatiminclude package-hello.scm
  5535. @end example
  5536. @item --expression=@var{expr}
  5537. @itemx -e @var{expr}
  5538. Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
  5539. Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
  5540. guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
  5541. version 1.8 de Guile.
  5542. Autrement, @var{exp} peut être une G-expression, auquel cas elle est
  5543. utilisée comme un programme de construction passé à @code{gexp->derivation}
  5544. (@pxref{G-Expressions}).
  5545. Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
  5546. argument (@pxref{La monad du dépôt}). La procédure doit renvoyer une
  5547. dérivation comme une valeur monadique, qui est ensuite lancée à travers
  5548. @code{run-with-store}.
  5549. @item --source
  5550. @itemx -S
  5551. Construit les dérivation source des paquets, plutôt que des paquets
  5552. eux-même.
  5553. Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
  5554. @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
  5555. de GCC.
  5556. L'archive des sources renvoyée est le résultat de l'application des
  5557. correctifs et des extraits de code éventuels spécifiés dans le champ
  5558. @code{origin} du paquet (@pxref{Définition des paquets}).
  5559. @item --sources
  5560. Récupère et renvoie la source de @var{package-or-derivation} et toute ses
  5561. dépendances, récursivement. C'est pratique pour obtenir une copie locale de
  5562. tous les codes sources requis pour construire @var{packages}, ce qui vous
  5563. permet de les construire plus tard même sans accès réseau. C'est une
  5564. extension de l'option @code{--source} et peut accepter l'un des arguments
  5565. facultatifs suivants :
  5566. @table @code
  5567. @item package
  5568. Cette valeur fait que l'option @code{--sources} se comporte comme l'option
  5569. @code{--source}.
  5570. @item all
  5571. Construit les dérivations des sources de tous les paquets, dont les sources
  5572. qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
  5573. @example
  5574. $ guix build --sources tzdata
  5575. The following derivations will be built:
  5576. /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
  5577. /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
  5578. @end example
  5579. @item transitive
  5580. Build the source derivations of all packages, as well of all transitive
  5581. inputs to the packages. This can be used e.g.@: to prefetch package source
  5582. for later offline building.
  5583. @example
  5584. $ guix build --sources=transitive tzdata
  5585. The following derivations will be built:
  5586. /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
  5587. /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
  5588. /gnu/store/@dots{}-grep-2.21.tar.xz.drv
  5589. /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
  5590. /gnu/store/@dots{}-make-4.1.tar.xz.drv
  5591. /gnu/store/@dots{}-bash-4.3.tar.xz.drv
  5592. @dots{}
  5593. @end example
  5594. @end table
  5595. @item --system=@var{système}
  5596. @itemx -s @var{système}
  5597. Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
  5598. plutôt que pour le type de système de l'hôte de construction.
  5599. @quotation Remarque
  5600. Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
  5601. ne doit pas être confondu avec une compilation croisée. Voir
  5602. @code{--target} ci-dessous pour des informations sur la compilation croisée.
  5603. @end quotation
  5604. Par exemple, passer @code{--system=i686-linux} sur un système
  5605. @code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
  5606. @code{aarch64-linux} vous permet de construire des paquets dans un
  5607. environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
  5608. option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
  5609. @quotation Remarque
  5610. La possibilité de construire pour un système @code{armhf-linux} est activé
  5611. sans condition sur les machines @code{aarch64-linux}, bien que certaines
  5612. puces aarch64 n'en soient pas capables, comme les ThunderX.
  5613. @end quotation
  5614. De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
  5615. est activée (@pxref{Services de virtualisation,
  5616. @code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
  5617. quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
  5618. installé.
  5619. Les constructions pour un autre système que celui de la machine que vous
  5620. utilisez peuvent aussi être déchargées à une machine distante de la bonne
  5621. architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
  5622. déchargement.
  5623. @item --target=@var{triplet}
  5624. @cindex compilation croisée
  5625. Effectuer une compilation croisée pour @var{triplet} qui doit être un
  5626. triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
  5627. target triplets, GNU configuration triplets,, autoconf, Autoconf}).
  5628. @anchor{vérification de la construction}
  5629. @item --check
  5630. @cindex déterminisme, vérification
  5631. @cindex reproductibilité, vérification
  5632. Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
  5633. le dépôt et lève une erreur si les résultats des constructions ne sont pas
  5634. identiques bit-à-bit.
  5635. Ce mécanisme vous permet de vérifier si les substituts précédemment
  5636. installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
  5637. construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
  5638. pour plus d'informations et pour les outils.
  5639. Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
  5640. dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
  5641. l'étude des différences entre les deux résultats.
  5642. @item --repair
  5643. @cindex réparer les éléments du dépôt
  5644. @cindex corruption, récupérer de
  5645. Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
  5646. les téléchargeant ou en les construisant à nouveau.
  5647. Cette opération n'est pas atomique et donc restreinte à l'utilisateur
  5648. @code{root}
  5649. @item --derivations
  5650. @itemx -d
  5651. Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
  5652. donnés.
  5653. @item --root=@var{fichier}
  5654. @itemx -r @var{fichier}
  5655. @cindex racines du GC, ajout
  5656. @cindex ajout de racines au ramasse-miettes
  5657. Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
  5658. en tant que racine du ramasse-miettes.
  5659. En conséquence, les résultats de cette invocation de @command{guix build}
  5660. sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
  5661. supprimé. Lorsque cette option est omise, les constructions sont
  5662. susceptibles d'être glanées.
  5663. @item --log-file
  5664. @cindex journaux de construction, accès
  5665. Renvoie les noms des journaux de construction ou les URL des
  5666. @var{package-or-derivation} donnés ou lève une erreur si les journaux de
  5667. construction sont absents.
  5668. Cela fonctionne indépendamment de la manière dont les paquets ou les
  5669. dérivations sont spécifiées. Par exemple, les invocations suivantes sont
  5670. équivalentes :
  5671. @example
  5672. guix build --log-file `guix build -d guile`
  5673. guix build --log-file `guix build guile`
  5674. guix build --log-file guile
  5675. guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
  5676. @end example
  5677. Si un journal n'est pas disponible localement, à moins que
  5678. @code{--no-substitutes} ne soit passé, la commande cherche un journal
  5679. correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
  5680. @code{--substitute-urls}.)
  5681. Donc par exemple, imaginons que vous souhaitiez voir le journal de
  5682. construction de GDB sur MIPS, mais que vous n'avez qu'une machine
  5683. @code{x86_64} :
  5684. @example
  5685. $ guix build --log-file gdb -s mips64el-linux
  5686. https://hydra.gnu.org/log/@dots{}-gdb-7.10
  5687. @end example
  5688. Vous pouvez accéder librement à un vaste bibliothèque de journaux de
  5689. construction !
  5690. @end table
  5691. @node Débogage des échecs de construction
  5692. @subsection Débogage des échecs de construction
  5693. @cindex échecs de construction, débogage
  5694. Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
  5695. passerez probablement du temps à déboguer et modifier la construction
  5696. jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
  5697. construction vous-même dans un environnement le plus proche possible de
  5698. celui qu'utilise le démon de construction.
  5699. Pour cela, la première chose à faire est d'utiliser l'option
  5700. @option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
  5701. l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
  5702. par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
  5703. À partir de là, vous pouvez vous déplacer dans l'arborescence de
  5704. construction et sourcer le fichier @file{environment-variables}, qui
  5705. contient toutes les variables d'environnement qui étaient définies lorsque
  5706. la construction a échoué. Disons que vous déboguez un échec de construction
  5707. dans le paquet @code{foo} ; une session typique ressemblerait à cela :
  5708. @example
  5709. $ guix build foo -K
  5710. @dots{} @i{build fails}
  5711. $ cd /tmp/guix-build-foo.drv-0
  5712. $ source ./environment-variables
  5713. $ cd foo-1.2
  5714. @end example
  5715. Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
  5716. (presque) et corriger le processus de construction.
  5717. Parfois il arrive que, par exemple, les tests d'un paquet réussissent
  5718. lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
  5719. le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
  5720. contrairement à notre environnement au-dessus, l'accès réseau est
  5721. indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
  5722. Dans ce cas, vous pourriez avoir besoin de lancer le processus de
  5723. construction dans un conteneur similaire à celui que le démon crée :
  5724. @example
  5725. $ guix build -K foo
  5726. @dots{}
  5727. $ cd /tmp/guix-build-foo.drv-0
  5728. $ guix environment --no-grafts -C foo --ad-hoc strace gdb
  5729. [env]# source ./environment-variables
  5730. [env]# cd foo-1.2
  5731. @end example
  5732. Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
  5733. shell dedans (@pxref{Invoquer guix environment}). La partie
  5734. @command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
  5735. @command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
  5736. débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
  5737. environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
  5738. plus d'informations sur les greffes).
  5739. Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
  5740. de construction, on peut enlever @file{/bin/sh} :
  5741. @example
  5742. [env]# rm /bin/sh
  5743. @end example
  5744. Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
  5745. conteneur jetable créé par @command{guix environment}.
  5746. La commande @command{strace} n'est probablement pas dans le chemin de
  5747. recherche, mais on peut lancer :
  5748. @example
  5749. [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
  5750. @end example
  5751. De cette manière, non seulement vous aurez reproduit les variables
  5752. d'environnement utilisées par le démon, mais vous lancerez aussi le
  5753. processus de construction dans un conteneur similaire à celui utilisé par le
  5754. démon.
  5755. @node Invoquer guix edit
  5756. @section Invoquer @command{guix edit}
  5757. @cindex @command{guix edit}
  5758. @cindex définition de paquets, modification
  5759. Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
  5760. facilite la vie des utilisateurs et des packagers en plaçant leur éditeur
  5761. sur le fichier source qui contient la définition des paquets spécifiés. Par
  5762. exemple :
  5763. @example
  5764. guix edit gcc@@4.9 vim
  5765. @end example
  5766. @noindent
  5767. lance le programme spécifié dans la variable d'environnement @code{VISUAL}
  5768. ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et cele de Vim.
  5769. Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
  5770. ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
  5771. (@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
  5772. Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
  5773. actuellement dans le dépôt.
  5774. @node Invoquer guix download
  5775. @section Invoquer @command{guix download}
  5776. @cindex @command{guix download}
  5777. @cindex télécharger les sources des paquets
  5778. En écrivant des définitions de paquets, les développeurs ont généralement
  5779. besoin de télécharger une archive des sources, calculer son hash SHA256 et
  5780. écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
  5781. L'outil @command{guix download} aide à cette tâche : il télécharge un
  5782. fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
  5783. le dépôt et son hash SHA56.
  5784. Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
  5785. passante : losque les développeurs finissent par construire le paquet
  5786. nouvellement défini avec @command{guix build}, l'archive des sources n'aura
  5787. pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
  5788. le dépôt. C'est aussi une manière pratique de garder des fichiers
  5789. temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
  5790. La commande @command{guix download} supporte les mêmes URI que celles
  5791. utilisées dans les définitions de paquets. En particulier, elle supporte
  5792. les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
  5793. supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
  5794. l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
  5795. erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
  5796. bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
  5797. @command{guix download} vérifie les certificats du serveur HTTPS en
  5798. chargeant les autorités de certification X.509 depuis le répertoire vers
  5799. lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
  5800. Les options suivantes sont disponibles :
  5801. @table @code
  5802. @item --format=@var{fmt}
  5803. @itemx -f @var{fmt}
  5804. Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
  5805. d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
  5806. @item --no-check-certificate
  5807. Ne pas valider les certificats HTTPS des serveurs.
  5808. Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
  5809. garanti} que vous communiquez avec le serveur authentique responsable de
  5810. l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
  5811. milieu ».
  5812. @item --output=@var{fichier}
  5813. @itemx -o @var{fichier}
  5814. Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
  5815. au dépôt.
  5816. @end table
  5817. @node Invoquer guix hash
  5818. @section Invoquer @command{guix hash}
  5819. @cindex @command{guix hash}
  5820. La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
  5821. surtout un outil pour simplifier la vie des contributeurs de la distribution
  5822. : il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
  5823. la définition d'un paquet (@pxref{Définition des paquets}).
  5824. La syntaxe générale est :
  5825. @example
  5826. guix hash @var{option} @var{fichier}
  5827. @end example
  5828. Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
  5829. hash des données lues depuis l'entrée standard. @command{guix hash} a les
  5830. options suivantes :
  5831. @table @code
  5832. @item --format=@var{fmt}
  5833. @itemx -f @var{fmt}
  5834. Écrit le hash dans le format spécifié par @var{fmt}.
  5835. Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
  5836. (@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
  5837. Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
  5838. affichera le hash en @code{nix-base32}. Cette représentation est utilisée
  5839. dans les définitions des paquets.
  5840. @item --recursive
  5841. @itemx -r
  5842. Calcule le hash sur @var{fichier} récursivement.
  5843. @c FIXME: Replace xref above with xref to an ``Archive'' section when
  5844. @c it exists.
  5845. Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
  5846. dont ses enfants si c'est un répertoire. Certaines métadonnées de
  5847. @var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
  5848. est un fichier normal, le hash est différent que le @var{fichier} soit
  5849. exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
  5850. sur le hash (@pxref{Invoquer guix archive}).
  5851. @item --exclude-vcs
  5852. @itemx -x
  5853. Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
  5854. système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
  5855. @vindex git-fetch
  5856. Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
  5857. avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
  5858. @example
  5859. $ git clone http://example.org/foo.git
  5860. $ cd foo
  5861. $ guix hash -rx .
  5862. @end example
  5863. @end table
  5864. @node Invoquer guix import
  5865. @section Invoquer @command{guix import}
  5866. @cindex importer des paquets
  5867. @cindex paquets importés
  5868. @cindex conversion de paquets
  5869. @cindex Invoquer @command{guix import}
  5870. La commande @command{guix import} est utile pour les gens qui voudraient
  5871. ajouter un paquet à la distribution avec aussi peu de travail que possible —
  5872. une demande légitime. La commande connaît quelques dépôts logiciels d'où
  5873. elle peut « importer » des métadonnées de paquets. Le résultat est une
  5874. définition de paquet, ou un modèle de définition, dans le format reconnu par
  5875. Guix (@pxref{Définition des paquets}).
  5876. La syntaxe générale est :
  5877. @example
  5878. guix import @var{importer} @var{options}@dots{}
  5879. @end example
  5880. @var{importer} spécifie la source depuis laquelle importer des métadonnées
  5881. de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
  5882. options spécifiques à @var{importer}. Actuellement les « importateurs »
  5883. disponibles sont :
  5884. @table @code
  5885. @item gnu
  5886. Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
  5887. la dernière version de ce paquet GNU, avec le hash de son archive, le
  5888. synopsis et la description canonique.
  5889. Les informations supplémentaires comme les dépendances du paquet et sa
  5890. licence doivent être renseignées manuellement.
  5891. Par exemple, la commande suivante renvoie une définition de paquets pour
  5892. GNU@tie{}Hello :
  5893. @example
  5894. guix import gnu hello
  5895. @end example
  5896. Les options spécifiques sont :
  5897. @table @code
  5898. @item --key-download=@var{politique}
  5899. Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
  5900. OpenPGP manquantes lors de la vérification de la signature d'un paquet.
  5901. @xref{Invoquer guix refresh, @code{--key-download}}.
  5902. @end table
  5903. @item pypi
  5904. @cindex pypi
  5905. Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
  5906. paquets Python}@footnote{Cette fonctionnalité requiert l'installation de
  5907. Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées à
  5908. partir de la description en JSON disponible sur @code{pypi.python.org} et
  5909. inclus généralement toutes les informations utiles, dont les dépendances des
  5910. paquets. Pour une efficacité maximale, il est recommandé d'installer
  5911. l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
  5912. wheels Python et récupérer les informations contenues à l'intérieur.
  5913. La commande ci-dessous importe les métadonnées du paquet Python
  5914. @code{itsdangerous} :
  5915. @example
  5916. guix import pypi itsdangerous
  5917. @end example
  5918. @table @code
  5919. @item --recursive
  5920. @itemx -r
  5921. Traverse le graphe des dépendances du paquet amont donné et génère les
  5922. expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
  5923. @end table
  5924. @item gem
  5925. @cindex gem
  5926. Importe des métadonnées de @uref{https://rubygems.org/,
  5927. RubyGems}@footnote{Cette fonctionnalité requiert l'installation de
  5928. Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
  5929. format JSON disponible sur @code{rubygems.org} et inclut les informations
  5930. les plus utiles, comme les dépendances à l'exécution. Il y a des pièges
  5931. cependant. Les métadonnées ne distinguent pas synopsis et description, donc
  5932. la même chaîne est utilisée pour les deux champs. En plus, les détails des
  5933. dépendances non Ruby requises pour construire des extensions natives sont
  5934. indisponibles et laissé en exercice au packager.
  5935. La commande ci-dessous importe les métadonnées pour le paquet Ruby
  5936. @code{rails} :
  5937. @example
  5938. guix import gem rails
  5939. @end example
  5940. @table @code
  5941. @item --recursive
  5942. @itemx -r
  5943. Traverse le graphe des dépendances du paquet amont donné et génère les
  5944. expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
  5945. @end table
  5946. @item cpan
  5947. @cindex CPAN
  5948. Importe des métadonnées de @uref{https://www.metacpan.org/,
  5949. MetaCPAN}@footnote{Cette fonctionnalité requiert l'installation de
  5950. Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
  5951. format JSON disponible à travers @uref{https://fastapi.metacpan.org/, l'API
  5952. de MetaCPAN} et inclus les informations les plus utiles, comme les
  5953. dépendances des modules. L'information sur les licences doit être vérifiée
  5954. avec attention. Si Perl est disponible dans le dépôt, alors l'utilitaire
  5955. @code{corelist} sera utiliser pour exclure les modules du cœur de la
  5956. distribution Perl de la liste des dépendances.
  5957. La commande ci-dessous importe les métadonnées du module Perl
  5958. @code{Acme::Boolean} :
  5959. @example
  5960. guix import cpan Acme::Boolean
  5961. @end example
  5962. @item cran
  5963. @cindex CRAN
  5964. @cindex Bioconductor
  5965. Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
  5966. dépôt central de @uref{http://r-project.org, l'environnement statistique et
  5967. graphique GUN@tie{}R}.
  5968. Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
  5969. La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
  5970. @example
  5971. guix import cran Cairo
  5972. @end example
  5973. Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
  5974. le graphe des dépendances du paquet amont récursivement et générera des
  5975. expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
  5976. Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
  5977. sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
  5978. répertoire de paquets R pour l'analyse et la compréhension de données
  5979. génomiques volumineuses en bioinformatique.
  5980. Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
  5981. publié sur l'interface web du dépôt SVN de Bioconductor.
  5982. La commande ci-dessous importe les métadonnées du paquet R
  5983. @code{GenomicRanges} :
  5984. @example
  5985. guix import cran --archive=bioconductor GenomicRanges
  5986. @end example
  5987. @item texlive
  5988. @cindex TeX Live
  5989. @cindex CTAN
  5990. Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
  5991. réseau complète pour les paquets TeX qui font partie de la
  5992. @uref{https://www.tug.org/texlive/, distribution TeX Live}.
  5993. Les informations sur les paquets sont obtenues à travers l'API XML fournie
  5994. par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
  5995. projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
  5996. d'archives versionnées.
  5997. La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
  5998. :
  5999. @example
  6000. guix import texlive fontspec
  6001. @end example
  6002. Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
  6003. n'est pas téléchargé depuis le sous-répertoire @file{latex} du
  6004. l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
  6005. depuis le répertoire voisin spécifié sous la même racine.
  6006. La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
  6007. depuis CTAN en récupérant les sources depuis le répertoire
  6008. @file{texmf/source/generic} :
  6009. @example
  6010. guix import texlive --archive=generic ifxetex
  6011. @end example
  6012. @item json
  6013. @cindex JSON, import
  6014. Importe des métadonnées d'un fichier JSON local@footnote{Cette
  6015. fonctionnalité requiert l'installation de Guile-JSON.
  6016. @xref{Prérequis}.}. Considérez l'exemple suivant d'une définition de
  6017. paquet au format JSON :
  6018. @example
  6019. @{
  6020. "name": "hello",
  6021. "version": "2.10",
  6022. "source": "mirror://gnu/hello/hello-2.10.tar.gz",
  6023. "build-system": "gnu",
  6024. "home-page": "https://www.gnu.org/software/hello/",
  6025. "synopsis": "Hello, GNU world: An example GNU package",
  6026. "description": "GNU Hello prints a greeting.",
  6027. "license": "GPL-3.0+",
  6028. "native-inputs": ["gcc@@6"]
  6029. @}
  6030. @end example
  6031. Les noms des champs sont les mêmes que pour les enregistrements de
  6032. @code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
  6033. paquets sont fournies comme des listes JSON de chaînes de spécifications de
  6034. paquets comme @code{guile} ou @code{guile@@2.0}.
  6035. L'importateur supporte aussi une définition plus explicite des sources avec
  6036. les champs habituels pour les enregistrements @code{<origin>} :
  6037. @example
  6038. @{
  6039. @dots{}
  6040. "source": @{
  6041. "method": "url-fetch",
  6042. "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
  6043. "sha256": @{
  6044. "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
  6045. @}
  6046. @}
  6047. @dots{}
  6048. @}
  6049. @end example
  6050. La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
  6051. et renvoie une expression de paquet :
  6052. @example
  6053. guix import json hello.json
  6054. @end example
  6055. @item nix
  6056. Importe les métadonnées d'une copie locale des source de
  6057. @uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
  6058. repose sur la commande @command{nix-instantiate} de
  6059. @uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
  6060. Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
  6061. Bash. Cette commande n'importe que la structure de haut-niveau du paquet
  6062. qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
  6063. de base de la définition d'un paquet.
  6064. Lorsque vous importez un paquet GNU, le synopsis et la description sont
  6065. replacés par la version canonique en amont.
  6066. Normalement, vous devrez d'abord faire :
  6067. @example
  6068. export NIX_REMOTE=daemon
  6069. @end example
  6070. @noindent
  6071. pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
  6072. de Nix.
  6073. Par exemple, la commande ci-dessous importe la définition du paquet de
  6074. LibreOffice (plus précisément, elle importe la définition du paquet lié à
  6075. l'attribut de plus haut-niveau @code{libreoffice}) :
  6076. @example
  6077. guix import nix ~/path/to/nixpkgs libreoffice
  6078. @end example
  6079. @item hackage
  6080. @cindex hackage
  6081. Importe les métadonnées de l'archive de paquets centrale de la communauté
  6082. Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
  6083. sont récupérées depuis les fichiers Cabal et incluent toutes les
  6084. informations utiles, dont les dépendances des paquets.
  6085. Les options spécifiques sont :
  6086. @table @code
  6087. @item --stdin
  6088. @itemx -s
  6089. Lit un fichier Cabal depuis l'entrée standard.
  6090. @item --no-test-dependencies
  6091. @itemx -t
  6092. N'inclut pas les dépendances requises uniquement par les suites de tests.
  6093. @item --cabal-environment=@var{alist}
  6094. @itemx -e @var{alist}
  6095. @var{alist} est une alist Scheme qui définie l'environnement dans lequel les
  6096. conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
  6097. @code{arch}, @code{impl} et une représentation sous forme de chaîne de
  6098. caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
  6099. le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
  6100. doivent se conformer avec la définition du format de fichiers Cabal. La
  6101. valeur par défaut associée avec les clefs @code{os}, @code{arch} et
  6102. @code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
  6103. @item --recursive
  6104. @itemx -r
  6105. Traverse le graphe des dépendances du paquet amont donné et génère les
  6106. expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
  6107. @end table
  6108. La commande ci-dessous importe les métadonnées de la dernière version du
  6109. paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
  6110. spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
  6111. :
  6112. @example
  6113. guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
  6114. @end example
  6115. Une version spécifique du paquet peut éventuellement être spécifiée en
  6116. faisant suivre le nom du paquet par un arobase et un numéro de version comme
  6117. dans l'exemple suivant :
  6118. @example
  6119. guix import hackage mtl@@2.1.3.1
  6120. @end example
  6121. @item stackage
  6122. @cindex stackage
  6123. L'importateur @code{stackage} est une enveloppe autour de l'importateur
  6124. @code{hackage}. Il prend un nom de paquet, recherche la version incluse
  6125. dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
  6126. Stackage} et utilise l'importateur @code{hackage} pour récupérer les
  6127. métadonnées. Remarquez que c'est à vous de choisir une version LTS
  6128. compatible avec le compilateur GHC utilisé par Guix.
  6129. Les options spécifiques sont :
  6130. @table @code
  6131. @item --no-test-dependencies
  6132. @itemx -t
  6133. N'inclut pas les dépendances requises uniquement par les suites de tests.
  6134. @item --lts-version=@var{version}
  6135. @itemx -l @var{version}
  6136. @var{version} est la version LTS désirée. Si elle est omise, la dernière
  6137. version est utilisée.
  6138. @item --recursive
  6139. @itemx -r
  6140. Traverse le graphe des dépendances du paquet amont donné et génère les
  6141. expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
  6142. @end table
  6143. La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
  6144. inclus dans la version LTS 7.18 de Stackage :
  6145. @example
  6146. guix import stackage --lts-version=7.18 HTTP
  6147. @end example
  6148. @item elpa
  6149. @cindex elpa
  6150. Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
  6151. Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
  6152. Les options spécifiques sont :
  6153. @table @code
  6154. @item --archive=@var{repo}
  6155. @itemx -a @var{repo}
  6156. @var{repo} identifie le dépôt d'archive depuis lequel récupérer les
  6157. informations. Actuellement les dépôts supportés et leurs identifiants sont
  6158. :
  6159. @itemize -
  6160. @item
  6161. @uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
  6162. l'identifiant @code{gnu}. C'est la valeur par défaut.
  6163. Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
  6164. porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
  6165. similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
  6166. package signatures,, emacs, The GNU Emacs Manual}).
  6167. @item
  6168. @uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
  6169. sélectionner avec l'identifiant @code{melpa-stable}.
  6170. @item
  6171. @uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
  6172. l'identifiant @code{melpa}.
  6173. @end itemize
  6174. @item --recursive
  6175. @itemx -r
  6176. Traverse le graphe des dépendances du paquet amont donné et génère les
  6177. expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
  6178. @end table
  6179. @item crate
  6180. @cindex crate
  6181. Importe les métadonnées du répertoire des paquets Rust
  6182. @uref{https://crates.io, crates.io}.
  6183. @item opam
  6184. @cindex OPAM
  6185. @cindex OCaml
  6186. Importe les métadonnées du répertoire de paquets
  6187. @uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml
  6188. @end table
  6189. La structure du code de @command{guix import} est modulaire. Il serait
  6190. utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
  6191. aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
  6192. @node Invoquer guix refresh
  6193. @section Invoquer @command{guix refresh}
  6194. @cindex @command{guix refresh}
  6195. L'audience première de la commande @command{guix refresh} est l'ensemble des
  6196. développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
  6197. les paquets fournis par la distribution qui sont en retard par rapport aux
  6198. dernières versions disponibles en amont, comme ceci :
  6199. @example
  6200. $ guix refresh
  6201. gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
  6202. gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
  6203. @end example
  6204. Autrement, on peut spécifier les paquets à considérer, auquel cas un
  6205. avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
  6206. mise à jour associé :
  6207. @example
  6208. $ guix refresh coreutils guile guile-ssh
  6209. gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
  6210. gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
  6211. @end example
  6212. @command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
  6213. le numéro de version le plus élevé parmi les versions publiées. La commande
  6214. sait comment mettre à jour certains types de paquets : les paquets GNU, les
  6215. paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
  6216. Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
  6217. déterminer si une nouvelle version est disponible en amont. Cependant, le
  6218. mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
  6219. une nouvelle méthode !
  6220. Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
  6221. @command{guix refresh} a besoin d'un peu d'aide. La plupart des
  6222. gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
  6223. les définitions de paquets, ce qui peut être utilisé à cette fin :
  6224. @example
  6225. (define-public network-manager
  6226. (package
  6227. (name "network-manager")
  6228. ;; @dots{}
  6229. (properties '((upstream-name . "NetworkManager")))))
  6230. @end example
  6231. Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
  6232. source de la distribution pour mettre à jour le numéro de version et le hash
  6233. de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
  6234. Cela est effectué en téléchargeant la dernière version de l'archive des
  6235. sources de chaque paquet et des signatures associées, en authentifiant
  6236. l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
  6237. calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
  6238. manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
  6239. récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
  6240. clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
  6241. refresh} rapporte une erreur.
  6242. Les options suivantes sont supportées :
  6243. @table @code
  6244. @item --expression=@var{expr}
  6245. @itemx -e @var{expr}
  6246. Considérer le paquet évalué par @var{expr}.
  6247. C'est utile pour précisément se référer à un paquet, comme dans cet exemple
  6248. :
  6249. @example
  6250. guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
  6251. @end example
  6252. Cette commande liste les paquets qui dépendent de la libc « finale » (en
  6253. gros tous les paquets).
  6254. @item --update
  6255. @itemx -u
  6256. Met à jour les fichiers source de la distribution (les recettes de paquets)
  6257. en place. Cette option est généralement utilisée depuis une copie du dépôt
  6258. git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
  6259. @example
  6260. $ ./pre-inst-env guix refresh -s non-core -u
  6261. @end example
  6262. @xref{Définition des paquets}, pour plus d'information sur les définitions des
  6263. paquets.
  6264. @item --select=[@var{subset}]
  6265. @itemx -s @var{subset}
  6266. Choisi tous les paquets dans @var{subset}, entre @code{core} et
  6267. @code{non-core}.
  6268. Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
  6269. distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
  6270. tout le rest ». Cela comprend GCC, libc, Binutils, Bash, etc.
  6271. Habituellement, changer l'un de ces paquets dans la distribution implique de
  6272. reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
  6273. pour les utilisateurs, en terme de temps de compilation et de bande passante
  6274. utilisés pour effectuer la mise à jour.
  6275. Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
  6276. habituellement utile dans les cas où une mise à jour des paquets du cœur
  6277. serait dérangeante.
  6278. @item --manifest=@var{fichier}
  6279. @itemx -m @var{fichier}
  6280. Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
  6281. vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
  6282. jour.
  6283. @item --type=@var{updater}
  6284. @itemx -t @var{updater}
  6285. Chois uniquement les paquets pris en charge par @var{updater}
  6286. (éventuellement une liste de gestionnaires de mise à jour séparés par des
  6287. virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
  6288. :
  6289. @table @code
  6290. @item gnu
  6291. le gestionnaire de mise à jour pour les paquets GNU ;
  6292. @item gnome
  6293. le gestionnaire de mise à jour pour les paquets GNOME ;
  6294. @item kde
  6295. le gestionnaire de mise à jour pour les paquets KDE ;
  6296. @item xorg
  6297. le gestionnaire de mise à jour pour les paquets X.org ;
  6298. @item kernel.org
  6299. le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
  6300. @item elpa
  6301. le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
  6302. ELPA} ;
  6303. @item cran
  6304. le gestionnaire de mise à jour pour les paquets
  6305. @uref{https://cran.r-project.org/, CRAN} ;
  6306. @item bioconductor
  6307. le gestionnaire de mise à jour pour les paquets
  6308. @uref{https://www.bioconductor.org/, Bioconductor} ;
  6309. @item cpan
  6310. le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
  6311. CPAN} ;
  6312. @item pypi
  6313. le gestionnaire de mise à jour pour les paquets
  6314. @uref{https://pypi.python.org, PyPI} ;
  6315. @item gem
  6316. le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
  6317. RubyGems} ;
  6318. @item github
  6319. le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
  6320. GitHub} ;
  6321. @item hackage
  6322. le gestionnaire de mise à jour pour les paquets
  6323. @uref{https://hackage.haskell.org, Hackage} ;
  6324. @item stackage
  6325. le gestionnaire de mise à jour pour les paquets
  6326. @uref{https://www.stackage.org, Stackage} ;
  6327. @item crate
  6328. le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
  6329. Crates} ;
  6330. @end table
  6331. Par exemple, la commande suivante ne vérifie que les mises à jour des
  6332. paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
  6333. @example
  6334. $ guix refresh --type=elpa,cran
  6335. gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
  6336. gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
  6337. @end example
  6338. @end table
  6339. En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
  6340. paquets, comme dans cet exemple :
  6341. @example
  6342. $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
  6343. @end example
  6344. @noindent
  6345. La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
  6346. @code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
  6347. Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
  6348. de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
  6349. vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
  6350. avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
  6351. @table @code
  6352. @item --list-updaters
  6353. @itemx -L
  6354. Liste les gestionnaires de mise à jour et quitte (voir l'option
  6355. @option{--type} plus haut).
  6356. Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
  6357. la fin, affiche le pourcentage de paquets couverts par tous les
  6358. gestionnaires.
  6359. @item --list-dependent
  6360. @itemx -l
  6361. Liste les paquets de plus haut-niveau qui devraient être reconstruits après
  6362. la mise à jour d'un ou plusieurs paquets.
  6363. @xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
  6364. graph}}, pour des informations sur la manière de visualiser la liste des
  6365. paquets dépendant d'un autre.
  6366. @end table
  6367. Soyez conscients que l'option @code{--list-dependent} ne fait
  6368. @emph{qu'approximer} les reconstructions qui seraient requises par une mise
  6369. à jour. Plus de reconstructions pourraient être requises dans certaines
  6370. circonstances.
  6371. @example
  6372. $ guix refresh --list-dependent flex
  6373. Building the following 120 packages would ensure 213 dependent packages are rebuilt:
  6374. hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
  6375. @end example
  6376. La commande ci-dessus liste un ensemble de paquets qui peuvent être
  6377. construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
  6378. Les options suivante peuvent être utilisées pour personnaliser les
  6379. opérations avec GnuPG :
  6380. @table @code
  6381. @item --gpg=@var{commande}
  6382. Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
  6383. recherchée dans @code{PATH}.
  6384. @item --keyring=@var{fichier}
  6385. Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
  6386. doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
  6387. un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
  6388. manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
  6389. Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
  6390. fichiers keybox).
  6391. Lorsque cette option est omise, @command{guix refresh} utilise
  6392. @file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
  6393. clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
  6394. clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
  6395. (voir @option{--key-download} plus bas).
  6396. Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
  6397. fichier keybox avec une commande telle que :
  6398. @example
  6399. gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
  6400. @end example
  6401. De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
  6402. comme ceci :
  6403. @example
  6404. gpg --no-default-keyring --keyring mykeyring.kbx \
  6405. --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
  6406. @end example
  6407. @ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
  6408. Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
  6409. GPG.
  6410. @item --key-download=@var{politique}
  6411. Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
  6412. l'une des suivantes :
  6413. @table @code
  6414. @item always
  6415. Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
  6416. ajouter au porte-clefs de l'utilisateur.
  6417. @item never
  6418. Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
  6419. place.
  6420. @item interactive
  6421. Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
  6422. à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
  6423. par défaut.
  6424. @end table
  6425. @item --key-server=@var{host}
  6426. Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
  6427. clef publique.
  6428. @end table
  6429. The @code{github} updater uses the @uref{https://developer.github.com/v3/,
  6430. GitHub API} to query for new releases. When used repeatedly e.g.@: when
  6431. refreshing all packages, GitHub will eventually refuse to answer any further
  6432. API requests. By default 60 API requests per hour are allowed, and a full
  6433. refresh on all GitHub packages in Guix requires more than this.
  6434. Authentication with GitHub through the use of an API token alleviates these
  6435. limits. To use an API token, set the environment variable
  6436. @code{GUIX_GITHUB_TOKEN} to a token procured from
  6437. @uref{https://github.com/settings/tokens} or otherwise.
  6438. @node Invoquer guix lint
  6439. @section Invoquer @command{guix lint}
  6440. @cindex @command{guix lint}
  6441. @cindex paquets, chercher des erreurs
  6442. La commande @command{guix lint} est conçue pour aider les développeurs à
  6443. éviter des erreurs commune et à utiliser un style cohérent lors de
  6444. l'écriture de recettes de paquets. Elle lance des vérifications sur un
  6445. ensemble de paquets donnés pour trouver des erreurs communes dans leur
  6446. définition. Les @dfn{vérifieurs} disponibles comprennent (voir
  6447. @code{--list-checkers} pour une liste complète) :
  6448. @table @code
  6449. @item synopsis
  6450. @itemx description
  6451. Vérifie certaines règles typographiques et stylistiques dans les
  6452. descriptions et les synopsis.
  6453. @item inputs-should-be-native
  6454. Identifie les entrées qui devraient sans doute plutôt être des entrées
  6455. natives.
  6456. @item source
  6457. @itemx home-page
  6458. @itemx mirror-url
  6459. @itemx source-file-name
  6460. Probe @code{home-page} and @code{source} URLs and report those that are
  6461. invalid. Suggest a @code{mirror://} URL when applicable. Check that the
  6462. source file name is meaningful, e.g.@: is not just a version number or
  6463. ``git-checkout'', without a declared @code{file-name} (@pxref{Référence d'origine}).
  6464. @item cve
  6465. @cindex vulnérabilités
  6466. @cindex CVE, Common Vulnerabilities and Exposures
  6467. Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
  6468. (Common Vulnerabilities and Exposures) de l'année en cours et des années
  6469. précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
  6470. NIST américain}.
  6471. Pour voir les informations sur une vulnérabilité en particulier, visitez les
  6472. pages :
  6473. @itemize
  6474. @item
  6475. @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
  6476. @item
  6477. @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
  6478. @end itemize
  6479. @noindent
  6480. où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
  6481. @code{CVE-2015-7554}.
  6482. Les développeurs de paquets peuvent spécifier dans les recettes des paquets
  6483. le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
  6484. et la version du paquet s'ils diffèrent du nom et de la version que Guix
  6485. utilise, comme dans cet exemple :
  6486. @example
  6487. (package
  6488. (name "grub")
  6489. ;; @dots{}
  6490. ;; CPE calls this package "grub2".
  6491. (properties '((cpe-name . "grub2")
  6492. (cpe-version . "2.3")))
  6493. @end example
  6494. @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
  6495. Certaines entrées dans la base de données CVE ne spécifient pas la version
  6496. du paquet auquel elles s'appliquent et lui restera donc attachée pour
  6497. toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
  6498. qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
  6499. @example
  6500. (package
  6501. (name "t1lib")
  6502. ;; @dots{}
  6503. ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
  6504. (properties `((lint-hidden-cve . ("CVE-2011-0433"
  6505. "CVE-2011-1553"
  6506. "CVE-2011-1554"
  6507. "CVE-2011-5244")))))
  6508. @end example
  6509. @item formatting
  6510. Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
  6511. source évident : des espaces en fin de ligne, des tabulations, etc.
  6512. @end table
  6513. La syntaxe générale est :
  6514. @example
  6515. guix lint @var{options} @var{package}@dots{}
  6516. @end example
  6517. Si aucun paquet n'est donné par la ligne de commande, tous les paquets
  6518. seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
  6519. options suivantes :
  6520. @table @code
  6521. @item --list-checkers
  6522. @itemx -l
  6523. Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
  6524. paquets puis quitte.
  6525. @item --checkers
  6526. @itemx -c
  6527. N'active que les vérificateurs spécifiés dans une liste de noms séparés par
  6528. des virgules parmi la liste renvoyée par @code{--list-checkers}.
  6529. @end table
  6530. @node Invoquer guix size
  6531. @section Invoquer @command{guix size}
  6532. @cindex taille
  6533. @cindex paquet, taille
  6534. @cindex closure
  6535. @cindex @command{guix size}
  6536. La commande @command{guix size} aide les développeurs à dresser un profil de
  6537. l'utilisation du disque que font les paquets. C'est facile de négliger
  6538. l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
  6539. l'utilisation d'une sortie unique pour un paquet qui pourrait être
  6540. facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
  6541. problèmes que @command{guix size} peut typiquement mettre en valeur.
  6542. On peut passer un ou plusieurs spécifications de paquets à la commande,
  6543. comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
  6544. dépôt. Regardez cet exemple :
  6545. @example
  6546. $ guix size coreutils
  6547. store item total self
  6548. /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
  6549. /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
  6550. /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
  6551. /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
  6552. /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
  6553. /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
  6554. /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
  6555. /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
  6556. total: 78.9 MiB
  6557. @end example
  6558. @cindex closure
  6559. Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de
  6560. Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
  6561. comme ce qui serait renvoyé par :
  6562. @example
  6563. $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
  6564. @end example
  6565. Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
  6566. première colonne, nommée « total », montre la taille en mébioctet (Mio) de
  6567. la cloture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
  6568. taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
  6569. la taille de l'élément lui-même. La dernière colonne montre le ration de la
  6570. taille de l'élément lui-même par rapport à celle de tous les éléments
  6571. montrés.
  6572. Dans cet exemple, on voit que la cloture de Coreutils pèse 79@tie{}Mio, dont
  6573. la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
  6574. n'est pas un problème en soit que la libc et les bibliothèques de GCC
  6575. représentent une grande part de la cloture parce qu'elles sont toujours
  6576. disponibles sur le système de toute façon).
  6577. Lorsque les paquets passés à @command{guix size} sont disponibles dans le
  6578. dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
  6579. @emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
  6580. @code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
  6581. informations sur les greffes}, @command{guix size} demande au démon de
  6582. déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
  6583. @command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
  6584. Coreutils}).
  6585. Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
  6586. size} rapporte les informations en se basant sur les substituts disponibles
  6587. (@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
  6588. éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
  6589. distance.
  6590. Vous pouvez aussi spécifier plusieurs noms de paquets :
  6591. @example
  6592. $ guix size coreutils grep sed bash
  6593. store item total self
  6594. /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
  6595. /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
  6596. /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
  6597. /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
  6598. @dots{}
  6599. total: 102.3 MiB
  6600. @end example
  6601. @noindent
  6602. Dans cet exemple on voit que la combinaison des quatre paquets prent
  6603. 102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures
  6604. puisqu'ils ont beaucoup de dépendances en commun.
  6605. Les options disponibles sont :
  6606. @table @option
  6607. @item --substitute-urls=@var{urls}
  6608. Utilise les informations de substituts de @var{urls}.
  6609. @xref{client-substitute-urls, the same option for @code{guix build}}.
  6610. @item --sort=@var{clef}
  6611. Trie les lignes en fonction de la @var{clef}, l'une des optinos suivantes :
  6612. @table @code
  6613. @item self
  6614. la taille de chaque élément (par défaut) ;
  6615. @item closure
  6616. la taille totale de la cloture de l'élémente.
  6617. @end table
  6618. @item --map-file=@var{fichier}
  6619. Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
  6620. Pour l'exemple au-dessus, le schéma ressemble à ceci :
  6621. @image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
  6622. Coreutils produit par @command{guix size}}
  6623. Cette option requiert l'installation de
  6624. @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
  6625. soit visible dans le chemin de recherche des modules Guile. Lorsque ce
  6626. n'est pas le cas, @command{guix size} plante en essayant de le charger.
  6627. @item --system=@var{système}
  6628. @itemx -s @var{système}
  6629. Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
  6630. @end table
  6631. @node Invoquer guix graph
  6632. @section Invoque @command{guix graph}
  6633. @cindex DAG
  6634. @cindex @command{guix graph}
  6635. @cindex dépendances des paquets
  6636. Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
  6637. un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
  6638. une représentation mentale du DAG d'un paquet, donc la commande
  6639. @command{guix graph} fournit une représentation visuelle du DAG. Par
  6640. défaut, @command{guix graph} émet un représentation du DAG dans le format
  6641. d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
  6642. puisse être passée directement à la commande @command{dot} de Graphviz.
  6643. Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
  6644. un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
  6645. @uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
  6646. construire un graphe dans une base de donnée de graphes supportant le
  6647. langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
  6648. syntaxe générale est :
  6649. @example
  6650. guix graph @var{options} @var{paquet}@dots{}
  6651. @end example
  6652. Par exemple, la commande suivante génère un fichier PDF représentant le DAG
  6653. du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
  6654. compilation :
  6655. @example
  6656. guix graph coreutils | dot -Tpdf > dag.pdf
  6657. @end example
  6658. La sortie ressemble à ceci :
  6659. @image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
  6660. Joli petit graphe, non ?
  6661. Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
  6662. graphe des objets paquets, en omettant les entrées implicites comme GCC,
  6663. libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
  6664. parfois on veut voir plus de détails. @command{guix graph} supporte
  6665. plusieurs types de graphes, qui vous permettent de choisir le niveau de
  6666. détails :
  6667. @table @code
  6668. @item package
  6669. C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
  6670. des objets paquets, sans les dépendances implicites. C'est concis, mais
  6671. omet pas mal de détails.
  6672. @item reverse-package
  6673. Cela montre le DAG @emph{inversé} des paquets. Par exemple :
  6674. @example
  6675. guix graph --type=reverse-package ocaml
  6676. @end example
  6677. ...@: yields the graph of packages that depend on OCaml.
  6678. Remarquez que pour les paquets du cœur de la distribution, cela crée des
  6679. graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
  6680. dépendent d'un paquet donnés, utilisez @command{guix refresh
  6681. --list-dependent} (@pxref{Invoquer guix refresh,
  6682. @option{--list-dependent}}).
  6683. @item bag-emerged
  6684. C'est le DAG du paquet, @emph{avec} les entrées implicites.
  6685. Par exemple, la commande suivante :
  6686. @example
  6687. guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
  6688. @end example
  6689. ...@: yields this bigger graph:
  6690. @image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
  6691. GNU Coreutils}
  6692. En bas du graphe, on voit toutes les entrées implicites de
  6693. @var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
  6694. Maintenant, remarquez que les dépendances de ces entrées implicites —
  6695. c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
  6696. sont pas affichées, pour rester concis.
  6697. @item bag
  6698. Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
  6699. bootstrap.
  6700. @item bag-with-origins
  6701. Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
  6702. @item dérivation
  6703. C'est la représentation lu plus détaillée : elle montre le DAG des
  6704. dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
  6705. représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
  6706. scripts de construction, les correctifs, les modules Guile, etc.
  6707. Pour ce type de graphe, il est aussi possible de passer un nom de fichier
  6708. @file{.drv} à la place d'un nom de paquet, comme dans :
  6709. @example
  6710. guix graph -t derivation `guix system build -d my-config.scm`
  6711. @end example
  6712. @item module
  6713. C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
  6714. exemple, la commande suivante montre le graphe des modules de paquets qui
  6715. définissent le paquet @code{guile} :
  6716. @example
  6717. guix graph -t module guile | dot -Tpdf > module-graph.pdf
  6718. @end example
  6719. @end table
  6720. Tous les types ci-dessus correspondent aux @emph{dépendances à la
  6721. construction}. Le type de graphe suivant représente les @emph{dépendances à
  6722. l'exécution} :
  6723. @table @code
  6724. @item references
  6725. C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
  6726. renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
  6727. Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
  6728. @command{guix graph} essayera d'obtenir les informations sur les dépendances
  6729. à travers les substituts.
  6730. Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
  6731. paquet. Par exemple, la commande ci-dessous produit le graphe des
  6732. références de votre profile (qui peut être gros !) :
  6733. @example
  6734. guix graph -t references `readlink -f ~/.guix-profile`
  6735. @end example
  6736. @item referrers
  6737. C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
  6738. par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
  6739. Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
  6740. supposons que Inkscape est actuellement disponible dans 10 profils sur votre
  6741. machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
  6742. la racine est Inkscape avec 10 profils qui y sont liés.
  6743. Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
  6744. glané.
  6745. @end table
  6746. Les options disponibles sont les suivante :
  6747. @table @option
  6748. @item --type=@var{type}
  6749. @itemx -t @var{type}
  6750. Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
  6751. des types au-dessus.
  6752. @item --list-types
  6753. Liste les types de graphes supportés.
  6754. @item --backend=@var{moteur}
  6755. @itemx -b @var{moteur}
  6756. Produit un graphe avec le @var{moteur} choisi.
  6757. @item --list-backends
  6758. Liste les moteurs de graphes supportés.
  6759. Actuellement les moteurs disponibles sont Graphviz et d3.js.
  6760. @item --expression=@var{expr}
  6761. @itemx -e @var{expr}
  6762. Considérer le paquet évalué par @var{expr}.
  6763. C'est utile pour précisément se référer à un paquet, comme dans cet exemple
  6764. :
  6765. @example
  6766. guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
  6767. @end example
  6768. @item --system=@var{système}
  6769. @itemx -s @var{système}
  6770. Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
  6771. Le graphe de dépendance des paquets est la plupart du temps indépendant de
  6772. l'architecture, mais il y a quelques parties qui dépendent de l'architecture
  6773. que cette option vous permet de visualiser.
  6774. @end table
  6775. @node Invoquer guix environment
  6776. @section Invoquer @command{guix environment}
  6777. @cindex environnements de construction reproductibles
  6778. @cindex environnement de développement
  6779. @cindex @command{guix environment}
  6780. @cindex environnement de construction de paquets
  6781. Le but de @command{guix environment} est d'assister les hackers dans la
  6782. création d'environnements de développement reproductibles sans polluer leur
  6783. profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
  6784. paquets, construit leurs entrées et crée un environnement shell pour pouvoir
  6785. les utiliser.
  6786. La syntaxe générale est :
  6787. @example
  6788. guix environment @var{options} @var{paquet}@dots{}
  6789. @end example
  6790. L'exemple suivant crée un nouveau shell préparé pour le développement de
  6791. GNU@tie{}Guile :
  6792. @example
  6793. guix environment guile
  6794. @end example
  6795. Si les dépendances requises ne sont pas déjà construites, @command{guix
  6796. environment} les construit automatiquement. L'environnement du nouveau
  6797. shell est une version améliorée de l'environnement dans lequel @command{guix
  6798. environment} a été lancé. Il contient les chemins de recherche nécessaires
  6799. à la construction du paquet donné en plus des variables d'environnement
  6800. existantes. Pour créer un environnement « pur », dans lequel les variables
  6801. d'environnement de départ ont été nettoyées, utilisez l'option
  6802. @code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
  6803. supplémentaires dans les variables comme @code{PATH} dans leur
  6804. @file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
  6805. Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
  6806. variables d'environnement. C'est une erreur de définir ces variables
  6807. d'environnement dans @file{.bashrc} ; à la place, elles devraient être
  6808. définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
  6809. de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
  6810. Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
  6811. @vindex GUIX_ENVIRONMENT
  6812. @command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
  6813. le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
  6814. environnement. Cela permet aux utilisateur, disons, de définir un prompt
  6815. spécifique pour les environnement de développement dans leur @file{.bashrc}
  6816. (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
  6817. @example
  6818. if [ -n "$GUIX_ENVIRONMENT" ]
  6819. then
  6820. export PS1="\u@@\h \w [dev]\$ "
  6821. fi
  6822. @end example
  6823. @noindent
  6824. ...@: or to browse the profile:
  6825. @example
  6826. $ ls "$GUIX_ENVIRONMENT/bin"
  6827. @end example
  6828. En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
  6829. des paquets données est utilisée. Par exemple, la commande ci-dessous crée
  6830. un shell où toutes les dépendances de Guile et Emacs sont disponibles :
  6831. @example
  6832. guix environment guile emacs
  6833. @end example
  6834. Parfois, une session shell interactive est inutile. On peut invoquer une
  6835. commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
  6836. du reste des arguments :
  6837. @example
  6838. guix environment guile -- make -j4
  6839. @end example
  6840. Dans d'autres situations, il est plus pratique de spécifier la liste des
  6841. paquets requis dans l'environnement. Par exemple, la commande suivante
  6842. lance @command{python} dans un environnement contenant Python@tie{}2.7 et
  6843. NumPy :
  6844. @example
  6845. guix environment --ad-hoc python2-numpy python-2.7 -- python
  6846. @end example
  6847. En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
  6848. supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
  6849. construction, mais qui sont utiles au développement tout de même. À cause
  6850. de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
  6851. apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
  6852. les dépendances seront ajoutées à l'environnement. Les paquets qui
  6853. apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
  6854. ajouter à l'environnement directement. Par exemple, la commande suivante
  6855. crée un environnement de développement pour Guix avec les paquets Git et
  6856. strace en plus :
  6857. @example
  6858. guix environment guix --ad-hoc git strace
  6859. @end example
  6860. Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
  6861. une pureté et une reproductibilité maximale. En particulier, lorsque vous
  6862. utilisez Guix sur une distribution hôte qui n'est pas GuixSD, il est
  6863. souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
  6864. système depuis les environnements de développement. Par exemple, la
  6865. commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
  6866. et le répertoire de travail actuel sont montés :
  6867. @example
  6868. guix environment --ad-hoc --container guile -- guile
  6869. @end example
  6870. @quotation Remarque
  6871. L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
  6872. @end quotation
  6873. Les options disponibles sont résumées ci-dessous.
  6874. @table @code
  6875. @item --root=@var{fichier}
  6876. @itemx -r @var{fichier}
  6877. @cindex environnement persistent
  6878. @cindex racine du ramasse-miettes, pour les environnements
  6879. Fait de @var{fichier} un lien symbolique vers le profil de cet
  6880. environnement, et l'enregistre comme une racine du ramasse-miettes.
  6881. C'est utile si vous souhaitez protéger votre environnement du
  6882. ramasse-miettes, pour le rendre « persistent ».
  6883. Lorsque cette option est omise, l'environnement n'est protégé du
  6884. ramasse-miettes que le temps de la session @command{guix environment}. Cela
  6885. signifie que la prochaine fois que vous créerez le même environnement, vous
  6886. pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
  6887. @item --expression=@var{expr}
  6888. @itemx -e @var{expr}
  6889. Crée un environnement pour le paquet ou la liste de paquets en lesquels
  6890. s'évalue @var{expr}.
  6891. Par exemple, lancer :
  6892. @example
  6893. guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
  6894. @end example
  6895. démarre un shell avec l'environnement pour cette variante spécifique du
  6896. paquet PETSc.
  6897. Lancer :
  6898. @example
  6899. guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
  6900. @end example
  6901. démarre un shell où tous les paquets de base de GuixSD sont disponibles.
  6902. Les commande au-dessus n'utilisent que les sorties par défaut des paquets
  6903. donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
  6904. @example
  6905. guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
  6906. @end example
  6907. @item --load=@var{fichier}
  6908. @itemx -l @var{fichier}
  6909. Crée un environnement pour le paquet ou la liste de paquets en lesquels
  6910. @var{fichier} s'évalue.
  6911. Par exemple, @var{fichier} peut contenir une définition comme celle-ci
  6912. (@pxref{Définition des paquets}) :
  6913. @example
  6914. @verbatiminclude environment-gdb.scm
  6915. @end example
  6916. @item --manifest=@var{fichier}
  6917. @itemx -m @var{fichier}
  6918. Crée un environnement pour les paquets contenus dans l'objet manifeste
  6919. renvoyé par le code Scheme dans @var{fichier}.
  6920. C'est similaire à l'option de même nom de @command{guix package}
  6921. (@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
  6922. manifestes.
  6923. @item --ad-hoc
  6924. Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
  6925. si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
  6926. Cette option est utile pour créer un environnement rapidement sans avoir à
  6927. écrire une expression de paquet contenant les entrées désirées.
  6928. Par exemple la commande :
  6929. @example
  6930. guix environment --ad-hoc guile guile-sdl -- guile
  6931. @end example
  6932. lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
  6933. disponibles.
  6934. Remarquez que cet exemple demande implicitement la sortie par défaut de
  6935. @code{guile} et @code{guile-sdl}, mais il est possible de demander une
  6936. sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
  6937. de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
  6938. Cette option peut être composée avec le comportement par défaut de
  6939. @command{guix environment}. Les paquets qui apparaissent avant
  6940. @code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
  6941. seront ajoutées à l'environnement, le comportement par défaut. Les paquets
  6942. qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
  6943. ajouter à l'environnement directement.
  6944. @item --pure
  6945. Nettoie les variables d'environnement existantes lors de la construction du
  6946. nouvel environnement. Cela a pour effet de créer un environnement dans
  6947. lequel les chemins de recherche ne contiennent que des entrées de paquets.
  6948. @item --search-paths
  6949. Affiche les définitions des variables d'environnement qui composent
  6950. l'environnement.
  6951. @item --system=@var{système}
  6952. @itemx -s @var{système}
  6953. Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
  6954. @item --container
  6955. @itemx -C
  6956. @cindex conteneur
  6957. Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
  6958. actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
  6959. de le changer avec @code{--user}, un répertoire personnel fictif est créé
  6960. pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwod} est
  6961. configuré en conséquence. Le processus est lancé en tant que l'utilisateur
  6962. actuel en dehors du conteneur, mais a les privilèges root dans le contexte
  6963. du conteneur.
  6964. @item --network
  6965. @itemx -N
  6966. Pour les conteneurs, partage l'espace de nom du réseau avec le système
  6967. hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
  6968. de boucle locale.
  6969. @item --link-profile
  6970. @itemx -P
  6971. Pour les conteneurs, lie le profil de l'environnement à
  6972. @file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
  6973. commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
  6974. conteneur. La liaison échouera et annulera l'environnement si le répertoire
  6975. existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
  6976. invoqué dans le répertoire personnel de l'utilisateur.
  6977. Certains paquets sont configurés pour chercher des fichiers de configuration
  6978. et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
  6979. @code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
  6980. des polices supplémentaires.} ; @code{--link-profile} permet à ces
  6981. programmes de se comporter comme attendu dans l'environnement.
  6982. @item --user=@var{utilisateur}
  6983. @itemx -u @var{utilisateur}
  6984. Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
  6985. place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwod}
  6986. dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
  6987. personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera
  6988. copiée. @var{utilisateur} n'a pas besoin d'exister sur le système.
  6989. En plus, tous les chemins partagés ou exposés (voir @code{--share} et
  6990. @code{--expose} respectivement) dont la cible est dans le répertoire
  6991. personnel de l'utilisateur seront remontés relativement à
  6992. @file{/home/UTILISATEUR} ; cela comprend le montage automatique du
  6993. répertoire de travail actuel.
  6994. @example
  6995. # exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
  6996. cd $HOME/wd
  6997. guix environment --container --user=foo \
  6998. --expose=$HOME/test \
  6999. --expose=/tmp/target=$HOME/target
  7000. @end example
  7001. Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
  7002. chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
  7003. qu'un composant utile pour une solution d'anonymisation ou de préservation
  7004. de la vie privée — pas une solution en elle-même.
  7005. @item --expose=@var{source}[=@var{cible}]
  7006. Pour les conteneurs, expose le système de fichiers @var{source} du système
  7007. hôte comme un système de fichiers en lecture seule @var{cible} dans le
  7008. conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
  7009. comme point de montage dans le conteneur.
  7010. L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
  7011. répertoire personnel de l'utilisateur est accessible en lecture-seule via le
  7012. répertoire @file{/exchange} :
  7013. @example
  7014. guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
  7015. @end example
  7016. @item --share=@var{source}[=@var{cible}]
  7017. Pour les conteneurs, partage le système de fichiers @var{soruce} du système
  7018. hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
  7019. conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
  7020. comme point de montage dans le conteneur.
  7021. L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
  7022. répertoire personnel de l'utilisateur est accessible en lecture-écriture via
  7023. le répertoire @file{/exchange} :
  7024. @example
  7025. guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
  7026. @end example
  7027. @end table
  7028. @command{guix environment} supporte aussi toutes les options de construction
  7029. que @command{guix build} supporte (@pxref{Options de construction communes}).
  7030. @node Invoquer guix publish
  7031. @section Invoquer @command{guix publish}
  7032. @cindex @command{guix publish}
  7033. Le but de @command{guix publish} est de vous permettre de partager
  7034. facilement votre dépôt avec d'autres personnes qui peuvent ensuite
  7035. l'utiliser comme serveur de substituts (@pxref{Substituts}).
  7036. Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
  7037. à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
  7038. signifie que toutes les machines qui font tourner Guix peuvent aussi agir
  7039. comme une ferme de construction, puisque l'interface HTTP est compatible
  7040. avec Hydra, le logiciel derrière la ferme de construction
  7041. @code{hydra.gnu.org}.
  7042. Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
  7043. destinataires de vérifier leur authenticité et leur intégrité
  7044. (@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
  7045. signature du système, qui n'est lisible que par l'administrateur système, il
  7046. doit être lancé en root ; l'option @code{--user} lui fait baisser ses
  7047. privilèges le plus tôt possible.
  7048. La pair de clefs pour les signatures doit être générée avant de lancer
  7049. @command{guix publish}, avec @command{guix archive --generate-key}
  7050. (@pxref{Invoquer guix archive}).
  7051. La syntaxe générale est :
  7052. @example
  7053. guix publish @var{options}@dots{}
  7054. @end example
  7055. Lancer @command{guix publish} sans arguments supplémentaires lancera un
  7056. serveur HTTP sur le port 8080 :
  7057. @example
  7058. guix publish
  7059. @end example
  7060. Une fois qu'un serveur de publication a été autorisé (@pxref{Invoquer guix archive}), le démon peut télécharger des substituts à partir de lui :
  7061. @example
  7062. guix-daemon --substitute-urls=http://example.org:8080
  7063. @end example
  7064. Par défaut, @command{guix publish} compresse les archives à la volée quand
  7065. il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
  7066. aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
  7067. s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
  7068. @option{--cache}, qui active le cache des archives avant de les envoyer aux
  7069. clients — voir les détails plus bas. La commande @command{guix weather}
  7070. fournit un manière pratique de vérifier ce qu'un serveur fournit
  7071. (@pxref{Invoquer guix weather}).
  7072. En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
  7073. des fichiers source référencées dans les enregistrements @code{origin}
  7074. (@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
  7075. publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie
  7076. brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
  7077. format @code{nix-base32}, @pxref{Invoquer guix hash}) :
  7078. @example
  7079. http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
  7080. @end example
  7081. Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
  7082. dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
  7083. @cindex journaux de construction, publication
  7084. Les journaux de construction sont disponibles à partir des URL @code{/log}
  7085. comme ceci :
  7086. @example
  7087. http://example.org/log/gwspk@dots{}-guile-2.2.3
  7088. @end example
  7089. @noindent
  7090. Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
  7091. construction compressés, comme c'est le cas par défaut (@pxref{Invoquer guix-daemon}), les URL @code{/log} renvoient le journal compressé tel-quel,
  7092. avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
  7093. Nous recommandons de lancer @command{guix-daemon} avec
  7094. @code{--log-compression=gzip} pace que les navigateurs web les décompressent
  7095. automatiquement, ce qui n'est pas le cas avec la compression bzip2.
  7096. Les options suivantes sont disponibles :
  7097. @table @code
  7098. @item --port=@var{port}
  7099. @itemx -p @var{port}
  7100. Écoute les requêtes HTTP sur le @var{port}
  7101. @item --listen=@var{hôte}
  7102. Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
  7103. accepte les connexions de n'importe quelle interface.
  7104. @item --user=@var{utilisateur}
  7105. @itemx -u @var{utilisateur}
  7106. Charge les privilèges de @var{utilisateur} le plus vite possible —
  7107. c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
  7108. signature a été lue.
  7109. @item --compression[=@var{niveau}]
  7110. @itemx -C [@var{niveau}]
  7111. Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
  7112. zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
  7113. différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
  7114. meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
  7115. À moins que @option{--cache} ne soit utilisé, la compression se fait à la
  7116. volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
  7117. charge sur la machine qui fait tourner @command{guix publish}, c'est une
  7118. bonne idée de choisir un niveau de compression faible, de lancer
  7119. @command{guix publish} derrière un serveur de cache ou d'utiliser
  7120. @option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
  7121. @command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
  7122. réponse.
  7123. @item --cache=@var{répertoire}
  7124. @itemx -c @var{répertoire}
  7125. Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
  7126. @var{répertoire} et ne sert que les archives dans ce cache.
  7127. Lorsque cette option est omise, les archives et les métadonnées sont crées à
  7128. la volée. Cela réduit la bande passante disponible, surtout quand la
  7129. compression est activée puisqu'elle pourrait être limitée par le CPU. Un
  7130. autre inconvénient au mode par défaut est que la taille des archives n'est
  7131. pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
  7132. @code{Content-Length} à ses résponses, ce qui empêche les clients de savoir
  7133. la quantité de données à télécharger.
  7134. À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
  7135. un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
  7136. déclenche la création de l'archive — en calculant son @code{.narinfo} et en
  7137. compressant l'archive au besoin. Une fois l'archive cachée dans
  7138. @var{répertoire}, les requêtes suivantes réussissent et sont servies
  7139. directement depuis le cache, ce qui garanti que les clients ont la meilleure
  7140. bande passante possible.
  7141. Le processus de création est effectué par des threads de travail. Par
  7142. défaut, un thread par cœur du CPU est créé, mais cela peut être
  7143. personnalisé. Voir @option{--workers} plus bas.
  7144. Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
  7145. automatiquement supprimées lorsqu'elles expirent.
  7146. @item --workers=@var{N}
  7147. Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
  7148. thread de travail pour créer les archives.
  7149. @item --ttl=@var{ttl}
  7150. Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
  7151. vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
  7152. signifie 5 jours, @code{1m} signifie un mois, etc.
  7153. Cela permet au Guix de l'utilisateur de garder les informations en cache
  7154. pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
  7155. pas lui-même que les éléments du dépôt qu'il fournit seront toujours
  7156. disponible pendant la durée @var{ttl}.
  7157. En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
  7158. n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
  7159. dans le dépôt peuvent être supprimées.
  7160. @item --nar-path=@var{chemin}
  7161. Utilise @var{chemin} comme préfixe des URL de fichier « nar »
  7162. (@pxref{Invoquer guix archive, normalized archives}).
  7163. Par défaut, les nars sont présents à l'URL comme
  7164. @code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
  7165. changer la partie @code{/nar} en @var{chemin}.
  7166. @item --public-key=@var{fichier}
  7167. @itemx --private-key=@var{fichier}
  7168. Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
  7169. signer les éléments avant de les publier.
  7170. Les fichiers doivent correspondre à la même pair de clefs (la clef privée
  7171. est utilisée pour signer et la clef publique est seulement ajouté aux
  7172. métadonnées de la signature). Ils doivent contenir les clefs dans le format
  7173. s-expression canonique produit par @command{guix archive --generate-key}
  7174. (@pxref{Invoquer guix archive}). Par défaut,
  7175. @file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
  7176. utilisés.
  7177. @item --repl[=@var{port}]
  7178. @itemx -r [@var{port}]
  7179. Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
  7180. Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
  7181. pour déboguer un serveur @command{guix publish} qui tourne.
  7182. @end table
  7183. Activer @command{guix publish} sur un système GuixSD est vraiment une seule
  7184. ligne : instantiez simplement un service @code{guix-publish-service-type}
  7185. dans le champs @code{services} de votre déclaration @code{operating-system}
  7186. (@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
  7187. Si vous avez installé Guix sur une « distro extérieure », suivez ces
  7188. instructions :
  7189. @itemize
  7190. @item
  7191. Si votre distro hôte utilise le système d'init systemd :
  7192. @example
  7193. # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
  7194. /etc/systemd/system/
  7195. # systemctl start guix-publish && systemctl enable guix-publish
  7196. @end example
  7197. @item
  7198. Si votre distribution hôte utilise le système d'initialisation Upstart :
  7199. @example
  7200. # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
  7201. # start guix-publish
  7202. @end example
  7203. @item
  7204. Sinon, procédez de manière similaire avec votre système d'init de votre
  7205. distro.
  7206. @end itemize
  7207. @node Invoquer guix challenge
  7208. @section Invoquer @command{guix challenge}
  7209. @cindex constructions reproductibles
  7210. @cindex constructions vérifiables
  7211. @cindex @command{guix challenge}
  7212. @cindex défi
  7213. Est-ce que les binaires fournis par ce serveur correspondent réellement au
  7214. code source qu'il dit avoir construit ? Est-ce que le processus de
  7215. construction d'un paquet est déterministe ? Ce sont les question auxquelles
  7216. la commande @command{guix challenge} essaye de répondre.
  7217. La première question est évidemment importante : avant d'utiliser un serveur
  7218. de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
  7219. fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
  7220. permet la première : si les constructions des paquets sont déterministes
  7221. alors des constructions indépendantes du paquet devraient donner le même
  7222. résultat, bit à bit ; si un serveur fournit un binaire différent de celui
  7223. obtenu localement, il peut être soit corrompu, soit malveillant.
  7224. On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
  7225. toutes les entrées du processus qui construit le fichier ou le répertoire —
  7226. les compilateurs, les bibliothèques, les scripts de construction,
  7227. etc. (@pxref{Introduction}). En supposant que les processus de construction
  7228. sont déterministes, un nom de fichier dans le dépôt devrait correspondre
  7229. exactement à une sortie de construction. @command{guix challenge} vérifie
  7230. si il y a bien effectivement une seule correspondance en comparant les
  7231. sorties de plusieurs constructions indépendantes d'un élément du dépôt
  7232. donné.
  7233. La sortie de la commande ressemble à :
  7234. @smallexample
  7235. $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
  7236. mise à jour de la liste des substituts depuis 'https://hydra.gnu.org'... 100.0%
  7237. mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
  7238. le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
  7239. empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
  7240. https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
  7241. https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
  7242. le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
  7243. empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
  7244. https://hydra.gnu.org/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
  7245. https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
  7246. le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
  7247. empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
  7248. https://hydra.gnu.org/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
  7249. https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
  7250. @dots{}
  7251. 6,406 éléments du dépôt ont été analysés :
  7252. - 4,749 (74.1%) étaient identiques
  7253. - 525 (8.2%) étaient différents
  7254. - 1,132 (17.7%) étaient impossibles à évaluer
  7255. @end smallexample
  7256. @noindent
  7257. Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
  7258. déterminer l'ensemble des dérivations construites localement — en opposition
  7259. aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
  7260. demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
  7261. les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
  7262. différent de la construction locale.
  7263. @cindex non-déterminisme, dans les constructions des paquets
  7264. Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
  7265. différente. Inversement, @code{hydra.gnu.org} est d'accord avec les
  7266. constructions locale, sauf dans le cas de Git. Cela peut indiquer que le
  7267. processus de construction de Git est non-déterministe, ce qui signifie que
  7268. sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
  7269. parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
  7270. sources les plus communes de non-déterminisme comprennent l'ajout
  7271. d'horodatage dans les résultats des constructions, l'inclusion de nombres
  7272. aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
  7273. @uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
  7274. Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
  7275. chose comme cela (@pxref{Invoquer guix archive}) :
  7276. @example
  7277. $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
  7278. | guix archive -x /tmp/git
  7279. $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
  7280. @end example
  7281. Cette commande montre les différences entre les fichiers qui résultent de la
  7282. construction locale et des fichiers qui résultent de la construction sur
  7283. @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
  7284. diffutils, Comparing and Merging Files}). La commande @command{diff}
  7285. fonctionne bien avec des fichiers texte. Lorsque des fichiers binaires
  7286. diffèrent cependant, @uref{https://diffoscope.org/, Diffoscope} est une
  7287. meilleure option. C'est un outil qui aide à visualiser les différences
  7288. entre toute sorte de fichiers.
  7289. Une fois que vous avez fait ce travail, vous pourrez dire si les différences
  7290. sont dues au non-déterminisme du processus de construction ou à la
  7291. malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
  7292. les sources de non-déterminisme dans les paquets pour rendre plus facile la
  7293. vérification des substituts, mais bien sûr, c'est un processus qui
  7294. n'implique pas que Guix, mais une grande partie de la communauté des
  7295. logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
  7296. pour aider à corriger le problème.
  7297. Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
  7298. @code{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même
  7299. résultat que vous avec :
  7300. @example
  7301. $ guix challenge @var{paquet}
  7302. @end example
  7303. @noindent
  7304. où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
  7305. @code{glibc:debug}.
  7306. La syntaxe générale est :
  7307. @example
  7308. guix challenge @var{options} [@var{paquets}@dots{}]
  7309. @end example
  7310. Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
  7311. localement et celle d'un substitut fournit par un serveur, ou parmi les
  7312. substituts fournis par différents serveurs, la commande l'affiche comme dans
  7313. l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
  7314. différentes de 0 indiquent d'autres sortes d'erreurs).
  7315. L'option qui compte est :
  7316. @table @code
  7317. @item --substitute-urls=@var{urls}
  7318. Considère @var{urls} comme la liste des URL des sources de substituts
  7319. séparés par des espaces avec lesquels comparer les paquets locaux.
  7320. @item --verbose
  7321. @itemx -v
  7322. Montre des détails sur les correspondances (contenu identique) en plus des
  7323. informations sur différences.
  7324. @end table
  7325. @node Invoquer guix copy
  7326. @section Invoquer @command{guix copy}
  7327. @cindex copier des éléments du dépôt par SSH
  7328. @cindex SSH, copie d'éléments du dépôt
  7329. @cindex partager des éléments du dépôt entre plusieurs machines
  7330. @cindex transférer des éléments du dépôt entre plusieurs machines
  7331. La commande @command{guix copy} copie des éléments du dépôt d'une machine
  7332. vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
  7333. commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
  7334. pour des détails}. Par exemple, la commande suivante copie le paquet
  7335. @code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
  7336. @var{hôte}, en tant qu'utilisateur @var{utilisateur} :
  7337. @example
  7338. guix copy --to=@var{utilisateur}@@@var{hôte} \
  7339. coreutils `readlink -f ~/.guix-profile`
  7340. @end example
  7341. Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
  7342. pas envoyés.
  7343. La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
  7344. @var{hôte}, en supposant qu'ils y sont présents :
  7345. @example
  7346. guix copy --from=@var{hôte} libreoffice gimp
  7347. @end example
  7348. La connexion SSH est établie avec le client Guile-SSH, qui set compatible
  7349. avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
  7350. et utilise l'agent SSH pour l'authentification.
  7351. La clef utilisée pour signer les éléments qui sont envoyés doit être
  7352. acceptée par la machine distante. De même, la clef utilisée pour la machine
  7353. distante depuis laquelle vous récupérez des éléments doit être dans
  7354. @file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
  7355. @xref{Invoquer guix archive}, pour plus d'informations sur
  7356. l'authentification des éléments du dépôt.
  7357. La syntaxe générale est :
  7358. @example
  7359. guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
  7360. @end example
  7361. Vous devez toujours spécifier l'une des options suivantes :
  7362. @table @code
  7363. @item --to=@var{spec}
  7364. @itemx --from=@var{spec}
  7365. Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
  7366. être une spécification SSH comme @code{example.org},
  7367. @code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
  7368. @end table
  7369. L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
  7370. éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
  7371. Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
  7372. construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
  7373. options de construction communes sont supportées (@pxref{Options de construction communes}).
  7374. @node Invoquer guix container
  7375. @section Invoquer @command{guix container}
  7376. @cindex conteneur
  7377. @cindex @command{guix container}
  7378. @quotation Remarque
  7379. À la version @value{VERSION}, cet outil est toujours expérimental.
  7380. L'interface est sujette à changement radicaux dans le futur.
  7381. @end quotation
  7382. Le but de @command{guix container} est de manipuler des processus qui
  7383. tournent dans un environnement séparé, connus sous le nom de « conteneur »,
  7384. typiquement créés par les commandes @command{guix environment}
  7385. (@pxref{Invoquer guix environment}) et @command{guix system container}
  7386. (@pxref{Invoquer guix system}).
  7387. La syntaxe générale est :
  7388. @example
  7389. guix container @var{action} @var{options}@dots{}
  7390. @end example
  7391. @var{action} spécifie les opérations à effectuer avec un conteneur, et
  7392. @var{options} spécifie les arguments spécifiques au contexte pour l'action.
  7393. Les actions suivantes sont disponibles :
  7394. @table @code
  7395. @item exec
  7396. Exécute une commande dans le contexte d'un conteneur lancé.
  7397. La syntaxe est :
  7398. @example
  7399. guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
  7400. @end example
  7401. @var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
  7402. nom du fichier exécutable dans le système de fichiers racine du conteneur.
  7403. @var{arguments} sont les options supplémentairesà passer à @var{programme}.
  7404. La commande suivante lance un shell de connexion interactif dans un
  7405. conteneur GuixSD, démarré par @command{guix system container} et dont le PID
  7406. est 9001 :
  7407. @example
  7408. guix container exec 9001 /run/current-system/profile/bin/bash --login
  7409. @end example
  7410. Remarquez que @var{pid} ne peut pas être le processus parent d'un
  7411. conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
  7412. fils.
  7413. @end table
  7414. @node Invoquer guix weather
  7415. @section Invoquer @command{guix weather}
  7416. Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
  7417. et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
  7418. commande @command{guix weather} rapporte la disponibilité des substituts sur
  7419. les serveurs spécifiés pour que vous sachiez si vous allez raller
  7420. aujourd'hui. Cela peut parfois être une information utile pour les
  7421. utilisateurs, mais elle est surtout utile pour les personnes qui font
  7422. tourner @command{guix publish} (@pxref{Invoquer guix publish}).
  7423. @cindex statistiques sur les substituts
  7424. @cindex disponibilité des substituts
  7425. @cindex substuts, disponibilité
  7426. @cindex weather, disponibilité des substituts
  7427. Voici un exemple :
  7428. @example
  7429. $ guix weather --substitute-urls=https://guix.example.org
  7430. calcul de 5,872 dérivations de paquets pour x86_64-linux…
  7431. recherche de 6,128 éléments du dépôt sur https://guix.example.org…
  7432. mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
  7433. https://guix.example.org
  7434. 43.4% substituts disponibles (2,658 sur 6,128)
  7435. 7,032.5 Mo de fichiers nar (compressés)
  7436. 19,824.2 Mo sur le disque (décompressés)
  7437. 0.030 secondes par requêtes (182.9 secondes au total)
  7438. 33.5 requêtes par seconde
  7439. 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
  7440. 867 constructions dans la queue
  7441. x86_64-linux : 518 (59.7%)
  7442. i686-linux : 221 (25.5%)
  7443. aarch64-linux : 128 (14.8%)
  7444. vitesse de construction : 23.41 constructions par heure
  7445. x86_64-linux : 11.16 constructions par heure
  7446. i686-linux : 6.03 constructions par heure
  7447. aarch64-linux : 6.41 constructions par heure
  7448. @end example
  7449. @cindex intégration continue, statistiques
  7450. Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
  7451. lesquels des substituts sont disponibles sur le serveur — indépendamment du
  7452. fait que les substituts soient activés, et indépendamment du fait que la
  7453. clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
  7454. des archives compressées fournies par le serveur, la taille des éléments du
  7455. dépôt correspondant dans le dépôt (en supposant que la déduplication soit
  7456. désactivée) et la vitesse du serveur. La deuxième partie donne des
  7457. statistiques sur l'intégration continue (CI), si le serveur le supporte.
  7458. Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
  7459. (@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
  7460. @command{guix challenge}, il ignore les signatures de ces substituts, ce qui
  7461. n'est pas dangereux puisque la commande ne fait que récupérer des
  7462. statistiques et n'installe pas ces substituts.
  7463. Entre autres choses, il est possible de demander des types de système
  7464. particuliers et des ensembles de paquets particuliers. Les options
  7465. disponibles sont listées plus bas.
  7466. @table @code
  7467. @item --substitute-urls=@var{urls}
  7468. @var{urls} est la liste des URL des serveurs de substituts séparés par des
  7469. espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
  7470. de substituts par défaut est utilisé.
  7471. @item --system=@var{système}
  7472. @itemx -s @var{système}
  7473. Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
  7474. @code{aarch64-linux}. Cette option peut être répétée, auquel cas
  7475. @command{guix weather} demandera les substituts de plusieurs types de
  7476. systèmes.
  7477. @item --manifest=@var{fichier}
  7478. Plutôt que de demander des substituts pour tous les paquets, demande
  7479. uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
  7480. contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
  7481. package} (@pxref{Invoquer guix package}).
  7482. @end table
  7483. @node Invoquer guix processes
  7484. @section Invoquer @command{guix processes}
  7485. La commande @command{guix processes} peut être utile pour les développeurs
  7486. et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
  7487. et sur les fermes de construction : elle liste les sessions actuelles (les
  7488. connexions au démon), ainsi que des informations sur les processus en
  7489. question@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
  7490. démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
  7491. @emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
  7492. @example
  7493. $ sudo guix processes
  7494. SessionPID: 19002
  7495. ClientPID: 19090
  7496. ClientCommand: guix environment --ad-hoc python
  7497. SessionPID: 19402
  7498. ClientPID: 19367
  7499. ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
  7500. SessionPID: 19444
  7501. ClientPID: 19419
  7502. ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
  7503. LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
  7504. LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
  7505. LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
  7506. ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
  7507. ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
  7508. ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
  7509. @end example
  7510. Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
  7511. : @command{guix environment}, @command{guix publish} et l'outil
  7512. d'intégration continue Cuirass ; leur identifiant de processus (PID) est
  7513. donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
  7514. PID du sous-processus @command{guix-daemon} de cette session particulière.
  7515. Les champs @code{LockHeld} montrent quels éléments du dépôt sont
  7516. actuellement verrouillés par cette session, ce qui correspond aux éléments
  7517. du dépôt qui sont en train d'être construits ou d'être substitués (le champ
  7518. @code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
  7519. en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
  7520. ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
  7521. La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
  7522. @command{recsel} pour sélectionner les sessions qui nous intéressent
  7523. (@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
  7524. exemple, la commande montre la ligne de commande et le PID du client qui
  7525. effectue la construction d'un paquet Perl :
  7526. @example
  7527. $ sudo guix processes | \
  7528. recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
  7529. ClientPID: 19419
  7530. ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
  7531. @end example
  7532. @c *********************************************************************
  7533. @node Distribution GNU
  7534. @chapter Distribution GNU
  7535. @cindex Distribution Système Guix
  7536. @cindex GuixSD
  7537. Guix fournit aussi une distribution du système GNU contenant uniquement des
  7538. logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
  7539. @url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
  7540. l'utilisateur de ces logiciels}.}. On peut installer la distribution
  7541. elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
  7542. comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
  7543. (@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
  7544. distribution autonome « Distribution Système Guix » ou GuixSD.
  7545. la distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
  7546. Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
  7547. complète des paquets disponibles se trouve
  7548. @url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
  7549. @command{guix package} (@pxref{Invoquer guix package}) :
  7550. @example
  7551. guix package --list-available
  7552. @end example
  7553. Notre but est de fournir une distribution logicielle entièrement libre de
  7554. GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
  7555. et l'intégration étroite des composants GNU en insistant sur les programmes
  7556. et les outils qui aident l'utilisateur à exercer ses libertés.
  7557. Les paquets sont actuellement disponibles pour les plateformes suivantes :
  7558. @table @code
  7559. @item x86_64-linux
  7560. l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
  7561. @item i686-linux
  7562. l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
  7563. @item armhf-linux
  7564. l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
  7565. NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
  7566. Linux-libre ;
  7567. @item aarch64-linux
  7568. les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
  7569. Le support est actuellement expérimental et limité. @xref{Contribuer},
  7570. pour savoir comment aider !
  7571. @item mips64el-linux
  7572. les processeurs MIPS 64-bits little-endian, spécifiquement la série
  7573. Loongson, ABI n32, avec le noyau Linux-libre.
  7574. @end table
  7575. GuixSD lui-même est actuellement disponible sur @code{i686} et
  7576. @code{x86_64}.
  7577. @noindent
  7578. Pour des informations sur comment porter vers d'autres architectures et
  7579. d'autres noyau, @pxref{Porter}.
  7580. @menu
  7581. * Installation du système:: Installer le système d'exploitation complet.
  7582. * Configuration système:: Configurer le système d'exploitation.
  7583. * Documentation:: Visualiser les manuels d'utilisateur des
  7584. logiciels.
  7585. * Installer les fichiers de débogage:: Nourrir le débogueur.
  7586. * Mises à jour de sécurité:: Déployer des correctifs de sécurité
  7587. rapidement.
  7588. * Modules de paquets:: Les paquets du point de vu du programmeur.
  7589. * Consignes d'empaquetage:: Faire grandir la distribution.
  7590. * Bootstrapping:: GNU/Linux depuis zéro.
  7591. * Porter:: Cibler une autre plateforme ou un autre noyau.
  7592. @end menu
  7593. La construction de cette distribution est un effort collaboratif et nous
  7594. vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
  7595. sur la manière de nous aider.
  7596. @node Installation du système
  7597. @section Installation du système
  7598. @cindex installer GuixSD
  7599. @cindex Distribution Système Guix
  7600. Cette section explique comment installer la distribution système Guix
  7601. (GuixSD) sur votre machine. Le gestionnaire de paquets Guix peut aussi être
  7602. installé sur un système GNU/Linux déjà installé, @pxref{Installation}.
  7603. @ifinfo
  7604. @quotation Remarque
  7605. @c This paragraph is for people reading this from tty2 of the
  7606. @c installation image.
  7607. Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
  7608. son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
  7609. ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
  7610. Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
  7611. Autrement, lancez @command{info info} dans un autre tty pour garder ce
  7612. manuel ouvert.
  7613. @end quotation
  7614. @end ifinfo
  7615. @menu
  7616. * Limitations:: Ce à quoi vous attendre.
  7617. * Considérations matérielles:: Matériel supporté.
  7618. * Installation depuis une clef USB ou un DVD:: Préparer le média
  7619. d'installation.
  7620. * Préparer l'installation:: Réseau, partitionnement, etc.
  7621. * Effectuer l'installation:: Pour de vrai.
  7622. * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
  7623. * Construire l'image d'installation:: D'où vient tout cela.
  7624. @end menu
  7625. @node Limitations
  7626. @subsection Limitations
  7627. À la version @value{VERSION}, la distribution système Guix (GuixSD) n'est
  7628. pas prête pour la production. Elle peut contenir des bogues et ne pas avoir
  7629. certaines fonctionnalités importantes. Ainsi, si vous cherche un système de
  7630. production stable qui respecte votre liberté en tant qu'utilisateur, une
  7631. bonne solution consiste à utiliser
  7632. @url{http://www.gnu.org/distros/free-distros.html, une des distributions
  7633. GNU/Linux mieux établie}. Nous espérons que vous pourrez bientôt passer à
  7634. GuixSD sans peur, bien sûr. Pendant ce temps, vous pouvez aussi utiliser
  7635. votre distribution actuelle et essayer le gestionnaire de paquet par dessus
  7636. celle-ci (@pxref{Installation}).
  7637. Avant de procéder à l'installation, soyez conscient de ces limitations les
  7638. plus importantes qui s'appliquent à la version @value{VERSION} :
  7639. @itemize
  7640. @item
  7641. Le procédé d'installation n'a pas d'interface utilisateur graphique et
  7642. requiert une certaine familiarité avec GNU/Linux (voir les sous-sections
  7643. suivantes pour avoir un aperçu de ce que cela signifie).
  7644. @item
  7645. LVM (gestionnaire de volumes logiques) n'est pas supporté.
  7646. @item
  7647. De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
  7648. certains manquent toujours cruellement.
  7649. @item
  7650. Plus de 7@tie{}500 paquets sont disponibles, mais vous pourrez parfois
  7651. trouver qu'un paquet utile est absent.
  7652. @item
  7653. GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11.
  7654. cependant, certaines applications graphiques peuvent manquer, ainsi que KDE.
  7655. @end itemize
  7656. Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à
  7657. rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer
  7658. la distribution. @xref{Contribuer}, pour plus d'info.
  7659. @node Considérations matérielles
  7660. @subsection Considérations matérielles
  7661. @cindex support matériel sur GuixSD
  7662. GNU@tie{}GuixSD se concentre sur le respect des libertés de ses
  7663. utilisateurs. Il est construit autour du noyau Linux-libre, ce qui signifie
  7664. que seuls les matériels pour lesquels des pilotes logiciels et des
  7665. microgiciels libres sont disponibles sont supportés. De nos jours, une
  7666. grande gamme de matériel qu'on peut acheter est supporté par GNU/Linux-libre
  7667. — des claviers aux cartes graphiques en passant par les scanners et les
  7668. contrôleurs Ethernet. Malheureusement, il reste des produit dont les
  7669. fabriquants refusent de laisser le contrôle aux utilisateurs sur leur propre
  7670. utilisation de l'ordinateur, et ces matériels ne sont pas supportés par
  7671. GuixSD.
  7672. @cindex WiFi, support matériel
  7673. L'un des types de matériels où les pilotes ou les microgiciels sont le moins
  7674. disponibles sont les appareils WiFi. Les appareils WiFi connus pour
  7675. fonctionner sont ceux qui utilisent des puces Atheros (AR9271 et AR7010) qui
  7676. correspondent au pilote @code{ath9k} de Linux-libre, et ceux qui utilisent
  7677. des puces Broadcom/AirForce (BCM43xx avec la révision Wireless-Core 5), qui
  7678. correspondent au pilote @code{b43-open} de Linux-libre. Des microgiciels
  7679. libres existent pour les deux et sont disponibles directement sur GuixSD,
  7680. dans @var{%base-firmware} (@pxref{Référence de système d'exploitation,
  7681. @code{firmware}}).
  7682. @cindex RYF, Respects Your Freedom
  7683. La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
  7684. certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
  7685. Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
  7686. votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
  7687. Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
  7688. Une autre ressource utile est le site web @uref{https://www.h-node.org/,
  7689. H-Node}. Il contient un catalogue d'appareils avec des informations sur
  7690. leur support dans GNU/Linux.
  7691. @node Installation depuis une clef USB ou un DVD
  7692. @subsection Installation depuis une clef USB ou un DVD
  7693. Une image d'installation ISO-9660 téléchargeable depuis
  7694. @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{système}.iso.xz}
  7695. peut être écrite sur une clef USB ou gravée sur un DVD, où @var{système} est
  7696. l'une de ces valeurs :
  7697. @table @code
  7698. @item x86_64-linux
  7699. pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
  7700. @item i686-linux
  7701. pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
  7702. @end table
  7703. @c start duplication of authentication part from ``Binary Installation''
  7704. Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
  7705. l'authenticité de l'image avec, de cette manière :
  7706. @example
  7707. $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
  7708. $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
  7709. @end example
  7710. Si cette commande échoue parce que vous n'avez pas la clef publique requise,
  7711. lancez cette commande pour l'importer :
  7712. @example
  7713. $ gpg --keyserver @value{KEY-SERVER} \
  7714. --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
  7715. @end example
  7716. @noindent
  7717. @c end duplication
  7718. et relancez la commande @code{gpg --verify}.
  7719. Cette image contient les outils nécessaires à l'installation. Elle est
  7720. faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
  7721. un DVD.
  7722. @unnumberedsubsubsec Copie sur une clef USB
  7723. Pour copier l'image sur une clef USB, suivez ces étapes :
  7724. @enumerate
  7725. @item
  7726. Décompressez l'image avec la commande @command{xz} :
  7727. @example
  7728. xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
  7729. @end example
  7730. @item
  7731. Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
  7732. son nom d'appareil. En supposant que la clef usb est connue sous le nom de
  7733. @file{/dev/sdX}, copiez l'image avec :
  7734. @example
  7735. dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
  7736. sync
  7737. @end example
  7738. Accéder à @file{/dev/sdX} requiert généralement les privilèges
  7739. super-utilisateur.
  7740. @end enumerate
  7741. @unnumberedsubsubsec Graver sur un DVD
  7742. Pour copier l'image sur un DVD, suivez ces étapes :
  7743. @enumerate
  7744. @item
  7745. Décompressez l'image avec la commande @command{xz} :
  7746. @example
  7747. xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
  7748. @end example
  7749. @item
  7750. Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
  7751. En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
  7752. l'image avec :
  7753. @example
  7754. growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
  7755. @end example
  7756. Accéder à @file{/dev/srX} requiert généralement les privilèges
  7757. super-utilisateur.
  7758. @end enumerate
  7759. @unnumberedsubsubsec Démarrage
  7760. Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
  7761. démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
  7762. entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
  7763. démarrer sur la clef USB.
  7764. @xref{Installer GuixSD dans une VM}, si, à la place, vous souhaitez installer
  7765. GuixSD dans une machine virtuelle (VM).
  7766. @node Préparer l'installation
  7767. @subsection Préparer l'installation
  7768. Une fois que vous avez démarré votre ordinateur sur le média d'installation,
  7769. vous devriez vous retrouver sur un prompt en root. Plusieurs TTY sont
  7770. configurées et peuvent être utilisés pour lancer des commandes en root. Le
  7771. TTY2 affiche cette documentation, dans la quelle vous pouvez naviguer avec
  7772. les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
  7773. Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
  7774. vous permet de sélectionner du texte avec le bouton gauche de la souris et
  7775. de le coller en appuyant sur la molette.
  7776. @quotation Remarque
  7777. L'installation nécessite un accès au réseau pour que les dépendances
  7778. manquantes de votre configuration système puissent être téléchargées. Voyez
  7779. la section « réseau » plus bas.
  7780. @end quotation
  7781. Le système d'installation inclus plusieurs outils usuels pour requis pour
  7782. cette tâche. Mais c'est aussi un système GuixSD complet, ce qui signifie
  7783. que vous pouvez installer des paquets supplémentaires si vous en avez
  7784. besoin, avec @command{guix package} (@pxref{Invoquer guix package}).
  7785. @subsubsection Disposition du clavier
  7786. @cindex disposition du clavier
  7787. L'image d'installation utilise la disposition clavier qwerty (US). Si vous
  7788. voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
  7789. exemple, la commande suivante sélectionne la disposition Dvorak :
  7790. @example
  7791. loadkeys dvorak
  7792. @end example
  7793. Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
  7794. pour trouver une liste des dispositions disponibles. Lancez @command{man
  7795. loadkey} pour plus d'informations.
  7796. @subsubsection Réseau
  7797. Lancez la commande suivante pour voir comment vos interfaces réseau sont
  7798. appelées :
  7799. @example
  7800. ifconfig -a
  7801. @end example
  7802. @noindent
  7803. @dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
  7804. @example
  7805. ip a
  7806. @end example
  7807. @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
  7808. Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
  7809. l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
  7810. est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
  7811. @samp{w}, comme @samp{w1p2s0}.
  7812. @table @asis
  7813. @item Connexion filaire
  7814. Pour configure une connexion filaire, lancez la commande suivante, en
  7815. remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
  7816. utiliser.
  7817. @example
  7818. ifconfig @var{interface} up
  7819. @end example
  7820. @item Connexion sans-fil
  7821. @cindex sans-fil
  7822. @cindex WiFi
  7823. Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
  7824. configuration pour l'outil de configuration @command{wpa_supplicant} (son
  7825. emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
  7826. @command{nano} :
  7827. @example
  7828. nano wpa_supplicant.conf
  7829. @end example
  7830. Par exemple, la déclaration qui suit peut aller dans ce fichier et
  7831. fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
  7832. la phrase de passe pour le réseau auquel vous vous connectez :
  7833. @example
  7834. network=@{
  7835. ssid="@var{mon-ssid}"
  7836. key_mgmt=WPA-PSK
  7837. psk="la phrase de passe secrète du réseau"
  7838. @}
  7839. @end example
  7840. Démarrez le service sans-file et lancez-le en tache de fond avec la commande
  7841. suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
  7842. vous voulez utiliser) :
  7843. @example
  7844. wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
  7845. @end example
  7846. Lancez @command{man wpa_supplicant} pour plus d'informations.
  7847. @end table
  7848. @cindex DHCP
  7849. À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
  7850. où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
  7851. @example
  7852. dhclient -v @var{interface}
  7853. @end example
  7854. Essayez de pinger un serveur pour voir si le réseau fonctionne :
  7855. @example
  7856. ping -c 3 gnu.org
  7857. @end example
  7858. Mettre en place un accès réseau est presque toujours une nécessité parce que
  7859. l'image ne contient pas tous les logiciels et les outils dont vous pourriez
  7860. avoir besoin.
  7861. @cindex installer par SSH
  7862. Si vous le souhaitez, vous pouvez continuer l'installation à distance en
  7863. démarrant un serveur SSH :
  7864. @example
  7865. herd start ssh-daemon
  7866. @end example
  7867. Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
  7868. configurer l'authentification par clef OpenSSH avant de vous connecter.
  7869. @subsubsection Partitionnement
  7870. À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
  7871. partitionner le disque puis à formater les partitions cibles.
  7872. L'image d'installation inclus plusieurs outils de partitionnement, dont
  7873. Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
  7874. @command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
  7875. disque avec le partitionnement qui vous convient :
  7876. @example
  7877. cfdisk
  7878. @end example
  7879. Si votre disque utilise le format des tables de partitions GUID (GPT) et que
  7880. vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
  7881. défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
  7882. disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
  7883. @cindex EFI, installation
  7884. @cindex UEFI, installation
  7885. @cindex ESP, partition système EFI
  7886. Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
  7887. avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition
  7888. devrait être montée dans @file{/boot/efi} et doit avoir le drapeau
  7889. @code{esp}. P.@: ex.@: pour @command{parted} :
  7890. @example
  7891. parted /dev/sda set 1 esp on
  7892. @end example
  7893. @quotation Remarque
  7894. @vindex grub-bootloader
  7895. @vindex grub-efi-bootloader
  7896. Vous n'êtes pas sûr de savoir si vous devez utiliser un GRUB EFI ou BIOS ?
  7897. Si le répertoire @file{/sys/firmware/efi} existe sur l'image d'installation,
  7898. vous devriez probablement effectuer une installation EFI, avec
  7899. @code{grub-efi-bootloader}. Sinon, vous devriez utiliser le GRUB en BIOS,
  7900. @code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage} pour plus
  7901. d'information sur le chargeur d'amorçage.
  7902. @end quotation
  7903. Une fois que vous avez fini le partitionnement du disque dur cible, vous
  7904. devez créer un système de fichier sur les partitions@footnote{Actuellement
  7905. GuixSD ne supporte que les systèmes de fichiers ext4 et btrfs. En
  7906. particulier, le code qui lit les UUID des systèmes de fichiers et les
  7907. étiquettes ne fonctionne que pour ces types de systèmes de fichiers.}. Pour
  7908. l'ESP, si vous en avez une et en supposant que ce soit @file{/dev/sda1},
  7909. lancez :
  7910. @example
  7911. mkfs.fat -F32 /dev/sda1
  7912. @end example
  7913. Préférez assigner une étiquette au système de fichier pour que vous puissiez
  7914. vous y référer de manière fiable dans la déclaration @code{file-system}
  7915. (@pxref{Systèmes de fichiers}). On le fait habituellement avec l'option @code{-L}
  7916. de @command{mkfs.ext4} et des commandes liées. Donc, en supposant que la
  7917. partition racine soit sur @file{/dev/sda2}, on peut créer un système de
  7918. fichier avec pour étiquette @code{my-root} avec :
  7919. @example
  7920. mkfs.ext4 -L my-root /dev/sda2
  7921. @end example
  7922. @cindex chiffrement du disque
  7923. Si vous voulez plutôt chiffrer la partition racine, vous pouvez utiliser les
  7924. utilitaires Cryptsetup et LUKS pour cela (voir @inlinefmtifelse{html,
  7925. @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
  7926. @code{man cryptsetup}} pour plus d'informations). En supposant que vous
  7927. voulez stocker la partition racine sur @file{/dev/sda2}, la séquence de
  7928. commandes suivante vous mènerait à ce résultat :
  7929. @example
  7930. cryptsetup luksFormat /dev/sda2
  7931. cryptsetup open --type luks /dev/sda2 my-partition
  7932. mkfs.ext4 -L my-root /dev/mapper/my-partition
  7933. @end example
  7934. Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
  7935. avec une commande comme (de nouveau, en supposant que @code{my-root} est
  7936. l'étiquette du système de fichiers racine) :
  7937. @example
  7938. mount LABEL=my-root /mnt
  7939. @end example
  7940. Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
  7941. système cible relativement à ce chemin. Si vous avez un @file{/boot} sur
  7942. une partition séparé par exemple, montez-le sur @file{/mnt/boot} maintenant
  7943. pour qu'il puisse être trouvé par @code{guix system init} ensuite.
  7944. Enfin, si vous souhaitez utiliser une ou plusieurs partitions de swap
  7945. (@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
  7946. Manual}), assurez-vous de les initialiser avec @command{mkswap}. En
  7947. supposant que vous avez une partition de swap sur @file{/dev/sda3}, vous
  7948. pouvez lancer :
  7949. @example
  7950. mkswap /dev/sda3
  7951. swapon /dev/sda3
  7952. @end example
  7953. Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
  7954. supposant que dans le nouveau système vous voulez utiliser le fichier
  7955. @file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
  7956. fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
  7957. Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
  7958. (COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
  7959. détails, regardez les pages de manuel de @command{mkswap} et
  7960. @command{swapon}.} :
  7961. @example
  7962. # Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
  7963. dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
  7964. # Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
  7965. chmod 600 /mnt/swapfile
  7966. mkswap /mnt/swapfile
  7967. swapon /mnt/swapfile
  7968. @end example
  7969. Remarquez que si vous avez chiffré la partition racine et créé un fichier
  7970. d'échange dans son système de fichier comme décrit ci-dessus, alors le
  7971. chiffrement protégera aussi le fichier d'échange, comme n'importe quel
  7972. fichier de ce système de fichiers.
  7973. @node Effectuer l'installation
  7974. @subsection Effectuer l'installation
  7975. Lorsque la partition cible est prête et que les autres partitions sont
  7976. montées, on est prêt à commencer l'installation. Commencez par :
  7977. @example
  7978. herd start cow-store /mnt
  7979. @end example
  7980. Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
  7981. sorte que les paquets ajoutés pendant l'installation sont écrits sur le
  7982. disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
  7983. nécessaire parce que la première phase de la commande @command{guix system
  7984. init} (voir plus bas) implique de télécharger ou de construire des éléments
  7985. de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
  7986. Ensuite, vous devrez modifier un fichier et fournir la déclaration du
  7987. système à installer. Pour cela, le système d'installation propose trois
  7988. éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
  7989. Manual}), qui supporte la coloration syntaxique la correspondance de
  7990. parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
  7991. (un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
  7992. vivement de stocker ce fichier sur le système de fichier racine cible,
  7993. disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
  7994. fichier de configuration une fois que vous aurez redémarré sur votre nouveau
  7995. système.
  7996. @xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
  7997. fichier de configuration. Les exemples de configuration dont on parle dans
  7998. cette section sont disponibles dans @file{/etc/configuration} sur l'image
  7999. d'installation. Ainsi, pour commencer avec une configuration du système qui
  8000. fournit un serveur d'affichage graphique (un système de « bureau »), vous
  8001. pouvez lancer ce qui suit :
  8002. @example
  8003. # mkdir /mnt/etc
  8004. # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
  8005. # nano /mnt/etc/config.scm
  8006. @end example
  8007. Vous devriez faire attention à ce que contient votre fichier de
  8008. configuration, en particulier :
  8009. @itemize
  8010. @item
  8011. Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
  8012. cible où vous voulez installer GRUB. Elle devrait aussi mentionner
  8013. @code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
  8014. ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
  8015. anciens systèmes, le champs @code{target} contient un périphérique comme
  8016. @code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
  8017. partition EFI montée, comme @code{/boot/efi}, et assurez-vous que ce chemin
  8018. est bien monté.
  8019. @item
  8020. Assurez-vous que les étiquettes de vos systèmes de fichiers correspondent
  8021. aux valeurs de leur champs @code{device} dans votre configuration
  8022. @code{file-system}, en supposant que la configuration @code{file-system}
  8023. utilise la procédure @code{file-system-label} dans son champ @code{device}.
  8024. @item
  8025. Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
  8026. champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
  8027. @end itemize
  8028. Une fois que vous avez fini les préparatifs sur le fichier de configuration,
  8029. le nouveau système peut être initialisé (rappelez-vous que le système de
  8030. fichiers racine cible est dans @file{/mnt}) :
  8031. @example
  8032. guix system init /mnt/etc/config.scm /mnt
  8033. @end example
  8034. @noindent
  8035. Cela copie tous les fichiers nécessaires et installe GRUB sur
  8036. @file{/dev/sdX} à moins que vous ne passiez l'option
  8037. @option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
  8038. constructions pour les paquets manquants, ce qui peut prendre du temps.
  8039. Une fois que cette commande a terminée — et on l'espère réussi ! — vous
  8040. pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
  8041. mot de passe @code{root} est d'abord vide ; les mots de passe des autres
  8042. utilisateurs doivent être initialisés avec la commande @command{passwd} en
  8043. tant que @code{root}, à mois que votre configuration ne spécifie autre chose
  8044. (@pxref{user-account-password, mot de passe des comptes utilisateurs}).
  8045. @cindex mettre à jour GuixSD
  8046. À partir de maintenant, vous pouvez mettre à jour GuixSD lorsque vous le
  8047. souhaitez en lançant @command{guix pull} en tant que @code{root}
  8048. (@pxref{Invoquer guix pull}), puis en lançant @command{guix system
  8049. reconfigure} pour construire une nouvelle génération du système avec les
  8050. derniers paquets et les derniers services (@pxref{Invoquer guix system}).
  8051. Nous vous recommandons de le faire régulièrement pour que votre système
  8052. inclus les dernières mises à jour de sécurité (@pxref{Mises à jour de sécurité}).
  8053. Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
  8054. @file{guix-devel@@gnu.org} pour partager votre expérience — bonne ou
  8055. mauvaise.
  8056. @node Installer GuixSD dans une VM
  8057. @subsection Installer GuixSD sur une machine virtuelle
  8058. @cindex machine virtuelle, installation de GuixSD
  8059. @cindex serveur privé virtuel (VPS)
  8060. @cindex VPS (serveur privé virtuel)
  8061. Si vous souhaitez installer GuixSD sur une machine virtuelle (VM) ou un
  8062. serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
  8063. section est faite pour vous.
  8064. Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer GuixSD sur
  8065. une image disque, suivez ces étapes :
  8066. @enumerate
  8067. @item
  8068. Tout d'abord récupérez et décompressez l'image d'installation de GuixSD
  8069. comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
  8070. @item
  8071. Créez une image disque qui contiendra le système installé. Pour créer une
  8072. image qcow2, utilise la commande @command{qemu-img} :
  8073. @example
  8074. qemu-img create -f qcow2 guixsd.img 50G
  8075. @end example
  8076. Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
  8077. moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
  8078. grossira.
  8079. @item
  8080. Démarrez l'image d'installation USB dans une VM :
  8081. @example
  8082. qemu-system-x86_64 -m 1024 -smp 1 \
  8083. -net user -net nic,model=virtio -boot menu=on \
  8084. -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
  8085. -drive file=guixsd.img
  8086. @end example
  8087. L'ordre des périphérique est important
  8088. Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
  8089. le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
  8090. pour valider votre choix.
  8091. @item
  8092. Vous êtes maintenant root dans la VM, continuez en suivant la procédure
  8093. d'installation. @xref{Préparer l'installation}, et suivez les
  8094. instructions.
  8095. @end enumerate
  8096. Une fois l'installation terminée, vous pouvez démarrer le système dans votre
  8097. image @file{guixsd.img}. @xref{Lancer GuixSD dans une VM}, pour une manière de
  8098. faire.
  8099. @node Construire l'image d'installation
  8100. @subsection Construire l'image d'installation
  8101. @cindex image d'installation
  8102. L'image d'installation décrite plus haut a été construite avec la commande
  8103. @command{guix system}, plus précisément :
  8104. @example
  8105. guix system disk-image gnu/system/install.scm
  8106. @end example
  8107. Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
  8108. sources et regardez aussi @ref{Invoquer guix system} pour plus
  8109. d'informations sur l'image d'installation.
  8110. @subsection Construire l'image d'installation pour les cartes ARM
  8111. De nombreuses cartes ARM requièrent une variante spécifique du chargeur
  8112. d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
  8113. Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
  8114. disponible autrement (sur un autre périphérique d'amorçage etc), il est
  8115. recommandé de construire une image qui inclus le chargeur d'amorçage, plus
  8116. précisément :
  8117. @example
  8118. guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
  8119. @end example
  8120. @code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
  8121. carte invalide, une liste de cartes possibles sera affichée.
  8122. @node Configuration système
  8123. @section Configuration système
  8124. @cindex configuration du système
  8125. La distribution système Guix utilise un mécanisme de configuration du
  8126. système cohérent. On veut dire par là que tous les aspects de la
  8127. configuration globale du système — comme la disponibilité des services
  8128. système, des fuseaux horaires, des paramètres linguistiques, des comptes
  8129. utilisateurs — sont déclarés à un seul endroit. Une telle
  8130. @dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
  8131. en vigueur.
  8132. @c Yes, we're talking of Puppet, Chef, & co. here. ↑
  8133. L'un des avantages de placer toute la configuration du système sous le
  8134. contrôle de Guix est de permettre les mises à jour transactionnelles du
  8135. système ce qui rend possible le fait de revenir en arrière à une
  8136. instanciation précédent du système, si quelque chose se passait mal avec le
  8137. nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
  8138. réplication de la même configuration sur plusieurs machines différentes ou à
  8139. différents moments dans le temps, sans avoir à recourir à des outils
  8140. d'administrations supplémentaires au-dessus des outils du système.
  8141. Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
  8142. le point de vue de l'administrateur système en expliquant comment le système
  8143. est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
  8144. être étendu, par exemple pour supporter de nouveaux services systèmes.
  8145. @menu
  8146. * Utiliser le système de configuration:: Personnaliser votre système
  8147. GNU@.
  8148. * Référence de système d'exploitation:: Détail sur la déclaration de
  8149. système d'exploitation.
  8150. * Systèmes de fichiers:: Configurer les montages de systèmes de
  8151. fichiers.
  8152. * Périphériques mappés:: Gestion des périphériques de bloc.
  8153. * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
  8154. * Régionalisation:: Paramétrer la langue et les conventions
  8155. culturelles.
  8156. * Services:: Spécifier les services du système.
  8157. * Programmes setuid:: Programmes tournant avec les privilèges root.
  8158. * Certificats X.509:: Authentifier les serveurs HTTPS@.
  8159. * Name Service Switch:: Configurer le « name service switch » de la
  8160. libc.
  8161. * Disque de RAM initial:: Démarrage de Linux-Libre.
  8162. * Configuration du chargeur d'amorçage:: Configurer le chargeur
  8163. d'amorçage.
  8164. * Invoquer guix system:: Instantier une configuration du système.
  8165. * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
  8166. virtuelle.
  8167. * Définir des services:: Ajouter de nouvelles définitions de services.
  8168. @end menu
  8169. @node Utiliser le système de configuration
  8170. @subsection Utiliser le système de configuration
  8171. Le système d'exploitation est configuré en fournissant une déclaration
  8172. @code{operating-system} dans un fichier qui peut être passé à la command
  8173. @command{guix system} (@pxref{Invoquer guix system}). Une configuration
  8174. simple, avec les services systèmes par défaut, le noyau Linux-Libre par
  8175. défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
  8176. :
  8177. @findex operating-system
  8178. @lisp
  8179. @include os-config-bare-bones.texi
  8180. @end lisp
  8181. Cet exemple devrait se comprendre de lui-même. Certains champs définis
  8182. ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
  8183. D'autres comme @code{packages} et @code{services} peuvent être omis auquel
  8184. cas ils ont une valeur par défaut.
  8185. Ci-dessous nous discutons des effets de certains des champs les plus
  8186. importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
  8187. les champs disponibles) et comment @dfn{instancier} le système
  8188. d'exploitation avec @command{guix system}.
  8189. @unnumberedsubsubsec Bootloader
  8190. @cindex ancien système de démarrage, sur les machines Intel
  8191. @cindex démarrage BIOS, sur les machines Intel
  8192. @cindex démarrage UEFI
  8193. @cindex démarrage EFI
  8194. Le champ @code{bootloader} décrit la méthode qui sera utilisée pour démarrer
  8195. votre système. Les machines basées sur les processeurs Intel peuvent
  8196. démarrer dans l'ancien mode BIOS, comme dans l'exemple au-dessus.
  8197. Cependant, les machines plus récentes s'appuient sur l'UEFI (@dfn{Unified
  8198. Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
  8199. @code{bootloader} devrait contenir quelque chose comme cela :
  8200. @example
  8201. (bootloader-configuration
  8202. (bootloader grub-efi-bootloader)
  8203. (target "/boot/efi"))
  8204. @end example
  8205. @xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
  8206. configuration disponibles.
  8207. @unnumberedsubsubsec Paquets visibles sur tout le système
  8208. @vindex %base-packages
  8209. Le champ @code{packages} liste les paquets qui seront visibles sur tout le
  8210. système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
  8211. d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
  8212. utilisateurs (@pxref{Invoquer guix package}). La variable
  8213. @var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
  8214. les taches de base de l'administrateur et de l'utilisateur — dont les GNU
  8215. Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
  8216. Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
  8217. GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
  8218. screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
  8219. @code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
  8220. @lisp
  8221. (use-modules (gnu packages))
  8222. (use-modules (gnu packages dns))
  8223. (operating-system
  8224. ;; ...
  8225. (packages (cons (list bind "utils")
  8226. %base-packages)))
  8227. @end lisp
  8228. @findex specification->package
  8229. Se référer aux paquets par le nom de leur variable, comme @code{bind}
  8230. ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
  8231. rendre rapidement compte de coquilles quand on a des « variables non liées
  8232. ». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
  8233. le paquet, et de modifier la ligne @code{use-package-modules} en
  8234. conséquence. Pour éviter cela, on peut utiliser la procédure
  8235. @code{specification->package} du module @code{(gnu packages)}, qui renvoie
  8236. le meilleur paquet pour un nom donné ou un nom et une version :
  8237. @lisp
  8238. (use-modules (gnu packages))
  8239. (operating-system
  8240. ;; ...
  8241. (packages (append (map specification->package
  8242. '("tcpdump" "htop" "gnupg@@2.0"))
  8243. %base-packages)))
  8244. @end lisp
  8245. @unnumberedsubsubsec Services systèmes
  8246. @cindex services
  8247. @vindex %base-services
  8248. Le champ @code{services} liste les @dfn{services système} à rendre
  8249. disponible lorsque le système démarre (@pxref{Services}). La déclaration
  8250. @code{operating-system} au-dessus spécifie que, en plus des services de
  8251. base, on veut que le démon ssh @command{lshd} écoute sur le port 2222
  8252. (@pxref{Services réseau, @code{lsh-service}}). Sous le capot,
  8253. @code{lsh-service} s'arrange pour que @code{lshd} soit lancé avec les bonnes
  8254. options de la ligne de commande, éventuellement en générant des fichiers de
  8255. configuration (@pxref{Définir des services}).
  8256. @cindex personnalisation des services
  8257. @findex modify-services
  8258. Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
  8259. vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
  8260. (@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
  8261. Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
  8262. Mingetty (l'écran de connexion en console) dans la liste
  8263. @var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
  8264. cela, vous pouvez écrire ce qui suit dans votre déclaration de système
  8265. d'exploitation :
  8266. @lisp
  8267. (define %my-services
  8268. ;; Ma propre liste de services.
  8269. (modify-services %base-services
  8270. (guix-service-type config =>
  8271. (guix-configuration
  8272. (inherit config)
  8273. (use-substitutes? #f)
  8274. (extra-options '("--gc-keep-derivations"))))
  8275. (mingetty-service-type config =>
  8276. (mingetty-configuration
  8277. (inherit config)))))
  8278. (operating-system
  8279. ;; @dots{}
  8280. (services %my-services))
  8281. @end lisp
  8282. Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
  8283. l'instance de @code{guix-service-type}, et de toutes les instances de
  8284. @code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
  8285. comment on fait cela : d'abord, on s'arrange pour que la configuration de
  8286. départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
  8287. @var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
  8288. remarquez comment on utilise @code{inherit} pour créer une nouvelle
  8289. configuration qui a les même valeurs que l'ancienne configuration, avec
  8290. seulement quelques modifications.
  8291. @cindex chiffrement du disque
  8292. La configuration pour une utilisation de « bureau » typique, avec une
  8293. partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
  8294. utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
  8295. connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
  8296. l'énergie, et bien plus, ressemblerait à ceci :
  8297. @lisp
  8298. @include os-config-desktop.texi
  8299. @end lisp
  8300. Un système graphique avec un choix de gestionnaires de fenêtres légers
  8301. plutôt que des environnement de bureaux complets ressemblerait à cela :
  8302. @lisp
  8303. @include os-config-lightweight-desktop.texi
  8304. @end lisp
  8305. Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
  8306. @code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
  8307. renvoyé par la commande @command{blkid}.
  8308. @xref{Services de bureaux}, pour la liste exacte des services fournis par
  8309. @var{%desktop-services}. @xref{Certificats X.509}, pour des informations
  8310. sur le paquet @code{nss-certs} utilisé ici.
  8311. Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
  8312. service. Si vous voulez en supprimer des services, vous pouvez le faire
  8313. avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
  8314. Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
  8315. l'expression suivante renvoie une liste qui contient tous les services dans
  8316. @var{%desktop-services} sauf le service Avahi :
  8317. @example
  8318. (remove (lambda (service)
  8319. (eq? (service-kind service) avahi-service-type))
  8320. %desktop-services)
  8321. @end example
  8322. @unnumberedsubsubsec Instancier le système
  8323. En supposant que la déclaration @code{operating-system} est stockée dans le
  8324. fichier @file{my-system-config.scm}, la commande @command{guix system
  8325. reconfigure my-system-config.scm} instancie cette configuration et en fait
  8326. l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
  8327. Pour changer la configuration du système, on met normalement à jour ce
  8328. fichier et on relance @command{guix system reconfigure}. On ne devrait
  8329. jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
  8330. commandes qui modifient l'état du système comme @command{useradd} ou
  8331. @command{grub-install}. En fait, vous devez les éviter parce que non
  8332. seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
  8333. à des versions précédents du système, si vous en avez besoin.
  8334. @cindex revenir en arrière dans la configuration du système
  8335. En parlant de revenir en arrière, à chaque fois que vous lancez
  8336. @command{guix system reconfigure}, une nouvelle @dfn{génération} du système
  8337. est crée — sans modifier ou supprimer les générations précédentes. Les
  8338. anciennes générations du système ont une entrée dans le menu du chargeur
  8339. d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
  8340. serait mal passé avec la dernière génération. C'est rassurant, non ? La
  8341. commande @command{guix system list-generations} liste les générations du
  8342. système disponibles sur le disque. Il est possible de revenir à une
  8343. ancienne génération via les commandes @command{guix system roll-back} et
  8344. @command{guix system switch-generation}.
  8345. Bien que la commande @command{guix system reconfigure} ne modifiera pas les
  8346. générations précédentes, vous devez faire attention lorsque votre génération
  8347. actuelle n'est pas la dernière (p.@: ex.@: après avoir invoqué @command{guix
  8348. system roll-back}), puisque l'opération pourrait remplacer une génération
  8349. suivante (@pxref{Invoquer guix system}).
  8350. @unnumberedsubsubsec L'interface de programmation
  8351. Au niveau Scheme, la grosse déclaration @code{operating-system} est
  8352. instanciée avec la procédure monadique suivante (@pxref{La monad du dépôt}) :
  8353. @deffn {Procédure monadique} operating-system-derivation os
  8354. Renvoie une dérivation qui construit @var{os}, un objet
  8355. @code{operating-system} (@pxref{Dérivations}).
  8356. La sortie de la dérivation est un répertoire qui se réfère à tous les
  8357. paquets et d'autres fichiers supports requis pour instancier @var{os}.
  8358. @end deffn
  8359. Cette procédure est fournie par le module @code{(gnu system)}. Avec
  8360. @code{(gnu srevices)} (@pxref{Services}), ce module contient les entrailles
  8361. de GuixSD. Ouvrez-le un jour !
  8362. @node Référence de système d'exploitation
  8363. @subsection Référence de @code{operating-system}
  8364. Cette section résume toutes les options disponibles dans les déclarations
  8365. @code{operating-system} (@pxref{Utiliser le système de configuration}).
  8366. @deftp {Type de données} operating-system
  8367. C'est le type de données représentant une configuration d'un système
  8368. d'exploitation. On veut dire par là toute la configuration globale du
  8369. système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
  8370. @table @asis
  8371. @item @code{kernel} (par défaut : @var{linux-libre})
  8372. L'objet paquet d'un noyau de système d'exploitation à
  8373. utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
  8374. le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
  8375. @item @code{kernel-arguments} (par défaut : @code{'()})
  8376. Liste de chaînes ou de gexps représentant des arguments supplémentaires à
  8377. passer sur la ligne de commande du noyau — p.@: ex.@:
  8378. @code{("console=ttyS0")}.
  8379. @item @code{bootloader}
  8380. L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
  8381. @item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
  8382. @cindex initrd
  8383. @cindex disque de RAM initial
  8384. La liste des modules du noyau linux requis dans l'image disque de RAM
  8385. initiale. @xref{Disque de RAM initial}.
  8386. @item @code{initrd} (par défaut : @code{base-initrd})
  8387. Une procédure qui renvoie un disque de RAM initial pour le noyau Linux. Ce
  8388. champ est fournit pour pouvoir personnaliser son système à bas-niveau et
  8389. n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
  8390. @item @code{firmware} (par défaut : @var{%base-firmware})
  8391. @cindex firmware
  8392. Liste les paquets de microgiciels chargeables pour le noyau de système
  8393. d'exploitation.
  8394. La valeur par défaut contient les microgiciels requis pour les périphériques
  8395. WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
  8396. Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
  8397. d'info sur les périphériques supportés.
  8398. @item @code{host-name}
  8399. Le nom d'hôte.
  8400. @item @code{hosts-file}
  8401. @cindex fichier hosts
  8402. Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
  8403. utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
  8404. Library Reference Manual}). La valeur par défaut est un fichier avec des
  8405. entrées pour @code{localhost} et @var{host-name}.
  8406. @item @code{mapped-devices} (par défaut : @code{'()})
  8407. Une liste de périphériques mappés. @xref{Périphériques mappés}.
  8408. @item @code{file-systems}
  8409. Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
  8410. @item @code{swap-devices} (par défaut : @code{'()})
  8411. @cindex espaces d'échange
  8412. Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
  8413. pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
  8414. Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
  8415. @code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
  8416. sur un périphérique mappé, tant que le périphérique nécessaire et le système
  8417. de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
  8418. @item @code{users} (par défaut : @code{%base-user-accounts})
  8419. @itemx @code{groups} (par défaut : @var{%base-groups})
  8420. Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
  8421. Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
  8422. root » avec l'UID@tie{}0 est automatiquement ajouté.
  8423. @item @code{skeletons} (par défaut : @code{(default-skeletons)})
  8424. Une liste de couples composés d'un nom de fichier cible et d'un objet
  8425. simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
  8426. fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
  8427. utilisateurs nouvellement créés.
  8428. Par exemple, un valeur valide ressemblerait à cela :
  8429. @example
  8430. `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
  8431. (".guile" ,(plain-file "guile"
  8432. "(use-modules (ice-9 readline))
  8433. (activate-readline)")))
  8434. @end example
  8435. @item @code{issue} (par défaut : @var{%default-issue})
  8436. Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
  8437. affiché lorsqu'un utilisateur se connecte sur la console.
  8438. @item @code{packages} (par défaut : @var{%base-packages})
  8439. L'ensemble des paquets installés dans le profil global, qui est accessible à
  8440. partir de @file{/run/current-system/profile}.
  8441. L'ensemble par défaut contient les utilitaires de base et c'est une bonne
  8442. pratique d'installer les utilitaires non essentiels dans les profils
  8443. utilisateurs (@pxref{Invoquer guix package}).
  8444. @item @code{timezone}
  8445. Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
  8446. Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
  8447. horaire correspondant à votre région. Si vous choisissez un nom de fuseau
  8448. horaire invalide, @command{guix system} échouera.
  8449. @item @code{locale} (par défaut : @code{"en_US.utf8"})
  8450. Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
  8451. GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
  8452. @item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
  8453. La liste des définitions de locales à compiler et qui devraient être
  8454. utilisées à l'exécution. @xref{Régionalisation}.
  8455. @item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
  8456. La liste des paquets GNU@tie{}libc dont les données des paramètres
  8457. linguistiques sont utilisées pour construire les définitions des paramètres
  8458. linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
  8459. qui justifient cette option.
  8460. @item @code{name-service-switch} (par défaut : @var{%default-nss})
  8461. La configuration de NSS de la libc (name service switch) — un objet
  8462. @code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
  8463. @item @code{services} (par défaut : @var{%base-services})
  8464. Une liste d'objets services qui dénotent les services du système.
  8465. @xref{Services}.
  8466. @item @code{pam-services} (par défaut : @code{(base-pam-services)})
  8467. @cindex PAM
  8468. @cindex pluggable authentication modules
  8469. @c FIXME: Add xref to PAM services section.
  8470. Services PAM (@dfn{pluggable authentication module}) Linux.
  8471. @item @code{setuid-programs} (par défaut : @var{%setuid-programs})
  8472. Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
  8473. les programmes setuid. @xref{Programmes setuid}.
  8474. @item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
  8475. @cindex fichier sudoers
  8476. Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
  8477. (@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
  8478. Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
  8479. @command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
  8480. peuvent gagner. La valeur par défaut est que seul @code{root} et les
  8481. membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
  8482. @end table
  8483. @end deftp
  8484. @node Systèmes de fichiers
  8485. @subsection Systèmes de fichiers
  8486. La liste des systèmes de fichiers à monter est spécifiée dans le champ
  8487. @code{file-systems} de la déclaration de système d'exploitation
  8488. (@pxref{Utiliser le système de configuration}). Chaque système de fichier est
  8489. déclaré avec la forme @code{file-system}, comme ceci :
  8490. @example
  8491. (file-system
  8492. (mount-point "/home")
  8493. (device "/dev/sda3")
  8494. (type "ext4"))
  8495. @end example
  8496. Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
  8497. l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
  8498. décrits plus bas.
  8499. @deftp {Type de données} file-system
  8500. Les objets de ce type représentent des systèmes de fichiers à monter. Ils
  8501. contiennent les membres suivants :
  8502. @table @asis
  8503. @item @code{type}
  8504. C'est une chaîne de caractères spécifiant le type du système de fichier —
  8505. p.@: ex.@: @code{"ext4"}.
  8506. @item @code{mount-point}
  8507. Désigne l'emplacement où le système de fichier sera monté.
  8508. @item @code{device}
  8509. Ce champ nomme le système de fichier « source ». il peut être l'une de ces
  8510. trois choses : une étiquette de système de fichiers, un UUID de système de
  8511. fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
  8512. offrent une manière de se référer à des systèmes de fichiers sans avoir à
  8513. coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
  8514. d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
  8515. obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
  8516. périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
  8517. disponibles au moment de monter le périphérique.}.
  8518. @findex file-system-label
  8519. Les étiquettes de systèmes de fichiers sont crées avec la procédure
  8520. @code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
  8521. @file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
  8522. système de fichiers référencé par son étiquette, donnée par la commande
  8523. @command{e2label} :
  8524. @example
  8525. (file-system
  8526. (mount-point "/home")
  8527. (type "ext4")
  8528. (device (file-system-label "my-home")))
  8529. @end example
  8530. @findex uuid
  8531. Les UUID sont convertis à partir de leur représentation en chaîne de
  8532. caractères (montrée par la command @command{tune2fs -l}) en utilisant la
  8533. forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
  8534. octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
  8535. RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
  8536. systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
  8537. que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
  8538. comme ceci :
  8539. @example
  8540. (file-system
  8541. (mount-point "/home")
  8542. (type "ext4")
  8543. (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
  8544. @end example
  8545. Lorsque la source d'un système de fichiers est un périphérique mappé
  8546. (@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
  8547. nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
  8548. Cela est requis pour que le système sache que monter ce système de fichier
  8549. dépend de la présence du périphérique mappé correspondant.
  8550. @item @code{flags} (par défaut : @code{'()})
  8551. C'est une liste de symboles qui dénotent des drapeaux de montage. Les
  8552. drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
  8553. (interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
  8554. setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
  8555. @item @code{options} (par défaut : @code{#f})
  8556. C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
  8557. montage.
  8558. @item @code{mount?} (par défaut : @code{#t})
  8559. Cette valeur indique s'il faut monter automatiquement le système de fichier
  8560. au démarrage du système. Lorsque la valeur est @code{#f}, le système de
  8561. fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
  8562. @command{mount}) mais n'est pas monté automatiquement.
  8563. @item @code{needed-for-boot?} (par défaut : @code{#f})
  8564. Cette valeur booléenne indique si le système de fichier est nécessaire au
  8565. démarrage. Si c'est vrai alors le système de fichier est monté au
  8566. chargement du disque de RAM initial. C'est toujours le cas par exemple du
  8567. système de fichiers racine.
  8568. @item @code{check?} (par défaut : @code{#t})
  8569. Cette valeur booléenne indique si le système de fichier doit être vérifié
  8570. avant de le monter.
  8571. @item @code{create-mount-point?} (par défaut : @code{#f})
  8572. Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
  8573. pas déjà.
  8574. @item @code{dependencies} (par défaut : @code{'()})
  8575. C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
  8576. représentent les systèmes de fichiers qui doivent être montés ou les
  8577. périphériques mappés qui doivent être ouverts avant (et monté ou fermés
  8578. après) celui-ci.
  8579. Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
  8580. est une dépendance de @file{/sys/fs/cgroup/cpu} et
  8581. @file{/sys/fs/cgroup/memory}.
  8582. Un autre exemple est un système de fichier qui dépend d'un périphérique
  8583. mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
  8584. @end table
  8585. @end deftp
  8586. Le module @code{(gnu system file-systems)} exporte les variables utiles
  8587. suivantes.
  8588. @defvr {Variable Scheme} %base-file-systems
  8589. Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
  8590. normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
  8591. (voir plus bas). Les déclarations de systèmes d'exploitation devraient au
  8592. moins les contenir.
  8593. @end defvr
  8594. @defvr {Variable Scheme} %pseudo-terminal-file-system
  8595. C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
  8596. @dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
  8597. (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
  8598. pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
  8599. @command{xterm}.
  8600. @end defvr
  8601. @defvr {Variable Scheme} %shared-memory-file-system
  8602. Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
  8603. partage de mémoire entre processus (@pxref{Memory-mapped I/O,
  8604. @code{shm_open},, libc, The GNU C Library Reference Manual}).
  8605. @end defvr
  8606. @defvr {Variable Scheme} %immutable-store
  8607. Ce système de fichiers effectue un « montage lié » en lecture-seule de
  8608. @file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
  8609. les utilisateurs dont @code{root}. Cela évite que des logiciels qui
  8610. tournent en @code{root} ou des administrateurs systèmes ne modifient
  8611. accidentellement le dépôt.
  8612. Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
  8613. remonté en lecture-écriture dans son propre « espace de nom ».
  8614. @end defvr
  8615. @defvr {Variable Scheme} %binary-format-file-system
  8616. Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
  8617. quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
  8618. demande que le module du noyau @code{binfmt.ko} soit chargé.
  8619. @end defvr
  8620. @defvr {Variable Scheme} %fuse-control-file-system
  8621. Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
  8622. privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
  8623. utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
  8624. chargé.
  8625. @end defvr
  8626. @node Périphériques mappés
  8627. @subsection Périphériques mappés
  8628. @cindex mappage de périphériques
  8629. @cindex périphériques mappés
  8630. Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
  8631. périphérique bloc, comme une partition sur un disque dur, peut être
  8632. @dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
  8633. avec des calculs supplémentaires sur les données qui naviguent entre les
  8634. deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
  8635. concept de « périphérique mappé » et celle d'un système de fichiers : les
  8636. deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
  8637. faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
  8638. Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
  8639. avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
  8640. hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
  8641. de périphériques chiffrés : toutes les écritures sont sur le périphérique
  8642. mappé sont chiffrées, toutes les lectures déchiffrées, de manière
  8643. transparente. Guix étend cette notion en considérant que tout périphérique
  8644. ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
  8645. manière créent un nouveau périphérique ; par exemple, les périphériques RAID
  8646. sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
  8647. disque ou des partitions, en un nouveau périphérique en tant qu'unique
  8648. partition. Un autre exemple, qui n'est pas encore disponible, sont les
  8649. volumes logiques LVM.
  8650. Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
  8651. définie comme suit ; par exemple, voir ci-dessous.
  8652. @deftp {Type de données} mapped-device
  8653. Les objets de ce type représentent des mappages de périphériques qui seront
  8654. effectués au démarrage du système.
  8655. @table @code
  8656. @item source
  8657. C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
  8658. comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
  8659. assembler pour en créer un nouveau.
  8660. @item target
  8661. Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
  8662. mappeurs noyaux comme les périphériques chiffrés de type
  8663. @code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
  8664. périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
  8665. de type @code{raid-device-mapping}, il faut donner le nom complet comme
  8666. @code{"/dev/md0"}.
  8667. @item type
  8668. Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
  8669. @var{source} est mappés sur @var{target}.
  8670. @end table
  8671. @end deftp
  8672. @defvr {Variable Scheme} luks-device-mapping
  8673. Cela définie les périphériques blocs chiffrés en LUKS avec
  8674. @command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
  8675. noyau Linux @code{dm-crypt}.
  8676. @end defvr
  8677. @defvr {Variable Scheme} raid-device-mapping
  8678. Cela définie un périphérique RAID qui est assemblé avec la commande
  8679. @code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
  8680. approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
  8681. RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
  8682. @end defvr
  8683. @cindex chiffrement du disque
  8684. @cindex LUKS
  8685. L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
  8686. @file{/dev/mapper/home} avec LUKS —
  8687. @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
  8688. mécanisme standard pour chiffrer les disques. Le périphérique
  8689. @file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
  8690. déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
  8691. @example
  8692. (mapped-device
  8693. (source "/dev/sda3")
  8694. (target "home")
  8695. (type luks-device-mapping))
  8696. @end example
  8697. Autrement, pour devenir indépendant du numéro de périphérique, on peut
  8698. obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
  8699. une commande comme :
  8700. @example
  8701. cryptsetup luksUUID /dev/sda3
  8702. @end example
  8703. et l'utiliser ainsi :
  8704. @example
  8705. (mapped-device
  8706. (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
  8707. (target "home")
  8708. (type luks-device-mapping))
  8709. @end example
  8710. @cindex chiffrement de l'espace d'échange
  8711. Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
  8712. d'échange peut contenir des données sensibles. Une manière de faire cela
  8713. est d'utiliser un fichier d'échange dans un système de fichiers sur un
  8714. périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
  8715. d'échange est chiffré parce que tout le périphérique est chiffré.
  8716. @xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
  8717. Un périphérique RAID formé des partitions @file{/dev/sda1} et
  8718. @file{/dev/sdb1} peut être déclaré ainsi :
  8719. @example
  8720. (mapped-device
  8721. (source (list "/dev/sda1" "/dev/sdb1"))
  8722. (target "/dev/md0")
  8723. (type raid-device-mapping))
  8724. @end example
  8725. Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
  8726. @code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
  8727. Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
  8728. pendant la création initiale du périphérique RAID et est ensuite déterminé
  8729. automatiquement.
  8730. @node Comptes utilisateurs
  8731. @subsection Comptes utilisateurs
  8732. @cindex utilisateurs
  8733. @cindex comptes
  8734. @cindex comptes utilisateurs
  8735. Les comptes utilisateurs et les groupes sont gérés entièrement par la
  8736. déclaration @code{operating-system}. Ils sont spécifiés avec les formes
  8737. @code{user-account} et @code{user-group} :
  8738. @example
  8739. (user-account
  8740. (name "alice")
  8741. (group "users")
  8742. (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
  8743. "audio" ;carte son
  8744. "video" ;périphériques réseaux comme les webcams
  8745. "cdrom")) ;le bon vieux CD-ROM
  8746. (comment "Bob's sister")
  8747. (home-directory "/home/alice"))
  8748. @end example
  8749. Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
  8750. système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
  8751. dans la déclaration @code{operating-system} existent, et avec les propriétés
  8752. spécifiées. Ainsi, les modifications ou les créations de comptes ou de
  8753. groupes effectuées directement en invoquant des commandes comme
  8754. @command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
  8755. permet de s'assurer que le système reste exactement tel que déclaré.
  8756. @deftp {Type de données} user-account
  8757. Les objets de se type représentent les comptes utilisateurs. Les membres
  8758. suivants peuvent être spécifiés :
  8759. @table @asis
  8760. @item @code{name}
  8761. Le nom du compte utilisateur.
  8762. @item @code{group}
  8763. @cindex groupes
  8764. C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
  8765. utilisateur auquel ce compte appartient.
  8766. @item @code{supplementary-groups} (par défaut : @code{'()})
  8767. Éventuellement, cela peut être définie comme une liste de noms de groupes
  8768. auxquels ce compte appartient.
  8769. @item @code{uid} (par défaut : @code{#f})
  8770. C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
  8771. dernier cas, le nombre est choisi automatiquement par le système à la
  8772. création du compte.
  8773. @item @code{comment} (par défaut : @code{""})
  8774. Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
  8775. @item @code{home-directory}
  8776. C'est le nom du répertoire personnel du compte.
  8777. @item @code{create-home-directory?} (par défaut : @code{#t})
  8778. Indique si le répertoire personnel du compte devrait être créé s'il n'existe
  8779. pas déjà.
  8780. @item @code{shell} (par défaut : Bash)
  8781. C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
  8782. comme shell (@pxref{G-Expressions}).
  8783. @item @code{system?} (par défaut : @code{#f})
  8784. C'est une valeur booléenne qui indique si le compte est un compte « système
  8785. ». Les comptes systèmes sont parfois traités à part ; par exemple, les
  8786. gestionnaires de connexion graphiques ne les liste pas.
  8787. @anchor{user-account-password}
  8788. @item @code{password} (par défaut : @code{#f})
  8789. Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
  8790. de passe utilisateurs en tant que @code{root} avec la commande
  8791. @command{passwd}, puis laisseriez l'utilisateur le changer avec
  8792. @command{passwd}. Les mots de passes définis avec @command{passwd} sont
  8793. bien sûr préservés après redémarrage et reconfiguration.
  8794. Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
  8795. ce champ doit contenir le mot de passe chiffré, comme une chaîne de
  8796. caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
  8797. plus d'information sur le chiffrement des mots de passe et
  8798. @ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
  8799. sur la procédure @code{crypt} de Guile.
  8800. @end table
  8801. @end deftp
  8802. @cindex groupes
  8803. Les déclarations de groupes sont encore plus simple :
  8804. @example
  8805. (user-group (name "students"))
  8806. @end example
  8807. @deftp {Type de données} user-group
  8808. C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
  8809. quelques champs :
  8810. @table @asis
  8811. @item @code{name}
  8812. Le nom du groupe.
  8813. @item @code{id} (par défaut : @code{#f})
  8814. L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
  8815. est alloué automatiquement lorsque le groupe est créé.
  8816. @item @code{system?} (par défaut : @code{#f})
  8817. Cette valeur booléenne indique si le groupe est un groupe « système ». les
  8818. groupes systèmes ont un numéro d'ID bas.
  8819. @item @code{password} (par défaut : @code{#f})
  8820. Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
  8821. bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
  8822. passe du groupe.
  8823. @end table
  8824. @end deftp
  8825. Par simplicité, une variable liste les groupes utilisateurs de base auxquels
  8826. on pourrait s'attendre :
  8827. @defvr {Variable Scheme} %base-groups
  8828. C'est la liste des groupes utilisateur de base que les utilisateurs et les
  8829. paquets s'attendent à trouver sur le système. Cela comprend des groupes
  8830. comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
  8831. contrôler l'accès à certains périphériques, comme « audio », « disk » et «
  8832. cdrom ».
  8833. @end defvr
  8834. @defvr {Variable Scheme} %base-user-accounts
  8835. C'est la liste des compte du système de base que les programmes peuvent
  8836. s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
  8837. Remarquez que le compte « root » n'est pas défini ici. C'est un cas
  8838. particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
  8839. @end defvr
  8840. @node Régionalisation
  8841. @subsection Régionalisation
  8842. @cindex paramètres linguistiques
  8843. Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
  8844. langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
  8845. Library Reference Manual}). Chaque paramètre linguistique a un nom de la
  8846. forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
  8847. ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
  8848. avec les conventions culturelles du Luxembourg, en utilisant l'encodage
  8849. UTF-8.
  8850. @cindex définition des paramètres linguistiques
  8851. Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
  8852. pour la machine en utilisant le champ @code{locale} de la déclaration
  8853. @code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
  8854. Les paramètres régionaux choisis sont automatiquement ajoutés aux
  8855. définitions des @dfn{paramètres régionaux} connues par le système au besoin,
  8856. avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
  8857. @code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
  8858. @code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
  8859. le champ @code{locale-definitions} de @code{operating-system} — c'est utile
  8860. par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
  8861. L'ensemble par défaut de définitions comprend certains paramètres
  8862. linguistiques parmi les plus utilisés, mais pas toutes les variantes
  8863. disponibles, pour gagner de la place.
  8864. Par exemple, pour ajouter les paramètres pour le frison septentrional en
  8865. Allemagne, la valeur de ce champ serait :
  8866. @example
  8867. (cons (locale-definition
  8868. (name "fy_DE.utf8") (source "fy_DE"))
  8869. %default-locale-definitions)
  8870. @end example
  8871. De me, pour gagner de la place, on peut vouloir lister dans
  8872. @code{locale-definitions} seulement les paramètres qui sont vraiment
  8873. utilisés, comme dans :
  8874. @example
  8875. (list (locale-definition
  8876. (name "ja_JP.eucjp") (source "ja_JP")
  8877. (charset "EUC-JP")))
  8878. @end example
  8879. @vindex LOCPATH
  8880. Les définitions des paramètres linguistiques compilées sont disponibles dans
  8881. @file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
  8882. libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
  8883. Guix cherche les données de régionalisation. Cet emplacement peut être
  8884. modifié avec la variable d'environnement @code{LOCPATH}
  8885. (@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
  8886. La forme @code{locale-definition} est fournie par le module @code{(gnu
  8887. system locale)}. Des détails sont disponibles plus bas.
  8888. @deftp {Type de données} locale-definition
  8889. C'est le type de données d'une définition de paramètres linguistiques.
  8890. @table @asis
  8891. @item @code{name}
  8892. Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
  8893. Library Reference Manual}, pour en savoir plus sur les noms de paramètres
  8894. linguistiques.
  8895. @item @code{source}
  8896. Le nom de la source pour ce paramètre linguistique. C'est typiquement la
  8897. partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
  8898. @item @code{charset} (par défaut : @code{"UTF-8"})
  8899. Le « jeu de caractères » d'un paramètre linguistique,
  8900. @uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
  8901. @end table
  8902. @end deftp
  8903. @defvr {Variable Scheme} %default-locale-definitions
  8904. Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
  8905. comme valeur par défaut pour le champ @code{locale-definitions} des
  8906. déclarations @code{operating-system}.
  8907. @cindex nom de paramètre linguistique
  8908. @cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
  8909. Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
  8910. caractère normalisé} pour la partie qui suit le point dans le nom
  8911. (@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
  8912. Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
  8913. @emph{pas}, disons, @code{uk_UA.UTF-8}.
  8914. @end defvr
  8915. @subsubsection Considérations sur la compatibilité des données linguistiques
  8916. @cindex incompatibilité, des données linguistiques
  8917. Les déclaration @code{operating-system} fournissent un champ
  8918. @code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
  8919. compiler les déclarations de paramètres linguistiques
  8920. (@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
  8921. », vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
  8922. des données linguistique est parfois incompatible d'une version de la libc à
  8923. une autre.
  8924. @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
  8925. @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
  8926. Par exemple, un programme lié à la libc version 2.21 est incapable de lire
  8927. les données linguistiques produites par la libc 2.22 ; pire, ce programme
  8928. @emph{plante} plutôt que d'ignorer les données linguistiques
  8929. incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
  8930. sauteront simplement les données linguistiques incompatibles, ce qui est
  8931. déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
  8932. mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
  8933. les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
  8934. @code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
  8935. Le « problème » avec GuixSD c'est que les utilisateurs ont beaucoup de
  8936. liberté : ils peuvent choisir s'ils veulent et quand ils veulent mettre à
  8937. jour les logiciels de leur profil, et peuvent utiliser une version
  8938. différente de la libc de celle que l'administrateur système utilise pour
  8939. construire les données linguistiques du système global.
  8940. Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
  8941. propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
  8942. (@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
  8943. Cependant, c'est encore mieux si les données linguistiques du système dans
  8944. @file{/run/current-system/locale} étaient construites avec les versions de
  8945. la libc utilisées sur le système, pour que tous les programmes puissent y
  8946. accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
  8947. cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
  8948. champ @code{locale-libcs} de @code{operating-system} :
  8949. @example
  8950. (use-package-modules base)
  8951. (operating-system
  8952. ;; @dots{}
  8953. (locale-libcs (list glibc-2.21 (canonical-package glibc))))
  8954. @end example
  8955. cet exemple créera un système contenant les définitions des paramètres
  8956. linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
  8957. @file{/run/current-system/locale}.
  8958. @node Services
  8959. @subsection Services
  8960. @cindex services systèmes
  8961. Une part importante de la préparation d'une déclaration
  8962. @code{operating-system} est la liste des @dfn{services systèmes} et de leur
  8963. configuration (@pxref{Utiliser le système de configuration}). Les services
  8964. systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
  8965. requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
  8966. GuixSD a une définition large de « service » (@pxref{Composition de services}),
  8967. mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
  8968. (@pxref{Services Shepherd}). Sur un système lancé, la commande
  8969. @command{herd} vous permet de lister les services disponibles, montrer leur
  8970. statut, les démarrer et les arrêter, ou faire d'autres opérations
  8971. spécifiques (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
  8972. exemple :
  8973. @example
  8974. # herd status
  8975. @end example
  8976. La commande ci-dessus, lancée en @code{root}, liste les services
  8977. actuellement définis. La commande @command{herd doc} montre un synopsis du
  8978. service donné et ses actions associées :
  8979. @example
  8980. # herd doc nscd
  8981. Run libc's name service cache daemon (nscd).
  8982. # herd doc nscd action invalidate
  8983. invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
  8984. @end example
  8985. Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
  8986. l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
  8987. service nscd et redémarrent le serveur d'affichage Xorg :
  8988. @example
  8989. # herd stop nscd
  8990. Service nscd has been stopped.
  8991. # herd restart xorg-server
  8992. Service xorg-server has been stopped.
  8993. Service xorg-server has been started.
  8994. @end example
  8995. Les sections suivantes documentent les services disponibles, en commençant
  8996. par les services de base qui peuvent être utilisés avec une déclaration
  8997. @code{operating-system}.
  8998. @menu
  8999. * Services de base:: Services systèmes essentiels.
  9000. * Exécution de tâches planifiées:: Le service mcron.
  9001. * Rotation des journaux:: Le service rottlog.
  9002. * Services réseau:: Paramétres réseau, démon SSH, etc.
  9003. * Système de fenêtrage X:: Affichage graphique.
  9004. * Services d'impression:: Support pour les imprimantes locales et
  9005. distantes.
  9006. * Services de bureaux:: D-Bus et les services de bureaux.
  9007. * Services de son:: Services ALSA et Pulseaudio.
  9008. * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
  9009. * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
  9010. * Services de messagerie:: Services de messagerie.
  9011. * Services de téléphonie:: Services de téléphonie.
  9012. * Services de surveillance:: Services de surveillance.
  9013. * Services Kerberos:: Services Kerberos.
  9014. * Services web:: Services web.
  9015. * Services de certificats:: Certificats TLS via Let's Encrypt.
  9016. * Services DNS:: Démons DNS@.
  9017. * Services VPN:: Démons VPN
  9018. * Système de fichiers en réseau:: Services liés à NFS@.
  9019. * Intégration continue:: Le service Cuirass.
  9020. * Services de gestion de l'énergie:: Augmenter la durée de vie de la
  9021. batterie.
  9022. * Services audio:: MPD@.
  9023. * Services de virtualisation:: Services de virtualisation.
  9024. * Services de contrôle de version:: Fournit des accès distants à des
  9025. dépôts Git.
  9026. * Services de jeu:: Serveurs de jeu.
  9027. * Services divers:: D'autres services.
  9028. @end menu
  9029. @node Services de base
  9030. @subsubsection Services de base
  9031. Le module @code{(gnu services base)} fournit des définitions de services
  9032. poru les services de base qu'on peut attendre du système. Les services
  9033. exportés par ce module sort listés ci-dessous.
  9034. @defvr {Variable Scheme} %base-services
  9035. Cette variable contient une liste de services de base (@pxref{Types service et services}, pour plus d'informations sur les objets service) qu'on peut
  9036. attendre du système : un service de connexion (mingetty) sur chaque tty,
  9037. syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
  9038. périphériques udev, et plus.
  9039. C'est la valeur par défaut du champ @code{services} des déclarations
  9040. @code{operating-system}. Habituellement, lors de la personnalisation d'un
  9041. système, vous voudrez ajouter des services à ceux de @var{%base-services},
  9042. comme ceci :
  9043. @example
  9044. (cons* (avahi-service) (lsh-service) %base-services)
  9045. @end example
  9046. @end defvr
  9047. @defvr {Variable Scheme} special-files-service-type
  9048. C'est le service qui met en place des « fichiers spéciaux » comme
  9049. @file{/bin/sh} ; une instance de ce service fait partie de
  9050. @code{%base-services}.
  9051. La valeur associée avec les services @code{special-files-service-type} doit
  9052. être une liste de couples dont le premier élément est le « fichier spécial »
  9053. et le deuxième sa cible. Par défaut il s'agit de :
  9054. @cindex @file{/bin/sh}
  9055. @cindex @file{sh}, dans @file{/bin}
  9056. @example
  9057. `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
  9058. @end example
  9059. @cindex @file{/usr/bin/env}
  9060. @cindex @file{env}, dans @file{/usr/bin}
  9061. Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
  9062. pouvez changer cela en :
  9063. @example
  9064. `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
  9065. ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
  9066. @end example
  9067. Comme il fait parti de @code{%base-services}, vous pouvez utiliser
  9068. @code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
  9069. (@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
  9070. simple d'ajouter un fichier spécial est d'utiliser la procédure
  9071. @code{extra-special-file} (voir plus bas).
  9072. @end defvr
  9073. @deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
  9074. Utilise @var{target} comme « fichier spécial » @var{file}.
  9075. Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
  9076. votre déclaration de système d'exploitation crée un lien symbolique
  9077. @file{/usr/bin/env} :
  9078. @example
  9079. (extra-special-file "/usr/bin/env"
  9080. (file-append coreutils "/bin/env"))
  9081. @end example
  9082. @end deffn
  9083. @deffn {Procédure Scheme} host-name-service @var{name}
  9084. Renvoie un service qui paramètre le nom d'hôte à @var{name}.
  9085. @end deffn
  9086. @deffn {Procédure Scheme} login-service @var{config}
  9087. Renvoie un service pour lancer login en suivant @var{config}, un objet
  9088. @code{<login-configuration>} qui spécifie le message du jour, entre autres
  9089. choses.
  9090. @end deffn
  9091. @deftp {Type de données} login-configuration
  9092. Le type de données qui représente la configuration de login.
  9093. @table @asis
  9094. @item @code{motd}
  9095. @cindex message du jour
  9096. Un objet simili-fichier contenant le « message du jour ».
  9097. @item @code{allow-empty-passwords?} (par défaut : @code{#t})
  9098. Permet les mots de passes vides par défaut pour que les utilisateurs
  9099. puissent se connecter au compte « root » la première fois après sa création.
  9100. @end table
  9101. @end deftp
  9102. @deffn {Procédure Scheme} mingetty-service @var{config}
  9103. Renvoie un service qui lance mingetty en suivant @var{config}, un objet
  9104. @code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
  9105. choses.
  9106. @end deffn
  9107. @deftp {Type de données} mingetty-configuration
  9108. C'est le type de données représentant la configuration de Mingetty, qui
  9109. fournit l'implémentation par défaut de l'écran de connexion des consoles
  9110. virtuelles.
  9111. @table @asis
  9112. @item @code{tty}
  9113. Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
  9114. @code{"tty1"}.
  9115. @item @code{auto-login} (par défaut : @code{#f})
  9116. Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
  9117. dénotant le nom d'utilisateur pour lequel le système se connecte
  9118. automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
  9119. d'utilisateur et un mot de passe pour se connecter.
  9120. @item @code{login-program} (par défaut : @code{#f})
  9121. Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
  9122. est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
  9123. dénotant le nom d'un programme de connexion.
  9124. @item @code{login-pause?} (par défaut : @code{#f})
  9125. Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
  9126. devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
  9127. @item @code{mingetty} (par défaut : @var{mingetty})
  9128. Le paquet Mingetty à utiliser.
  9129. @end table
  9130. @end deftp
  9131. @deffn {Procédure Scheme} agetty-service @var{config}
  9132. Renvoie un service pour lancer agetty en suivant @var{config}, un objet
  9133. @code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
  9134. choses.
  9135. @end deffn
  9136. @deftp {Type de données} agetty-configuration
  9137. Ce type de données représente la configuration de agetty, qui implémente
  9138. l'écran de connexion des consoles virtuelles et series. Voir la page de
  9139. manuel de @code{agetty(8)} pour plus d'informations.
  9140. @table @asis
  9141. @item @code{tty}
  9142. Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
  9143. @code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
  9144. raisonnable d'un port série utilisé par le noyau Linux.
  9145. Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
  9146. ligne de commande du noyau, agetty extraira le nom du périphérique du port
  9147. série à partir de cette option.
  9148. Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
  9149. la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
  9150. du port série et l'utilisera.
  9151. In both cases, agetty will leave the other serial device settings (baud rate
  9152. etc.)@: alone---in the hope that Linux pinned them to the correct values.
  9153. @item @code{baud-rate} (par défaut : @code{#f})
  9154. Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
  9155. des virgules, en ordre décroissant.
  9156. @item @code{term} (par défaut : @code{#f})
  9157. Une chaîne contenant la valeur utilisée pour la variable d'environnement
  9158. @code{TERM}.
  9159. @item @code{eight-bits?} (par défaut : @code{#f})
  9160. Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
  9161. caractères 8-bit et la détection de parité est désactivée.
  9162. @item @code{auto-login} (par défaut : @code{#f})
  9163. Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
  9164. l'utilisateur spécifié sera automatiquement connecté sans demande du nom
  9165. d'utilisateur ni du mot de passe.
  9166. @item @code{no-reset?} (par défaut : @code{#f})
  9167. Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
  9168. de contrôle).
  9169. @item @code{host} (par défaut : @code{#f})
  9170. Cette option accepte une chaîne contenant le « login_host », qui sera écrit
  9171. dans le fichier @file{/var/run/utmpx}.
  9172. @item @code{remote?} (par défaut : @code{#f})
  9173. Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
  9174. une option fakehost @code{-r} à la ligne de commande du programme de
  9175. connexion spécifié dans @var{login-program}.
  9176. @item @code{flow-control?} (par défaut : @code{#f})
  9177. Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
  9178. (RTS/CTS).
  9179. @item @code{no-issue?} (par défaut : @code{#f})
  9180. Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
  9181. sera pas affiché avant de présenter l'écran de connexion.
  9182. @item @code{init-string} (par défaut : @code{#f})
  9183. Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
  9184. modem avant toute autre chose. Elle peut être utilisée pour initialiser un
  9185. modem.
  9186. @item @code{no-clear?} (par défaut : @code{#f})
  9187. Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
  9188. montrer l'écran de connexion.
  9189. @item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
  9190. Cette option doit être soit une gexp dénotant le nom d'un programme de
  9191. connexion, soit non définie, auquel cas la valeur par défaut est la commande
  9192. @command{login} de la suite d'outils Shadow.
  9193. @item @code{local-line} (par défaut : @code{#f})
  9194. Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
  9195. comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
  9196. est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
  9197. @item @code{extract-baud?} (par défaut : @code{#f})
  9198. Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
  9199. de baud depuis les messages de statut produits par certains modems.
  9200. @item @code{skip-login?} (par défaut : @code{#f})
  9201. Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
  9202. peut être utilisée avec le champ @var{login-program} pour utiliser des
  9203. systèmes de connexion non standards.
  9204. @item @code{no-newline?} (par défaut : @code{#f})
  9205. Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
  9206. d'afficher le fichier @file{/etc/issue}.
  9207. @c Is this dangerous only when used with login-program, or always?
  9208. @item @code{login-options} (par défaut : @code{#f})
  9209. Cette option accepte une chaîne de caractères contenant des options passées
  9210. au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
  9211. conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
  9212. d'utilisateur contenant des options incluses qui pourraient être analysées
  9213. par le programme de connexion.
  9214. @item @code{login-pause} (par défaut : @code{#f})
  9215. Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
  9216. montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
  9217. pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
  9218. @item @code{chroot} (par défaut : @code{#f})
  9219. Change de racine dans le répertoire donné. Cette option accepte un chemin
  9220. en tant que chaîne de caractères.
  9221. @item @code{hangup?} (par défaut : @code{#f})
  9222. Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
  9223. le terminal spécifié.
  9224. @item @code{keep-baud?} (par défaut : @code{#f})
  9225. Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
  9226. Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
  9227. caractères @key{BREAK}.
  9228. @item @code{timeout} (par défaut : @code{#f})
  9229. Lorsque la valeur est un nombre entier, termine la session si aucun nom
  9230. d'utilisateur n'a pu être lu après @var{timeout} secondes.
  9231. @item @code{detect-case?} (par défaut : @code{#f})
  9232. Lorsque la valeur est @code{#t}, active le support pour la détection des
  9233. terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
  9234. d'utilisateur qui ne contient que des majuscules indique un terminal en
  9235. majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
  9236. que cela ne fonctionne pas avec les caractères unicode.
  9237. @item @code{wait-cr?} (par défaut : @code{#f})
  9238. Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
  9239. un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
  9240. l'écran de connexion. Cela est typiquement utilisé avec l'option
  9241. @var{init-string}.
  9242. @item @code{no-hints?} (par défaut : @code{#f})
  9243. Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
  9244. verrouillages numériques, majuscule et défilement.
  9245. @item @code{no-hostname?} (par défaut : @code{#f})
  9246. Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
  9247. aucun nom d'hôte ne sera affiché.
  9248. @item @code{long-hostname?} (par défaut : @code{#f})
  9249. Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
  9250. la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
  9251. @code{gethostname} ou @code{getaddrinfo} sera affiché.
  9252. @item @code{erase-characters} (par défaut : @code{#f})
  9253. Cette option accepte une chaîne de caractères de caractères supplémentaires
  9254. qui devraient être interprétés comme des effacements lorsque l'utilisateur
  9255. les tape dans leur nom d'utilisateur.
  9256. @item @code{kill-characters} (par défaut : @code{#f})
  9257. Cette option accepte une chaîne de caractères qui devrait être interprété
  9258. comme signifiant « ignore tous les caractères précédent » (aussi appelé un
  9259. caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
  9260. @item @code{chdir} (par défaut : @code{#f})
  9261. Cette option accepte, en tant que chaîne de caractères, un chemin vers un
  9262. répertoire dans lequel se trouvera la commande avant la connexion.
  9263. @item @code{delay} (par défaut : @code{#f})
  9264. Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
  9265. avant d'ouvrir le tty et afficher l'écran de connexion.
  9266. @item @code{nice} (par défaut : @code{#f})
  9267. Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
  9268. programme @command{login} tourne.
  9269. @item @code{extra-options} (par défaut : @code{'()})
  9270. Cette option fournie un « mécanisme de secours » pour que l'utilisateur
  9271. puisse ajouter des arguments de la ligne de commande arbitraires à
  9272. @command{agetty} comme une liste de chaînes de caractères.
  9273. @end table
  9274. @end deftp
  9275. @deffn {Procédure Scheme} kmscon-service-type @var{config}
  9276. Renvoie un service qui lance
  9277. @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
  9278. @var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
  9279. sur lequel tourner, entre autres choses.
  9280. @end deffn
  9281. @deftp {Type de données} kmscon-configuration
  9282. C'est le type de données représentant la configuration de Kscon, qui
  9283. implémente l'écran de chargement de la console virtuelle.
  9284. @table @asis
  9285. @item @code{virtual-terminal}
  9286. Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
  9287. @item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
  9288. Une gexp qui dénote le nom d'un programme de connexion. le programme de
  9289. connexion par défaut est @command{login} de la suite d'outils Shadow.
  9290. @item @code{login-arguments} (par défaut : @code{'("-p")})
  9291. Une liste d'arguments à passer à @command{login}.
  9292. @item @code{auto-login} (par défaut : @code{#f})
  9293. Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
  9294. l'utilisateur spécifié sera automatiquement connecté sans demande du nom
  9295. d'utilisateur ni du mot de passe.
  9296. @item @code{hardware-acceleration?} (par défaut : #f)
  9297. S'il faut utiliser l'accélération matérielle.
  9298. @item @code{kmscon} (par défaut : @var{kmscon})
  9299. Le paquet Kmscon à utiliser.
  9300. @end table
  9301. @end deftp
  9302. @cindex name service cache daemon
  9303. @cindex nscd
  9304. @deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
  9305. [#:name-services '()]
  9306. Renvoie un service qui lance le démon de cache de services de noms de la
  9307. libc (nscd) avec la @var{config} donnée — un objet
  9308. @code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
  9309. Parce que c'est pratique, le service du Shepherd pour nscd fournit les
  9310. actions suivantes :
  9311. @table @code
  9312. @item invalidate
  9313. @cindex invalidation du cache, nscd
  9314. @cindex nscd, invalidation du cache
  9315. Cela invalide le cache dnné. Par exemple, en laçant :
  9316. @example
  9317. herd invalidate nscd hosts
  9318. @end example
  9319. @noindent
  9320. on invalide le cache de noms d'hôtes de nscd.
  9321. @item statistiques
  9322. Lancer @command{herd statistics nscd} affiche des informations sur
  9323. l'utilisation de nscd et des caches.
  9324. @end table
  9325. @end deffn
  9326. @defvr {Variable Scheme} %nscd-default-configuration
  9327. C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
  9328. utilisée par @code{nscd-service}. Elle utilise les caches définis par
  9329. @var{%nscd-default-caches} ; voir plus bas.
  9330. @end defvr
  9331. @deftp {Type de données} nscd-configuration
  9332. C'est le type de données qui représente la configuration du démon de cache
  9333. de services de noms (nscd).
  9334. @table @asis
  9335. @item @code{name-services} (par défaut : @code{'()})
  9336. Liste des paquets dénotant des @dfn{services de noms} qui doivent être
  9337. visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
  9338. @item @code{glibc} (par défaut : @var{glibc})
  9339. Objet de paquet qui dénote la Biblothèque C de GNU qui fournit la commande
  9340. @command{nscd}.
  9341. @item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
  9342. Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
  9343. envoyée lorsque @code{debug-level} est strictement positif.
  9344. @item @code{debug-level} (par défaut : @code{0})
  9345. Entier qui dénote le niveau de débogage. Les entiers les plus grands
  9346. signifient plus de sortie de débogage.
  9347. @item @code{caches} (par défaut : @var{%nscd-default-caches})
  9348. Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
  9349. ; voir plus bas.
  9350. @end table
  9351. @end deftp
  9352. @deftp {Type de données} nscd-cache
  9353. Type de données représentant une base de données de cache de nscd et ses
  9354. paramètres.
  9355. @table @asis
  9356. @item @code{database}
  9357. C'est un symbole qui représente le nom de la base de donnée à mettre en
  9358. cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
  9359. @code{services} qui désignent les bases de données NSS correspondantes
  9360. (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
  9361. @item @code{positive-time-to-live}
  9362. @itemx @code{negative-time-to-live} (par défaut : @code{20})
  9363. Un entier qui représente le nombre de secondes pendant lesquelles un
  9364. résultat positif ou négatif reste en cache.
  9365. @item @code{check-files?} (par défaut : @code{#t})
  9366. Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
  9367. à @var{database}.
  9368. Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
  9369. nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
  9370. prendre en compte.
  9371. @item @code{persistent?} (par défaut : @code{#t})
  9372. Indique si le cache devrait être stocké de manière persistante sur le
  9373. disque.
  9374. @item @code{shared?} (par défaut : @code{#t})
  9375. Indique si le cache devrait être partagé entre les utilisateurs.
  9376. @item @code{max-database-size} (par défaut : 32@tie{}MiB)
  9377. Taille maximale en octets de la base de données en cache.
  9378. @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
  9379. @c settings, so leave them out.
  9380. @end table
  9381. @end deftp
  9382. @defvr {Variable Scheme} %nscd-default-caches
  9383. Liste d'objets @code{<nscd-cache>} utilisés par défaut par
  9384. @code{nscd-configuration} (voir plus haut).
  9385. Elle active la mise en cache persistante et agressive des recherches de
  9386. services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
  9387. d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
  9388. et une protection de votre vie privée plus efficace — souvent le résultat
  9389. des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
  9390. de nom externes n'ont même pas besoin d'être questionnés.
  9391. @end defvr
  9392. @anchor{syslog-configuration-type}
  9393. @cindex syslog
  9394. @cindex logging
  9395. @deftp {Type de données} syslog-configuration
  9396. Ce type de données représente la configuration du démon syslog.
  9397. @table @asis
  9398. @item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
  9399. Le démon syslog à utiliser.
  9400. @item @code{config-file} (par défaut : @code{%default-syslog.conf})
  9401. Le fichier de configuration de syslog à utiliser.
  9402. @end table
  9403. @end deftp
  9404. @anchor{syslog-service}
  9405. @cindex syslog
  9406. @deffn {Procédure Scheme} syslog-service @var{config}
  9407. Renvoie un service qui lance un démon syslog en suivant @var{config}.
  9408. @xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
  9409. d'informations sur la syntaxe du fichier de configuration.
  9410. @end deffn
  9411. @defvr {Variable Scheme} guix-service-type
  9412. C'est le type de service qui lance le démon de construction,
  9413. @command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
  9414. un enregistrement @code{guix-configuration} décrit plus bas.
  9415. @end defvr
  9416. @anchor{guix-configuration-type}
  9417. @deftp {Type de données} guix-configuration
  9418. Ce type de données représente la configuration du démon de construction de
  9419. Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
  9420. @table @asis
  9421. @item @code{guix} (par défaut : @var{guix})
  9422. Le paquet Guix à utiliser.
  9423. @item @code{build-group} (par défaut : @code{"guixbuild"})
  9424. Nom du groupe des comptes utilisateurs de construction.
  9425. @item @code{build-accounts} (par défaut : @code{10})
  9426. Nombre de comptes utilisateurs de construction à créer.
  9427. @item @code{authorize-key?} (par défaut : @code{#t})
  9428. @cindex substituts, autorisations
  9429. Autoriser ou non les clefs de substituts listées dans @code{authorize-keys}
  9430. — par défaut celle de @code{hydra.gny.org} (@pxref{Substituts}).
  9431. @vindex %default-authorized-guix-keys
  9432. @item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
  9433. La liste des fichiers de clefs autorisées pour les imports d'archives, en
  9434. tant que liste de gexps sous forme de chaînes (@pxref{Invoquer guix archive}). Par défaut, elle contient celle de @code{hydra.gnu.org}
  9435. (@pxref{Substituts}).
  9436. @item @code{use-substitutes?} (par défaut : @code{#t})
  9437. S'il faut utiliser les substituts.
  9438. @item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
  9439. La liste des URL où trouver des substituts par défaut.
  9440. @item @code{max-silent-time} (par défaut : @code{0})
  9441. @itemx @code{timeout} (par défaut : @code{0})
  9442. Le nombre de secondes de silence et le nombre de secondes d'inactivité,
  9443. respectivement, après lesquelles un processus de construction son délai
  9444. d'attente. Une valeur de zéro désactive le délai d'attente.
  9445. @item @code{log-compression} (par défaut : @code{'bzip2})
  9446. Le type de compression utilisé par les journaux de construction — parmi
  9447. @code{gzip}, @code{bzip2} et @code{none}.
  9448. @item @code{extra-options} (par défaut : @code{'()})
  9449. Liste d'options supplémentaires de la ligne de commande pour
  9450. @command{guix-daemon}.
  9451. @item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
  9452. Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
  9453. écrites.
  9454. @item @code{http-proxy} (par défaut : @code{#f})
  9455. Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
  9456. sortie fixe et les substituts.
  9457. @item @code{tmpdir} (par défaut : @code{#f})
  9458. Un répertoire où @command{guix-daemon} effectuera ses constructions.
  9459. @end table
  9460. @end deftp
  9461. @deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
  9462. Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
  9463. règles udev peuvent être fournies comme une liste de fichier via la variable
  9464. @var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
  9465. @code{(gnu services base)} simplifient la création de ces fichiers de règle.
  9466. @deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
  9467. Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
  9468. définie par le litéral @var{contents}.
  9469. Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
  9470. sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
  9471. script à la détection du périphérique USB avec l'identifiant de produit
  9472. donné.
  9473. @example
  9474. (define %example-udev-rule
  9475. (udev-rule
  9476. "90-usb-thing.rules"
  9477. (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
  9478. "ATTR@{product@}==\"Example\", "
  9479. "RUN+=\"/path/to/script\"")))
  9480. @end example
  9481. @end deffn
  9482. Ici on montre comment le service @var{udev-service} par défaut peut être
  9483. étendu avec cette règle.
  9484. @example
  9485. (operating-system
  9486. ;; @dots{}
  9487. (services
  9488. (modify-services %desktop-services
  9489. (udev-service-type config =>
  9490. (udev-configuration (inherit config)
  9491. (rules (append (udev-configuration-rules config)
  9492. (list %example-udev-rule))))))))
  9493. @end example
  9494. @deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
  9495. Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
  9496. dans @var{file}, un objet simili-fichier.
  9497. L'exemple suivant montre comment utiliser un fichier de règles existant.
  9498. @example
  9499. (use-modules (guix download) ;pour url-fetch
  9500. (guix packages) ;pour origin
  9501. ;; @dots{})
  9502. (define %android-udev-rules
  9503. (file->udev-rule
  9504. "51-android-udev.rules"
  9505. (let ((version "20170910"))
  9506. (origin
  9507. (method url-fetch)
  9508. (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
  9509. "android-udev-rules/" version "/51-android.rules"))
  9510. (sha256
  9511. (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
  9512. @end example
  9513. @end deffn
  9514. En plus, les définitions des paquets de Guix peuvent être inclus dans
  9515. @var{rules} pour étendre les règles avec les définitions trouvées dans leur
  9516. sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
  9517. @var{file->udev-rule} précédent, on aurait pu utiliser le paquet
  9518. @var{android-udev-rules} qui existe dans le module @code{(gnu packages
  9519. android)}.
  9520. L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
  9521. pour que l'outil Android @command{adb} puisse détecter les appareils sans
  9522. privilège root. Il détaille aussi comment créer le grope @code{adbusers},
  9523. requis pour le bon fonctionnement des règles définies dans le paquet
  9524. @var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
  9525. @var{supplementary-groups} de la déclaration @var{user-account} ainsi que
  9526. dans le champ @var{groups} de l'enregistrement @var{operating-system}.
  9527. @example
  9528. (use-modules (gnu packages android) ;for android-udev-rules
  9529. (gnu system shadow) ;for user-group
  9530. ;; @dots{})
  9531. (operating-system
  9532. ;; @dots{}
  9533. (users (cons (user-acount
  9534. ;; @dots{}
  9535. (supplementary-groups
  9536. '("adbusers" ;for adb
  9537. "wheel" "netdev" "audio" "video"))
  9538. ;; @dots{})))
  9539. (groups (cons (user-group (system? #t) (name "adbusers"))
  9540. %base-groups))
  9541. ;; @dots{}
  9542. (services
  9543. (modify-services %desktop-services
  9544. (udev-service-type config =>
  9545. (udev-configuration (inherit config)
  9546. (rules (cons* android-udev-rules
  9547. (udev-configuration-rules config))))))))
  9548. @end example
  9549. @end deffn
  9550. @defvr {Variable Scheme} urandom-seed-service-type
  9551. Garde de l'entropie dans @var{%random-seed-file} pour démarrer
  9552. @file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
  9553. @file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
  9554. @file{/dev/hwrng} existe et peut être lu.
  9555. @end defvr
  9556. @defvr {Variable Scheme} %random-seed-file
  9557. C'est le nom du fichier où des octets aléatoires sont sauvegardés par
  9558. @var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
  9559. redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
  9560. @end defvr
  9561. @cindex disposition clavier
  9562. @cindex clavier
  9563. @deffn {Procédure Scheme} console-keymap-service @var{files} ...
  9564. @cindex disposition du clavier
  9565. Renvoie un service qui charge les dispositions claviers de @var{files} avec
  9566. la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
  9567. disposition par défaut, ce qui se fait ainsi :
  9568. @example
  9569. (console-keymap-service "dvorak")
  9570. @end example
  9571. Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
  9572. combiner les dispositions suivantes :
  9573. @example
  9574. (console-keymap-service "se-lat6" "se-fi-lat6")
  9575. @end example
  9576. Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
  9577. complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
  9578. @end deffn
  9579. @cindex souris
  9580. @cindex gpm
  9581. @defvr {Variable Scheme} gpm-service-type
  9582. C'est le type du service qui lance GPM, le @dfn{démon de souris à but
  9583. général}, qui fournit le support de la souris sur la console Linux. GPM
  9584. permet aux utilisateurs d'utiliser la souris dans la console, entre autres
  9585. pour sélectionner, copier et coller du texte.
  9586. La valeur pour les services de ce type doit être un @code{gpm-configuration}
  9587. (voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
  9588. @end defvr
  9589. @deftp {Type de données} gpm-configuration
  9590. Type de données représentant la configuration de GPM.
  9591. @table @asis
  9592. @item @code{options} (par défaut : @code{%default-gpm-options})
  9593. Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
  9594. des options par défaut dit à @command{gpm} d'écouter les événements de la
  9595. souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
  9596. pour plus d'informations.
  9597. @item @code{gpm} (par défaut : @code{gpm})
  9598. Le paquet GPM à utiliser.
  9599. @end table
  9600. @end deftp
  9601. @anchor{guix-publish-service-type}
  9602. @deffn {Variable Scheme} guix-publish-service-type
  9603. C'est le type de service pour @command{guix publish} (@pxref{Invoquer guix publish}). Sa valeur doit être un objet @code{guix-configuration} décrit
  9604. plus bas.
  9605. Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
  9606. créée par @command{guix archive --generate-key} (@pxref{Invoquer guix archive}). Si ce n'est pas le cas, le service ne démarrera pas.
  9607. @end deffn
  9608. @deftp {Type de données} guix-publish-configuration
  9609. Le type de données représentant la configuration du service @code{guix
  9610. publish}.
  9611. @table @asis
  9612. @item @code{guix} (par défaut : @code{guix})
  9613. Le paquet Guix à utiliser.
  9614. @item @code{port} (par défaut : @code{80})
  9615. Le port TCP sur lequel écouter les connexions.
  9616. @item @code{host} (par défaut : @code{"localhost"})
  9617. L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
  9618. @code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
  9619. @item @code{compression-level} (par défaut : @code{3})
  9620. Le niveau de compression gzip auquel les substituts sont compressés.
  9621. Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
  9622. pour avoir le meilleur taux de compression contre une plus grande
  9623. utilisation du CPU.
  9624. @item @code{nar-path} (par défaut : @code{"nar"})
  9625. Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
  9626. @code{--nar-path}}, pour des détails.
  9627. @item @code{cache} (par défaut : @code{#f})
  9628. Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
  9629. la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
  9630. @code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
  9631. des archives et des métadonnées prêtes à être envoyées. @xref{Invoquer guix publish, @option{--cache}}, pour plus d'informations sur les compromis
  9632. impliqués.
  9633. @item @code{workers} (par défaut : @code{#f})
  9634. Lorsque la valeur est un entier, c'est le nombre de threads de travail
  9635. utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
  9636. processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
  9637. pour plus d'informations.
  9638. @item @code{ttl} (par défaut : @code{#f})
  9639. Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
  9640. des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
  9641. plus d'informations.
  9642. @end table
  9643. @end deftp
  9644. @anchor{rngd-service}
  9645. @deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
  9646. [#:device "/dev/hwrng"]
  9647. Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
  9648. pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
  9649. échouera si @var{device} n'existe pas.
  9650. @end deffn
  9651. @anchor{pam-limits-service}
  9652. @cindex limites de session
  9653. @cindex ulimit
  9654. @cindex priorités
  9655. @cindex temps réel
  9656. @cindex jackd
  9657. @deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
  9658. Renvoie un service qui installe un fichier de configuration pour le
  9659. @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
  9660. @code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
  9661. @code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
  9662. limites @code{ulimit} et les priorités des sessions utilisateurs.
  9663. La définition de limites suivante défini deux limites matérielles et
  9664. logicielles pour toutes les sessions connectées des utilisateurs du groupe
  9665. @code{realtime} :
  9666. @example
  9667. (pam-limits-service
  9668. (list
  9669. (pam-limits-entry "@@realtime" 'both 'rtprio 99)
  9670. (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
  9671. @end example
  9672. La première entrée augment la priorité en temps réel maximale des processus
  9673. non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
  9674. d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
  9675. sont souvent utilisés sur les systèmes audio temps-réel.
  9676. @end deffn
  9677. @node Exécution de tâches planifiées
  9678. @subsubsection Exécution de tâches planifiées
  9679. @cindex cron
  9680. @cindex mcron
  9681. @cindex tâches planifiées
  9682. Le module @code{(gnu services mcron)} fournit une interface pour
  9683. GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
  9684. mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
  9685. traditionel @command{cron} ; la principale différence est qu'il est
  9686. implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
  9687. spécification de la planification des tâches et de leurs actions.
  9688. L'exemple en dessous définit un système d'exploitation qu lance les
  9689. commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
  9690. Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
  9691. ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
  9692. (@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
  9693. gexps pour introduire des définitions de tâches qui sont passées à mcron
  9694. (@pxref{G-Expressions}).
  9695. @lisp
  9696. (use-modules (guix) (gnu) (gnu services mcron))
  9697. (use-package-modules base idutils)
  9698. (define updatedb-job
  9699. ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
  9700. ;; l'action de la tâche comme une procédure Scheme.
  9701. #~(job '(next-hour '(3))
  9702. (lambda ()
  9703. (execl (string-append #$findutils "/bin/updatedb")
  9704. "updatedb"
  9705. "--prunepaths=/tmp /var/tmp /gnu/store"))))
  9706. (define garbage-collector-job
  9707. ;; Lance le ramasse-miettes tous les jours à minuit cinq.
  9708. ;; L'action de la tâche est une commande shell.
  9709. #~(job "5 0 * * *" ;Vixie cron syntax
  9710. "guix gc -F 1G"))
  9711. (define idutils-job
  9712. ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
  9713. ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
  9714. #~(job '(next-minute-from (next-hour '(12 19)) '(15))
  9715. (string-append #$idutils "/bin/mkid src")
  9716. #:user "charlie"))
  9717. (operating-system
  9718. ;; @dots{}
  9719. (services (cons (mcron-service (list garbage-collector-job
  9720. updatedb-job
  9721. idutils-job))
  9722. %base-services)))
  9723. @end lisp
  9724. @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
  9725. plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
  9726. est la référence du service mcron.
  9727. Sur un système lancé, vous pouvez utiliser l'action @code{schedule} du
  9728. service pour visualiser les travaux mcron qui seront exécutés ensuite :
  9729. @example
  9730. # herd schedule mcron
  9731. @end example
  9732. @noindent
  9733. Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous
  9734. pouvez spécifier le nombre de tâches à afficher :
  9735. @example
  9736. # herd schedule mcron 10
  9737. @end example
  9738. @deffn {Procédure Scheme} mcron-service @var{jobs} [#:mcron @var{mcron}]
  9739. Renvoie un service mcron qui lance @var{mcron} qui planifie les tâches
  9740. @var{jobs}, une liste de gexps qui dénotent des spécifications de tâches de
  9741. mcron.
  9742. C'est un raccourci pour :
  9743. @example
  9744. (service mcron-service-type
  9745. (mcron-configuration (mcron mcron) (jobs jobs)))
  9746. @end example
  9747. @end deffn
  9748. @defvr {Variable Scheme} mcron-service-type
  9749. C'est le type du service @code{mcron}, dont la valeur est un objet
  9750. @code{mcron-configuration}
  9751. Ce type de service peut être la cible d'une extension de service qui lui
  9752. fournit des spécifications de tâches supplémentaires (@pxref{Composition de services}). En d'autres termes, il est possible de définir des services
  9753. qui fournissent des tâches mcron à lancer.
  9754. @end defvr
  9755. @deftp {Type de données} mcron-configuration
  9756. Type données qui représente la configuration de mcron.
  9757. @table @asis
  9758. @item @code{mcron} (par défaut : @var{mcron})
  9759. Le paquet mcron à utiliser.
  9760. @item @code{jobs}
  9761. C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
  9762. à une spécification de tâche de mcron (@pxref{Syntax, mcron job
  9763. specifications,, mcron, GNU@tie{}mcron}).
  9764. @end table
  9765. @end deftp
  9766. @node Rotation des journaux
  9767. @subsubsection Rotation des journaux
  9768. @cindex rottlog
  9769. @cindex journaux, rotation
  9770. @cindex logging
  9771. Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
  9772. tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
  9773. tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
  9774. fichiers séparés, potentiellement compressés. Le module @code{(gnu services
  9775. admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
  9776. de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
  9777. L'exemple ci-dessous définit un système d'exploitation qui fournit la
  9778. rotation des journaux avec les paramètres par défaut, pour les journaux les
  9779. plus courants.
  9780. @lisp
  9781. (use-modules (guix) (gnu))
  9782. (use-service-modules admin mcron)
  9783. (use-package-modules base idutils)
  9784. (operating-system
  9785. ;; @dots{}
  9786. (services (cons (service rottlog-service-type)
  9787. %base-services)))
  9788. @end lisp
  9789. @defvr {Variable Scheme} rottlog-service-type
  9790. C'est le type du service Rotlog, dont la valeur est un objet
  9791. @code{rottlog-configuration}.
  9792. D'autres services peuvent étendre celui-ci avec de nouveaux objets
  9793. @code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
  9794. fichiers à faire tourner.
  9795. Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
  9796. pour lancer le service rottlog.
  9797. @end defvr
  9798. @deftp {Type de données} rottlog-configuration
  9799. Type de données représentant la configuration de rottlog.
  9800. @table @asis
  9801. @item @code{rottlog} (par défaut : @code{rottlog})
  9802. Le paquet Rottlog à utiliser.
  9803. @item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
  9804. Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
  9805. Variables,,, rottlog, GNU Rot[t]log Manual}).
  9806. @item @code{rotations} (par défaut : @code{%default-rotations})
  9807. Une liste d'objets @code{log-rotation} définis plus bas.
  9808. @item @code{jobs}
  9809. C'est une liste de gexps où chaque gexp correspond à une spécification de
  9810. tache de mcron (@pxref{Exécution de tâches planifiées}).
  9811. @end table
  9812. @end deftp
  9813. @deftp {Type de données} log-rotation
  9814. Type de données représentant la rotation d'un groupe de fichiers journaux.
  9815. En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
  9816. Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
  9817. d'un journal de cette manière :
  9818. @example
  9819. (log-rotation
  9820. (frequency 'daily)
  9821. (files '("/var/log/apache/*"))
  9822. (options '("storedir apache-archives"
  9823. "rotate 6"
  9824. "notifempty"
  9825. "nocompress")))
  9826. @end example
  9827. La liste des champs est la suivante :
  9828. @table @asis
  9829. @item @code{frequency} (par défaut : @code{'weekly})
  9830. La fréquence de rotation, un symbole.
  9831. @item @code{files}
  9832. La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
  9833. @item @code{options} (par défaut : @code{'()})
  9834. La liste des options de rottlog pour cette rotation (@pxref{Configuration
  9835. parameters,,, rottlog, GNU Rot[t]lg Manual}).
  9836. @item @code{post-rotate} (par défaut : @code{#f})
  9837. Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
  9838. @end table
  9839. @end deftp
  9840. @defvr {Variable Scheme} %default-rotations
  9841. Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
  9842. autres fichiers.
  9843. @end defvr
  9844. @defvr {Variable Scheme} %rotated-files
  9845. La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
  9846. s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
  9847. @end defvr
  9848. @node Services réseau
  9849. @subsubsection Services réseau
  9850. Le module @code{(gnu services networking)} fournit des services pour
  9851. configurer les interfaces réseaux.
  9852. @cindex DHCP, service réseau
  9853. @defvr {Variable Scheme} dhcp-client-service-type
  9854. C'est le type de services qui lance @var{dhcp}, un client DHC (protocole de
  9855. configuration d'hôte dynamique) sur toutes les interfaces réseau
  9856. non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
  9857. @code{isc-dhcp} par défaut.
  9858. @end defvr
  9859. @deffn {Procédure Scheme} dhcpd-service-type
  9860. Ce type définie un service qui lance un démon DHCP. Pour créer un service
  9861. de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
  9862. exemple :
  9863. @example
  9864. (service dhcpd-service-type
  9865. (dhcpd-configuration
  9866. (config-file (local-file "my-dhcpd.conf"))
  9867. (interfaces '("enp0s25"))))
  9868. @end example
  9869. @end deffn
  9870. @deftp {Type de données} dhcpd-configuration
  9871. @table @asis
  9872. @item @code{package} (par défaut : @code{isc-dhcp})
  9873. Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
  9874. @file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
  9875. défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
  9876. @item @code{config-file} (par défaut : @code{#f})
  9877. Le fichier de configuration à utiliser. Il est requis. Il sera passé à
  9878. @code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
  9879. objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
  9880. @code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
  9881. configuration.
  9882. @item @code{version} (par défaut : @code{"4"})
  9883. La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
  9884. 4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
  9885. et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
  9886. de détails.
  9887. @item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
  9888. Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
  9889. ce répertoire sera créé s'il n'existe pas.
  9890. @item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
  9891. Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
  9892. @code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
  9893. @item @code{interfaces} (par défaut : @code{'()})
  9894. Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
  9895. n'est pas vide, alors ses éléments (qui doivent être des chaînes de
  9896. caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
  9897. du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
  9898. ; voir @code{man dhcpd} pour plus de détails.
  9899. @end table
  9900. @end deftp
  9901. @defvr {Variable Scheme} static-networking-service-type
  9902. @c TODO Document <static-networking> data structures.
  9903. C'est le type des interfaces réseaux configurés statiquement.
  9904. @end defvr
  9905. @deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
  9906. [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
  9907. [#:requirement @code{'(udev)}]
  9908. Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
  9909. @var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
  9910. @var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
  9911. la passerelle par défaut du réseau. @var{requirement} peut être utilisé
  9912. pour déclarer une dépendance sur un autre service avant de configurer
  9913. l'interface.
  9914. On peut appeler cette procédure plusieurs fois, une fois par interface
  9915. réseau qui nous intéresse. Dans les coulisses, elle étend
  9916. @code{static-networking-service-type} avec les interfaces réseaux
  9917. supplémentaires à gérer.
  9918. Par exemple :
  9919. @example
  9920. (static-networking-service "eno1" "192.168.1.82"
  9921. #:gateway "192.168.1.2"
  9922. #:name-servers '("192.168.1.2"))
  9923. @end example
  9924. @end deffn
  9925. @cindex wicd
  9926. @cindex sans-fil
  9927. @cindex WiFi
  9928. @cindex gestion du réseau
  9929. @deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
  9930. Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
  9931. de gestion réseau qui cherche à simplifier la configuration des résaux
  9932. filaires et sans fil.
  9933. Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
  9934. commandes pour interagir avec le démon et configurer le réseau :
  9935. @command{wicd-client}, une interface graphique et les interfaces
  9936. utilisateurs @command{wicd-cli} et @command{wicd-curses}.
  9937. @end deffn
  9938. @cindex ModemManager
  9939. @defvr {Variable Scheme} modem-manager-service-type
  9940. C'est le type de service pour le service
  9941. @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
  9942. valeur de ce type de service est un enregistrement
  9943. @code{modem-manager-configuration}.
  9944. Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
  9945. @end defvr
  9946. @deftp {Type de données} modem-manager-configuration
  9947. Type de donnée représentant la configuration de ModemManager.
  9948. @table @asis
  9949. @item @code{modem-manager} (par défaut : @code{modem-manager})
  9950. Le paquet ModemManager à utiliser.
  9951. @end table
  9952. @end deftp
  9953. @cindex NetworkManager
  9954. @defvr {Variable Scheme} network-manager-service-type
  9955. C'est le type de service pour le service
  9956. @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
  9957. valeur pour ce type de service est un enregistrement
  9958. @code{network-manager-configuration}.
  9959. Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
  9960. @end defvr
  9961. @deftp {Type de données} network-manager-configuration
  9962. Type de données représentant la configuration de NetworkManager.
  9963. @table @asis
  9964. @item @code{network-manager} (par défaut : @code{network-manager})
  9965. Le paquet NetworkManager à utiliser.
  9966. @item @code{dns} (par défaut : @code{"default"})
  9967. Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
  9968. utilise le fichier de configuration @code{resolv.conf}
  9969. @table @samp
  9970. @item default
  9971. NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
  9972. de noms fournis par les connexions actives.
  9973. @item dnsmasq
  9974. NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
  9975. utilisant une configuration « DNS disjointe » si vous êtes connecté par un
  9976. VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
  9977. nom local.
  9978. @item none
  9979. NetworkManager ne modifiera pas @code{resolv.conf}.
  9980. @end table
  9981. @item @code{vpn-plugins} (par défaut : @code{'()})
  9982. C'est la liste des greffons disponibles pour les VPN (réseaux privés
  9983. virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
  9984. permet à NetworkManager de gérer des VPN via OpenVPN.
  9985. @end table
  9986. @end deftp
  9987. @cindex Connman
  9988. @deffn {Variable Scheme} connman-service-type
  9989. C'est le type de service pour lancer @url{https://01.org/connman,Connman},
  9990. un gestionnaire de connexions réseaux.
  9991. Sa valeur doit être un enregistrement @code{connman-configuration} comme
  9992. dans cet exemple :
  9993. @example
  9994. (service connman-service-type
  9995. (connman-configuration
  9996. (disable-vpn? #t)))
  9997. @end example
  9998. Voir plus bas pour des détails sur @code{connman-configuration}.
  9999. @end deffn
  10000. @deftp {Type de données} connman-configuration
  10001. Type de données représentant la configuration de connman.
  10002. @table @asis
  10003. @item @code{connman} (par défaut : @var{connman})
  10004. Le paquet connman à utiliser.
  10005. @item @code{disable-vpn?} (par défaut : @code{#f})
  10006. Lorsque la valeur est vraie, désactive le greffon vpn de connman.
  10007. @end table
  10008. @end deftp
  10009. @cindex WPA Supplicant
  10010. @defvr {Variable Scheme} wpa-supplicant-service-type
  10011. C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
  10012. supplicant}, un démon d'authentification requis pour s'authentifier sur des
  10013. WiFi chiffrés ou des réseaux ethernet.
  10014. @end defvr
  10015. @deftp {Type de données} wpa-supplicant-configuration
  10016. Type données qui représente la configuration de WPA Supplicant.
  10017. Il prend les paramètres suivants :
  10018. @table @asis
  10019. @item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
  10020. Le paquet WPA Supplicant à utiliser.
  10021. @item @code{dbus?} (par défaut : @code{#t})
  10022. Indique s'il faut écouter les requêtes sur D-Bus.
  10023. @item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
  10024. Où stocker votre fichier de PID.
  10025. @item @code{interface} (par défaut : @code{#f})
  10026. Si une valeur est indiquée, elle doit spécifier le nom d'une interface
  10027. réseau que WPA supplicant contrôlera.
  10028. @item @code{config-file} (par défaut : @code{#f})
  10029. Fichier de configuration facultatif à utiliser.
  10030. @item @code{extra-options} (par défaut : @code{'()})
  10031. Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
  10032. @end table
  10033. @end deftp
  10034. @cindex iptables
  10035. @defvr {Variable Scheme} iptables-service-type
  10036. This is the service type to set up an iptables configuration. iptables is a
  10037. packet filtering framework supported by the Linux kernel. This service
  10038. supports configuring iptables for both IPv4 and IPv6. A simple example
  10039. configuration rejecting all incoming connections except those to the ssh
  10040. port 22 is shown below.
  10041. @lisp
  10042. (service iptables-service-type
  10043. (iptables-configuration
  10044. (ipv4-rules (plain-file "iptables.rules" "*filter
  10045. :INPUT ACCEPT
  10046. :FORWARD ACCEPT
  10047. :OUTPUT ACCEPT
  10048. -A INPUT -p tcp --dport 22 -j ACCEPT
  10049. -A INPUT -j REJECT --reject-with icmp-port-unreachable
  10050. COMMIT
  10051. "))
  10052. (ipv6-rules (plain-file "ip6tables.rules" "*filter
  10053. :INPUT ACCEPT
  10054. :FORWARD ACCEPT
  10055. :OUTPUT ACCEPT
  10056. -A INPUT -p tcp --dport 22 -j ACCEPT
  10057. -A INPUT -j REJECT --reject-with icmp6-port-unreachable
  10058. COMMIT
  10059. "))))
  10060. @end lisp
  10061. @end defvr
  10062. @deftp {Type de données} iptables-configuration
  10063. Type de données représentant la configuration d'iptables.
  10064. @table @asis
  10065. @item @code{iptables} (par défaut : @code{iptables})
  10066. Le paquet iptables qui fournit @code{iptables-restore} et
  10067. @code{ip6tables-restore}.
  10068. @item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
  10069. Les règles iptables à utiliser. Elles seront passées à
  10070. @code{iptables-restore}. Cela peut être un objet « simili-fichier »
  10071. (@pxref{G-Expressions, file-like objects}).
  10072. @item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
  10073. Les règles iptables à utiliser. Elles seront passées à
  10074. @code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
  10075. (@pxref{G-Expressions, file-like objects}).
  10076. @end table
  10077. @end deftp
  10078. @cindex NTP (Network Time Protocol), service
  10079. @cindex horloge
  10080. @defvr {Variable Scheme} ntp-service-type
  10081. This is the type of the service running the @uref{http://www.ntp.org,
  10082. Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep
  10083. the system clock synchronized with that of the specified NTP servers.
  10084. La valeur de ce service est un objet @code{ntpd-configuration}, décrit
  10085. ci-dessous.
  10086. @end defvr
  10087. @deftp {Type de données} ntp-configuration
  10088. C'est le type de données représentant la configuration du service NTP.
  10089. @table @asis
  10090. @item @code{servers} (par défaut : @code{%ntp-servers})
  10091. C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
  10092. synchronisé.
  10093. @item @code{allow-large-adjustment?} (par défaut : @code{#f})
  10094. Détermine si @code{ntpd} peut faire un ajustement initial de plus de
  10095. 1@tie{}000 secondes.
  10096. @item @code{ntp} (par défaut : @code{ntp})
  10097. Le paquet NTP à utiliser.
  10098. @end table
  10099. @end deftp
  10100. @defvr {Variable Scheme} %ntp-servers
  10101. Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
  10102. serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
  10103. @end defvr
  10104. @cindex OpenNTPD
  10105. @deffn {Procédure Scheme} openntpd-service-type
  10106. Lance le démon NTP @command{ntpd}, implémenté par
  10107. @uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
  10108. système synchronisée avec celle des serveurs donnés.
  10109. @example
  10110. (service
  10111. openntpd-service-type
  10112. (openntpd-configuration
  10113. (listen-on '("127.0.0.1" "::1"))
  10114. (sensor '("udcf0 correction 70000"))
  10115. (constraint-from '("www.gnu.org"))
  10116. (constraints-from '("https://www.google.com/"))
  10117. (allow-large-adjustment? #t)))
  10118. @end example
  10119. @end deffn
  10120. @deftp {Type de données} openntpd-configuration
  10121. @table @asis
  10122. @item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
  10123. L'exécutable openntpd à utiliser.
  10124. @item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
  10125. Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
  10126. démon ntpd.
  10127. @item @code{query-from} (par défaut : @code{'()})
  10128. Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
  10129. sortantes.
  10130. @item @code{sensor} (par défaut : @code{'()})
  10131. Spécifie une liste de senseurs de différences de temps que ntpd devrait
  10132. utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
  10133. qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
  10134. documentation en amont} pour plus d'informations.
  10135. @item @code{server} (par défaut : @var{%ntp-servers})
  10136. Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
  10137. lesquels se synchroniser.
  10138. @item @code{servers} (par défaut : @code{'()})
  10139. Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
  10140. NTP avec lesquelles se synchroniser.
  10141. @item @code{constraint-from} (par défaut : @code{'()})
  10142. @code{ntpd} peut être configuré pour demander la « Date » à des serveurs
  10143. HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
  10144. pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
  10145. l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
  10146. authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
  10147. serveurs HTTPS qui fournissent cette contrainte.
  10148. @item @code{constraints-from} (par défaut : @code{'()})
  10149. Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
  10150. ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
  10151. noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
  10152. contrainte médiane.
  10153. @item @code{allow-large-adjustment?} (par défaut : @code{#f})
  10154. Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
  10155. secondes.
  10156. @end table
  10157. @end deftp
  10158. @cindex inetd
  10159. @deffn {Variable Scheme} inetd-service-type
  10160. Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
  10161. inetutils, GNU Inetutils}). @command{inetd} écoute des connexionssur des
  10162. sockets internet et démarre le programme spécifié uniquement lorsqu'une
  10163. connexion arrive sur l'un de ces sockets.
  10164. La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
  10165. suivant configure le démon @command{inetd} pour qu'il fournisse le service
  10166. @command{echo}, ainsi qu'in service smtp qui transfère le trafic smtp par
  10167. ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
  10168. :
  10169. @example
  10170. (service
  10171. inetd-service-type
  10172. (inetd-configuration
  10173. (entries (list
  10174. (inetd-entry
  10175. (name "echo")
  10176. (socket-type 'stream)
  10177. (protocol "tcp")
  10178. (wait? #f)
  10179. (user "root"))
  10180. (inetd-entry
  10181. (node "127.0.0.1")
  10182. (name "smtp")
  10183. (socket-type 'stream)
  10184. (protocol "tcp")
  10185. (wait? #f)
  10186. (user "root")
  10187. (program (file-append openssh "/bin/ssh"))
  10188. (arguments
  10189. '("ssh" "-qT" "-i" "/path/to/ssh_key"
  10190. "-W" "smtp-server:25" "user@@hostname")))))
  10191. @end example
  10192. Voir plus bas pour plus de détails sur @code{inetd-configuration}.
  10193. @end deffn
  10194. @deftp {Type de données} inetd-configuration
  10195. Type de données représentant la configuration de @command{inetd}.
  10196. @table @asis
  10197. @item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
  10198. L'exécutable @command{inetd} à utiliser.
  10199. @item @code{entries} (par défaut : @code{'()})
  10200. Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
  10201. crée avec le constructeur @code{inetd-entry}.
  10202. @end table
  10203. @end deftp
  10204. @deftp {Type de données} inetd-entry
  10205. Type de données représentant une entrée dans la configuration
  10206. d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
  10207. @command{inetd} écoutera les requêtes.
  10208. @table @asis
  10209. @item @code{node} (par défaut : @code{#f})
  10210. Chaîne de caractères facultative, un liste d'adresses locales séparées par
  10211. des virgules que @command{inetd} devrait utiliser pour écouter ce service.
  10212. @xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
  10213. complète de toutes les options.
  10214. @item @code{name}
  10215. Une chaîne de caractères dont le nom doit correspondre à une entrée de
  10216. @code{/etc/services}.
  10217. @item @code{socket-type}
  10218. Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
  10219. @code{'seqpacket}.
  10220. @item @code{protocol}
  10221. Une chaîne de caractères qui doit correspondre à une entrée dans
  10222. @code{/etc/protocols}.
  10223. @item @code{wait?} (par défaut : @code{#t})
  10224. Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
  10225. d'écouter de nouvelles demandes de service.
  10226. @item @code{user}
  10227. A string containing the user (and, optionally, group) name of the user as
  10228. whom the server should run. The group name can be specified in a suffix,
  10229. separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or
  10230. @code{"user.group"}.
  10231. @item @code{program} (par défaut : @code{"internal"})
  10232. Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
  10233. @command{inetd} devrait utiliser un service inclus.
  10234. @item @code{arguments} (par défaut : @code{'()})
  10235. A list strings or file-like objects, which are the server program's
  10236. arguments, starting with the zeroth argument, i.e.@: the name of the program
  10237. itself. For @command{inetd}'s internal services, this entry must be
  10238. @code{'()} or @code{'("internal")}.
  10239. @end table
  10240. @xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
  10241. discussion plus détaillée de chaque champ de configuration.
  10242. @end deftp
  10243. @cindex Tor
  10244. @defvr {Variable Scheme} tor-service-type
  10245. C'est le type pour un service qui lance le démon de navigation anonyme
  10246. @uref{https://torproject.org, Tor}. Le service est configuré avec un
  10247. enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
  10248. lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
  10249. @code{tor}.
  10250. @end defvr
  10251. @deffn {Procédure Scheme} tor-service [@var{config-file}] [#:tor @var{tor}]
  10252. Cette procédure est obsolète et sera supprimée dans les futures versions.
  10253. Renvoie un service de type @code{tor-service-type}. @var{config-file} et
  10254. @var{tor} ont la même signification que dans @code{<tor-configuration>}.
  10255. @end deffn
  10256. @deftp {Type de données} tor-configuration
  10257. @table @asis
  10258. @item @code{tor} (par défaut : @code{tor})
  10259. Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
  10260. @file{bin/tor} relativement à son répertoire de sortie. Le paquet par
  10261. défaut est le l'implémentation du @uref{https://www.torproject.org, projet
  10262. Tor}.
  10263. @item @code{config-file} (par défaut : @code{(plain-file "empty" "")})
  10264. Le fichier de configuration à utiliser. Il sera ajouté au fichier de
  10265. configuration par défaut, et le fichier de configuration final sera passé à
  10266. @code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
  10267. simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
  10268. tor} pour plus de détails sur la syntaxe du fichier de configuration.
  10269. @item @code{hidden-services} (par défaut : @code{'()})
  10270. La liste des enregistrements @code{<hidden-service>} à utiliser. Pour
  10271. n'importe quel service cache que vous ajoutez à cette liste, la
  10272. configuration appropriée pour activer le service caché sera automatiquement
  10273. ajouté au fichier de configuration par défaut. Vous pouvez aussi créer des
  10274. enregistrements @code{<hidden-service>} avec la procédure
  10275. @code{tor-hidden-service} décrite plus bas.
  10276. @item @code{socks-socket-type} (par défaut : @code{'tcp})
  10277. Le type de socket par défaut que Tor devrait utiliser pour les socket
  10278. SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
  10279. @code{'tcp}, alors Tor écoutera pas défaut sur le port TCP 9050 sur
  10280. l'interface de boucle locale (c.-à-d.@: localhost). S'il s'agit de
  10281. @code{'unix}, Tor écoutera sur le socket UNIX domain
  10282. @file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
  10283. groupe @code{tor}.
  10284. Si vous voulez personnaliser le socket SOCKS plus avant, laissez
  10285. @code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
  10286. @code{config-file} pour remplacer les valeurs par défaut avec votre propre
  10287. option @code{SocksPort}.
  10288. @end table
  10289. @end deftp
  10290. @cindex service caché
  10291. @deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
  10292. Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
  10293. @var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
  10294. comme dans :
  10295. @example
  10296. '((22 "127.0.0.1:22")
  10297. (80 "127.0.0.1:8080"))
  10298. @end example
  10299. Dans cet exemple, le port 22 du service caché est relié au port local 22 et
  10300. le port 80 est relié au port local 8080.
  10301. Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
  10302. fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
  10303. caché.
  10304. Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
  10305. Tor project's documentation} pour trouver plus d'information.
  10306. @end deffn
  10307. Le module @code{(gnu services rsync)} fournit les services suivant :
  10308. Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
  10309. disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
  10310. fichiers existants ou en téléverser des nouveaux.
  10311. @deffn {Variable Scheme} rsync-service-type
  10312. C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
  10313. un enregistrement @command{rsync-configuration} comme dans cet exemple :
  10314. @example
  10315. (service rsync-service-type)
  10316. @end example
  10317. Voir plus pas pour trouver des détails à propos de
  10318. @code{rsync-configuration}.
  10319. @end deffn
  10320. @deftp {Type de données} rsync-configuration
  10321. Type de données représentant la configuration de @code{rsync-service}.
  10322. @table @asis
  10323. @item @code{package} (par défaut : @var{rsync})
  10324. Le paquet @code{rsync} à utiliser.
  10325. @item @code{port-number} (par défaut : @code{873})
  10326. Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
  10327. le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
  10328. tant qu'utilisateur et groupe @code{root}.
  10329. @item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
  10330. Nom du fichier où @command{rsync} écrit son PID.
  10331. @item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
  10332. Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
  10333. @item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
  10334. Nom du fichier où @command{rsync} écrit son fichier de journal.
  10335. @item @code{use-chroot?} (par défaut : @var{#t})
  10336. S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
  10337. @item @code{share-path} (par défaut : @file{/srv/rsync})
  10338. Emplacement du répertoire partagé de @command{rsync}.
  10339. @item @code{share-comment} (par défaut : @code{"Rsync share"})
  10340. Commentaire du répertoire partagé de @command{rsync}.
  10341. @item @code{read-only?} (par défaut : @var{#f})
  10342. Permission en écriture sur le répertoire partagé.
  10343. @item @code{timeout} (par défaut : @code{300})
  10344. Délai d'attente d'entrée-sortie en secondes.
  10345. @item @code{user} (par défaut : @var{"root"})
  10346. Propriétaire du processus @code{rsync}.
  10347. @item @code{group} (par défaut : @var{"root"})
  10348. Groupe du processus @code{rsync}.
  10349. @item @code{uid} (par défaut : @var{"rsyncd"})
  10350. Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
  10351. fichiers ont lieu si le démon a été lancé en @code{root}.
  10352. @item @code{gid} (par défaut : @var{"rsyncd"})
  10353. Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
  10354. @end table
  10355. @end deftp
  10356. En plus, @code{(gnu services ssh)} fournit les services suivant.
  10357. @cindex SSH
  10358. @cindex serveur SSH
  10359. @deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
  10360. [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
  10361. [#:allow-empty-passwords? #f] [#:root-login? #f] @
  10362. [#:syslog-output? #t] [#:x11-forwarding? #t] @
  10363. [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
  10364. [#:public-key-authentication? #t] [#:initialize? #t]
  10365. Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
  10366. @var{port-number}. @var{host-key} doit désigner un fichier contenant la
  10367. clef d'hôte et ne doit être lisible que par root.
  10368. Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
  10369. qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
  10370. @var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
  10371. dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
  10372. vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
  10373. Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
  10374. lors de l'activation du service s'ils n'existent pas encore. Cela peut
  10375. prendre du temps et demande une interaction.
  10376. Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
  10377. générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
  10378. une paire de clefs dont la clef privée sera stockée dans le fichier
  10379. @var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
  10380. Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
  10381. interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
  10382. d'hôtes et d'adresses.
  10383. @var{allow-empty-passwords?} spécifie si les connexions avec des mots de
  10384. passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
  10385. root est acceptée.
  10386. Les autres options devraient être évidentes.
  10387. @end deffn
  10388. @cindex SSH
  10389. @cindex serveur SSH
  10390. @deffn {Variable Scheme} openssh-service-type
  10391. C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
  10392. @command{sshd}. Sa valeur doit être un enregistrement
  10393. @code{openssh-configuration} comme dans cet exemple :
  10394. @example
  10395. (service openssh-service-type
  10396. (openssh-configuration
  10397. (x11-forwarding? #t)
  10398. (permit-root-login 'without-password)
  10399. (authorized-keys
  10400. `(("alice" ,(local-file "alice.pub"))
  10401. ("bob" ,(local-file "bob.pub"))))))
  10402. @end example
  10403. Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
  10404. Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
  10405. dans cet exemple :
  10406. @example
  10407. (service-extension openssh-service-type
  10408. (const `(("charlie"
  10409. ,(local-file "charlie.pub")))))
  10410. @end example
  10411. @end deffn
  10412. @deftp {Type de données} openssh-configuration
  10413. C'est l'enregistrement de la configuration de la commande @command{sshd}
  10414. d'OpenSSH.
  10415. @table @asis
  10416. @item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
  10417. Nom du fichier où @command{sshd} écrit son PID.
  10418. @item @code{port-number} (par défaut : @code{22})
  10419. Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
  10420. @item @code{permit-root-login} (par défaut : @code{#f})
  10421. Ce champ détermine si et quand autoriser les connexions en root. Si la
  10422. valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
  10423. est @code{#t}, elles sont autorisées. S'il s'agit du symbole
  10424. @code{'without-password}, alors les connexions root sont autorisées mais pas
  10425. par une authentification par mot de passe.
  10426. @item @code{allow-empty-passwords?} (par défaut : @code{#f})
  10427. Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
  10428. peuvent se connecter. Sinon, ils ne peuvent pas.
  10429. @item @code{password-authentication?} (par défaut : @code{#t})
  10430. Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
  10431. mot de passe. Sinon, ils doivent utiliser une autre méthode
  10432. d'authentification.
  10433. @item @code{public-key-authentication?} (par défaut : @code{#t})
  10434. Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
  10435. clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
  10436. d'authentification.
  10437. Les clefs publiques autorisées sont stockées dans
  10438. @file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
  10439. version 2.
  10440. @item @code{x11-forwarding?} (par défaut : @code{#f})
  10441. Lorsque la valeur est vraie, le transfert de connexion du client graphique
  10442. X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
  10443. de @command{ssh} fonctionneront.
  10444. @item @code{allow-agent-forwarding?} (par défaut : @code{#t})
  10445. Indique s'il faut autoriser la redirection d'agent.
  10446. @item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
  10447. Indique s'il faut autoriser la redirection TCP.
  10448. @item @code{gateway-ports?} (par défaut : @code{#f})
  10449. Indique s'il faut autoriser les ports de passerelle.
  10450. @item @code{challenge-response-authentication?} (par défaut : @code{#f})
  10451. Specifies whether challenge response authentication is allowed (e.g.@: via
  10452. PAM).
  10453. @item @code{use-pam?} (par défaut : @code{#t})
  10454. Active l'interface avec le module d'authentification greffable, PAM. Si la
  10455. valeur est @code{#t}, cela activera l'authentification PAM avec
  10456. @code{challenge-response-authentication?} et
  10457. @code{password-authentication?}, en plus des modules de compte et de session
  10458. de PAM pour tous les types d'authentification.
  10459. Comme l'authentification par défi de PAM sert généralement un rôle
  10460. équivalent à l'authentification par mot de passe, vous devriez désactiver
  10461. soit @code{challenge-response-authentication?}, soit
  10462. @code{password-authentication?}.
  10463. @item @code{print-last-log?} (par défaut : @code{#t})
  10464. Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
  10465. connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
  10466. interactive.
  10467. @item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
  10468. Configures external subsystems (e.g.@: file transfer daemon).
  10469. C'est une liste de paires, composées chacune du nom du sous-système et d'une
  10470. commande (avec éventuellement des arguments) à exécuter à la demande du
  10471. sous-système.
  10472. La commande @command{internal-sftp} implémente un serveur SFTP dans le
  10473. processus. Autrement, on peut spécifier la commande @command{sftp-server} :
  10474. @example
  10475. (service openssh-service-type
  10476. (openssh-configuration
  10477. (subsystems
  10478. `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
  10479. @end example
  10480. @item @code{accepted-environment} (par défaut : @code{'()})
  10481. Liste de chaînes de caractères qui décrivent les variables d'environnement
  10482. qui peuvent être exportées.
  10483. Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
  10484. @code{man sshd_config}.
  10485. Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
  10486. Elle est initialisée par les émulateurs de terminaux qui supportent les
  10487. couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
  10488. shell pour activer les couleurs sur la ligne de commande si cette variable
  10489. est initialisée.
  10490. @example
  10491. (service openssh-service-type
  10492. (openssh-configuration
  10493. (accepted-environment '("COLORTERM"))))
  10494. @end example
  10495. @item @code{authorized-keys} (par défaut : @code{'()})
  10496. @cindex clefs autorisées, SSH
  10497. @cindex SSH, clefs autorisées
  10498. C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
  10499. d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
  10500. représentent les clefs publiques SSH. Par exemple :
  10501. @example
  10502. (openssh-configuration
  10503. (authorized-keys
  10504. `(("rekado" ,(local-file "rekado.pub"))
  10505. ("chris" ,(local-file "chris.pub"))
  10506. ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
  10507. @end example
  10508. @noindent
  10509. enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
  10510. @code{chris} et @code{root}.
  10511. Des clefs autorisées supplémentaires peuvent être spécifiées via
  10512. @code{service-extension}.
  10513. Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
  10514. @file{~/.ssh/authorized_keys}.
  10515. @item @code{log-level} (par défaut : @code{'info})
  10516. C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
  10517. @code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
  10518. Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
  10519. des noms de niveaux.
  10520. @end table
  10521. @end deftp
  10522. @deffn {Procédure Scheme} dropbear-service [@var{config}]
  10523. Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
  10524. Dropbear} avec la configuration @var{config} donnée, un objet
  10525. @code{<dropbear-configuration>}.
  10526. Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
  10527. ajoutez cet appel au champ @code{services} d evotre système d'exploitation :
  10528. @example
  10529. (dropbear-service (dropbear-configuration
  10530. (port-number 1234)))
  10531. @end example
  10532. @end deffn
  10533. @deftp {Type de données} dropbear-configuration
  10534. Ce type de données représente la configuration d'un démon SSH Dropbear.
  10535. @table @asis
  10536. @item @code{dropbear} (par défaut : @var{dropbear})
  10537. Le paquet Dropbear à utiliser.
  10538. @item @code{port-number} (par défaut : 22)
  10539. Le port TCP sur lequel le démon attend des connexions entrantes.
  10540. @item @code{syslog-output?} (par défaut : @code{#t})
  10541. Indique s'il faut activer la sortie vers syslog.
  10542. @item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
  10543. Nom du fichier de PID du démon.
  10544. @item @code{root-login?} (par défaut : @code{#f})
  10545. Indique s'il faut autoriser les connexions en @code{root}.
  10546. @item @code{allow-empty-passwords?} (par défaut : @code{#f})
  10547. Indique s'il faut autoriser les mots de passes vides.
  10548. @item @code{password-authentication?} (par défaut : @code{#t})
  10549. Indique s'il faut autoriser l'authentification par mot de passe.
  10550. @end table
  10551. @end deftp
  10552. @defvr {Variable Scheme} %facebook-host-aliases
  10553. Cette variable contient une chaîne de caractères à utiliser dans
  10554. @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
  10555. Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
  10556. des serveurs connus du service en ligne Facebook — p.@: ex.@:
  10557. @code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
  10558. équivalent en IPv6, @code{::1}.
  10559. Cette variable est typiquement utilisée dans le champ @code{hosts-file}
  10560. d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
  10561. @example
  10562. (use-modules (gnu) (guix))
  10563. (operating-system
  10564. (host-name "mamachine")
  10565. ;; ...
  10566. (hosts-file
  10567. ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
  10568. ;; et « mamachine », ainsi que pour les serveurs de Facebook.
  10569. (plain-file "hosts"
  10570. (string-append (local-host-aliases host-name)
  10571. %facebook-host-aliases))))
  10572. @end example
  10573. Ce mécanisme peut éviter que des programmes qui tournent localement, comme
  10574. des navigateurs Web, ne se connectent à Facebook.
  10575. @end defvr
  10576. Le module @code{(gnu services avahi)} fourni la définition suivante.
  10577. @deffn {Procédure Scheme} avahi-service [#:avahi @var{avahi}] @
  10578. [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
  10579. [#:ipv6? #t] [#:wide-area? #f] @
  10580. [#:domains-to-browse '()] [#:debug? #f]
  10581. Renvoie un service qui lance @command{avahi-daemon}, un serveur qui répond
  10582. aux requêtes mDNS/DNS-SD qui permet de découvrir des services et de chercher
  10583. des noms d'hôtes « sans configuration » (voir @uref{http://avahi.org/}) et
  10584. qui étend le démon de cache de services de noms (nscd) pour qu'il puisse
  10585. résoudre des noms en @code{.local} avec
  10586. @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. En plus,
  10587. ajoute le paquet @var{avahi} au profil du système pour que les commandes
  10588. comme @command{avahi-browse} soient directement utilisables.
  10589. Si @var{host-name} n'est pas @code{#f}, utilise cette valeur comme nom
  10590. d'hôte à publier pour la machine ; sinon, utilise le vrai nom d'hôte de la
  10591. machine.
  10592. Lorsque la valeur de @var{publish?} est vraie, la publication des noms
  10593. d'hôtes et des domaines sont autorisés ; en particulier, avahi-daemon
  10594. publiera le nom d'hôte et l'adresse IP de la machine via mDNS sur le réseau
  10595. local.
  10596. Lorsque la valeur de @var{wide-area?} est vraie, DNS-SD sur DNS unicast est
  10597. activé.
  10598. Les valeurs booléennes @var{ipv4?} et @var{ipv6?} déterminent s'il faut
  10599. utiliser un socket IPv4 ou IPv6 respectivement.
  10600. @end deffn
  10601. @deffn {Variable Scheme} openvswitch-service-type
  10602. C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
  10603. dont la valeur devrait être un objet @code{openvswitch-configuration}.
  10604. @end deffn
  10605. @deftp {Type de données} openvswitch-configuration
  10606. Type de données représentant la configuration de Open vSwitch, un
  10607. commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
  10608. massive des réseaux avec des extensions programmables.
  10609. @table @asis
  10610. @item @code{package} (par défaut : @var{openvswitch})
  10611. Objet de paquet de Open vSwitch.
  10612. @end table
  10613. @end deftp
  10614. @node Système de fenêtrage X
  10615. @subsubsection Système de fenêtrage X
  10616. @cindex X11
  10617. @cindex Système de fenêtrage X
  10618. @cindex gestionnaire de connexion
  10619. Le support pour le système d'affichage graphique X Window — en particulier
  10620. Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
  10621. qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
  10622. est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
  10623. @cindex gestionnaire de fenêtre
  10624. Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
  10625. fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
  10626. préférence en l'ajoutant au champ @code{packages} de votre définition de
  10627. système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
  10628. packages}).
  10629. @defvr {Variable Scheme} slim-service-type
  10630. C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
  10631. @cindex types de sessions (X11)
  10632. @cindex X11, types de sessions
  10633. SLiM cherche des @dfn{types de sessions} définies par les fichiers
  10634. @file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
  10635. permet aux utilisateurs de choisir une session depuis l'écran de connexion
  10636. avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
  10637. @code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
  10638. l'ensemble des paquets du système les rendra automatiquement disponibles sur
  10639. l'écran de connexion.
  10640. En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
  10641. disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
  10642. un gestionnaire de fenêtre au un autre client X.
  10643. @end defvr
  10644. @deftp {Type de données} slim-configuration
  10645. Type de données représentant la configuration de @code{slim-service-type}.
  10646. @table @asis
  10647. @item @code{allow-empty-passwords?} (par défaut : @code{#t})
  10648. S'il faut autoriser les connexions avec un mot de passe vide.
  10649. @item @code{auto-login?} (par défaut : @code{#f})
  10650. @itemx @code{default-user} (par défaut : @code{""})
  10651. Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
  10652. Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
  10653. que @code{default-user}.
  10654. @item @code{theme} (par défaut : @code{%default-slim-theme})
  10655. @itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
  10656. Le thème graphique à utiliser et son nom.
  10657. @item @code{auto-login-session} (par défaut : @code{#f})
  10658. Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
  10659. comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
  10660. "/bin/windowmaker")}.
  10661. Si la valeur est fausse, une session décrite par l'un des fichiers
  10662. @file{.desktop} disponibles dans @code{/run/current-system/profile} et
  10663. @code{~/.guix-profile} sera utilisée.
  10664. @quotation Remarque
  10665. Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
  10666. système ou dans votre profil utilisateur. Sinon, si
  10667. @code{auto-login-session} est faux, vous ne serez jamais capable de vous
  10668. connecter.
  10669. @end quotation
  10670. @item @code{startx} (par défaut : @code{(xorg-start-command)})
  10671. La commande utilisée pour démarrer le serveur graphique X11.
  10672. @item @code{xauth} (par défaut : @code{xauth})
  10673. Le paquet XAuth à utiliser.
  10674. @item @code{shepherd} (par défaut : @code{shepherd})
  10675. Le paquet Shepherd à utiliser pour invoquer @command{halt} et
  10676. @command{reboot}.
  10677. @item @code{sessreg} (par défaut : @code{sessreg})
  10678. Le paquet sessreg à utiliser pour enregistrer la session.
  10679. @item @code{slim} (par défaut : @code{slim})
  10680. Le paquet SLiM à utiliser.
  10681. @end table
  10682. @end deftp
  10683. @defvr {Variable Scheme} %default-theme
  10684. @defvrx {Variable Scheme} %default-theme-name
  10685. Le thème SLiM par défaut et son nom.
  10686. @end defvr
  10687. @deftp {Type de données} sddm-configuration
  10688. C'est le type de données représentant la configuration du service sddm.
  10689. @table @asis
  10690. @item @code{display-server} (par défaut : "x11")
  10691. Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
  10692. valeurs valides sont « x11 » et « wayland ».
  10693. @item @code{numlock} (par défaut : "on")
  10694. Les valeurs valides sont « on », « off » ou « none ».
  10695. @item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
  10696. La commande à lancer à l'arrêt du système.
  10697. @item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
  10698. La commande à lancer lors du redémarrage du système.
  10699. @item @code{theme} (par défaut : "maldives")
  10700. Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
  10701. et « maldives ».
  10702. @item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
  10703. Le répertoire où se trouvent les thèmes.
  10704. @item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
  10705. Répertoire où se trouvent les avatars.
  10706. @item @code{default-path} (par défaut : "/run/current-system/profile/bin")
  10707. Le PATH par défaut à utiliser.
  10708. @item @code{minimum-uid} (par défaut : 1000)
  10709. UID minimum pour être affiché dans SDDM.
  10710. @item @code{maximum-uid} (par défaut : 2000)
  10711. UID maximum pour être affiché dans SDDM.
  10712. @item @code{remember-last-user?} (par défaut : #t)
  10713. S'il faut se rappeler le dernier utilisateur connecté.
  10714. @item @code{remember-last-session?} (par défaut : #t)
  10715. S'il faut se rappeler la dernière session.
  10716. @item @code{hide-users} (par défaut : "")
  10717. Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
  10718. @item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
  10719. Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
  10720. de SDDM.
  10721. @item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
  10722. Le script à lancer avant de démarrer une session wayland.
  10723. @item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
  10724. Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
  10725. wayland.
  10726. @item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
  10727. Chemin vers xorg-server.
  10728. @item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
  10729. Chemin vers xauth.
  10730. @item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
  10731. Chemin vers Xephyr.
  10732. @item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
  10733. Le script à lancer après avoir démarré xorg-server.
  10734. @item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
  10735. Le script à lancer avant d'arrêter xorg-server.
  10736. @item @code{xsession-command} (par défaut : @code{xinitrc})
  10737. Le script à lancer avant de démarrer une session X.
  10738. @item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
  10739. Répertoire où trouver les fichiers .desktop pour les sessions X.
  10740. @item @code{minimum-vt} (par défaut : 7)
  10741. VT minimal à utiliser.
  10742. @item @code{xserver-arguments} (par défaut : "-nolisten tcp")
  10743. Arguments à passer à xorg-server.
  10744. @item @code{auto-login-user} (par défaut : "")
  10745. Utilisateur à utiliser pour la connexion automatique.
  10746. @item @code{auto-login-session} (par défaut : "")
  10747. Le fichier desktop à utiliser pour la connexion automatique.
  10748. @item @code{relogin?} (par défaut : #f)
  10749. S'il faut se reconnecter après la déconnexion.
  10750. @end table
  10751. @end deftp
  10752. @cindex gestionnaire de connexion
  10753. @cindex connexion X11
  10754. @deffn {Procédure Scheme} sddm-service config
  10755. Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
  10756. avec une configuration de type @code{<sddm-configuration>}.
  10757. @example
  10758. (sddm-service (sddm-configuration
  10759. (auto-login-user "Alice")
  10760. (auto-login-session "xfce.desktop")))
  10761. @end example
  10762. @end deffn
  10763. @deffn {Procédure Scheme} xorg-start-command [#:guile] @
  10764. [#:modules %default-xorg-modules] @
  10765. [#:fonts %default-xorg-fonts] @
  10766. [#:configuration-file (xorg-configuration-file @dots{})] @
  10767. [#:xorg-server @var{xorg-server}]
  10768. Renvoie un script @code{startx} dans lequel @var{modules}, une liste de
  10769. paquets de modules X et @var{fonts}, une liste de répertoires de polices X,
  10770. sont disponibles. Voir @code{xorg-wrapper} pour plus de détails sur les
  10771. arguments. Le résultat devrait être utilisé à la place de @code{startx}.
  10772. Habituellement le serveur X est démarré par un gestionnaire de connexion.
  10773. @end deffn
  10774. @deffn {Procédure Scheme} xorg-configuration-file @
  10775. [#:modules %default-xorg-modules] @
  10776. [#:fonts %default-xorg-fonts] @
  10777. [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
  10778. Renvoie un fichier de configuration pour le serveur Xorg qui contient des
  10779. chemins de recherche pour tous les pilotes communs.
  10780. @var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
  10781. serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
  10782. etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
  10783. @dfn{chemin de polices} du serveur.
  10784. @var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
  10785. pilote graphique automatiquement, soit une liste de noms de pilotes qui
  10786. seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
  10787. De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
  10788. résolution d'écran appropriée ; autrement, ce doit être une liste de
  10789. résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
  10790. Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
  10791. ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
  10792. supplémentaire à être ajouté directement au fichier de configuration.
  10793. @cindex disposition clavier
  10794. @cindex disposition du clavier
  10795. Cette procédure est particulièrement utile pour configurer une disposition
  10796. de clavier différente de la disposition US par défaut. Par exemple, pour
  10797. utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
  10798. :
  10799. @example
  10800. (define bepo-evdev
  10801. "Section \"InputClass\"
  10802. Identifier \"evdev keyboard catchall\"
  10803. Driver \"evdev\"
  10804. MatchIsKeyboard \"on\"
  10805. Option \"xkb_layout\" \"fr\"
  10806. Option \"xkb_variant\" \"bepo\"
  10807. EndSection")
  10808. (operating-system
  10809. ...
  10810. (services
  10811. (modify-services %desktop-services
  10812. (slim-service-type config =>
  10813. (slim-configuration
  10814. (inherit config)
  10815. (startx (xorg-start-command
  10816. #:configuration-file
  10817. (xorg-configuration-file
  10818. #:extra-config
  10819. (list bepo-evdev)))))))))
  10820. @end example
  10821. La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
  10822. configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
  10823. comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
  10824. seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
  10825. utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
  10826. disposition de clavier préférée une fois connecté. Le premier argument
  10827. correspond à la disposition, tandis que le second argument correspond à la
  10828. variante. La ligne @code{xkb_variant} peut être omise pour choisir la
  10829. variante par défaut.
  10830. @end deffn
  10831. @deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
  10832. Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
  10833. économiseur d'écran dont la commande est @var{program}, à l'ensemble des
  10834. programmes setuid et lui ajoute une entrée PAM. Par exemple :
  10835. @lisp
  10836. (screen-locker-service xlockmore "xlock")
  10837. @end lisp
  10838. rend utilisable le bon vieux XlockMore.
  10839. @end deffn
  10840. @node Services d'impression
  10841. @subsubsection Services d'impression
  10842. @cindex support des imprimantes avec CUPS
  10843. Le module @code{(gnu services cups)} fournit une définition de service Guix
  10844. pour le service d'impression CUPS. Pour ajouter le support d'une imprimante
  10845. à un système GuixSD, ajoutez un @code{cups-service} à la définition du
  10846. système d'exploitation :
  10847. @deffn {Variable Scheme} cups-service-type
  10848. Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
  10849. être une configuration CUPS valide (voir plus bas). Pour utiliser les
  10850. paramètres par défaut, écrivez simplement :
  10851. @example
  10852. (service cups-service-type)
  10853. @end example
  10854. @end deffn
  10855. La configuration de CUPS contrôle les paramètres de base de votre
  10856. installation CUPS : sur quelles interfaces il doit écouter, que faire si un
  10857. travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
  10858. une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
  10859. utiliser un outil comme les services de configuration d'imprimante de
  10860. GNOME. Par défaut, la configuration du service CUPS générera un certificat
  10861. auto-signé si besoin, pour les connexions sécurisée avec le serveur
  10862. d'impression.
  10863. Supposons que vous souhaitiez activer l'interface Web de CUPS et ajouter le
  10864. support pour les imprimantes Epson via le paquet @code{escpr} et our les
  10865. imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
  10866. directement, comme ceci (vous devez utiliser le module @code{(gnu packages
  10867. cups)}) :
  10868. @example
  10869. (service cups-service-type
  10870. (cups-configuration
  10871. (web-interface? #t)
  10872. (extensions
  10873. (list cups-filters escpr hplip-minimal))))
  10874. @end example
  10875. Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
  10876. paquet hplip, nous vous suggérons d'installer le paquet @code{hplip}, soit
  10877. dans votre configuration d'OS, soit en tant qu'utilisateur.
  10878. Les paramètres de configuration disponibles sont les suivants. Chaque
  10879. définition des paramètres est précédé par son type ; par exemple,
  10880. @samp{string-list foo} indique que le paramètre @code{foo} devrait être
  10881. spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
  10882. de spécifier la configuration comme une chaîne de caractères, si vous avez
  10883. un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
  10884. système ; voir la fin pour plus de détails.
  10885. @c The following documentation was initially generated by
  10886. @c (generate-documentation) in (gnu services cups). Manually maintained
  10887. @c documentation is better, so we shouldn't hesitate to edit below as
  10888. @c needed. However if the change you want to make to this documentation
  10889. @c can be done in an automated way, it's probably easier to change
  10890. @c (generate-documentation) than to make it below and have to deal with
  10891. @c the churn as CUPS updates.
  10892. Les champs de @code{cups-configuration} disponibles sont :
  10893. @deftypevr {paramètre de @code{cups-configuration}} package cups
  10894. Le paquet CUPS.
  10895. @end deftypevr
  10896. @deftypevr {paramètre de @code{cups-configuration}} package-list extensions
  10897. Pilotes et autres extensions du paquet CUPS.
  10898. @end deftypevr
  10899. @deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
  10900. Configuration de l'emplacement où écrire les journaux, quels répertoires
  10901. utiliser pour les travaux d'impression et les paramètres de configuration
  10902. privilégiés liés.
  10903. Les champs @code{files-configuration} disponibles sont :
  10904. @deftypevr {paramètre de @code{files-configuration}} log-location access-log
  10905. Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
  10906. désactive la génération de journaux d'accès. La valeur @code{stderr} fait
  10907. que les entrées du journal seront envoyés sur l'erreur standard lorsque
  10908. l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
  10909. lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
  10910. entrées du journal sont envoyées au démon de journalisation du système. Le
  10911. nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
  10912. @code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
  10913. La valeur par défaut est @samp{"/var/log/cups/access_log"}.
  10914. @end deftypevr
  10915. @deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
  10916. L'emplacement où CUPS devrait mettre les données en cache.
  10917. La valeur par défaut est @samp{"/var/cache/cups"}.
  10918. @end deftypevr
  10919. @deftypevr {paramètre de @code{files-configuration}} string config-file-perm
  10920. Spécifie les permissions pour tous les fichiers de configuration que
  10921. l'ordonnanceur écrit.
  10922. Remarquez que les permissions pour le fichier printers.conf sont
  10923. actuellement masqués pour ne permettre que l'accès par l'utilisateur de
  10924. l'ordonnanceur (typiquement root). La raison est que les URI des
  10925. imprimantes contiennent des informations d'authentification sensibles qui ne
  10926. devraient pas être connues sur le système. Il n'est pas possible de
  10927. désactiver cette fonctionnalité de sécurité.
  10928. La valeur par défaut est @samp{"0640"}.
  10929. @end deftypevr
  10930. @deftypevr {paramètre de @code{files-configuration}} log-location error-log
  10931. Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
  10932. désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
  10933. que les entrées du journal seront envoyés sur l'erreur standard lorsque
  10934. l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
  10935. lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
  10936. entrées du journal sont envoyées au démon de journalisation du système. Le
  10937. nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
  10938. @code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
  10939. La valeur par défaut est @samp{"/var/log/cups/error_log"}.
  10940. @end deftypevr
  10941. @deftypevr {paramètre de @code{files-configuration}} string fatal-errors
  10942. Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
  10943. Les types de chaînes sont :
  10944. @table @code
  10945. @item none
  10946. Aucune erreur n'est fatale.
  10947. @item all
  10948. Toutes les erreurs ci-dessous sont fatales.
  10949. @item browse
  10950. Les erreurs d'initialisation de la navigation sont fatales, par exemple les
  10951. connexion échouées au démon DNS-SD.
  10952. @item config
  10953. Les erreurs de syntaxe du fichier de configuration sont fatale.
  10954. @item listen
  10955. Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
  10956. sur la boucle locale ou les adresses @code{any}.
  10957. @item log
  10958. Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
  10959. @item permissions
  10960. Les mauvaises permissions des fichiers de démarrage sont fatales, par
  10961. exemple un certificat TLS et des fichiers de clefs avec des permissions
  10962. permettant la lecture à tout le monde.
  10963. @end table
  10964. La valeur par défaut est @samp{"all -browse"}.
  10965. @end deftypevr
  10966. @deftypevr {paramètre de @code{files-configuration}} boolean file-device?
  10967. Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
  10968. nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
  10969. permise.
  10970. La valeur par défaut est @samp{#f}.
  10971. @end deftypevr
  10972. @deftypevr {paramètre de @code{files-configuration}} string group
  10973. Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
  10974. programmes externes.
  10975. La valeur par défaut est @samp{"lp"}.
  10976. @end deftypevr
  10977. @deftypevr {paramètre de @code{files-configuration}} string log-file-perm
  10978. Spécifie les permissions pour tous les fichiers de journal que
  10979. l'ordonnanceur écrit.
  10980. La valeur par défaut est @samp{"0644"}.
  10981. @end deftypevr
  10982. @deftypevr {paramètre de @code{files-configuration}} log-location page-log
  10983. Définit le fichier de journal de page. Spécifier un nom de fichier vide
  10984. désactive la génération de journaux de pages. La valeur @code{stderr} fait
  10985. que les entrées du journal seront envoyés sur l'erreur standard lorsque
  10986. l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
  10987. lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
  10988. entrées du journal sont envoyées au démon de journalisation du système. Le
  10989. nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
  10990. @code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
  10991. La valeur par défaut est @samp{"/var/log/cups/page_log"}.
  10992. @end deftypevr
  10993. @deftypevr {paramètre de @code{files-configuration}} string remote-root
  10994. Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
  10995. clients qui se disent être l'utilisateur root. La valeur par défaut est
  10996. @code{remroot}.
  10997. La valeur par défaut est @samp{"remroot"}.
  10998. @end deftypevr
  10999. @deftypevr {paramètre de @code{files-configuration}} file-name request-root
  11000. Spécifie le répertoire qui contient les travaux d'impression et d'autres
  11001. données des requêtes HTTP.
  11002. La valeur par défaut est @samp{"/var/spool/cups"}.
  11003. @end deftypevr
  11004. @deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
  11005. Spécifie le niveau d'isolation de sécurité appliqué aux filtres
  11006. d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
  11007. soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
  11008. utilisée et supportée que sur macOS.
  11009. La valeur par défaut est @samp{strict}.
  11010. @end deftypevr
  11011. @deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
  11012. Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
  11013. cherchera les clefs publiques et privées dans ce répertoire : un fichier
  11014. @code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
  11015. correspondant pour la clef privée encodée en PEM.
  11016. La valeur par défaut est @samp{"/etc/cups/ssl"}.
  11017. @end deftypevr
  11018. @deftypevr {paramètre de @code{files-configuration}} file-name server-root
  11019. Spécifie le répertoire contenant les fichiers de configuration du serveur.
  11020. La valeur par défaut est @samp{"/etc/cups"}.
  11021. @end deftypevr
  11022. @deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
  11023. Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
  11024. configuration ou les fichiers d'état.
  11025. La valeur par défaut est @samp{#f}.
  11026. @end deftypevr
  11027. @deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
  11028. Spécifie le groupe ou les groupes à utiliser pour l'authentification du
  11029. groupe @code{@@SYSTEM}.
  11030. @end deftypevr
  11031. @deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
  11032. Spécifie le répertoire où les fichiers temporaires sont stockés.
  11033. La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
  11034. @end deftypevr
  11035. @deftypevr {paramètre de @code{files-configuration}} string user
  11036. Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
  11037. externes.
  11038. La valeur par défaut est @samp{"lp"}.
  11039. @end deftypevr
  11040. @end deftypevr
  11041. @deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
  11042. Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
  11043. @code{config} enregistre les ajouts, suppressions et modifications
  11044. d'imprimantes et de classes et lorsque les fichiers de configuration sont
  11045. accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
  11046. la suspension, la libération, la modification et l'annulation des travaux et
  11047. toutes les conditions de @code{config}. Le niveau @code{all} enregistre
  11048. toutes les requêtes.
  11049. La valeur par défaut est @samp{actions}.
  11050. @end deftypevr
  11051. @deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
  11052. Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
  11053. n'est plus nécessaire pour les quotas.
  11054. La valeur par défaut est @samp{#f}.
  11055. @end deftypevr
  11056. @deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
  11057. Spécifie les protocoles à utiliser pour partager les imprimantes sur le
  11058. réseau local.
  11059. La valeur par défaut est @samp{dnssd}.
  11060. @end deftypevr
  11061. @deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
  11062. Spécifie si l'interface web de CUPS est publiée.
  11063. La valeur par défaut est @samp{#f}.
  11064. @end deftypevr
  11065. @deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
  11066. Spécifie si les imprimantes partagées sont publiées.
  11067. La valeur par défaut est @samp{#f}.
  11068. @end deftypevr
  11069. @deftypevr {paramètre de @code{cups-configuration}} string classification
  11070. Spécifie la classification de sécurité du serveur. N'importe quel nom de
  11071. bannière peut être utilisé, comme « classifié », « confidentiel », « secret
  11072. », « top secret » et « déclassifié » ou la bannière peut être omise pour
  11073. désactiver les fonctions d'impression sécurisées.
  11074. La valeur par défaut est @samp{""}.
  11075. @end deftypevr
  11076. @deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
  11077. Spécifie si les utilisateurs peuvent remplacer la classification (page de
  11078. couverture) des travaux d'impression individuels avec l'option
  11079. @code{job-sheets}.
  11080. La valeur par défaut est @samp{#f}.
  11081. @end deftypevr
  11082. @deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
  11083. Spécifie le type d'authentification par défaut à utiliser.
  11084. La valeur par défaut est @samp{Basic}.
  11085. @end deftypevr
  11086. @deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
  11087. Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
  11088. La valeur par défaut est @samp{Required}.
  11089. @end deftypevr
  11090. @deftypevr {paramètre de @code{cups-configuration}} string default-language
  11091. Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
  11092. La valeur par défaut est @samp{"en"}.
  11093. @end deftypevr
  11094. @deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
  11095. Spécifie la taille de papier par défaut pour les nouvelles queues
  11096. d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
  11097. régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
  11098. par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
  11099. et @samp{"A4"}.
  11100. La valeur par défaut est @samp{"Auto"}.
  11101. @end deftypevr
  11102. @deftypevr {paramètre de @code{cups-configuration}} string default-policy
  11103. Spécifie la politique d'accès par défaut à utiliser.
  11104. La valeur par défaut est @samp{"default"}.
  11105. @end deftypevr
  11106. @deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
  11107. Spécifie si les imprimantes locales sont partagées par défaut.
  11108. La valeur par défaut est @samp{#t}.
  11109. @end deftypevr
  11110. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
  11111. Spécifie le délai pour mettre à jour les fichiers de configuration et
  11112. d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
  11113. possible, typiquement en quelques millisecondes.
  11114. La valeur par défaut est @samp{30}.
  11115. @end deftypevr
  11116. @deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
  11117. Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
  11118. sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
  11119. @code{retry-job}, qui tentera de nouveau l'impression plus tard ;
  11120. @code{retry-this-job}, qui retentera l'impression immédiatement ; et
  11121. @code{stop-printer} qui arrête l'imprimante.
  11122. La valeur par défaut est @samp{stop-printer}.
  11123. @end deftypevr
  11124. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
  11125. Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
  11126. minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
  11127. limite de 0 désactive la limite de filtrage. Une impression standard vers
  11128. une imprimante non-PostScript requirt une limite de filtre d'environ 200.
  11129. Une imprimante PostScript requiert environ la moitié (100). Mettre en place
  11130. la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
  11131. travail d'impression à la fois.
  11132. La valeur par défaut est @samp{0}.
  11133. @end deftypevr
  11134. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
  11135. Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
  11136. imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
  11137. plus basse priorité.
  11138. La valeur par défaut est @samp{0}.
  11139. @end deftypevr
  11140. @deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
  11141. Spécifie s'il faut faire des résolutions inverses sur les clients qui se
  11142. connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
  11143. nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
  11144. par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
  11145. avec des adresses non enregistrées ne s'adressent à votre serveur.
  11146. N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
  11147. absolument nécessaire.
  11148. La valeur par défaut est @samp{#f}.
  11149. @end deftypevr
  11150. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
  11151. Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
  11152. moteurs associés avec un travail annulé ou suspendu.
  11153. La valeur par défaut est @samp{30}.
  11154. @end deftypevr
  11155. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
  11156. Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
  11157. typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
  11158. des queues d'impressions normales dont la politique d'erreur est
  11159. @code{retry-job} ou @code{retry-current-job}.
  11160. La valeur par défaut est @samp{30}.
  11161. @end deftypevr
  11162. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
  11163. Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
  11164. typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
  11165. les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
  11166. @code{retry-current-job}.
  11167. La valeur par défaut est @samp{5}.
  11168. @end deftypevr
  11169. @deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
  11170. Spécifie s'il faut supporter les connexion HTTP keep-alive.
  11171. La valeur par défaut est @samp{#t}.
  11172. @end deftypevr
  11173. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
  11174. Spécifie combien de temps les connexions inactives avec les clients restent
  11175. ouvertes, en secondes.
  11176. La valeur par défaut est @samp{30}.
  11177. @end deftypevr
  11178. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
  11179. Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
  11180. données de formulaires HTML. Une limite de 0 désactive la vérification de
  11181. la limite.
  11182. La valeur par défaut est @samp{0}.
  11183. @end deftypevr
  11184. @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
  11185. Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
  11186. @var{adresse}:@var{port}, où @var{adresse} est sotit une daresse IPv6 dans
  11187. des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
  11188. adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
  11189. UNIX domain. La directive Listen est similaire à la directive Port mais
  11190. vous permet de restreindre l'accès à des interfaces ou des réseaux
  11191. spécifiques.
  11192. @end deftypevr
  11193. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
  11194. Spécifie le nombre de connexions en attente qui seront permises. Ça
  11195. n'affecte normalement que les serveurs très actifs qui ont atteint la limite
  11196. MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
  11197. simultanées. Lorsque la limite est atteinte, le système d'exploitation
  11198. refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
  11199. accepte les connexions en attente.
  11200. La valeur par défaut est @samp{128}.
  11201. @end deftypevr
  11202. @deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
  11203. Spécifie un ensemble de contrôles d'accès supplémentaires.
  11204. Les champs de @code{location-access-controls} disponibles sont :
  11205. @deftypevr {paramètre de @code{location-access-controls}} file-name path
  11206. Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
  11207. @end deftypevr
  11208. @deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
  11209. Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
  11210. que le champ @code{access-controls} de @code{operation-access-control}.
  11211. La valeur par défaut est @samp{()}.
  11212. @end deftypevr
  11213. @deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
  11214. Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
  11215. La valeur par défaut est @samp{()}.
  11216. Les champs de @code{method-access-controls} disponibles sont :
  11217. @deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
  11218. Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
  11219. méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
  11220. aux méthodes listées.
  11221. La valeur par défaut est @samp{#f}.
  11222. @end deftypevr
  11223. @deftypevr {paramètre de @code{method-access-controls}} method-list methods
  11224. Les méthodes auxquelles ce contrôle d'accès s'applique.
  11225. La valeur par défaut est @samp{()}.
  11226. @end deftypevr
  11227. @deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
  11228. Directives de contrôle d'accès, comme une liste de chaînes de caractères.
  11229. Chaque chaîne devrait être une directive, comme « Order allow, deny ».
  11230. La valeur par défaut est @samp{()}.
  11231. @end deftypevr
  11232. @end deftypevr
  11233. @end deftypevr
  11234. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
  11235. Spécifie le nombre de messages de débogage qui sont retenu pour la
  11236. journalisation si une erreur arrive dans un travail d'impression. Les
  11237. messages de débogage sont journalisés indépendamment du paramètre LogLevel.
  11238. La valeur par défaut est @samp{100}.
  11239. @end deftypevr
  11240. @deftypevr {paramètre de @code{cups-configuration}} log-level log-level
  11241. Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
  11242. @code{none} arrête toute journalisation alors que que @code{debug2}
  11243. enregistre tout.
  11244. La valeur par défaut est @samp{info}.
  11245. @end deftypevr
  11246. @deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
  11247. Spécifie le format de la date et de l'heure dans les fichiers de journaux.
  11248. La valeur @code{standard} enregistre les secondes entières alors que
  11249. @code{usecs} enregistre les microsecondes.
  11250. La valeur par défaut est @samp{standard}.
  11251. @end deftypevr
  11252. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
  11253. Spécifie le nombre maximum de clients simultanés qui sont autorisés par
  11254. l'ordonnanceur.
  11255. La valeur par défaut est @samp{100}.
  11256. @end deftypevr
  11257. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
  11258. Spécifie le nombre maximum de clients simultanés permis depuis une même
  11259. adresse.
  11260. La valeur par défaut est @samp{100}.
  11261. @end deftypevr
  11262. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
  11263. Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
  11264. chaque travail.
  11265. La valeur par défaut est @samp{9999}.
  11266. @end deftypevr
  11267. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
  11268. Spécifie la durée maximum qu'un travail peut rester dans l'état de
  11269. suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
  11270. désactive l'annulation des travaux suspendus.
  11271. La valeur par défaut est @samp{0}.
  11272. @end deftypevr
  11273. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
  11274. Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
  11275. permet un nombre illimité de travaux.
  11276. La valeur par défaut est @samp{500}.
  11277. @end deftypevr
  11278. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
  11279. Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
  11280. La valeur 0 permet au plus MaxJobs travaux par imprimante.
  11281. La valeur par défaut est @samp{0}.
  11282. @end deftypevr
  11283. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
  11284. Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
  11285. valeur 0 permet au plus MaxJobs travaux par utilisateur.
  11286. La valeur par défaut est @samp{0}.
  11287. @end deftypevr
  11288. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
  11289. Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
  11290. annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
  11291. coincés ».
  11292. La valeur par défaut est @samp{10800}.
  11293. @end deftypevr
  11294. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
  11295. Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
  11296. fasse tourner, en octets. La valeur 0 désactive la rotation.
  11297. La valeur par défaut est @samp{1048576}.
  11298. @end deftypevr
  11299. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
  11300. Spécifie la durée maximale à permettre entre les fichiers d'un travail en
  11301. contenant plusieurs, en secondes.
  11302. La valeur par défaut est @samp{300}.
  11303. @end deftypevr
  11304. @deftypevr {paramètre de @code{cups-configuration}} string page-log-format
  11305. Spécifie le format des lignes PageLog. Les séquences qui commencent par un
  11306. pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
  11307. que les autres caractères sont copiés littéralement. Les séquences pourcent
  11308. suivantes sont reconnues :
  11309. @table @samp
  11310. @item %%
  11311. insère un seul caractères pourcent
  11312. @item %@{name@}
  11313. insère la valeur de l'attribut IPP spécifié
  11314. @item %C
  11315. insère le nombre de copies pour la page actuelle
  11316. @item %P
  11317. insère le numéro de page actuelle
  11318. @item %T
  11319. insère la date et l'heure actuelle dans un format de journal commun
  11320. @item %j
  11321. insère l'ID du travail
  11322. @item %p
  11323. insère le nom de l'imprimante
  11324. @item %u
  11325. insère le nom d'utilisateur
  11326. @end table
  11327. Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
  11328. @code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
  11329. %@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
  11330. standards.
  11331. La valeur par défaut est @samp{""}.
  11332. @end deftypevr
  11333. @deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
  11334. Passe les variables d'environnement spécifiées aux processus fils ; une
  11335. liste de chaînes de caractères.
  11336. La valeur par défaut est @samp{()}.
  11337. @end deftypevr
  11338. @deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
  11339. Spécifie des politiques de contrôle d'accès nommées.
  11340. Les champs de @code{policy-configuration} disponibles sont :
  11341. @deftypevr {paramètre de @code{policy-configuration}} string name
  11342. Nom de la politique.
  11343. @end deftypevr
  11344. @deftypevr {paramètre de @code{policy-configuration}} string job-private-access
  11345. Spécifie une liste d'accès pour les valeurs privées du travail.
  11346. @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
  11347. requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
  11348. propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
  11349. le champ @code{system-group} de la configuration @code{files-config}, qui
  11350. est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
  11351. possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
  11352. @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
  11353. liste d'accès peut aussi être simplement @code{all} ou @code{default}.
  11354. La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
  11355. @end deftypevr
  11356. @deftypevr {paramètre de @code{policy-configuration}} string job-private-values
  11357. Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
  11358. @code{default}, ou @code{none}.
  11359. La valeur par défaut est @samp{"job-name job-originating-host-name
  11360. job-originating-user-name phone"}.
  11361. @end deftypevr
  11362. @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
  11363. Spécifie un liste d'accès pour les valeurs privées de la souscription.
  11364. @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
  11365. requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
  11366. propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
  11367. le champ @code{system-group} de la configuration @code{files-config}, qui
  11368. est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
  11369. possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
  11370. @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
  11371. liste d'accès peut aussi être simplement @code{all} ou @code{default}.
  11372. La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
  11373. @end deftypevr
  11374. @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
  11375. Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
  11376. @code{default}, ou @code{none}.
  11377. La valeur par défaut est @samp{"notify-events notify-pull-method
  11378. notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
  11379. @end deftypevr
  11380. @deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
  11381. Contrôle d'accès par les actions IPP.
  11382. La valeur par défaut est @samp{()}.
  11383. @end deftypevr
  11384. @end deftypevr
  11385. @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
  11386. Spécifie si les fichiers de travaux (les documents) sont préservés après
  11387. qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
  11388. fichiers de travaux sont préservés pour le nombre de secondes indiquées
  11389. après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
  11390. La valeur par défaut est @samp{86400}.
  11391. @end deftypevr
  11392. @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
  11393. Spécifie si l'historique des travaux est préservé après qu'un travail est
  11394. imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
  11395. est préservé pour le nombre de secondes indiquées après l'impression. Si la
  11396. valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
  11397. atteindre la limite MaxJobs.
  11398. La valeur par défaut est @samp{#t}.
  11399. @end deftypevr
  11400. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
  11401. Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
  11402. l'ordonnanceur.
  11403. La valeur par défaut est @samp{30}.
  11404. @end deftypevr
  11405. @deftypevr {paramètre de @code{cups-configuration}} string rip-cache
  11406. Spécifie la quantité de mémoire maximale à utiliser pour convertir des
  11407. documents en bitmaps pour l'imprimante.
  11408. La valeur par défaut est @samp{"128m"}.
  11409. @end deftypevr
  11410. @deftypevr {paramètre de @code{cups-configuration}} string server-admin
  11411. Spécifie l'adresse de courriel de l'administrateur système.
  11412. La valeur par défaut est @samp{"root@@localhost.localdomain"}.
  11413. @end deftypevr
  11414. @deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
  11415. La directive ServerAlias est utilisée pour la validation des en-tête HTTP
  11416. Host lorsque les clients se connectent à l'ordonnanceur depuis des
  11417. interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
  11418. système à des attaques connues de recombinaison DNS dans le navigateur, même
  11419. lorsque vous accédez au site à travers un pare-feu. Si la découverte
  11420. automatique des autres noms ne fonctionne pas, nous vous recommandons de
  11421. lister chaque nom alternatif avec une directive SeverAlias plutôt que
  11422. d'utiliser @code{*}.
  11423. La valeur par défaut est @samp{*}.
  11424. @end deftypevr
  11425. @deftypevr {paramètre de @code{cups-configuration}} string server-name
  11426. Spécifie le nom d'hôte pleinement qualifié du serveur.
  11427. La valeur par défaut est @samp{"localhost"}.
  11428. @end deftypevr
  11429. @deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
  11430. Spécifie les informations incluses dans les en-têtes Server des réponses
  11431. HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
  11432. @code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
  11433. @code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
  11434. rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
  11435. commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
  11436. IPP/2.0}.
  11437. La valeur par défaut est @samp{Minimal}.
  11438. @end deftypevr
  11439. @deftypevr {paramètre de @code{cups-configuration}} string set-env
  11440. Indique que la variable d'environnement spécifiée doit être passée aux
  11441. processus fils.
  11442. La valeur par défaut est @samp{"variable value"}.
  11443. @end deftypevr
  11444. @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
  11445. Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
  11446. valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
  11447. une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
  11448. pour indiquer toutes les interfaces.
  11449. La valeur par défaut est @samp{()}.
  11450. @end deftypevr
  11451. @deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
  11452. Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
  11453. chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
  11454. être sures. L'option @code{AllowRC4} active les suites de chiffrement
  11455. 128-bits RC4, qui sont requises pour certains vieux clients qui
  11456. n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
  11457. v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
  11458. v1.0.
  11459. La valeur par défaut est @samp{()}.
  11460. @end deftypevr
  11461. @deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
  11462. Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
  11463. IPP.
  11464. La valeur par défaut est @samp{#f}.
  11465. @end deftypevr
  11466. @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
  11467. Spécifie le délai d'attente des requêtes HTTP, en secondes.
  11468. La valeur par défaut est @samp{300}.
  11469. @end deftypevr
  11470. @deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
  11471. Spécifie si l'interface web est activée.
  11472. La valeur par défaut est @samp{#f}.
  11473. @end deftypevr
  11474. Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
  11475. t'aime bien mais arrête maintenant avec ces options de configuration
  11476. »@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
  11477. traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
  11478. effet. cependant, encore un point supplémentaire : vous pouvez avoir un
  11479. fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
  11480. ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
  11481. configuration d'un @code{cups-service-type}.
  11482. Les champs de @code{opaque-cups-configuration} disponibles sont :
  11483. @deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
  11484. Le paquet CUPS.
  11485. @end deftypevr
  11486. @deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
  11487. Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
  11488. @end deftypevr
  11489. @deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
  11490. Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
  11491. caractères.
  11492. @end deftypevr
  11493. Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
  11494. sont dans des chaînes du même nom, pouvez instancier un service CUPS de
  11495. cette manière :
  11496. @example
  11497. (service cups-service-type
  11498. (opaque-cups-configuration
  11499. (cupsd.conf cupsd.conf)
  11500. (cups-files.conf cups-files.conf)))
  11501. @end example
  11502. @node Services de bureaux
  11503. @subsubsection Services de bureaux
  11504. Le module @code{(gnu services desktop)} fournit des services qui sont
  11505. habituellement utiles dans le contexte d'une installation « de bureau » —
  11506. c'est-à-dire sur une machine qui fait tourner un service d'affichage
  11507. graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
  11508. Il définit aussi des services qui fournissent des environnements de bureau
  11509. spécifiques comme GNOME, XFCE et MATE.
  11510. Pour simplifier les choses, le module définit une variable contenant
  11511. l'ensemble des services que les utilisateurs s'attendent en général à avoir
  11512. sur une machine avec un environnement graphique et le réseau :
  11513. @defvr {Variable Scheme} %desktop-services
  11514. C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
  11515. ajustant des services pour une configuration « de bureau » typique.
  11516. En particulier, il ajoute un gestionnaire de connexion graphique (@pxref{Système de fenêtrage X, @code{slim-service}}), des verrouilleurs d'écran, un outil de
  11517. gestion réseau (@pxref{Services réseau,
  11518. @code{network-manager-service-type}}), des services de gestion de l'énergie
  11519. et des couleurs, le gestionnaire de connexion et de session @code{elogind},
  11520. le service de privilèges Polkit, le service de géolocalisation GeoClue, le
  11521. démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
  11522. mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
  11523. et le service name service switch est configuré pour pouvoir utiliser
  11524. @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
  11525. @end defvr
  11526. La variable @var{%desktop-services} peut être utilisée comme champ
  11527. @code{services} d'une déclaration @code{operating-system}
  11528. (@pxref{Référence de système d'exploitation, @code{services}}).
  11529. En plus, les procédures @code{gnome-desktop-service},
  11530. @code{xfce-desktop-service}, @code{mate-desktop-service} et
  11531. @code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
  11532. ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
  11533. du système comme les utilitaires d'ajustement de la luminosité et de gestion
  11534. de l'énergie sont ajoutés au système, en étendant @code{polkit} et
  11535. @code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
  11536. privilèges plus élevés sur un nombre limité d'interfaces systèmes
  11537. spécialisées. En plus, ajouter un service construit par
  11538. @code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
  11539. système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
  11540. au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
  11541. d'ouvrir une fenêtre de gestion des fichier « en mode root », si
  11542. l'utilisateur s'authentifie avec le mot de passe administrateur via
  11543. l'interface graphique polkit standard. « Ajouter MATE » signifie que
  11544. @code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
  11545. à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
  11546. d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
  11547. @code{dbus} est étendu comme il faut et que plusieurs binaires
  11548. d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
  11549. d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
  11550. correctement.
  11551. Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
  11552. par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
  11553. récent Wayland, vous devez utiliser @code{sddm-service} à la place de
  11554. @code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
  11555. ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
  11556. vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
  11557. avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
  11558. gnome-session}. Actuellement seul GNOME support Wayland.
  11559. @deffn {Procédure Scheme} gnome-desktop-service
  11560. Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
  11561. étend polkit avec des actions de @code{gnome-settings-daemon}.
  11562. @end deffn
  11563. @deffn {Procédure Scheme} xfce-desktop-service
  11564. Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
  11565. étend polkit avec la capacité pour @code{thunar} de manipuler le système de
  11566. fichier en tant que root depuis une session utilisateur, après que
  11567. l'utilisateur s'est authentifié avec le mot de passe administrateur.
  11568. @end deffn
  11569. @deffn {Procédure Scheme} mate-desktop-service
  11570. Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
  11571. étend polkit avec les actions de @code{mate-settings-daemon}.
  11572. @end deffn
  11573. @deffn {Procédure Scheme} enlightenment-desktop-service-type
  11574. Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
  11575. avec les actions de @code{efl}
  11576. @end deffn
  11577. @deftp {Type de données} enlightenment-desktop-service-configuration
  11578. @table @asis
  11579. @item @code{enlightenment} (par défaut : @code{enlightenment})
  11580. Le paquet enlightenment à utiliser.
  11581. @end table
  11582. @end deftp
  11583. Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
  11584. la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
  11585. Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
  11586. @code{%desktop-services} dans le champ @code{services} de votre
  11587. @code{operating-system}.
  11588. @example
  11589. (use-modules (gnu))
  11590. (use-service-modules desktop)
  11591. (operating-system
  11592. ...
  11593. ;; cons* ajoute les élément à la liste donnée en dernier argument
  11594. (services (cons* (gnome-desktop-service)
  11595. (xfce-desktop-service)
  11596. %desktop-services))
  11597. ...)
  11598. @end example
  11599. Ces environnements de bureau seront alors disponibles comme une option dans
  11600. la fenêtre de connexion graphique.
  11601. Les définitions de service qui sont vraiment incluses dans
  11602. @code{%desktop-services} et fournies par @code{(gnu services dbus)} et
  11603. @code{(gnu services desktop)} sont décrites plus bas.
  11604. @deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
  11605. Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
  11606. de @var{services}.
  11607. @uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
  11608. communication inter-processus. Son bus système est utilisé pour permettre à
  11609. des services systèmes de communiquer et d'être notifiés d'événements
  11610. systèmes.
  11611. @var{services} doit être une liste de paquets qui fournissent un répertoire
  11612. @file{etc/dbus-1/system.d} contenant de la configuration D-Bus
  11613. supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
  11614. avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
  11615. @code{(list avahi)}.
  11616. @end deffn
  11617. @deffn {Procédure Scheme} elogind-service [#:config @var{config}]
  11618. Renvoie un service qui lance le démon de gestion de connexion et de session
  11619. @code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
  11620. une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
  11621. sont connectés, le type de session qu'ils sont ouverte, suspendre le
  11622. système, désactiver la veille système, redémarrer le système et d'autre
  11623. taches.
  11624. Elogind gère la plupart des événements liés à l'énergie du système, par
  11625. exemple mettre en veille le système quand l'écran est rabattu ou en
  11626. l'éteignant quand le bouton de démarrage est appuyé.
  11627. L'argument @var{config} spécifie la configuration d'elogind et devrait être
  11628. le résultat d'une invocation de @code{(elogind-configuration
  11629. (@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
  11630. valeur par défaut sont :
  11631. @table @code
  11632. @item kill-user-processes?
  11633. @code{#f}
  11634. @item kill-only-users
  11635. @code{()}
  11636. @item kill-exclude-users
  11637. @code{("root")}
  11638. @item inhibit-delay-max-seconds
  11639. @code{5}
  11640. @item handle-power-key
  11641. @code{poweroff}
  11642. @item handle-suspend-key
  11643. @code{suspend}
  11644. @item handle-hibernate-key
  11645. @code{hibernate}
  11646. @item handle-lid-switch
  11647. @code{suspend}
  11648. @item handle-lid-switch-docked
  11649. @code{ignore}
  11650. @item power-key-ignore-inhibited?
  11651. @code{#f}
  11652. @item suspend-key-ignore-inhibited?
  11653. @code{#f}
  11654. @item hibernate-key-ignore-inhibited?
  11655. @code{#f}
  11656. @item lid-switch-ignore-inhibited?
  11657. @code{#t}
  11658. @item holdoff-timeout-seconds
  11659. @code{30}
  11660. @item idle-action
  11661. @code{ignore}
  11662. @item idle-action-seconds
  11663. @code{(* 30 60)}
  11664. @item runtime-directory-size-percent
  11665. @code{10}
  11666. @item runtime-directory-size
  11667. @code{#f}
  11668. @item remove-ipc?
  11669. @code{#t}
  11670. @item suspend-state
  11671. @code{("mem" "standby" "freeze")}
  11672. @item suspend-mode
  11673. @code{()}
  11674. @item hibernate-state
  11675. @code{("disk")}
  11676. @item hibernate-mode
  11677. @code{("platform" "shutdown")}
  11678. @item hybrid-sleep-state
  11679. @code{("disk")}
  11680. @item hybrid-sleep-mode
  11681. @code{("suspend" "platform" "shutdown")}
  11682. @end table
  11683. @end deffn
  11684. @deffn {Procédure Scheme} accountsservice-service @
  11685. [#:accountsservice @var{accountsservice}]
  11686. Renvoie un service qui lance AccountsService, un service système qui peut
  11687. lister les comptes disponibles, changer leur mot de passe, etc.
  11688. AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
  11689. privilégiés de pouvoir modifier la configuration de leur système.
  11690. @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
  11691. accountsservice} pour trouver plus d'informations.
  11692. L'argument @var{accountsservice} est le paquet @code{accountsservice} à
  11693. exposer comme un service.
  11694. @end deffn
  11695. @deffn {Procédure Scheme} polkit-service @
  11696. [#:polkit @var{polkit}]
  11697. Renvoie un service qui lance le
  11698. @uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
  11699. des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
  11700. l'accès à des opération privilégiées d'une manière structurée. En demandant
  11701. au service Polkit, un composant système privilégié peut savoir lorsqu'il
  11702. peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
  11703. exemple, un utilisateur normal peut obtenir le droit de mettre le système en
  11704. veille si l'utilisateur est connecté localement.
  11705. @end deffn
  11706. @deffn {Procédure Scheme} upower-service [#:upower @var{upower}] @
  11707. [#:watts-up-pro? #f] @
  11708. [#:poll-batteries? #t] @
  11709. [#:ignore-lid? #f] @
  11710. [#:use-percentage-for-policy? #f] @
  11711. [#:percentage-low 10] @
  11712. [#:percentage-critical 3] @
  11713. [#:percentage-action 2] @
  11714. [#:time-low 1200] @
  11715. [#:time-critical 300] @
  11716. [#:time-action 120] @
  11717. [#:critical-power-action 'hybrid-sleep]
  11718. Renvoie un service qui lance @uref{http://upower.freedesktop.org/,
  11719. @command{upowerd}}, un moniteur système pour la consommation électrique et
  11720. le niveau de batterie, avec les paramètres de configuration données. Il
  11721. implémente l'interface D-Bus @code{org.freedesktop.UPower} et est notamment
  11722. utilisé par GNOME.
  11723. @end deffn
  11724. @deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
  11725. Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
  11726. UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
  11727. et la capacité de monter et démonter des disques à des interfaces
  11728. utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
  11729. commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
  11730. @end deffn
  11731. @deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
  11732. Renvoie un service qui lance @command{colord}, un service système avec une
  11733. interface D-Bus pour gérer les profils de couleur des périphériques
  11734. d'entrées et de sorties comme les écrans et les scanners. Il est notamment
  11735. utilisé par l'outil graphique GNOME Color Manager. Voir
  11736. @uref{http://www.freedesktop.org/software/colord/, le site web de colord}
  11737. pour plus d'informations.
  11738. @end deffn
  11739. @deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
  11740. Renvoie une configuration qui permet d'accéder aux données de localisation
  11741. de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
  11742. @code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
  11743. d'accéder aux informations de localisation par défaut. Le booléen
  11744. @var{system?} indique si une application est un composant système ou non.
  11745. Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
  11746. application a le droit d'accéder aux informations de géolocalisation. Une
  11747. liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
  11748. @end deffn
  11749. @defvr {Variable Scheme} %standard-geoclue-applications
  11750. la liste standard de configuration des application GeoClue connues, qui
  11751. permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
  11752. actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
  11753. Epiphany de demander les informations de localisation. IceCat et Epiphany
  11754. demandent tous deux à l'utilisateur avant de permettre à une page web de
  11755. connaître l'emplacement de l'utilisateur.
  11756. @end defvr
  11757. @deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
  11758. [#:whitelist '()] @
  11759. [#:wifi-geolocation-url
  11760. "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
  11761. [#:submit-data? #f] [#:wifi-submission-url
  11762. "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
  11763. [#:submission-nick "geoclue"] @
  11764. [#:applications %standard-geoclue-applications]
  11765. Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
  11766. service fournit une interface D-Bus pour permettre aux applications de
  11767. demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
  11768. des informations à des bases de données de géolocalisation en ligne. Voir
  11769. @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
  11770. GeoClue} pour plus d'informations.
  11771. @end deffn
  11772. @deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
  11773. [@w{#:auto-enable? #f}]
  11774. Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
  11775. appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
  11776. Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
  11777. automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
  11778. utilisez un clavier ou une souris bluetooth.
  11779. Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
  11780. service D-Bus.
  11781. @end deffn
  11782. @node Services de son
  11783. @subsubsection Services de son
  11784. @cindex support du son
  11785. @cindex ALSA
  11786. @cindex PulseAudio, support du son
  11787. Le module @code{(gnu services sound)} fournit un service pour configurer le
  11788. système ALSA (architecture son linux avancée), qui fait de PulseAudio le
  11789. pilote de sortie préféré d'ALSA.
  11790. @deffn {Variable Scheme} alsa-service-type
  11791. C'est le type pour le système @uref{https://alsa-project.org/, Advanced
  11792. Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
  11793. @file{/etc/asound.conf}. La valer de ce type est un enregistrement
  11794. @command{alsa-configuration} comme dans cet exemple :
  11795. @example
  11796. (service alsa-service-type)
  11797. @end example
  11798. Voir plus bas pour des détails sur @code{alsa-configuration}.
  11799. @end deffn
  11800. @deftp {Type de données} alsa-configuration
  11801. Type de données représentant la configuration pour @code{alsa-service}.
  11802. @table @asis
  11803. @item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
  11804. Le paquet @code{alsa-plugins} à utiliser.
  11805. @item @code{pulseaudio?} (par défaut : @var{#t})
  11806. Indique si les applications ALSA devraient utiliser le serveur de son
  11807. @uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
  11808. elles.
  11809. Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
  11810. produisent du son en même temps et de les contrôler individuellement via
  11811. @command{pavucontrol} entre autres choses.
  11812. @item @code{extra-options} (par défaut : @var{""})
  11813. Chaîne à ajouter au fichier @file{/etc/asound.conf}.
  11814. @end table
  11815. @end deftp
  11816. Les utilisateurs individuels qui veulent modifier la configuration système
  11817. d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
  11818. @example
  11819. # Dans guix, il faut spécifier le chemin absolu des greffons.
  11820. pcm_type.jack @{
  11821. lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
  11822. @}
  11823. # Faire passer ALSA par Jack :
  11824. # <http://jackaudio.org/faq/routing_alsa.html>.
  11825. pcm.rawjack @{
  11826. type jack
  11827. playback_ports @{
  11828. 0 system:playback_1
  11829. 1 system:playback_2
  11830. @}
  11831. capture_ports @{
  11832. 0 system:capture_1
  11833. 1 system:capture_2
  11834. @}
  11835. @}
  11836. pcm.!default @{
  11837. type plug
  11838. slave @{
  11839. pcm "rawjack"
  11840. @}
  11841. @}
  11842. @end example
  11843. Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
  11844. détails.
  11845. @node Services de bases de données
  11846. @subsubsection Services de bases de données
  11847. @cindex database
  11848. @cindex SQL
  11849. Le module @code{(gnu services databases)} fournit les services suivants.
  11850. @deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
  11851. [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
  11852. [#:port 5432] [#:locale ``en_US.utf8'']
  11853. Renvoie un service qui lance @var{postgresql}, le service de bases de
  11854. données PostgreSQL.
  11855. Le démon PostgreSQL charge sa configuration à l'exécution depuis
  11856. @var{config-file}, crée une grappe de bases de données avec @var{locale}
  11857. comme paramètre de régionalisation par défaut, stockée dans
  11858. @var{data-directory}. Il écoute ensuite sur @var{port}.
  11859. @end deffn
  11860. @deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
  11861. Renvoie un service qui lance @command{mysqld}, le service de bases de
  11862. données MySQL ou MariaDB.
  11863. L'argument @var{config} facultatif spécifie la configuration de
  11864. @command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
  11865. @end deffn
  11866. @deftp {Type de données} mysql-configuration
  11867. Type de données représentant la configuration de @var{mysql-service}.
  11868. @table @asis
  11869. @item @code{mysql} (par défaut : @var{mariadb})
  11870. Objet paquet du serveur de base de données MySQL, qui peut être soit
  11871. @var{mariadb}, soit @var{mysql}.
  11872. Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
  11873. Pour MariaDB, le mot de passe root est vide.
  11874. @item @code{port} (par défaut : @code{3306})
  11875. Port TCP sur lequel le serveur de base de données écoute les connexions
  11876. entrantes.
  11877. @end table
  11878. @end deftp
  11879. @defvr {Variable Scheme} memcached-service-type
  11880. C'est le type de service pour le service @uref{https://memcached.org/,
  11881. Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
  11882. type de service est un objet @code{memcached-configuration}.
  11883. @end defvr
  11884. @example
  11885. (service memcached-service-type)
  11886. @end example
  11887. @deftp {Type de données} memcached-configuration
  11888. Type de données représentant la configuration de memcached.
  11889. @table @asis
  11890. @item @code{memcached} (par défaut : @code{memcached})
  11891. Le paquet Memcached à utiliser.
  11892. @item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
  11893. Les interfaces réseaux sur lesquelles écouter.
  11894. @item @code{tcp-port} (par défaut : @code{11211})
  11895. Port sur lequel accepter les connexions.
  11896. @item @code{udp-port} (par défaut : @code{11211})
  11897. Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
  11898. l'écoute en UDP.
  11899. @item @code{additional-options} (par défaut : @code{'()})
  11900. Options de la ligne de commande supplémentaires à passer à @code{memcached}.
  11901. @end table
  11902. @end deftp
  11903. @defvr {Variable Scheme} mongodb-service-type
  11904. C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
  11905. valeur de ce service est un objet @code{mongodb-configuration}.
  11906. @end defvr
  11907. @example
  11908. (service mongodb-service-type)
  11909. @end example
  11910. @deftp {Type de données} mongodb-configuration
  11911. Type de données représentant la configuration de mongodb.
  11912. @table @asis
  11913. @item @code{mongodb} (par défaut : @code{mongodb})
  11914. Le paquet MongoDB à utiliser.
  11915. @item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
  11916. Le fichier de configuration pour MongoDB.
  11917. @item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
  11918. Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
  11919. appartienne à l'utilisateur mongodb. Il devrait correspondre au
  11920. data-directory que MongoDB est configuré pour utiliser dans son fichier de
  11921. configuration.
  11922. @end table
  11923. @end deftp
  11924. @defvr {Variable Scheme} redis-service-type
  11925. C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
  11926. Redis} dont la valeur est un objet @code{redis-configuration}.
  11927. @end defvr
  11928. @deftp {Type de données} redis-configuration
  11929. Type de données représentant la configuration de redis.
  11930. @table @asis
  11931. @item @code{redis} (par défaut : @code{redis})
  11932. Le paquet Redis à utiliser.
  11933. @item @code{bind} (par défaut : @code{"127.0.0.1"})
  11934. Interface réseau sur laquelle écouter.
  11935. @item @code{port} (par défaut : @code{6379})
  11936. Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
  11937. sur un socket TCP.
  11938. @item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
  11939. Répertoire dans lequel stocker la base de données et les fichiers liés.
  11940. @end table
  11941. @end deftp
  11942. @node Services de courriels
  11943. @subsubsection Services de courriels
  11944. @cindex courriel
  11945. @cindex email
  11946. Le module @code{(gnu services mail)} fournit des définitions de services
  11947. Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
  11948. que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
  11949. détaillés dans les sous-sections ci-dessous.
  11950. @subsubheading Service Dovecot
  11951. @deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
  11952. Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
  11953. @end deffn
  11954. Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
  11955. configuration par défaut créé par @code{(dovecot-configuration)} suffira si
  11956. votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
  11957. sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
  11958. ports non chiffrés par défaut. Il y a quelques options cependant, que les
  11959. administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
  11960. d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
  11961. paramètres via une interface Scheme unifiée.
  11962. Par exemple, pour spécifier que les courriels se trouvent dans
  11963. @code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
  11964. @example
  11965. (dovecot-service #:config
  11966. (dovecot-configuration
  11967. (mail-location "maildir:~/.mail")))
  11968. @end example
  11969. Les paramètres de configuration disponibles sont les suivants. Chaque
  11970. définition des paramètres est précédé par son type ; par exemple,
  11971. @samp{string-list foo} indique que le paramètre @code{foo} devrait être
  11972. spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
  11973. de spécifier la configuration comme une chaîne de caractères, si vous avez
  11974. un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
  11975. système ; voir la fin pour plus de détails.
  11976. @c The following documentation was initially generated by
  11977. @c (generate-documentation) in (gnu services mail). Manually maintained
  11978. @c documentation is better, so we shouldn't hesitate to edit below as
  11979. @c needed. However if the change you want to make to this documentation
  11980. @c can be done in an automated way, it's probably easier to change
  11981. @c (generate-documentation) than to make it below and have to deal with
  11982. @c the churn as dovecot updates.
  11983. Les champs de @code{dovecot-configuration} disponibles sont :
  11984. @deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
  11985. Le paquet dovecot
  11986. @end deftypevr
  11987. @deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
  11988. Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
  11989. sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
  11990. IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
  11991. ou quelque chose de plus complexe, complétez les champs d'adresse et de port
  11992. de @samp{inet-listener} des services spécifiques qui vous intéressent.
  11993. @end deftypevr
  11994. @deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
  11995. Liste des protocoles que vous voulez servir. Les protocoles disponibles
  11996. comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
  11997. Les champs @code{protocol-configuration} disponibles sont :
  11998. @deftypevr {paramètre de @code{protocol-configuration}} string name
  11999. Le nom du protocole.
  12000. @end deftypevr
  12001. @deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
  12002. Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
  12003. trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
  12004. partagés) et lda. Sa valeur par défaut est
  12005. @samp{"/var/run/dovecot/auth-userdb"}.
  12006. @end deftypevr
  12007. @deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
  12008. Liste de greffons à charger séparés par des espaces.
  12009. @end deftypevr
  12010. @deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
  12011. Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
  12012. adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
  12013. la casse. Par défaut @samp{10}.
  12014. @end deftypevr
  12015. @end deftypevr
  12016. @deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
  12017. Liste des services à activer. Les services disponibles comprennent
  12018. @samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
  12019. et @samp{lmtp}.
  12020. Les champs de @code{service-configuration} disponibles sont :
  12021. @deftypevr {paramètre de @code{service-configuration}} string kind
  12022. Le type de service. Les valeurs valides comprennent @code{director},
  12023. @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
  12024. @code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
  12025. @code{quota-warning} ou n'importe quoi d'autre.
  12026. @end deftypevr
  12027. @deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
  12028. Les auditeurs du service. Un auditeur est soit un
  12029. @code{unix-listener-configuration}, soit un
  12030. @code{fifo-listener-configuration}, soit un
  12031. @code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
  12032. Les champs de @code{unix-listener-configuration} disponibles sont :
  12033. @deftypevr {paramètre de @code{unix-listener-configuration}} string path
  12034. Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
  12035. utilisé comme nom de section.
  12036. @end deftypevr
  12037. @deftypevr {paramètre de @code{unix-listener-configuration}} string mode
  12038. Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
  12039. @end deftypevr
  12040. @deftypevr {paramètre de @code{unix-listener-configuration}} string user
  12041. L'utilisateur à qui appartient le socket. La valeur par défaut est
  12042. @samp{""}
  12043. @end deftypevr
  12044. @deftypevr {paramètre de @code{unix-listener-configuration}} string group
  12045. Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
  12046. @end deftypevr
  12047. Les champs de @code{fifo-listener-configuration} disponibles sont :
  12048. @deftypevr {paramètre de @code{fifo-listener-configuration}} string path
  12049. Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
  12050. utilisé comme nom de section.
  12051. @end deftypevr
  12052. @deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
  12053. Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
  12054. @end deftypevr
  12055. @deftypevr {paramètre de @code{fifo-listener-configuration}} string user
  12056. L'utilisateur à qui appartient le socket. La valeur par défaut est
  12057. @samp{""}
  12058. @end deftypevr
  12059. @deftypevr {paramètre de @code{fifo-listener-configuration}} string group
  12060. Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
  12061. @end deftypevr
  12062. Les champs de @code{inet-listener-configuration} disponibles sont :
  12063. @deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
  12064. Le protocole à écouter.
  12065. @end deftypevr
  12066. @deftypevr {paramètre de @code{inet-listener-configuration}} string address
  12067. L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
  12068. La valeur par défaut est @samp{""}.
  12069. @end deftypevr
  12070. @deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
  12071. Le port sur lequel écouter.
  12072. @end deftypevr
  12073. @deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
  12074. S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
  12075. @samp{required}. La valeur par défaut est @samp{#t}.
  12076. @end deftypevr
  12077. @end deftypevr
  12078. @deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
  12079. Connexions de clients simultanées maximum par processus. Une fois ce nombre
  12080. de connections atteint, la connexion suivante fera en sorte que Dovecot
  12081. démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
  12082. est utilisé à la place.
  12083. La valeur par défaut est @samp{0}.
  12084. @end deftypevr
  12085. @deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
  12086. Nombre de connexions à gérer avant de démarrer un nouveau processus.
  12087. Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
  12088. mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
  12089. est @samp{1}.
  12090. @end deftypevr
  12091. @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
  12092. Nombre de processus maximum qui peut exister pour ce service. Si la valeur
  12093. est 0, @code{default-process-limit} est utilisé à la place.
  12094. La valeur par défaut est @samp{0}.
  12095. @end deftypevr
  12096. @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
  12097. Nombre de processus à toujours garder en attente de connexions. La valeur
  12098. par défaut est @samp{0}.
  12099. @end deftypevr
  12100. @deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
  12101. Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
  12102. d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
  12103. @end deftypevr
  12104. @end deftypevr
  12105. @deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
  12106. Configuration du dictionnaire, créé par le constructeur
  12107. @code{dict-configuration}.
  12108. Les champs de @code{dict-configuration} disponibles sont :
  12109. @deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
  12110. Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
  12111. valeur par défaut est @samp{()}.
  12112. @end deftypevr
  12113. @end deftypevr
  12114. @deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
  12115. Une liste de configurations passdb, chacune créée par le constructeur
  12116. @code{passdb-configuration}.
  12117. Les champs de @code{passdb-configuration} disponibles sont :
  12118. @deftypevr {paramètre de @code{passdb-configuration}} string driver
  12119. Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
  12120. @samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
  12121. par défaut est @samp{"pam"}.
  12122. @end deftypevr
  12123. @deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
  12124. Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
  12125. par défaut est @samp{""}.
  12126. @end deftypevr
  12127. @end deftypevr
  12128. @deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
  12129. Liste des configurations userdb, chacune créée par le constructeur
  12130. @code{userdb-configuration}.
  12131. Les champs de @code{userdb-configuration} disponibles sont :
  12132. @deftypevr {paramètre de @code{userdb-configuration}} string driver
  12133. Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
  12134. @samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
  12135. @end deftypevr
  12136. @deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
  12137. Liste des arguments du pilote userdb séparés par des espaces. La valeur par
  12138. défaut est @samp{""}.
  12139. @end deftypevr
  12140. @deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
  12141. Remplace des champs de passwd. La valeur par défaut est @samp{()}.
  12142. @end deftypevr
  12143. @end deftypevr
  12144. @deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
  12145. Configuration du greffon, créé par le constructeur
  12146. @code{plugin-configuration}.
  12147. @end deftypevr
  12148. @deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
  12149. Liste d'espaces de noms. Chaque élément de la liste est créé par le
  12150. constructeur @code{namespace-configuration}.
  12151. Les champs de @code{namespace-configuration} disponibles sont :
  12152. @deftypevr {paramètre de @code{namespace-configuration}} string name
  12153. Nom de cet espace de nom.
  12154. @end deftypevr
  12155. @deftypevr {paramètre de @code{namespace-configuration}} string type
  12156. Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
  12157. valeur par défaut est @samp{"private"}.
  12158. @end deftypevr
  12159. @deftypevr {paramètre de @code{namespace-configuration}} string separator
  12160. Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
  12161. séparateur pour tous les espaces de noms ou certains clients seront confus.
  12162. @samp{/} est généralement une bonne valeur. La valeur par défaut dépend
  12163. cependant du format de stockage sous-jacent. La valeur par défaut est
  12164. @samp{""}.
  12165. @end deftypevr
  12166. @deftypevr {paramètre de @code{namespace-configuration}} string prefix
  12167. Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
  12168. différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
  12169. valeur par défaut est @samp{""}.
  12170. @end deftypevr
  12171. @deftypevr {paramètre de @code{namespace-configuration}} string location
  12172. Emplacement physique de la boîte aux lettres. C'est le même format que
  12173. mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
  12174. @samp{""}.
  12175. @end deftypevr
  12176. @deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
  12177. Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
  12178. le possède. La valeur par défaut est @samp{#f}.
  12179. @end deftypevr
  12180. @deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
  12181. Si l'espace de nom est caché, il n'est pas publié auprès des clients par
  12182. l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
  12183. #f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
  12184. des espaces de noms différents que vous voulez rendre obsolètes sans les
  12185. casser. Par exemple vous pouvez cacher les espaces de noms avec les
  12186. préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
  12187. défaut est @samp{#f}.
  12188. @end deftypevr
  12189. @deftypevr {paramètre de @code{namespace-configuration}} boolean list?
  12190. Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
  12191. Cela rend l'espace de nom visible pour les clients qui ne supportent pas
  12192. l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
  12193. aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
  12194. défaut est @samp{#t}.
  12195. @end deftypevr
  12196. @deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
  12197. Les espaces de noms gèrent leur propre souscription. Si la valeur est
  12198. @code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
  12199. toujours avoir cette valeur à @code{#t}. La valeur par défaut est
  12200. @samp{#t}.
  12201. @end deftypevr
  12202. @deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
  12203. Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
  12204. par défaut est @samp{()}.
  12205. Les champs de @code{mailbox-configuration} disponibles sont :
  12206. @deftypevr {paramètre de @code{mailbox-configuration}} string name
  12207. Nom de cette boîte aux lettres.
  12208. @end deftypevr
  12209. @deftypevr {paramètre de @code{mailbox-configuration}} string auto
  12210. @samp{create} créera automatiquement cette boîte aux lettres.
  12211. @samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
  12212. défaut est @samp{"no"}.
  12213. @end deftypevr
  12214. @deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
  12215. Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
  12216. valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
  12217. @code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
  12218. défaut est @samp{()}.
  12219. @end deftypevr
  12220. @end deftypevr
  12221. @end deftypevr
  12222. @deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
  12223. Répertoire de base où stocker les données d'exécution. La valeur par défaut
  12224. est @samp{"/var/run/dovecot/"}.
  12225. @end deftypevr
  12226. @deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
  12227. Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
  12228. ready."}.
  12229. @end deftypevr
  12230. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
  12231. Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
  12232. sont autorisées à modifier leurs adresses IP et leurs ports (pour la
  12233. connexion et la vérification d'authentification).
  12234. @samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
  12235. Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
  12236. défaut est @samp{()}.
  12237. @end deftypevr
  12238. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
  12239. List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}.
  12240. @end deftypevr
  12241. @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
  12242. Show more verbose process titles (in ps). Currently shows user name and IP
  12243. address. Useful for seeing who is actually using the IMAP processes (e.g.@:
  12244. shared mailboxes or if the same uid is used for multiple accounts).
  12245. Defaults to @samp{#f}.
  12246. @end deftypevr
  12247. @deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
  12248. Should all processes be killed when Dovecot master process shuts down.
  12249. Setting this to @code{#f} means that Dovecot can be upgraded without forcing
  12250. existing client connections to close (although that could also be a problem
  12251. if the upgrade is e.g.@: due to a security fix). Defaults to @samp{#t}.
  12252. @end deftypevr
  12253. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
  12254. Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
  12255. de connexions au serveur doveadm au lieu de les lancer dans le même
  12256. processus. La valeur par défaut est @samp{0}.
  12257. @end deftypevr
  12258. @deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
  12259. Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
  12260. valeur par défaut est @samp{"doveadm-server"}.
  12261. @end deftypevr
  12262. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
  12263. Liste des variables d'environnement qui sont préservées au démarrage de
  12264. Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
  12265. paires clef=valeur pour toujours spécifier ce paramètre.
  12266. @end deftypevr
  12267. @deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
  12268. Disable LOGIN command and all other plaintext authentications unless SSL/TLS
  12269. is used (LOGINDISABLED capability). Note that if the remote IP matches the
  12270. local IP (i.e.@: you're connecting from the same computer), the connection
  12271. is considered secure and plaintext authentication is allowed. See also
  12272. ssl=required setting. Defaults to @samp{#t}.
  12273. @end deftypevr
  12274. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
  12275. Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
  12276. Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for
  12277. caching to be used. Defaults to @samp{0}.
  12278. @end deftypevr
  12279. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
  12280. Durée de vie des données en cache. Après l'expiration du TTL
  12281. l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
  12282. de données principale revoie une erreur interne. Nous essayons aussi de
  12283. gérer les changements de mot de passe automatiquement : si
  12284. l'authentification précédente de l'utilisateur était réussie mais pas
  12285. celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
  12286. l'authentification en texte clair uniquement. La valeur par défaut est
  12287. @samp{"1 hour"}.
  12288. @end deftypevr
  12289. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
  12290. TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
  12291. passe ne correspond pas). 0 désactive la mise en cache complètement. La
  12292. valeur par défaut est @samp{"1 hour"}.
  12293. @end deftypevr
  12294. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
  12295. Liste des domaines pour les mécanismes d'authentification SASL qui en ont
  12296. besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
  12297. utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
  12298. domaine listé ici, donc gardez celui par défaut en premier. La valeur par
  12299. défaut est @samp{()}
  12300. @end deftypevr
  12301. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
  12302. Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
  12303. les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
  12304. authentification en texte clair. La valeur par défaut est @samp{""}.
  12305. @end deftypevr
  12306. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
  12307. Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
  12308. d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
  12309. listé ici, la connexion échoue automatiquement. C'est juste une
  12310. vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
  12311. exploiter des vulnérabilités potentielles d'échappement de guillemets avec
  12312. les bases de données SQL/LDAP. Si vous voulez autoriser tous les
  12313. caractères, indiquez la liste vide.
  12314. @end deftypevr
  12315. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
  12316. Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
  12317. cherchés en base. La valeur contient une série de caractère de -> à. Par
  12318. exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
  12319. @samp{@@}. La valeur par défaut est @samp{""}.
  12320. @end deftypevr
  12321. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
  12322. Username formatting before it's looked up from databases. You can use the
  12323. standard variables here, e.g.@: %Lu would lowercase the username, %n would
  12324. drop away the domain if it was given, or @samp{%n-AT-%d} would change the
  12325. @samp{@@} into @samp{-AT-}. This translation is done after
  12326. @samp{auth-username-translation} changes. Defaults to @samp{"%Lu"}.
  12327. @end deftypevr
  12328. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
  12329. If you want to allow master users to log in by specifying the master
  12330. username within the normal username string (i.e.@: not using SASL
  12331. mechanism's support for it), you can specify the separator character here.
  12332. The format is then <username><separator><master username>. UW-IMAP uses
  12333. @samp{*} as the separator, so that could be a good choice. Defaults to
  12334. @samp{""}.
  12335. @end deftypevr
  12336. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
  12337. Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
  12338. mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
  12339. @end deftypevr
  12340. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
  12341. Maximum number of dovecot-auth worker processes. They're used to execute
  12342. blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're
  12343. automatically created and destroyed as needed. Defaults to @samp{30}.
  12344. @end deftypevr
  12345. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
  12346. Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
  12347. est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
  12348. des guillemets) pour permettre toutes les entrées keytab. La valeur par
  12349. défaut est @samp{""}.
  12350. @end deftypevr
  12351. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
  12352. Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
  12353. par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
  12354. spécifié. Vous pourriez avoir besoin de faire en sorte que le service
  12355. d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
  12356. par défaut est @samp{""}.
  12357. @end deftypevr
  12358. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
  12359. Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
  12360. Samba et l'utilitaire @samp{ntlm-auth}.
  12361. <doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
  12362. @samp{#f}.
  12363. @end deftypevr
  12364. @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
  12365. Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
  12366. @samp{"/usr/bin/ntlm_auth"}.
  12367. @end deftypevr
  12368. @deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
  12369. Durée d'attente avant de répondre à des authentifications échouées. La
  12370. valeur par défaut est @samp{"2 secs"}.
  12371. @end deftypevr
  12372. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
  12373. Requiert un certification client SSL valide ou l'authentification échoue.
  12374. La valeur par défaut est @samp{#f}.
  12375. @end deftypevr
  12376. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
  12377. Prend le nom d'utilisateur du certificat SSL client, avec
  12378. @code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
  12379. sujet. La valeur par défaut est @samp{#f}.
  12380. @end deftypevr
  12381. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
  12382. Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
  12383. sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
  12384. @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
  12385. @samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
  12386. paramètre @samp{disable-plaintext-auth}.
  12387. @end deftypevr
  12388. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
  12389. Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
  12390. Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
  12391. même que le @samp{inet-listener} du service directeur. La valeur par défaut
  12392. est @samp{()}.
  12393. @end deftypevr
  12394. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
  12395. Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
  12396. grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
  12397. valeur par défaut est @samp{()}.
  12398. @end deftypevr
  12399. @deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
  12400. Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
  12401. après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
  12402. min"}.
  12403. @end deftypevr
  12404. @deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
  12405. La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
  12406. utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
  12407. @@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
  12408. valeur par défaut est @samp{"%Lu"}.
  12409. @end deftypevr
  12410. @deftypevr {paramètre de @code{dovecot-configuration}} string log-path
  12411. Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
  12412. journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
  12413. valeur par défaut est @samp{"syslog"}.
  12414. @end deftypevr
  12415. @deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
  12416. Fichier de journal à utiliser pour les messages d'information. La valeur
  12417. par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
  12418. @end deftypevr
  12419. @deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
  12420. Fichier de journal à utiliser pour les messages de débogage. La valeur par
  12421. défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
  12422. @end deftypevr
  12423. @deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
  12424. Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
  12425. si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
  12426. local0..local7. D'autres dispositifs standard sont supportés. La valeur
  12427. par défaut est @samp{"mail"}.
  12428. @end deftypevr
  12429. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
  12430. Indique s'il faut enregistrer les tentatives de connexion échouées et la
  12431. raison de leur échec. La valeur par défaut est @samp{#f}.
  12432. @end deftypevr
  12433. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
  12434. In case of password mismatches, log the attempted password. Valid values
  12435. are no, plain and sha1. sha1 can be useful for detecting brute force
  12436. password attempts vs. user simply trying the same password over and over
  12437. again. You can also truncate the value to n chars by appending ":n" (e.g.@:
  12438. sha1:6). Defaults to @samp{#f}.
  12439. @end deftypevr
  12440. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
  12441. Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
  12442. requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
  12443. @end deftypevr
  12444. @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
  12445. Dans le cas où le mot de passe était incorrect, indique s'il faut
  12446. enregistrer les mots de passe et les schémas utilisés pour que le problème
  12447. puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
  12448. La valeur par défaut est @samp{#f}.
  12449. @end deftypevr
  12450. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
  12451. Indique s'il faut activer le débogage du traitement des courriels. Cela
  12452. peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
  12453. La valeur par défaut est @samp{#f}.
  12454. @end deftypevr
  12455. @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
  12456. Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
  12457. est @samp{#f}.
  12458. @end deftypevr
  12459. @deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
  12460. Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
  12461. codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
  12462. %H:%M:%S \""}.
  12463. @end deftypevr
  12464. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
  12465. Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
  12466. variable non vide sont agrégés pour former une chaîne de mots séparés par
  12467. des virgules.
  12468. @end deftypevr
  12469. @deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
  12470. Format du journal de connexion. %s contient la chaîne
  12471. @samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
  12472. valeur par défaut est @samp{"%$: %s"}.
  12473. @end deftypevr
  12474. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
  12475. Préfixe à utiliser devant chaque ligne du fichier de journal pour les
  12476. processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
  12477. la liste des variables que vous pouvez utiliser. La valeur par défaut est
  12478. @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
  12479. @end deftypevr
  12480. @deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
  12481. Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
  12482. utiliser ces variables :
  12483. @table @code
  12484. @item %$
  12485. Delivery status message (e.g.@: @samp{saved to INBOX})
  12486. @item %m
  12487. Message-ID
  12488. @item %s
  12489. Objet
  12490. @item %f
  12491. Adresse « de »
  12492. @item %p
  12493. Taille physique
  12494. @item %w
  12495. Taille virtuelle.
  12496. @end table
  12497. La valeur par défaut est @samp{"msgid=%m: %$"}.
  12498. @end deftypevr
  12499. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
  12500. Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
  12501. vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
  12502. automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
  12503. courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
  12504. Dovecot.
  12505. If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u)
  12506. isn't enough. You'll also need to tell Dovecot where the other mailboxes
  12507. are kept. This is called the "root mail directory", and it must be the
  12508. first path given in the @samp{mail-location} setting.
  12509. Il y a quelques variables spéciales que vous pouvez utiliser :
  12510. @table @samp
  12511. @item %u
  12512. nom d'utilisateur
  12513. @item %n
  12514. la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
  12515. pas de domaine.
  12516. @item %d
  12517. la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
  12518. domaine
  12519. @item %h
  12520. répertoire personnel
  12521. @end table
  12522. Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
  12523. @table @samp
  12524. @item maildir:~/Maildir
  12525. @item mbox:~/mail:INBOX=/var/mail/%u
  12526. @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
  12527. @end table
  12528. La valeur par défaut est @samp{""}.
  12529. @end deftypevr
  12530. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
  12531. Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
  12532. utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
  12533. uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
  12534. <doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
  12535. @end deftypevr
  12536. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
  12537. La valeur par défaut est @samp{""}.
  12538. @end deftypevr
  12539. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
  12540. Groupe à activer temporairement pour les opérations privilégiées.
  12541. Actuellement cela est utilisé uniquement avec INBOX lors de sa création
  12542. initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
  12543. « mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
  12544. @end deftypevr
  12545. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
  12546. Grant access to these supplementary groups for mail processes. Typically
  12547. these are used to set up access to shared mailboxes. Note that it may be
  12548. dangerous to set these if users can create symlinks (e.g.@: if "mail" group
  12549. is set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
  12550. mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
  12551. it). Defaults to @samp{""}.
  12552. @end deftypevr
  12553. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
  12554. Allow full file system access to clients. There's no access checks other
  12555. than what the operating system does for the active UID/GID. It works with
  12556. both maildir and mboxes, allowing you to prefix mailboxes names with e.g.@:
  12557. /path/ or ~user/. Defaults to @samp{#f}.
  12558. @end deftypevr
  12559. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
  12560. Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
  12561. dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
  12562. défaut est @samp{#f}.
  12563. @end deftypevr
  12564. @deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
  12565. S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
  12566. verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
  12567. option est sûre de nos jours. La valeur par défaut est @samp{#t}.
  12568. @end deftypevr
  12569. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
  12570. Quand utiliser les appels à fsync() ou fdatasync() :
  12571. @table @code
  12572. @item optimized
  12573. Lorsque cela est nécessaire pour éviter de perdre des données importantes
  12574. @item always
  12575. Useful with e.g.@: NFS when write()s are delayed
  12576. @item never
  12577. Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
  12578. perdre toutes les données).
  12579. @end table
  12580. La valeur par défaut est @samp{"optimized"}.
  12581. @end deftypevr
  12582. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
  12583. Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
  12584. Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
  12585. seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
  12586. par défaut est @samp{#f}.
  12587. @end deftypevr
  12588. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
  12589. Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
  12590. utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
  12591. @samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
  12592. @end deftypevr
  12593. @deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
  12594. Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
  12595. flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
  12596. qui peuvent créer plus d'utilisation du disque que les autres méthodes de
  12597. verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
  12598. rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
  12599. @samp{"fcntl"}.
  12600. @end deftypevr
  12601. @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
  12602. Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
  12603. plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
  12604. @end deftypevr
  12605. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
  12606. L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
  12607. utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
  12608. tant que démon ou qu'un autre utilisateur système. Remarquez que la
  12609. connexion en root est interdite en dur dans le binaire de dovecot et qu'on
  12610. ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
  12611. par défaut est @samp{500}.
  12612. @end deftypevr
  12613. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
  12614. La valeur par défaut est @samp{0}.
  12615. @end deftypevr
  12616. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
  12617. Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
  12618. un GID non-valide comme numéro de groupe primaire ne peuvent pas se
  12619. connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
  12620. ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
  12621. @end deftypevr
  12622. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
  12623. La valeur par défaut est @samp{0}.
  12624. @end deftypevr
  12625. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
  12626. Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
  12627. lors de la création de nouveaux mots-clefs. La valeur par défaut est
  12628. @samp{50}.
  12629. @end deftypevr
  12630. @deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
  12631. List of directories under which chrooting is allowed for mail processes
  12632. (i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar too). This
  12633. setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
  12634. settings. If this setting is empty, "/./" in home dirs are ignored.
  12635. WARNING: Never add directories here which local users can modify, that may
  12636. lead to root exploit. Usually this should be done only if you don't allow
  12637. shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
  12638. @end deftypevr
  12639. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
  12640. Default chroot directory for mail processes. This can be overridden for
  12641. specific users in user database by giving /./ in user's home directory
  12642. (e.g.@: /home/./user chroots into /home). Note that usually there is no
  12643. real need to do chrooting, Dovecot doesn't allow users to access files
  12644. outside their mail directory anyway. If your home directories are prefixed
  12645. with the chroot directory, append "/."@: to @samp{mail-chroot}.
  12646. <doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
  12647. @end deftypevr
  12648. @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
  12649. Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
  12650. les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
  12651. et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
  12652. @end deftypevr
  12653. @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
  12654. Répertoire où trouver les greffons. La valeur par défaut est
  12655. @samp{"/usr/lib/dovecot"}.
  12656. @end deftypevr
  12657. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
  12658. List of plugins to load for all services. Plugins specific to IMAP, LDA,
  12659. etc.@: are added to this list in their own .conf files. Defaults to
  12660. @samp{()}.
  12661. @end deftypevr
  12662. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
  12663. Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
  12664. jour le fichier de cache. Cela permet d'optimiser le comportement de
  12665. Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
  12666. disque. La valeur par défaut est @samp{0}.
  12667. @end deftypevr
  12668. @deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
  12669. Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
  12670. temps en temps pour voir s'il y a de nouveaux messages ou d'autres
  12671. changements. Ce paramètre défini le temps d'attente minimum entre deux
  12672. vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
  12673. trouver immédiatement les changements. La valeur par défaut est @samp{"30
  12674. secs"}.
  12675. @end deftypevr
  12676. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
  12677. Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
  12678. de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
  12679. système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
  12680. d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
  12681. si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
  12682. leur traitement de ces CR supplémentaires et causer des problèmes. La
  12683. valeur par défaut est @samp{#f}.
  12684. @end deftypevr
  12685. @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
  12686. Par défaut la commande LIST renvoie toutes les entrées du maildir qui
  12687. commencent par un point. Activer cette option permet à Dovecot de renvoyer
  12688. uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
  12689. sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
  12690. setting struct @samp{dirent->d_type} this check is free and it's done always
  12691. regardless of this setting). La valeur par défaut est @samp{#f}.
  12692. @end deftypevr
  12693. @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
  12694. Lors de la copie d'un message, le faire avec des liens en dur si possible.
  12695. Cela améliore un peu la performance et n'a que peu de chance d'avoir des
  12696. effets secondaires.
  12697. @end deftypevr
  12698. @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
  12699. Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
  12700. répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
  12701. lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
  12702. est @samp{#f}.
  12703. @end deftypevr
  12704. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
  12705. La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
  12706. mbox. Il y en a quatre :
  12707. @table @code
  12708. @item dotlock
  12709. Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
  12710. plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
  12711. auront besoin de l'accès en écriture à ce répertoire.
  12712. @item dotlock-try
  12713. Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
  12714. ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
  12715. @item fcntl
  12716. Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
  12717. utilisez lockd.
  12718. @item flock
  12719. Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
  12720. @item lockf
  12721. Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
  12722. @end table
  12723. Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
  12724. l'ordre dans lequel elles sont déclarées est important pour éviter des
  12725. interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
  12726. Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
  12727. méthodes en même temps.
  12728. @end deftypevr
  12729. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
  12730. @end deftypevr
  12731. @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
  12732. Temps d'attente maximal pour un verrou (tous les verrous) avant
  12733. d'abandonner. La valeur par défaut est @samp{"5 mins"}.
  12734. @end deftypevr
  12735. @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
  12736. Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
  12737. modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
  12738. valeur par défaut est @samp{"2 mins"}.
  12739. @end deftypevr
  12740. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
  12741. Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
  12742. savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
  12743. beaucoup de temps. Comme le changement est habituellement un simple
  12744. courriel supplémentaire, il serait plus rapide de lire le nouveaux
  12745. courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
  12746. toujours à relire le fichier mbox complet si le fichier n'est pas comme
  12747. attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
  12748. changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
  12749. immédiatement compte. Remarquez qu'une synchronisation complète est
  12750. effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
  12751. par défaut est @samp{#t}.
  12752. @end deftypevr
  12753. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
  12754. Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
  12755. avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
  12756. actifée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
  12757. @samp{#f}.
  12758. @end deftypevr
  12759. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
  12760. Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
  12761. synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
  12762. ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
  12763. suppriment souvent tous les courriels. L'inconvénient c'est que vos
  12764. changements ne sont pas immédiatement visibles pour les autres MUA. La
  12765. valeur par défaut est @samp{#t}.
  12766. @end deftypevr
  12767. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
  12768. If mbox size is smaller than this (e.g.@: 100k), don't write index files.
  12769. If an index file already exists it's still read, just not updated. Defaults
  12770. to @samp{0}.
  12771. @end deftypevr
  12772. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
  12773. Taille du fichier dbox maximale avant rotation. La valeur par défaut est
  12774. @samp{10000000}.
  12775. @end deftypevr
  12776. @deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
  12777. Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
  12778. jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
  12779. 0 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
  12780. @end deftypevr
  12781. @deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
  12782. Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
  12783. à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
  12784. dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
  12785. défaut est @samp{#f}.
  12786. @end deftypevr
  12787. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
  12788. Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
  12789. des fichiers externes, ce qui permet de les stocker une seule fois. Les
  12790. autres moteurs ne le supportent pas pour le moment.
  12791. ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
  12792. vos risques et périls.
  12793. Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
  12794. valeur par défaut est @samp{""}.
  12795. @end deftypevr
  12796. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
  12797. Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
  12798. Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
  12799. externe de certaines pièces-jointes spécifiques. La valeur par défaut est
  12800. @samp{128000}.
  12801. @end deftypevr
  12802. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
  12803. Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
  12804. :
  12805. @table @code
  12806. @item posix
  12807. Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
  12808. déduplication du système de fichier)
  12809. @item sis posix
  12810. SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
  12811. @item sis-queue posix
  12812. SiS avec déduplication et comparaison différées
  12813. @end table
  12814. La valeur par défaut est @samp{"sis posix"}.
  12815. @end deftypevr
  12816. @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
  12817. Hash format to use in attachment filenames. You can add any text and
  12818. variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
  12819. @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
  12820. truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
  12821. Defaults to @samp{"%@{sha1@}"}.
  12822. @end deftypevr
  12823. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
  12824. La valeur par défaut est @samp{100}.
  12825. @end deftypevr
  12826. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
  12827. La valeur par défaut est @samp{1000}.
  12828. @end deftypevr
  12829. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
  12830. Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
  12831. service. C'est surtout pour attraper et tuer les processus qui font fuiter
  12832. la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
  12833. @samp{256000000}.
  12834. @end deftypevr
  12835. @deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
  12836. Utilisateur de connexion utilisé en interne par les processus de connexion.
  12837. C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
  12838. avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
  12839. @end deftypevr
  12840. @deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
  12841. Utilisateur utilisé en interne par les processus non privilégiés. Il
  12842. devrait être différent de l'utilisateur de connexion, pour que les processus
  12843. de connexion ne puissent pas perturber les autres processus. La valeur par
  12844. défaut est @samp{"dovecot"}.
  12845. @end deftypevr
  12846. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
  12847. Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
  12848. défaut est @samp{"required"}.
  12849. @end deftypevr
  12850. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
  12851. Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
  12852. défaut est @samp{"</etc/dovecot/default.pem"}.
  12853. @end deftypevr
  12854. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
  12855. Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
  12856. privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
  12857. valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
  12858. @end deftypevr
  12859. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
  12860. Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
  12861. Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
  12862. fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
  12863. ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
  12864. @end deftypevr
  12865. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
  12866. PEM encoded trusted certificate authority. Set this only if you intend to
  12867. use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
  12868. certificate(s) followed by the matching CRL(s). (e.g.@: @samp{ssl-ca
  12869. </etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
  12870. @end deftypevr
  12871. @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
  12872. Indique si les certificats clients doivent réussir la vérification du CRL.
  12873. La valeur par défaut est @samp{#t}.
  12874. @end deftypevr
  12875. @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
  12876. Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
  12877. requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
  12878. auth. La valeur par défaut est @samp{#f}.
  12879. @end deftypevr
  12880. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
  12881. Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
  12882. habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
  12883. indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
  12884. @samp{"commonName"}.
  12885. @end deftypevr
  12886. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
  12887. Version minimale de SSL à accepter. La valeur par défaut est
  12888. @samp{"TLSv1"}.
  12889. @end deftypevr
  12890. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
  12891. Méthodes de chiffrement à utiliser. La valeur par défaut est
  12892. @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
  12893. @end deftypevr
  12894. @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
  12895. Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
  12896. openssl engine ». La valeur par défaut est @samp{""}.
  12897. @end deftypevr
  12898. @deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
  12899. Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
  12900. domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
  12901. @end deftypevr
  12902. @deftypevr {paramètre de @code{dovecot-configuration}} string hostname
  12903. Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and
  12904. in LMTP replies. Default is the system's real hostname@@domain. Defaults
  12905. to @samp{""}.
  12906. @end deftypevr
  12907. @deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
  12908. Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
  12909. rejeter le courriel. La valeur par défaut est @samp{#f}.
  12910. @end deftypevr
  12911. @deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
  12912. Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
  12913. @samp{"/usr/sbin/sendmail"}.
  12914. @end deftypevr
  12915. @deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
  12916. Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
  12917. hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
  12918. @end deftypevr
  12919. @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
  12920. En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
  12921. utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
  12922. La valeur par défaut est @samp{"Rejected: %s"}.
  12923. @end deftypevr
  12924. @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
  12925. Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
  12926. utiliser ces variables :
  12927. @table @code
  12928. @item %n
  12929. CRLF
  12930. @item %r
  12931. raison
  12932. @item %s
  12933. objet du courriel de départ
  12934. @item %t
  12935. destinataire
  12936. @end table
  12937. La valeur par défaut est @samp{"Your message to <%t> was automatically
  12938. rejected:%n%r"}.
  12939. @end deftypevr
  12940. @deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
  12941. Caractère de délimitation entre la partie locale et le détail des adresses
  12942. de courriel. La valeur par défaut est @samp{"+"}.
  12943. @end deftypevr
  12944. @deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
  12945. En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
  12946. est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
  12947. dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
  12948. X-Original-To. La valeur par défaut est @samp{""}.
  12949. @end deftypevr
  12950. @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
  12951. Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
  12952. ? La valeur par défaut est @samp{#f}.
  12953. @end deftypevr
  12954. @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
  12955. Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
  12956. La valeur par défaut est @samp{#f}.
  12957. @end deftypevr
  12958. @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
  12959. Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
  12960. des lignes de commandes très longues avec des boîtes aux lettres énormes,
  12961. donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
  12962. erreurs « Too long argument » ou « IMAP command line too large ». La valeur
  12963. par défaut est @samp{64000}.
  12964. @end deftypevr
  12965. @deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
  12966. Format de la chaîne de déconnexion IMAP :
  12967. @table @code
  12968. @item %i
  12969. nombre d'octets lus par le client
  12970. @item %o
  12971. nombre total d'octets envoyés au client.
  12972. @end table
  12973. Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
  12974. utilisables. La valeur par défaut est @samp{"in=%i out=%o
  12975. deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
  12976. hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
  12977. body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
  12978. @end deftypevr
  12979. @deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
  12980. Override the IMAP CAPABILITY response. If the value begins with '+', add
  12981. the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults
  12982. to @samp{""}.
  12983. @end deftypevr
  12984. @deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
  12985. Temps d'attente entre les notifications « OK Still here » lorsque le client
  12986. est en IDLE. La valeur par défaut est @samp{"2 mins"}.
  12987. @end deftypevr
  12988. @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
  12989. Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
  12990. la valeur par défaut. Les champs suivants ont actuellement des valeurs par
  12991. défaut : name, version, os, os-version, support-url, support-email. La
  12992. valeur par défaut est @samp{""}.
  12993. @end deftypevr
  12994. @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
  12995. Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
  12996. valeur par défaut est @samp{""}.
  12997. @end deftypevr
  12998. @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
  12999. Contournements pour divers bogues de certains client :
  13000. @table @code
  13001. @item delay-newmail
  13002. Envoie des notifications de nouveau message EXISTS/RECENT seulement en
  13003. réponse aux commandes NOOP et CHECK. Certains clients les ignorent
  13004. autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
  13005. cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
  13006. sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
  13007. contournement si la synchronisation est à « En-têtes seulement ».
  13008. @item tb-extra-mailbox-sep
  13009. Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
  13010. un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
  13011. Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
  13012. le traiter comme un nom de boîte aux lettres invalide.
  13013. @item tb-lsub-flags
  13014. Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This
  13015. makes Thunderbird realize they aren't selectable and show them greyed out,
  13016. instead of only later giving "not selectable" popup error.
  13017. @end table
  13018. La valeur par défaut est @samp{()}.
  13019. @end deftypevr
  13020. @deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
  13021. Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
  13022. autorise tous. La valeur par défaut est @samp{""}.
  13023. @end deftypevr
  13024. Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que GuixSD
  13025. a une interface complète avec le langage de configuration de Dovecot. Cela
  13026. permet non seulement de déclarer la configuration de manière agréable, mais
  13027. aussi d'offrir des capacités de réflexion : les utilisateurs peuvent écrire
  13028. du code pour inspecter et transformer les configuration depuis Scheme.
  13029. Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
  13030. prêt. Dans ce cas, vous pouvez passer un objet
  13031. @code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
  13032. @code{dovecot-service}. Comme son nom l'indique, une configuration opaque
  13033. n'a pas les capacités de réflexions.
  13034. Les champs de @code{opaque-dovecot-configuration} disponibles sont :
  13035. @deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
  13036. Le paquet dovecot
  13037. @end deftypevr
  13038. @deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
  13039. Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
  13040. @end deftypevr
  13041. Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
  13042. vous pouvez instancier un service dovecot comme cela :
  13043. @example
  13044. (dovecot-service #:config
  13045. (opaque-dovecot-configuration
  13046. (string "")))
  13047. @end example
  13048. @subsubheading Service OpenSMTPD
  13049. @deffn {Variable Scheme} opensmtpd-service-type
  13050. C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
  13051. dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
  13052. dans cet exemple :
  13053. @example
  13054. (service opensmtpd-service-type
  13055. (opensmtpd-configuration
  13056. (config-file (local-file "./my-smtpd.conf"))))
  13057. @end example
  13058. @end deffn
  13059. @deftp {Type de données} opensmtpd-configuration
  13060. Type de données représentant la configuration de opensmtpd.
  13061. @table @asis
  13062. @item @code{package} (par défaut : @var{opensmtpd})
  13063. Objet de paquet du serveur SMTP OpenSMTPD.
  13064. @item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
  13065. Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
  13066. Par défaut il écoute sur l'interface de boucle locale et accepte les
  13067. courriels des utilisateurs et des démons de la machine locale, et autorise
  13068. l'envoie de courriels à des serveurs distants. Lancez @command{man
  13069. smtpd.conf} pour plus d'information.
  13070. @end table
  13071. @end deftp
  13072. @subsubheading Service Exim
  13073. @cindex agent de transfert de courriel (MTA)
  13074. @cindex MTA (agent de transfert de courriel)
  13075. @cindex SMTP
  13076. @deffn {Variable Scheme} exim-service-type
  13077. C'est le type de l'agent de transfert de courriel (MTA)
  13078. @uref{https://exim.org, Exim}, dont la valeur devrait être un objet
  13079. @code{exim-configuration} comme dans cet exemple :
  13080. @example
  13081. (service exim-service-type
  13082. (exim-configuration
  13083. (config-file (local-file "./my-exim.conf"))))
  13084. @end example
  13085. @end deffn
  13086. Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
  13087. service @code{mail-aliases-service-type} dans votre @code{operating-system}
  13088. (même sans alias).
  13089. @deftp {Type de données} exim-configuration
  13090. Type de données représentant la configuration d'exim.
  13091. @table @asis
  13092. @item @code{package} (par défaut : @var{exim})
  13093. Objet de paquet du serveur Exim.
  13094. @item @code{config-file} (par défaut : @code{#f})
  13095. Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
  13096. valeur est @code{#f} alors le service utilisera la configuration par défaut
  13097. du paquet fournit dans @code{package}. Le fichier de configuration qui en
  13098. résulte est chargé après avoir mis en place les variables de configuration
  13099. @code{exim_user} et @code{exim_group}.
  13100. @end table
  13101. @end deftp
  13102. @subsubheading Service d'alias de courriel
  13103. @cindex alias de courriel
  13104. @cindex alias, pour les adresses de courriel
  13105. @deffn {Variable Scheme} mail-aliases-service-type
  13106. C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
  13107. comment délivrer les courriels aux utilisateurs du système.
  13108. @example
  13109. (service mail-aliases-service-type
  13110. '(("postmaster" "bob")
  13111. ("bob" "bob@@example.com" "bob@@example2.com")))
  13112. @end example
  13113. @end deffn
  13114. La configuration pour un service @code{mail-aliases-service-type} est une
  13115. liste associative qui dénote comment délivrer les courriels qui arrivent au
  13116. système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
  13117. @code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
  13118. délivrer les courriels de cet utilisateur.
  13119. Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
  13120. système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
  13121. @code{postmaster} dans la liste @code{user-accounts} du
  13122. @code{operating-system} pour délivrer les courriels à destination de
  13123. @code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
  13124. @code{bob@@example.com} et @code{bob@@example2.com}).
  13125. @node Services de messagerie
  13126. @subsubsection Services de messagerie
  13127. @cindex messagerie intantanée
  13128. @cindex jabber
  13129. @cindex XMPP
  13130. Le module @code{(gnu services messaging)} fournit des définitions de
  13131. services Guix pour les services de messageries instantanées : actuellement
  13132. seul Prosody est supporté.
  13133. @subsubheading Service Prosody
  13134. @deffn {Variable Scheme} prosody-service-type
  13135. C'est le type pour le @uref{https://prosody.im, le serveur de communication
  13136. XMPP Prosody}. Sa valeur doit être un enregistrement
  13137. @code{prosody-configuration} comme dans cet exemple :
  13138. @example
  13139. (service prosody-service-type
  13140. (prosody-configuration
  13141. (modules-enabled (cons "groups" "mam" %default-modules-enabled))
  13142. (int-components
  13143. (list
  13144. (int-component-configuration
  13145. (hostname "conference.example.net")
  13146. (plugin "muc")
  13147. (mod-muc (mod-muc-configuration)))))
  13148. (virtualhosts
  13149. (list
  13150. (virtualhost-configuration
  13151. (domain "example.net"))))))
  13152. @end example
  13153. Voir plus bas pour des détails sur @code{prosody-configuration}.
  13154. @end deffn
  13155. Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
  13156. champ @code{virtualhosts} est requis : il spécifie le domaine que vous
  13157. voulez voir Prosody servir.
  13158. Vous pouvez effectuer plusieurs vérifications de la configuration générée
  13159. avec la commande @code{prosodyctl check}.
  13160. Prosodyctl vous aidera aussi à importer des certificats du répertoire
  13161. @code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
  13162. Voir @url{https://prosody.im/doc/letsencrypt}.
  13163. @example
  13164. prosodyctl --root cert import /etc/letsencrypt/live
  13165. @end example
  13166. Les paramètres de configuration disponibles sont les suivants. Chaque
  13167. définition des paramètres est précédé par son type ; par exemple,
  13168. @samp{string-list foo} indique que le paramètre @code{foo} devrait être
  13169. spécifié comme une liste de chaînes de caractères. Les types précédés de
  13170. @code{maybe-} signifient que le paramètre n'apparaîtra pas dans
  13171. @code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
  13172. Il y a aussi une manière de spécifier la configuration en tant que chaîne de
  13173. caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
  13174. voulez porter depuis un autre système ; voir la fin pour plus de détails.
  13175. Le type @code{file-object} désigne soit un objet simili-fichier
  13176. (@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
  13177. @c The following documentation was initially generated by
  13178. @c (generate-documentation) in (gnu services messaging). Manually maintained
  13179. @c documentation is better, so we shouldn't hesitate to edit below as
  13180. @c needed. However if the change you want to make to this documentation
  13181. @c can be done in an automated way, it's probably easier to change
  13182. @c (generate-documentation) than to make it below and have to deal with
  13183. @c the churn as Prosody updates.
  13184. Les champs de @code{prosody-configuration} disponibles sont :
  13185. @deftypevr {paramètre de @code{prosody-configuration}} package prosody
  13186. Le paquet Prosody.
  13187. @end deftypevr
  13188. @deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
  13189. Emplacement du répertoire de stockage des données de Prosody. Voir
  13190. @url{https://prosody.im/doc/configure}. La valeur par défaut est
  13191. @samp{"/var/lib/prosody"}.
  13192. @end deftypevr
  13193. @deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
  13194. Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
  13195. spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
  13196. par défaut est @samp{()}.
  13197. @end deftypevr
  13198. @deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
  13199. Chaque hôte virtuel et composant a besoin d'un certificat pour que les
  13200. clients et les serveurs puissent vérifier son identité. Prosody chargera
  13201. automatiquement les clefs et les certificats dans le répertoire spécifié
  13202. ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
  13203. @end deftypevr
  13204. @deftypevr {paramètre de @code{prosody-configuration}} string-list admins
  13205. C'est une liste des comptes administrateurs de ce serveur. Remarquez que
  13206. vous devez créer les comptes séparément. Voir
  13207. @url{https://prosody.im/doc/admins} et
  13208. @url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
  13209. '("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
  13210. @samp{()}.
  13211. @end deftypevr
  13212. @deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
  13213. Active l'utilisation de libevent pour de meilleures performances sous une
  13214. forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
  13215. défaut est @samp{#f}.
  13216. @end deftypevr
  13217. @deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
  13218. C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
  13219. @code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
  13220. qu'il existe aussi. La documentation des modules se trouve sur
  13221. @url{https://prosody.im/doc/modules}. La valeur par défaut est
  13222. @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
  13223. "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
  13224. "admin_adhoc")}.
  13225. @end deftypevr
  13226. @deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
  13227. @samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
  13228. mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
  13229. par défaut est @samp{()}.
  13230. @end deftypevr
  13231. @deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
  13232. Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
  13233. chemin est vide alors @samp{mod_groups} ne fait rien. Voir
  13234. @url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
  13235. @samp{"/var/lib/prosody/sharedgroups.txt"}.
  13236. @end deftypevr
  13237. @deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
  13238. Désactive la création de compte par défaut, pour la sécurité. Voir
  13239. @url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
  13240. @samp{#f}.
  13241. @end deftypevr
  13242. @deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
  13243. Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
  13244. pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
  13245. pas complètement ces options, ne les ajoutez pas à votre configuration, il
  13246. est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
  13247. @url{https://prosody.im/doc/advanced_ssl_config}.
  13248. Les champs de @code{ssl-configuration} disponibles sont :
  13249. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
  13250. Cela détermine la poignée de main à utiliser.
  13251. @end deftypevr
  13252. @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
  13253. Chemin vers votre fichier de clef privée.
  13254. @end deftypevr
  13255. @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
  13256. Chemin vers votre fichier de certificat.
  13257. @end deftypevr
  13258. @deftypevr {paramètre de @code{ssl-configuration}} file-object capath
  13259. Chemin vers le répertoire contenant les certificats racines que vous voulez
  13260. voir Prosody utiliser lors de la vérification des certificats des serveurs
  13261. distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
  13262. @end deftypevr
  13263. @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
  13264. Chemin vers un fichier contenant les certificats racines auxquels Prosody
  13265. devra faire confiance. Comme @code{capath} mais avec les certificats
  13266. concaténés ensemble.
  13267. @end deftypevr
  13268. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
  13269. Une liste d'options de vérification (qui correspondent globalement aux
  13270. drapeaux @code{set_verify()} d'OpenSSL).
  13271. @end deftypevr
  13272. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
  13273. Une liste d'options générales liées à SSL/TLS. Elles correspondent
  13274. globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
  13275. options disponibles dans LuaSec, voir les sources de LuaSec.
  13276. @end deftypevr
  13277. @deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
  13278. Longueur maximale d'une chaîne d'autorités de certifications avant la
  13279. racine.
  13280. @end deftypevr
  13281. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
  13282. Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
  13283. chiffrement que Prosody offrira aux clients, et dans quel ordre de
  13284. préférence.
  13285. @end deftypevr
  13286. @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
  13287. Un chemin vers un fichier contenant les paramètres pour l'échange de clef
  13288. Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
  13289. dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
  13290. @end deftypevr
  13291. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
  13292. Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
  13293. Prosody est @samp{"secp384r1"}.
  13294. @end deftypevr
  13295. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
  13296. Une liste d'options de vérification « supplémentaires ».
  13297. @end deftypevr
  13298. @deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
  13299. Mot de passe pour les clefs privées chiffrées.
  13300. @end deftypevr
  13301. @end deftypevr
  13302. @deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
  13303. S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
  13304. non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
  13305. défaut est @samp{#f}.
  13306. @end deftypevr
  13307. @deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
  13308. Ensemble de mécanismes qui ne seront jamais offerts. Voir
  13309. @url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
  13310. @samp{("DIGEST-MD5")}.
  13311. @end deftypevr
  13312. @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
  13313. S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
  13314. non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
  13315. défaut est @samp{#f}.
  13316. @end deftypevr
  13317. @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
  13318. S'il faut requérir le chiffrement et l'authentification du certificat. Cela
  13319. fournit une sécurité idéale, mais demande que les serveurs avec lesquels
  13320. vous communiquez supportent le chiffrement ET présentent un certificat
  13321. valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
  13322. valeur par défaut est @samp{#f}.
  13323. @end deftypevr
  13324. @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
  13325. Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
  13326. invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
  13327. besoin de s'authentifier avec des certificats. Ils seront authentifiés par
  13328. DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
  13329. est @samp{()}.
  13330. @end deftypevr
  13331. @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
  13332. Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
  13333. demander un certificat valide pour certains domaine en spécifiant la liste
  13334. ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
  13335. est @samp{()}.
  13336. @end deftypevr
  13337. @deftypevr {paramètre de @code{prosody-configuration}} string authentication
  13338. Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
  13339. les mots de passes en texte clair et utilise la configuration de stockage
  13340. des données de Prosody pour stocker les données authentifiées. Si vous
  13341. n'avez pas confiance dans le serveur, lisez
  13342. @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
  13343. d'information sur l'utilisation du moteur hashed. Voir aussi
  13344. @url{https://prosody.im/doc/authentication}. La valeur par défaut est
  13345. @samp{"internal_plain"}.
  13346. @end deftypevr
  13347. @deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
  13348. Indique les options de journalisation. La configuration avancée des
  13349. journaux n'est pas encore supportée par le service Prosody dans GuixSD.
  13350. Voir @url{https://prosody.im/doc/logging}. La valeur par défaut est
  13351. @samp{"*syslog"}.
  13352. @end deftypevr
  13353. @deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
  13354. Fichier où écrire le PID. Voir
  13355. @url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
  13356. @samp{"/var/run/prosody/prosody.pid"}.
  13357. @end deftypevr
  13358. @deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
  13359. Taille maximum autorisée pour le corps HTTP (en octets).
  13360. @end deftypevr
  13361. @deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
  13362. Certains modules exposent leur propre URL de diverses manières. Cette URL
  13363. est construite à partir du protocole, de l'hôte et du port utilisé. Si
  13364. Prosody se trouve derrière un proxy, l'URL publique sera
  13365. @code{http-external-url} à la place. Voir
  13366. @url{https://prosody.im/doc/http#external_url}.
  13367. @end deftypevr
  13368. @deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
  13369. Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
  13370. créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
  13371. comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
  13372. @samp{"example.com"}. Toutes les options de cette liste seront appliquées
  13373. uniquement à cet hôte.
  13374. Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
  13375. éviter de le confondre avec le nom d'hôte physique réel de la machine qui
  13376. héberge Prosody. Une seule instance de Prosody peut servir plusieurs
  13377. domaines, chacun défini comme une entrée VirtualHost dans la configuration
  13378. de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
  13379. qu'une entrée VirtualHost.
  13380. Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
  13381. Les champs de @code{virtualhost-configuration} disponibles sont :
  13382. tous ces champs de @code{prosody-configuration} : @code{admins},
  13383. @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
  13384. @code{groups-file}, @code{allow-registration?}, @code{ssl},
  13385. @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
  13386. @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
  13387. @code{s2s-insecure-domains}, @code{s2s-secure-domains},
  13388. @code{authentication}, @code{log}, @code{http-max-content-size},
  13389. @code{http-external-url}, @code{raw-content}, plus :
  13390. @deftypevr {paramètre de @code{virtualhost-configuration}} string domain
  13391. Domaine que vous souhaitez que Prosody serve.
  13392. @end deftypevr
  13393. @end deftypevr
  13394. @deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
  13395. Les composant sont des services supplémentaires qui sont disponibles pour
  13396. les clients, habituellement sur un sous-domaine du serveur principal (comme
  13397. @samp{"mycomponent.example.com"}). Des exemples de composants sont des
  13398. serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
  13399. d'autres protocoles.
  13400. Les composants internes sont implémentés dans des greffons spécifiques à
  13401. Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
  13402. champ de nom d'hôte et le greffon que vous voulez utiliser pour le
  13403. composant.
  13404. Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
  13405. @samp{()}.
  13406. Les champs de @code{int-component-configuration} disponibles sont :
  13407. tous ces champs de @code{prosody-configuration} : @code{admins},
  13408. @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
  13409. @code{groups-file}, @code{allow-registration?}, @code{ssl},
  13410. @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
  13411. @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
  13412. @code{s2s-insecure-domains}, @code{s2s-secure-domains},
  13413. @code{authentication}, @code{log}, @code{http-max-content-size},
  13414. @code{http-external-url}, @code{raw-content}, plus :
  13415. @deftypevr {paramètre de @code{int-component-configuration}} string hostname
  13416. Nom d'hôte du composant.
  13417. @end deftypevr
  13418. @deftypevr {paramètre de @code{int-component-configuration}} string plugin
  13419. Greffon que vous voulez utiliser pour ce composant.
  13420. @end deftypevr
  13421. @deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
  13422. Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
  13423. créer des chatrooms/conférences pour les utilisateurs XMPP.
  13424. Des informations générales sur la configuration des chatrooms
  13425. multi-utilisateurs se trouvent dans la documentation sur les chatrooms
  13426. (@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
  13427. découvrez.
  13428. Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
  13429. Les champs de @code{mod-muc-configuration} disponibles sont :
  13430. @deftypevr {paramètre de @code{mod-muc-configuration}} string name
  13431. Le nom à renvoyer dans les réponses de découverte de services. La valeur
  13432. par défaut est @samp{"Prosody Chatrooms"}.
  13433. @end deftypevr
  13434. @deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
  13435. If @samp{#t}, this will only allow admins to create new chatrooms.
  13436. Otherwise anyone can create a room. The value @samp{"local"} restricts room
  13437. creation to users on the service's parent domain. E.g.@:
  13438. @samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The
  13439. value @samp{"admin"} restricts to service administrators only. Defaults to
  13440. @samp{#f}.
  13441. @end deftypevr
  13442. @deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
  13443. Nombre maximum de messages d'historique qui seront envoyés aux membres qui
  13444. viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
  13445. @end deftypevr
  13446. @end deftypevr
  13447. @end deftypevr
  13448. @deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
  13449. Les composants externes utilisent XEP-0114, que la plupart des composants
  13450. supportent. Pour ajouter un composant externe, vous remplissez simplement
  13451. le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
  13452. valeur par défaut est @samp{()}.
  13453. Les champs de @code{ext-component-configuration} disponibles sont :
  13454. tous ces champs de @code{prosody-configuration} : @code{admins},
  13455. @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
  13456. @code{groups-file}, @code{allow-registration?}, @code{ssl},
  13457. @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
  13458. @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
  13459. @code{s2s-insecure-domains}, @code{s2s-secure-domains},
  13460. @code{authentication}, @code{log}, @code{http-max-content-size},
  13461. @code{http-external-url}, @code{raw-content}, plus :
  13462. @deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
  13463. Mot de passe que le composant utilisera pour s'authentifier.
  13464. @end deftypevr
  13465. @deftypevr {paramètre de @code{ext-component-configuration}} string hostname
  13466. Nom d'hôte du composant.
  13467. @end deftypevr
  13468. @end deftypevr
  13469. @deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
  13470. Ports sur lesquels Prosody écoutera les connexions des composants. La
  13471. valeur par défaut est @samp{(5347)}.
  13472. @end deftypevr
  13473. @deftypevr {paramètre de @code{prosody-configuration}} string component-interface
  13474. Interface sur laquelle Prosody écoutera les connexions des composants. La
  13475. valeur par défaut est @samp{"127.0.0.1"}.
  13476. @end deftypevr
  13477. @deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
  13478. Contenu brut qui sera ajouté au fichier de configuration.
  13479. @end deftypevr
  13480. Il se peut que vous ayez juste envie de lancer un fichier
  13481. @code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
  13482. enregistrement @code{opaque-prosody-configuration} comme valeur à
  13483. @code{prosody-service-type}. Comme son nom l'indique, une configuration
  13484. opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
  13485. @code{opaque-prosody-configuration} sont :
  13486. @deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
  13487. Le paquet prosody.
  13488. @end deftypevr
  13489. @deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
  13490. Le contenu de @code{prosody.cfg.lua} à utiliser.
  13491. @end deftypevr
  13492. Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
  13493. pouvez instancier un service prosody comme ceci :
  13494. @example
  13495. (service prosody-service-type
  13496. (opaque-prosody-configuration
  13497. (prosody.cfg.lua "")))
  13498. @end example
  13499. @c end of Prosody auto-generated documentation
  13500. @subsubheading Service BitlBee
  13501. @cindex IRC (Internet Relay Chat)
  13502. @cindex passerelle IRC
  13503. @url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
  13504. interface IRC vers une variété de protocoles de messagerie instantanée comme
  13505. XMPP.
  13506. @defvr {Variable Scheme} bitlbee-service-type
  13507. C'est le type de service pour le démon de passerelle IRC
  13508. @url{http://bitlbee.org,BitlBee}. Sa valeur est un
  13509. @code{bitlbee-configuration} (voir plus bas).
  13510. Pour que BitlBee écoute sur le pourt 6667 sur localhost, ajoutez cette ligne
  13511. à vos services :
  13512. @example
  13513. (service bitlbee-service-type)
  13514. @end example
  13515. @end defvr
  13516. @deftp {Type de données} bitlbee-configuration
  13517. C'est la configuration de BitlBee, avec les champs suivants :
  13518. @table @asis
  13519. @item @code{interface} (par défaut : @code{"127.0.0.1"})
  13520. @itemx @code{port} (par défaut : @code{6667})
  13521. Écoute sur l'interface réseau correspondant à l'adresse IP dans
  13522. @var{interface}, sur @var{port}.
  13523. Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
  13524. peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
  13525. peuvent venir de n'importe quelle interface réseau.
  13526. @item @code{package} (par défaut : @code{bitlbee})
  13527. Le paquet BitlBee à utiliser.
  13528. @item @code{plugins} (par défaut : @code{'()})
  13529. Liste des paquets de greffons à utiliser — p.@: ex.@:
  13530. @code{bitlbee-discord}.
  13531. @item @code{extra-settings} (par défaut : @code{""})
  13532. Partie de configuration ajoutée telle-quelle au fichier de configuration de
  13533. BitlBee.
  13534. @end table
  13535. @end deftp
  13536. @node Services de téléphonie
  13537. @subsubsection Services de téléphonie
  13538. @cindex Murmur (serveur VoIP)
  13539. @cindex serveur VoIP
  13540. Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
  13541. est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
  13542. Mumble}.
  13543. @deftp {Type de données} murmur-configuration
  13544. Le type de service pour le serveur Murmur. Voici un exemple de
  13545. configuration :
  13546. @example
  13547. (service murmur-service-type
  13548. (murmur-configuration
  13549. (welcome-text
  13550. "Welcome to this Mumble server running on GuixSD!")
  13551. (cert-required? #t) ;disallow text password logins
  13552. (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
  13553. (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
  13554. @end example
  13555. Après avoir reconfiguré votre système, vous pouvez manuellement indiquer le
  13556. mot de passe @code{SuperUser} de murmur avac la commande qui s'affiche
  13557. pendant la phase d'activation.
  13558. Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
  13559. lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
  13560. @code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
  13561. vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
  13562. avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
  13563. que vous avez indiqué précédemment et accordez les droits administrateur ou
  13564. modérateur à vous utilisateur mumble nouvellement enregistré et créez
  13565. quelques salons.
  13566. Les champs de @code{murmur-configuration} disponibles sont :
  13567. @table @asis
  13568. @item @code{package} (par défaut : @code{mumble})
  13569. Paquet qui contient @code{bin/murmurd}.
  13570. @item @code{user} (par défaut : @code{"murmur"})
  13571. Utilisateur qui lancera le serveur Murmur.
  13572. @item @code{group} (par défaut : @code{"murmur"})
  13573. Groupe de l'utilisateur qui lancera le serveur Murmur.
  13574. @item @code{port} (par défaut : @code{64738})
  13575. Port sur lequel le serveur écoutera.
  13576. @item @code{welcome-text} (par défaut : @code{""})
  13577. Texte de bienvenue envoyé aux clients lors de leur connexion.
  13578. @item @code{server-password} (par défaut : @code{""})
  13579. Mot de passe que les clients devront entrer pour se connecter.
  13580. @item @code{max-users} (par défaut : @code{100})
  13581. Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
  13582. temps.
  13583. @item @code{max-user-bandwidth} (par défaut : @code{#f})
  13584. Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
  13585. @item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
  13586. Nom de fichier de la base de données sqlite. L'utilisateur du service
  13587. deviendra propriétaire du répertoire.
  13588. @item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
  13589. Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
  13590. du répertoire.
  13591. @item @code{autoban-attempts} (par défaut : @code{10})
  13592. Nombre maximum de connexions qu'un utilisateur peut faire pendant
  13593. @code{autoban-timeframe} sans être banni automatiquement pour
  13594. @code{autoban-time}.
  13595. @item @code{autoban-timeframe} (par défaut : @code{120})
  13596. Durée du temps pendant lequel le nombre de connexions est compté.
  13597. @item @code{autoban-time} (par défaut : @code{300})
  13598. Durée du bannissement automatique en secondes.
  13599. @item @code{opus-threshold} (par défaut : @code{100})
  13600. Pourcentage des clients qui doivent supporter opus avant de passer sur le
  13601. codec audio opus.
  13602. @item @code{channel-nesting-limit} (par défaut : @code{10})
  13603. Profondeur maximum des canaux.
  13604. @item @code{channelname-regex} (par défaut : @code{#f})
  13605. Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
  13606. doivent respecter.
  13607. @item @code{username-regex} (par défaut : @code{#f})
  13608. Une chaîne de la forme d'une expression régulière Qt que les noms
  13609. d'utilisateurs doivent respecter.
  13610. @item @code{text-message-length} (par défaut : @code{5000})
  13611. Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
  13612. textuel.
  13613. @item @code{image-message-length} (par défaut : @code{(* 128 1024)})
  13614. Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
  13615. @item @code{cert-required?} (par défaut : @code{#f})
  13616. Si la valeur est @code{#t} les clients utilisant une authentification par
  13617. mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
  13618. compléter l'assistant de configuration des certificats pour rejoindre le
  13619. serveur.
  13620. @item @code{remember-channel?} (paramètre de : @code{#f})
  13621. Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
  13622. les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
  13623. se reconnectent.
  13624. @item @code{allow-html?} (par défaut : @code{#f})
  13625. Indique si le html est autorisé dans les messages textuels, les commentaires
  13626. utilisateurs et les descriptions des canaux.
  13627. @item @code{allow-ping?} (par défaut : @code{#f})
  13628. Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
  13629. maximum et la bande passante maximale du serveur par client aux utilisateurs
  13630. non connectés. Dans le client Mumble, cette information est affichée dans
  13631. la boîte de dialogue de connexion.
  13632. Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
  13633. @item @code{bonjour?} (par défaut : @code{#f})
  13634. Indique si le serveur se présente sur le réseau local à travers le protocole
  13635. bonjour.
  13636. @item @code{send-version?} (par défaut : @code{#f})
  13637. Indique si la version du serveur murmur doit être exposée dans les requêtes
  13638. ping.
  13639. @item @code{log-days} (par défaut : @code{31})
  13640. Murmur stocke aussi les journaux en base de données, qui sont accessible via
  13641. RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
  13642. les garder pour toujours ou à -1 pour désactiver la journalisation dans la
  13643. base de données.
  13644. @item @code{obfuscate-ips?} (par défaut : @code{#t})
  13645. Indique si les IP enregistrées doivent être cachées pour protéger la vie
  13646. privée des utilisateurs.
  13647. @item @code{ssl-cert} (par défaut : @code{#f})
  13648. Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
  13649. @example
  13650. (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
  13651. @end example
  13652. @item @code{ssl-key} (par défaut : @code{#f})
  13653. Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
  13654. @example
  13655. (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
  13656. @end example
  13657. @item @code{ssl-dh-params} (par défaut : @code{#f})
  13658. Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
  13659. pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
  13660. @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
  13661. @code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
  13662. inclus de la RFC 7919.
  13663. @item @code{ssl-ciphers} (par défaut : @code{#f})
  13664. L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
  13665. disponibles pour SSL/TLS.
  13666. Cette option est spécifiée en utilisant
  13667. l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
  13668. OpenSSL cipher list notation}
  13669. Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
  13670. « openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
  13671. des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
  13672. nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
  13673. que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
  13674. Remarque : modifier cette option peut impacter la rétrocompatibilité de
  13675. votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
  13676. connectent.
  13677. @item @code{public-registration} (par défaut : @code{#f})
  13678. Doit être un enregistrement
  13679. @code{<murmur-public-registration-configuration>} ou @code{#f}.
  13680. Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
  13681. publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
  13682. pas enregistrer votre serveur si vous avez un @code{server-password} ou
  13683. @code{allow-ping} à @code{#f}.
  13684. Cela peut prendre quelques heures avant d'arriver sur la liste publique.
  13685. @item @code{file} (par défaut : @code{#f})
  13686. Version alternative de cette configuration : si vous indiquez quelque chose,
  13687. le reste est ignoré.
  13688. @end table
  13689. @end deftp
  13690. @deftp {Type de données} murmur-public-registration-configuration
  13691. Configuration pour l'enregistrement public du service murmur.
  13692. @table @asis
  13693. @item @code{name}
  13694. C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
  13695. d'hôte.
  13696. @item @code{password}
  13697. Un mot de passe pour identifier votre enregistrement. Les mises à jours
  13698. suivantes devront utiliser le même mot de passe. Ne le perdez pas.
  13699. @item @code{url}
  13700. Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
  13701. web.
  13702. @item @code{hostname} (par défaut : @code{#f})
  13703. Par défaut votre serveur sera listé par son adresse IP. Si cette option est
  13704. indiquée votre serveur sera listé par son nom d'hôte.
  13705. @end table
  13706. @end deftp
  13707. @node Services de surveillance
  13708. @subsubsection Services de surveillance
  13709. @subsubheading Service Tailon
  13710. @uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
  13711. visualiser et chercher des fichiers de journaux.
  13712. L'exemple suivant configurera le service avec les valeurs par défaut. Par
  13713. défaut, on peut accéder à Tailon sur le pour 8080
  13714. (@code{http://localhost:8080}).
  13715. @example
  13716. (service tailon-service-type)
  13717. @end example
  13718. L'exemple suivant personnalise un peu plus la configuration de Tailon, en
  13719. ajoutant @command{sed} à la liste des commandes autorisées.
  13720. @example
  13721. (service tailon-service-type
  13722. (tailon-configuration
  13723. (config-file
  13724. (tailon-configuration-file
  13725. (allowed-commands '("tail" "grep" "awk" "sed"))))))
  13726. @end example
  13727. @deftp {Type de données} tailon-configuration
  13728. Type de données représentant la configuration de Tailon. Ce type a les
  13729. paramètres suivants :
  13730. @table @asis
  13731. @item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
  13732. Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
  13733. un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
  13734. (@pxref{G-Expressions}).
  13735. Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
  13736. fonction @code{local-file} :
  13737. @example
  13738. (service tailon-service-type
  13739. (tailon-configuration
  13740. (config-file (local-file "./my-tailon.conf"))))
  13741. @end example
  13742. @item @code{package} (par défaut : @code{tailon})
  13743. Le paquet tailon à utiliser.
  13744. @end table
  13745. @end deftp
  13746. @deftp {Type de données} tailon-configuration-file
  13747. Type de données représentant les options de configuration de Tailon. Ce
  13748. type a les paramètres suivants :
  13749. @table @asis
  13750. @item @code{files} (par défaut : @code{(list "/var/log")})
  13751. Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
  13752. fichiers simple ou des répertoires, ou une liste, où le premier élément est
  13753. le nom d'un sous-section et le reste des fichiers ou des répertoires de
  13754. cette sous-section.
  13755. @item @code{bind} (par défaut : @code{"localhost:8080"})
  13756. Adresse et port sur lesquels Tailon écoute.
  13757. @item @code{relative-root} (par défaut : @code{#f})
  13758. Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
  13759. chemin.
  13760. @item @code{allow-transfers?} (par défaut : @code{#t})
  13761. Permet de télécharger les journaux dans l'interface web.
  13762. @item @code{follow-names?} (par défaut : @code{#t})
  13763. Permet de surveiller des fichiers qui n'existent pas encore.
  13764. @item @code{tail-lines} (par défaut : @code{200})
  13765. Nombre de lignes à lire initialement dans chaque fichier.
  13766. @item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
  13767. Commandes autorisées. Par défaut, @code{sed} est désactivé.
  13768. @item @code{debug?} (par défaut : @code{#f})
  13769. Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
  13770. @item @code{wrap-lines} (par défaut : @code{#t})
  13771. État initial du retour à la ligne dans l'interface web. Configurez l'option
  13772. à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
  13773. pas retourner à la ligne au début.
  13774. @item @code{http-auth} (par défaut : @code{#f})
  13775. Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
  13776. l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
  13777. et @code{"basic"}.
  13778. @item @code{users} (par défaut : @code{#f})
  13779. Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
  13780. restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
  13781. utilisez une liste de paires, où le premier élément de la paire est le nom
  13782. d'utilisateur et le second élément est le mot de passe.
  13783. @example
  13784. (tailon-configuration-file
  13785. (http-auth "basic")
  13786. (users '(("user1" . "password1")
  13787. ("user2" . "password2"))))
  13788. @end example
  13789. @end table
  13790. @end deftp
  13791. @subsubheading Service Darkstat
  13792. @cindex darkstat
  13793. Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
  13794. calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
  13795. @defvar {Variable Scheme} darkstat-service-type
  13796. C'est le type de service pour le service
  13797. @uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
  13798. enregistrement @code{darkstat-configuration} comme dans cet exemple :
  13799. @example
  13800. (service darkstat-service-type
  13801. (darkstat-configuration
  13802. (interface "eno1")))
  13803. @end example
  13804. @end defvar
  13805. @deftp {Type de données} darkstat-configuration
  13806. Type de données représentant la configuration de @command{darkstat}.
  13807. @table @asis
  13808. @item @code{package} (par défaut : @code{darkstat})
  13809. Le paquet darkstat à utiliser.
  13810. @item @code{interface}
  13811. Capture le trafic sur l'interface réseau spécifiée.
  13812. @item @code{port} (par défaut : @code{"667"})
  13813. Lie l'interface web sur le port spécifié.
  13814. @item @code{bind-address} (par défaut : @code{"127.0.0.1"})
  13815. Lie l'interface web sur l'adresse spécifiée.
  13816. @item @code{base} (par défaut : @code{"/"})
  13817. Spécifie le chemin de base des URL. C'est utile si on accède à
  13818. @command{darkstat} à travers un proxy inverse.
  13819. @end table
  13820. @end deftp
  13821. @subsubheading Service d'export de nœud de Prometheus
  13822. @cindex prometheus-node-exporter
  13823. L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
  13824. matériel et le système d'exploitation fournies par le noyau Linux pour le
  13825. système de surveillance Prometheus. Ce service devrait être déployé sur
  13826. tous les nœuds physiques et les machines virtuelles, où vous voulez
  13827. surveiller ces statistiques.
  13828. @defvar {Variable Scheme} prometheus-node-exporter-service-type
  13829. C'est le type de service pour le service
  13830. @uref{https://github.com/prometheus/node_exporter/,
  13831. prometheus-node-exporter}, sa valeur doit être un enregistrement
  13832. @code{prometheus-node-exporter-configuration} comme dans cet exemple :
  13833. @example
  13834. (service prometheus-node-exporter-service-type
  13835. (prometheus-node-exporter-configuration
  13836. (web-listen-address ":9100")))
  13837. @end example
  13838. @end defvar
  13839. @deftp {Type de données} prometheus-node-exporter-configuration
  13840. Type de données représentant la configuration de @command{node_exporter}
  13841. @table @asis
  13842. @item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
  13843. Le paquet prometheus-node-exporter à utiliser.
  13844. @item @code{web-listen-address} (par défaut : @code{":9100"})
  13845. Lie l'interface web sur l'adresse spécifiée.
  13846. @end table
  13847. @end deftp
  13848. @node Services Kerberos
  13849. @subsubsection Services Kerberos
  13850. @cindex Kerberos
  13851. Le module @code{(gnu services kerberos)} fournit des services liés au
  13852. protocole d'authentification @dfn{Kerberos}.
  13853. @subsubheading Service Krb5
  13854. Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
  13855. trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
  13856. génère un tel fichier à partir d'une définition fournie par la déclaration
  13857. de système d'exploitation. Il ne démarre aucun démon.
  13858. Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
  13859. explicitement. Ce service est connu pour fonctionner avec la bibliothèque
  13860. cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
  13861. testées.
  13862. @defvr {Variable Scheme} krb5-service-type
  13863. Un type de service pour les clients Kerberos 5.
  13864. @end defvr
  13865. @noindent
  13866. Voici un exemple d'utilisation :
  13867. @lisp
  13868. (service krb5-service-type
  13869. (krb5-configuration
  13870. (default-realm "EXAMPLE.COM")
  13871. (allow-weak-crypto? #t)
  13872. (realms (list
  13873. (krb5-realm
  13874. (name "EXAMPLE.COM")
  13875. (admin-server "groucho.example.com")
  13876. (kdc "karl.example.com"))
  13877. (krb5-realm
  13878. (name "ARGRX.EDU")
  13879. (admin-server "kerb-admin.argrx.edu")
  13880. (kdc "keys.argrx.edu"))))))
  13881. @end lisp
  13882. @noindent
  13883. Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
  13884. @itemize
  13885. @item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
  13886. aillant des serveurs d'administration et des centres de distribution de
  13887. clefs distincts ;
  13888. @item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
  13889. explicitement par les clients ;
  13890. @item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
  13891. @end itemize
  13892. Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
  13893. champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
  13894. et plus de détails sur chacun d'entre eux, voir la documentation de MIT
  13895. @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
  13896. @deftp {Type de données} krb5-realm
  13897. @cindex domaine, kerberos
  13898. @table @asis
  13899. @item @code{name}
  13900. Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
  13901. courante est d'utiliser le nom pleinement qualifié de votre organisation,
  13902. converti en majuscule.
  13903. @item @code{admin-server}
  13904. Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
  13905. tourne.
  13906. @item @code{kdc}
  13907. Ce champ est une chaîne identifiant le centre de distribution de clefs pour
  13908. ce domaine.
  13909. @end table
  13910. @end deftp
  13911. @deftp {Type de données} krb5-configuration
  13912. @table @asis
  13913. @item @code{allow-weak-crypto?} (par défaut : @code{#f})
  13914. Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
  13915. de chiffrement faibles seront acceptés.
  13916. @item @code{default-realm} (par défaut : @code{#f})
  13917. Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
  13918. pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
  13919. ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
  13920. pour chaque principal Kerberos à l'invocation des programmes comme
  13921. @command{kinit}.
  13922. @item @code{realms}
  13923. Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
  13924. clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
  13925. @code{name} qui correspond au champ @code{default-realm}.
  13926. @end table
  13927. @end deftp
  13928. @subsubheading Service PAM krb5
  13929. @cindex pam-krb5
  13930. Le service @code{pam-krb5} permet la connexion et la gestion des mots de
  13931. passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
  13932. applications qui utilisent PAM puissent authentifier automatiquement les
  13933. utilisateurs avec Kerberos.
  13934. @defvr {Variable Scheme} pam-krb5-service-type
  13935. Un type de service pour le module PAM Kerberos 5.
  13936. @end defvr
  13937. @deftp {Type de données} pam-krb5-configuration
  13938. Type de données représentant la configuration du module PAM Kerberos 5. Ce
  13939. type a les paramètres suivants :
  13940. @table @asis
  13941. @item @code{pam-krb5} (par défaut : @code{pam-krb5})
  13942. Le paquet pam-krb5 à utiliser.
  13943. @item @code{minimum-uid} (par défaut : @code{1000})
  13944. Le plus petite ID utilisateur pour lequel les authentifications Kerberos
  13945. devraient être tentées. Les comptes locaux avec une valeur plus petite
  13946. échoueront silencieusement leur authentification Kerberos.
  13947. @end table
  13948. @end deftp
  13949. @node Services web
  13950. @subsubsection Services web
  13951. @cindex web
  13952. @cindex www
  13953. @cindex HTTP
  13954. Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
  13955. serveur web nginx et aussi un démon fastcgi.
  13956. @subsubheading Serveur Apache HTTP
  13957. @deffn {Variable Scheme} httpd-service-type
  13958. Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
  13959. (@dfn{httpd}). La valeur de ce type de service est un enregistrement
  13960. @code{httpd-configuration}.
  13961. Un exemple de configuration simple est donné ci-dessous.
  13962. @example
  13963. (service httpd-service-type
  13964. (httpd-configuration
  13965. (config
  13966. (httpd-config-file
  13967. (server-name "www.example.com")
  13968. (document-root "/srv/http/www.example.com")))))
  13969. @end example
  13970. D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
  13971. ajouté à la configuration.
  13972. @example
  13973. (simple-service 'my-extra-server httpd-service-type
  13974. (list
  13975. (httpd-virtualhost
  13976. "*:80"
  13977. (list (string-append
  13978. "ServerName "www.example.com
  13979. DocumentRoot \"/srv/http/www.example.com\"")))))
  13980. @end example
  13981. @end deffn
  13982. Les détails des types d'enregistrement @code{httpd-configuration},
  13983. @code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
  13984. sont donnés plus bas.
  13985. @deffn {Type de données} httpd-configuration
  13986. Ce type de données représente la configuration du service httpd.
  13987. @table @asis
  13988. @item @code{package} (par défaut : @code{httpd})
  13989. Le paquet httpd à utiliser.
  13990. @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
  13991. Le fichier de pid utilisé par le service shepherd.
  13992. @item @code{config} (par défaut : @code{(httpd-config-file)})
  13993. Le fichier de configuration à utiliser avec le service httpd. La valeur par
  13994. défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
  13995. être un G-expression qui génère un fichier, par exemple un
  13996. @code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
  13997. avec une chaîne de caractères.
  13998. @end table
  13999. @end deffn
  14000. @deffn {Type de données} httpd-module
  14001. Ce type de données représente un module pour le service httpd.
  14002. @table @asis
  14003. @item @code{name}
  14004. Le nom du module.
  14005. @item @code{file}
  14006. Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
  14007. l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
  14008. le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
  14009. @end table
  14010. @end deffn
  14011. @defvr {Variable Scheme} %default-httpd-modules
  14012. Une liste par défaut des objets @code{httpd-module}.
  14013. @end defvr
  14014. @deffn {Type de données} httpd-config-file
  14015. Ce type de données représente un fichier de configuration pour le service
  14016. httpd.
  14017. @table @asis
  14018. @item @code{modules} (par défaut : @code{%default-httpd-modules})
  14019. Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
  14020. ou chargés par des configuration supplémentaires.
  14021. Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
  14022. utiliser le module @code{mod_proxy_fcgi} d'Apache avec
  14023. @code{php-fpm-service-type} :
  14024. @example
  14025. (service httpd-service-type
  14026. (httpd-configuration
  14027. (config
  14028. (httpd-config-file
  14029. (modules (cons*
  14030. (httpd-module
  14031. (name "proxy_module")
  14032. (file "modules/mod_proxy.so"))
  14033. (httpd-module
  14034. (name "proxy_fcgi_module")
  14035. (file "modules/mod_proxy_fcgi.so"))
  14036. %default-httpd-modules))
  14037. (extra-config (list "\
  14038. <FilesMatch \\.php$>
  14039. SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
  14040. </FilesMatch>"))))))
  14041. (service php-fpm-service-type
  14042. (php-fpm-configuration
  14043. (socket "/var/run/php-fpm.sock")
  14044. (socket-group "httpd")))
  14045. @end example
  14046. @item @code{server-root} (par défaut : @code{httpd})
  14047. Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
  14048. httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
  14049. relativement à la racine du serveur.
  14050. @item @code{server-name} (par défaut : @code{#f})
  14051. Le @code{ServerName} dans le fichier de configuration, utilisé pour
  14052. spécifier le schéma de requête, le nom d'hôte et le port que le serveur
  14053. utilise pour s'identifier.
  14054. Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
  14055. spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
  14056. ne pas spécifier de @code{ServerName}.
  14057. @item @code{document-root} (par défaut : @code{"/srv/http"})
  14058. Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
  14059. @item @code{listen} (par défaut : @code{'("80")})
  14060. La liste des valeurs pour les directives @code{Listen} dans le fichier de
  14061. configuration. La valeur devrait être une liste de chaînes, où chacune
  14062. spécifie le port sur lequel écouter et éventuellement une adresse IP et un
  14063. protocole à utiliser.
  14064. @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
  14065. Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
  14066. indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
  14067. correctement configuré.
  14068. @item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
  14069. Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
  14070. @item @code{user} (par défaut : @code{"httpd"})
  14071. Le @code{User} en tant que lequel le serveur répondra aux requêtes.
  14072. @item @code{group} (par défaut : @code{"httpd"})
  14073. Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
  14074. @item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
  14075. Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
  14076. du fichier de configuration.
  14077. N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
  14078. cette liste.
  14079. @end table
  14080. @end deffn
  14081. @deffn {Type de données} httpd-virtualhost
  14082. Ce type de données représente la configuration d'un hôte virtuel pour le
  14083. service httpd.
  14084. Ils devraient être ajoutés à extra-config dans httpd-service.
  14085. @example
  14086. (simple-service 'my-extra-server httpd-service-type
  14087. (list
  14088. (httpd-virtualhost
  14089. "*:80"
  14090. (list (string-append
  14091. "ServerName "www.example.com
  14092. DocumentRoot \"/srv/http/www.example.com\"")))))
  14093. @end example
  14094. @table @asis
  14095. @item @code{addresses-and-ports}
  14096. L'adresse et le port pour la directive @code{VirtualHost}.
  14097. @item @code{contents}
  14098. Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
  14099. de chaîne et de G-expressions.
  14100. @end table
  14101. @end deffn
  14102. @subsubheading NGINX
  14103. @deffn {Variable Scheme} nginx-service-type
  14104. Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
  14105. valeur de ce service est un enregistrement @code{<nginx-configuration>}.
  14106. Un exemple de configuration simple est donné ci-dessous.
  14107. @example
  14108. (service nginx-service-type
  14109. (nginx-configuration
  14110. (server-blocks
  14111. (list (nginx-server-configuration
  14112. (server-name '("www.example.com"))
  14113. (root "/srv/http/www.example.com"))))))
  14114. @end example
  14115. En plus d'ajouter des blocs de serveurs dans la configuration du service
  14116. directement, ce service peut être étendu par d'autres services pour ajouter
  14117. des blocs de serveurs, comme dans cet exemple :
  14118. @example
  14119. (simple-service 'my-extra-server nginx-service-type
  14120. (list (nginx-server-configuration
  14121. (root "/srv/http/extra-website")
  14122. (try-files (list "$uri" "$uri/index.html")))))
  14123. @end example
  14124. @end deffn
  14125. Au démarrage, @command{nginx} n'a pas encore lu son fichier de
  14126. configuration, donc il utilise les fichiers par défaut pour les messages
  14127. d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
  14128. seront enregistrés. Après la lecture du fichier de configuration, le
  14129. fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
  14130. notre cas, les messages d'erreur au démarage se trouvent dans
  14131. @file{/var/run/nginx/logs/error.log} et après la configuration dans
  14132. @file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
  14133. avec l'option de configuration @var{log-directory}.
  14134. @deffn {Type de données} nginx-configuration
  14135. Ce type de données représente la configuration de NGinx. Certaines
  14136. configurations peuvent se faire ici et d'autres fournissent des types
  14137. d'enregistrement ou éventuellement, on peut fournir un fichier de
  14138. configuration.
  14139. @table @asis
  14140. @item @code{nginx} (par défaut : @code{nginx})
  14141. Le paquet nginx à utiliser.
  14142. @item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
  14143. Le répertoire dans lequel NGinx écrira ses fichiers journaux.
  14144. @item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
  14145. Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
  14146. fichiers temporaires.
  14147. @item @code{server-blocks} (par défaut : @code{'()})
  14148. Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
  14149. généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
  14150. L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
  14151. le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
  14152. @example
  14153. (service nginx-service-type
  14154. (nginx-configuration
  14155. (server-blocks
  14156. (list (nginx-server-configuration
  14157. (server-name '("www.example.com"))
  14158. (root "/srv/http/www.example.com"))))))
  14159. @end example
  14160. @item @code{upstream-blocks} (par défaut : @code{'()})
  14161. Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
  14162. généré, dont les éléments sont de type
  14163. @code{<nginx-upstream-configuration>}.
  14164. Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
  14165. utile en combinaison avec @code{locations} dans les enregistrements
  14166. @code{<nginx-server-configuration>}. L'exemple suivant crée une
  14167. configuration de serveur avec une configuration « location » qui sera
  14168. mandataire pour une configuration amont, qui gérera les requêtes avec deux
  14169. serveurs.
  14170. @example
  14171. (service
  14172. nginx-service-type
  14173. (nginx-configuration
  14174. (server-blocks
  14175. (list (nginx-server-configuration
  14176. (server-name '("www.example.com"))
  14177. (root "/srv/http/www.example.com")
  14178. (locations
  14179. (list
  14180. (nginx-location-configuration
  14181. (uri "/path1")
  14182. (body '("proxy_pass http://server-proxy;"))))))))
  14183. (upstream-blocks
  14184. (list (nginx-upstream-configuration
  14185. (name "server-proxy")
  14186. (servers (list "server1.example.com"
  14187. "server2.example.com")))))))
  14188. @end example
  14189. @item @code{file} (par défaut : @code{#f})
  14190. Si un fichier de configuration @var{file} est fourni, il sera utilisé au
  14191. lieu de générer un fichier de configuration à partir des
  14192. @code{log-directory}, @code{run-directory}, @code{server-blocks} et
  14193. @code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
  14194. devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
  14195. les répertoires sont créé lorsque le service est activé.
  14196. Cela peut être utile si vous avez déjà un fichier de configuration existant
  14197. ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
  14198. parties de l'enregistrement nginx-configuration.
  14199. @item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
  14200. Taille du seau pour les tables de hashage des noms de serveurs, par dauft
  14201. @code{#f} pour utilise la taille des lignes de cache du processeur.
  14202. @item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
  14203. Taille maximum des seaux pour les tables de hashage des serveurs de noms.
  14204. @item @code{extra-content} (par défaut : @code{""})
  14205. Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
  14206. un G-expression.
  14207. @end table
  14208. @end deffn
  14209. @deftp {Type de données} nginx-server-configuration
  14210. Type de données représentant la configuration d'un bloc serveur de nginx.
  14211. Ce type a les paramètres suivants :
  14212. @table @asis
  14213. @item @code{listen} (par défaut : @code{'("80" "443 ssl")})
  14214. Chaque directive @code{listen} indique l'adresse et le port pour le
  14215. protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
  14216. acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
  14217. l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
  14218. exemple :
  14219. @example
  14220. '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
  14221. @end example
  14222. @item @code{server-name} (par défaut : @code{(list 'default)})
  14223. Une liste de noms de serveurs que ce serveur représente. @code{'default}
  14224. représente le serveur par défaut pour les connexions qui ne correspondent à
  14225. aucun autre serveur.
  14226. @item @code{root} (par défaut : @code{"/srv/http"})
  14227. Racine du site web que sert nginx.
  14228. @item @code{locations} (par défaut : @code{'()})
  14229. Une liste d'enregistrements @dfn{nginx-location-configuration} ou
  14230. @dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
  14231. @item @code{index} (par défaut : @code{(list "index.html")})
  14232. Fichiers d'index à chercher lorsque les clients demandent un répertoire.
  14233. S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
  14234. répertoire.
  14235. @item @code{try-files} (par défaut : @code{'()})
  14236. Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
  14237. spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
  14238. la requête.
  14239. @item @code{ssl-certificate} (par défaut : @code{#f})
  14240. Où trouver les certificats pour les connexions sécurisées. Indiquez
  14241. @code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
  14242. utiliser HTTPS.
  14243. @item @code{ssl-certificate-key} (par défaut : @code{#f})
  14244. Où trouver la clef privée pour les connexions sécurisées. Indiquez
  14245. @code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
  14246. HTTPS.
  14247. @item @code{server-tokens?} (par défaut : @code{#f})
  14248. Indique si le serveur devrait ajouter sa configuration dans les réponses.
  14249. @item @code{raw-content} (par défaut : @code{'()})
  14250. Une liste de lignes brutes à ajouter dans le bloc serveur.
  14251. @end table
  14252. @end deftp
  14253. @deftp {Type de données} nginx-upstream-configuration
  14254. Type de données représentant la configuration d'un bloc @code{upstream}
  14255. nginx. Ce type a les paramètres suivants :
  14256. @table @asis
  14257. @item @code{name}
  14258. Nome de ces groupe de serveurs.
  14259. @item @code{serveurs}
  14260. Specify the addresses of the servers in the group. The address can be
  14261. specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name (e.g.@:
  14262. @samp{backend1.example.com}) or a path to a UNIX socket using the prefix
  14263. @samp{unix:}. For addresses using an IP address or domain name, the default
  14264. port is 80, and a different port can be specified explicitly.
  14265. @end table
  14266. @end deftp
  14267. @deftp {Type de données} nginx-location-configuration
  14268. Type de données représentant la configuration d'un bloc @code{location}
  14269. nginx. Ce type a les paramètres suivants :
  14270. @table @asis
  14271. @item @code{uri}
  14272. URI qui correspond à ce bloc.
  14273. @anchor{nginx-location-configuration body}
  14274. @item @code{body}
  14275. Corps du block location, spécifié comme une liste de chaînes de caractères.
  14276. Cela peut contenir de nombreuses directives de configuration. PAr exemple,
  14277. pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
  14278. @code{nginx-upstream-configuration}, la directive suivante peut être
  14279. spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
  14280. @end table
  14281. @end deftp
  14282. @deftp {Type de données} nginx-named-location-configuration
  14283. Type de données représentant la configuration d'un bloc location nginx
  14284. nommé. Les blocs location nommés sont utilisé les redirections de requêtes
  14285. et pas pour le traitement des requêtes normales. Ce type a les paramètres
  14286. suivants :
  14287. @table @asis
  14288. @item @code{name}
  14289. Nom pour identifier ce bloc location.
  14290. @item @code{body}
  14291. @xref{nginx-location-configuration body}, comme le corps d'un bloc location
  14292. nommé peut être utilisé de la même manière que
  14293. @code{nginx-location-configuration body}. Une restriction est que le corps
  14294. d'un bloc location nommé ne peut pas contenir de bloc location.
  14295. @end table
  14296. @end deftp
  14297. @subsubheading Cache Varnish
  14298. @cindex Varnish
  14299. Varnish est un serveur de cache rapide qui se trouve entre les applications
  14300. web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
  14301. des clients et met les URL accédées en cache pour que plusieurs requêtes à
  14302. la même ressource ne crée qu'une requête au moteur.
  14303. @defvr {Variable Scheme} varnish-service-type
  14304. Type de service pour le démon Varnish.
  14305. @end defvr
  14306. @deftp {Type de données} varnish-configuration
  14307. Type de données représentant la configuration du service @code{varnish}. Ce
  14308. type a les paramètres suivants :
  14309. @table @asis
  14310. @item @code{package} (par défaut : @code{varnish})
  14311. Le paquet Varnish à utiliser.
  14312. @item @code{name} (par défaut : @code{"default"})
  14313. Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
  14314. @file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
  14315. endroit. Si le nom commence par une barre oblique, il est interprété comme
  14316. un nom de répertoire absolu.
  14317. Pass the @code{-n} argument to other Varnish programs to connect to the
  14318. named instance, e.g.@: @command{varnishncsa -n default}.
  14319. @item @code{backend} (par défaut : @code{"localhost:8080"})
  14320. Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
  14321. @item @code{vcl} (par défaut : #f)
  14322. Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
  14323. valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
  14324. la configuration par défaut. Sinon, ce doit être un objet simili-fichier
  14325. avec une syntaxe VCL valide.
  14326. @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
  14327. Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
  14328. avec VCL vous pouvez faire quelque chose comme cela :
  14329. @example
  14330. (define %gnu-mirror
  14331. (plain-file
  14332. "gnu.vcl"
  14333. "vcl 4.1;
  14334. backend gnu @{ .host = "www.gnu.org"; @}"))
  14335. (operating-system
  14336. ...
  14337. (services (cons (service varnish-service-type
  14338. (varnish-configuration
  14339. (listen '(":80"))
  14340. (vcl %gnu-mirror)))
  14341. %base-services)))
  14342. @end example
  14343. On peut inspecter la configuration d'une instance Varnish actuellement
  14344. lancée en utilisant le programme @command{varnishadm}.
  14345. Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
  14346. varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
  14347. pour une documentation complète sur Varnish et son langage de configuration.
  14348. @item @code{listen} (par défaut : @code{'("localhost:80")})
  14349. Liste des adresses sur lesquelles écoute Varnish.
  14350. @item @code{storage} (par défaut : @code{'("malloc,128m")})
  14351. Liste de moteurs de stockage qui seront disponibles en VCL.
  14352. @item @code{parameters} (par défaut : @code{'()})
  14353. Liste des paramètres à l'exécution de la forme @code{'(("parameter"
  14354. . "value"))}.
  14355. @item @code{extra-options} (par défaut : @code{'()})
  14356. Arguments supplémentaires à passer au processus @command{varnishd}.
  14357. @end table
  14358. @end deftp
  14359. @subsubheading FastCGI
  14360. @cindex fastcgi
  14361. @cindex fcgiwrap
  14362. FastCGI est une interface entre le frontal et le moteur d'un service web.
  14363. C'est un dispositif quelque peu désué ; les nouveaux services devraient
  14364. généralement juste parler HTTP entre le frontal et le moteur. Cependant il
  14365. y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
  14366. Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
  14367. Guix.
  14368. Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
  14369. nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
  14370. écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
  14371. intermédiaire qui se trouve entre le processus du moteur et le serveur web.
  14372. Le frontal indique quel moteur lancer, en passant cette information au
  14373. processus @code{fcgiwrap}.
  14374. @defvr {Variable Scheme} fcgiwrap-service-type
  14375. Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
  14376. @end defvr
  14377. @deftp {Type de données} fcgiwrap-configuration
  14378. Type de données représentant la configuration d'un service @code{fcgiwrap}.
  14379. Ce type a les paramètres suivants :
  14380. @table @asis
  14381. @item @code{package} (par défaut : @code{fcgiwrap})
  14382. Le paquet fcgiwrap à utiliser.
  14383. @item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
  14384. Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
  14385. de caractères. Les valeurs valides de @var{socket} sont
  14386. @code{unix:@var{/path/to/unix/socket}},
  14387. @code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
  14388. @code{tcp6:[@var{ipv6_addr}]:port}.
  14389. @item @code{user} (par défaut : @code{fcgiwrap})
  14390. @itemx @code{group} (par défaut : @code{fcgiwrap})
  14391. Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
  14392. sous lesquels lancer le processus @code{fcgiwrap}. Le service
  14393. @code{fastcgi} s'assurera que si l'utilisateur demande les noms
  14394. d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
  14395. correspondant seront présents sur le système.
  14396. Il est possible de configurer un service web soutenu par FastCGI pour passer
  14397. les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
  14398. et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
  14399. l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
  14400. moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
  14401. @code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
  14402. sur le frontal.
  14403. @end table
  14404. @end deftp
  14405. @cindex php-fpm
  14406. PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
  14407. alternative avec quelques fonctionnalités supplémentaires utiles pour les
  14408. sites de toutes tailles.
  14409. Ces fonctionnalités comprennent :
  14410. @itemize @bullet
  14411. @item La création de processus adaptative
  14412. @item Des statistiques de base (comme le mod_status d'Apache)
  14413. @item La gestion des processus avancée avec arrêt et démarrage sans heurts
  14414. @item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
  14415. et différents php.ini (à la place de safe_mode)
  14416. @item L'enregistrement des journaux sur stdout et stderr
  14417. @item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
  14418. @item Le support des téléversements accélérés
  14419. @item Le support de « showlog »
  14420. @item Des améliorations à FastCGI, comme fastcgi_finish_request() -
  14421. une fonction spéciale pour terminer la requête et nettoyer toutes les
  14422. données tout en continuant à faire d'autres choses qui prennent du temps
  14423. (conversion vidéo, gestion des stats, etc…).
  14424. @end itemize
  14425. ...@: and much more.
  14426. @defvr {Variable Scheme} php-fpm-service-type
  14427. Un type de service pour @code{php-fpm}.
  14428. @end defvr
  14429. @deftp {Type de données} php-fpm-configuration
  14430. Type de données pour la configuration du service php-fpm.
  14431. @table @asis
  14432. @item @code{php} (par défaut : @code{php})
  14433. Le paquet php à utiliser.
  14434. @item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
  14435. L'adresse sur laquelle accepter les requêts FastCGI. Les syntaxes valides
  14436. sont :
  14437. @table @asis
  14438. @item @code{"ip.add.re.ss:port"}
  14439. Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
  14440. @item @code{"port"}
  14441. Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
  14442. @item @code{"/path/to/unix/socket"}
  14443. Écoute sur un socket unix.
  14444. @end table
  14445. @item @code{user} (par défaut : @code{php-fpm})
  14446. Utilisateur à qui appartiendra le processus de travail de php.
  14447. @item @code{group} (par défaut : @code{php-fpm})
  14448. Groupe du processus de travail.
  14449. @item @code{socket-user} (par défaut : @code{php-fpm})
  14450. Utilisateur qui peut parler au socket php-fpm.
  14451. @item @code{socket-group} (par défaut : @code{php-fpm})
  14452. Groupe qui peut parler au socket php-fpm.
  14453. @item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
  14454. Le pid de php-fpm est écrit dans ce fichier une fois que le service a
  14455. démarré.
  14456. @item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
  14457. Fichier de journal pour le processus maître de php-fpm.
  14458. @item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
  14459. Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
  14460. doit s'agir soit de :
  14461. @table @asis
  14462. @item @code{<php-fpm-dynamic-process-manager-configuration>,}
  14463. @item @code{<php-fpm-static-process-manager-configuration> ou}
  14464. @item @code{<php-fpm-on-demand-process-manager-configuration>}
  14465. @end table
  14466. @item @code{display-errors} (par défaut : @code{#f})
  14467. Détermine si les erreurs et les avertissements php doivent être envoyés aux
  14468. clients et affichés dans leur navigateur. Cela est utile pour un
  14469. développement php local, mais un risque pour la sécurité pour les sites
  14470. publics, comme les messages d'erreur peuvent révéler des mots de passes et
  14471. des données personnelles.
  14472. @item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
  14473. Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
  14474. php. On peut indiquer @code{#f} pour désactiver la journalisation.
  14475. @item @code{file} (par défaut : @code{#f})
  14476. Une version alternative de la configuration complète. Vous pouvez utiliser
  14477. la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
  14478. @end table
  14479. @end deftp
  14480. @deftp {Type de données} php-fpm-dynamic-process-manager-configuration
  14481. Type de données pour le gestionnaire de processus @code{dynamic} de
  14482. php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
  14483. travail de secours sont gardés en fonction des limites configurées.
  14484. @table @asis
  14485. @item @code{max-children} (par défaut : @code{5})
  14486. Nombre maximum de processus de travail.
  14487. @item @code{start-servers} (par défaut : @code{2})
  14488. Nombre de processus de travail au démarrage.
  14489. @item @code{min-spare-servers} (par défaut : @code{1})
  14490. Nombre de processus de travail de secours minimum qui doivent rester à
  14491. disposition.
  14492. @item @code{max-spare-servers} (par défaut : @code{3})
  14493. Nombre maximum de processus de travail de secours qui peuvent rester à
  14494. disposition.
  14495. @end table
  14496. @end deftp
  14497. @deftp {Type de données} php-fpm-static-process-manager-configuration
  14498. Type de données pour le gestionnaire de processus @code{static} de php-fpm.
  14499. Avec le gestionnaire de processus @code{static}, un nombre constant de
  14500. processus de travail est créé.
  14501. @table @asis
  14502. @item @code{max-children} (par défaut : @code{5})
  14503. Nombre maximum de processus de travail.
  14504. @end table
  14505. @end deftp
  14506. @deftp {Type de données} php-fpm-on-demand-process-manager-configuration
  14507. Type de données pour le gestionnaire de processus @code{on-demand} de
  14508. php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
  14509. de travail ne sont créés que lorsque les requêtes arrivent.
  14510. @table @asis
  14511. @item @code{max-children} (par défaut : @code{5})
  14512. Nombre maximum de processus de travail.
  14513. @item @code{process-idle-timeout} (par défaut : @code{10})
  14514. La durée en secondes après laquelle un processus sans requête sera tué.
  14515. @end table
  14516. @end deftp
  14517. @deffn {Procédure Scheme} nginx-php-fpm-location @
  14518. [#:nginx-package nginx] @
  14519. [socket (string-append "/var/run/php" @
  14520. (version-major (package-version php)) @
  14521. "-fpm.sock")]
  14522. Une fonction d'aide pour ajouter rapidement php à un
  14523. @code{nginx-server-configuration}.
  14524. @end deffn
  14525. Une configuration simple de services pour php ressemble à ceci :
  14526. @example
  14527. (services (cons* (service dhcp-client-service-type)
  14528. (service php-fpm-service-type)
  14529. (service nginx-service-type
  14530. (nginx-server-configuration
  14531. (server-name '("example.com"))
  14532. (root "/srv/http/")
  14533. (locations
  14534. (list (nginx-php-location)))
  14535. (https-port #f)
  14536. (ssl-certificate #f)
  14537. (ssl-certificate-key #f)))
  14538. %base-services))
  14539. @end example
  14540. @cindex cat-avatar-generator
  14541. Le générateur d'avatar de chat est un simple service pour démontrer
  14542. l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
  14543. avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
  14544. courriel d'un utilisateur.
  14545. @deffn {Procédure Scheme} cat-avatar-generator-serice @
  14546. [#:cache-dir "/var/cache/cat-avatar-generator"] @
  14547. [#:package cat-avatar-generator] @
  14548. [#:configuration (nginx-server-configuration)]
  14549. Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
  14550. Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
  14551. @code{package}, une version de cat-avatar-generator. Pendant l'exécution,
  14552. cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
  14553. cache.
  14554. @end deffn
  14555. Une configuration simple de cat-avatar-generator ressemble à ceci :
  14556. @example
  14557. (services (cons* (cat-avatar-generator-service
  14558. #:configuration
  14559. (nginx-server-configuration
  14560. (server-name '("example.com"))))
  14561. ...
  14562. %base-services))
  14563. @end example
  14564. @subsubheading Hpcguix-web
  14565. @cindex hpcguix-web
  14566. Le programme @uref{hpcguix-web,
  14567. https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
  14568. personnalisable pour naviguer dans les paquets Guix, initialement conçue
  14569. pour les utilisateurs des grappes de calcul de haute performance (HPC).
  14570. @defvr {Variable Scheme} hpcguix-web-service-type
  14571. Le type de service pour @code{hpcguix-web}.
  14572. @end defvr
  14573. @deftp {Type de données} hpcguix-web-configuration
  14574. Type de données pour la configuration du service hpcguix-web.
  14575. @table @asis
  14576. @item @code{specs}
  14577. Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
  14578. hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
  14579. @table @asis
  14580. @item @code{title-prefix} (par défaut : @code{"hpcguix | "})
  14581. Le préfixe du titre des pages.
  14582. @item @code{guix-command} (par défaut : @code{"guix"})
  14583. La commande @command{guix}
  14584. @item @code{package-filter-proc} (par défaut : @code{(const #t)})
  14585. Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
  14586. @item @code{package-page-extension-proc} (par défaut : @code{(const '())})
  14587. Paquet d'extensions pour @code{hpcguix-web}.
  14588. @item @code{menu} (par défaut : @code{'()})
  14589. Entrée supplémentaire dans la page @code{menu}.
  14590. @item @code{channels} (par défaut : @code{%default-channels})
  14591. Liste des canaux depuis lesquels la liste des paquets est construite
  14592. (@pxref{Canaux}).
  14593. @item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
  14594. Le temps d'expiration, en secondes, après lequel la liste des paquets est
  14595. reconstruite depuis les dernières instance des canaux donnés.
  14596. @end table
  14597. Voir le dépôt hpcguix-web pour un
  14598. @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
  14599. exemple complet}
  14600. @item @code{package} (par défaut : @code{hpcguix-web})
  14601. Le paquet hpcguix-web à utiliser.
  14602. @end table
  14603. @end deftp
  14604. Une déclaration de service hpcguix-web typique ressemble à cela :
  14605. @example
  14606. (service hpcguix-web-service-type
  14607. (hpcguix-web-configuration
  14608. (specs
  14609. #~(define site-config
  14610. (hpcweb-configuration
  14611. (title-prefix "Guix-HPC - ")
  14612. (menu '(("/about" "ABOUT"))))))))
  14613. @end example
  14614. @quotation Remarque
  14615. Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
  14616. publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
  14617. certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
  14618. communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
  14619. certificats.
  14620. Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
  14621. certificats dans le champ @code{packages} de votre configuration.
  14622. @ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
  14623. @end quotation
  14624. @node Services de certificats
  14625. @subsubsection Services de certificats
  14626. @cindex Web
  14627. @cindex HTTP, HTTPS
  14628. @cindex Let's Encrypt
  14629. @cindex certificats TLS
  14630. Le module @code{(gnu services certbot)} fournit un service qui récupère
  14631. automatiquement un certificat TLS valide de l'autorité de certification
  14632. Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
  14633. contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
  14634. en sachant que le client sera capable de vérifier l'authenticité du serveur.
  14635. @url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
  14636. pour automatiser le processus de certification. Cet outil génère d'abord un
  14637. clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
  14638. de certification Let's Encrypt de signer la clef. La CA vérifie que la
  14639. requête provient de l'hôte en question en utilisant un protocole de
  14640. défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
  14641. Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
  14642. certificat. Ce certificat est valide pour une durée limitée et donc, pour
  14643. continuer à fournir des services en TLS, le serveur doit régulièrement
  14644. demander à la CA de renouveler sa signature.
  14645. The certbot service automates this process: the initial key generation, the
  14646. initial certification request to the Let's Encrypt service, the web server
  14647. challenge/response integration, writing the certificate to disk, the
  14648. automated periodic renewals, and the deployment tasks associated with the
  14649. renewal (e.g.@: reloading services, copying keys with different
  14650. permissions).
  14651. Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
  14652. Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
  14653. révoqués, mais le lancer régulièrement permettra à vos services de rester en
  14654. ligne si Let's Encrypt décide de révoquer votre certificat.
  14655. En utilisant ce service, vous acceptez le document « ACME Subscriber
  14656. Agreement », qu'on peut trouver ici :
  14657. @url{https://acme-v01.api.letsencrypt.org/directory}.
  14658. @defvr {Variable Scheme} certbot-service-type
  14659. Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
  14660. doit être un enregistrement @code{certbot-configuration} comme dans cet
  14661. exemple :
  14662. @example
  14663. (define %nginx-deploy-hook
  14664. (program-file
  14665. "nginx-deploy-hook"
  14666. #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
  14667. (kill pid SIGHUP))))
  14668. (service certbot-service-type
  14669. (certbot-configuration
  14670. (email "foo@@example.net")
  14671. (certificates
  14672. (list
  14673. (certificate-configuration
  14674. (domains '("example.net" "www.example.net"))
  14675. (deploy-hook %nginx-deploy-hook))
  14676. (certificate-configuration
  14677. (domains '("bar.example.net")))))))
  14678. @end example
  14679. Voir plus bas pour des détails sur @code{certbot-configuration}.
  14680. @end defvr
  14681. @deftp {Type de données} certbot-configuration
  14682. Type données représentant la configuration du service @code{certbot}. Ce
  14683. type a les paramètres suivants :
  14684. @table @asis
  14685. @item @code{package} (par défaut : @code{certbot})
  14686. Le paquet certbot à utiliser.
  14687. @item @code{webroot} (par défaut : @code{/var/www})
  14688. Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
  14689. Encrypt.
  14690. @item @code{certificates} (par défaut : @code{()})
  14691. Une liste de @code{certificates-configuration} pour lesquels générer des
  14692. certificats et demander des signatures. Chaque certificat a un @code{name}
  14693. et plusieurs @code{domains}.
  14694. @item @code{email}
  14695. Courriel obligatoire utilisé pour la création de compte, le contact en cas
  14696. de problème et des notifications importantes sur le compte.
  14697. @item @code{rsa-key-size} (par défaut : @code{2048})
  14698. Taille de la clef RSA.
  14699. @item @code{default-location} (par défaut : @i{voir plus bas})
  14700. Le @code{nginx-location-configuration} par défaut. Come @code{certbot} doit
  14701. pouvoir servir les défis et les réponses, il doit être capable de lancer un
  14702. serveur web. Cela se fait en étendant le service web @code{nginx} avec un
  14703. @code{nginx-server-configuration} qui écoute sur les @var{domains} sur le
  14704. port 80 et qui a un @code{nginx-location-configuration} pour le chemin
  14705. @code{/.well-known/} utilisé par Let's Encrypt. @xref{Services web} pour
  14706. plus d'information sur les types de données de la configuration de nginx.
  14707. Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
  14708. s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
  14709. Par défaut, le @code{default-location} sera une redirection de
  14710. @code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
  14711. laissant définir ce que vous voulez servir sur votre site en @code{https}.
  14712. Passez @code{#f} pour ne pas utiliser de location par défaut.
  14713. @end table
  14714. @end deftp
  14715. @deftp {Type de données} certificate-configuration
  14716. Type de données représentant la configuration d'un certificat. Ce type a
  14717. les paramètres suivants :
  14718. @table @asis
  14719. @item @code{name} (par défaut : @i{voir plus bas})
  14720. Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
  14721. chemins de fichiers ; il n'affecte pas le contenu des certificats
  14722. eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
  14723. certificates}.
  14724. Sa valeur par défaut est le premier domaine spécifié.
  14725. @item @code{domains} (par défaut : @code{()})
  14726. Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
  14727. domaines seront les noms alternatifs du sujet dans le certificat.
  14728. @item @code{deploy-hook} (par défaut : @code{#f})
  14729. Commande à lancer dans un shell une fois par certificat récupéré avec
  14730. succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
  14731. sur le sous-répertoire live (par exemple,
  14732. @samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
  14733. et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
  14734. domaines séparés par des espaces (par exemple @samp{"example.com
  14735. www.example.com"}).
  14736. @end table
  14737. @end deftp
  14738. Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
  14739. dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
  14740. sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
  14741. @node Services DNS
  14742. @subsubsection Services DNS
  14743. @cindex DNS (domain name system)
  14744. @cindex domain name system (DNS)
  14745. Le module @code{(gnu services dns)} fournit des services liés au
  14746. @dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
  14747. pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
  14748. en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
  14749. Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
  14750. LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
  14751. dnsmasq}.
  14752. @subsubheading Service Knot
  14753. Voici un exemple de configuration pour un serveur faisant autorité sur deux
  14754. zone, un maître et un esclave :
  14755. @lisp
  14756. (define-zone-entries example.org.zone
  14757. ;; Name TTL Class Type Data
  14758. ("@@" "" "IN" "A" "127.0.0.1")
  14759. ("@@" "" "IN" "NS" "ns")
  14760. ("ns" "" "IN" "A" "127.0.0.1"))
  14761. (define master-zone
  14762. (knot-zone-configuration
  14763. (domain "example.org")
  14764. (zone (zone-file
  14765. (origin "example.org")
  14766. (entries example.org.zone)))))
  14767. (define slave-zone
  14768. (knot-zone-configuration
  14769. (domain "plop.org")
  14770. (dnssec-policy "default")
  14771. (master (list "plop-master"))))
  14772. (define plop-master
  14773. (knot-remote-configuration
  14774. (id "plop-master")
  14775. (address (list "208.76.58.171"))))
  14776. (operating-system
  14777. ;; ...
  14778. (services (cons* (service knot-service-type
  14779. (knot-configuration
  14780. (remotes (list plop-master))
  14781. (zones (list master-zone slave-zone))))
  14782. ;; ...
  14783. %base-services)))
  14784. @end lisp
  14785. @deffn {Variable Scheme} knot-service-type
  14786. C'est le type pour le serveur DNS Knot.
  14787. Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
  14788. servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
  14789. un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
  14790. peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
  14791. serveur peut être configuré pour servir des zones comme un serveur maître ou
  14792. comme un serveur esclave, en fonction des zones. Les zones esclaves
  14793. récupèrent leurs données des maîtres, et seront servies comme faisant
  14794. autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
  14795. un maître et un esclave@footnote{NdT : Voir la conférence en Français de
  14796. Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
  14797. @url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
  14798. Les types de données suivants sont utilisés pour configurer le serveur DNS
  14799. Knot :
  14800. @end deffn
  14801. @deftp {Type de données} knot-key-configuration
  14802. Type de données représentant une clef. Ce type a les paramètres suivants :
  14803. @table @asis
  14804. @item @code{id} (par défaut : @code{""})
  14805. Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
  14806. clef. Les ID doivent être uniques et non vides.
  14807. @item @code{algorithm} (par défaut : @code{#f})
  14808. L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
  14809. @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
  14810. @code{'hmac-sha384} et @code{'hmac-sha512}.
  14811. @item @code{secret} (par défaut : @code{""})
  14812. La clef secrète elle-même.
  14813. @end table
  14814. @end deftp
  14815. @deftp {Type de données} knot-acl-configuration
  14816. Type de données représentant une configuration de liste de contrôle d'accès
  14817. (ACL). Ce type a les paramètres suivants :
  14818. @table @asis
  14819. @item @code{id} (par défaut : @code{""})
  14820. Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
  14821. clef. Les ID doivent être uniques et non vides.
  14822. @item @code{address} (par défaut : @code{'()})
  14823. Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
  14824. réseaux représentés par des chaînes de caractères. La requête doit
  14825. correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
  14826. n'a pas besoin de correspondre.
  14827. @item @code{key} (par défaut : @code{'()})
  14828. Une liste ordonnées de références à des clefs représentés par des chaînes.
  14829. La chaîne doit correspondre à un ID définie dans un
  14830. @code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
  14831. nécessaire pour correspondre à l'ACL.
  14832. @item @code{action} (par défaut : @code{'()})
  14833. Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
  14834. valeurs possibles sont une liste de zéro ou plus d'éléments entre
  14835. @code{'transfer}, @code{'notify} et @code{'update}.
  14836. @item @code{deny?} (par défaut : @code{#f})
  14837. Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
  14838. listées sont interdites. Lorsque la valeur est fausse, les actions listées
  14839. sont autorisées.
  14840. @end table
  14841. @end deftp
  14842. @deftp {Type de données} zone-entry
  14843. Type de données représentant une entrée dans un fichier de zone. Ce type a
  14844. les paramètres suivants :
  14845. @table @asis
  14846. @item @code{name} (par défaut : @code{"@@"})
  14847. Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
  14848. Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
  14849. @code{example.org}, @code{"ns.example.org"} se réfère en fait à
  14850. @code{ns.example.org.example.org}. Les noms qui finissent par un point sont
  14851. absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
  14852. @code{ns.example.org}.
  14853. @item @code{ttl} (par défaut : @code{""})
  14854. La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
  14855. par défaut est utilisé.
  14856. @item @code{class} (par défaut : @code{"IN"})
  14857. La classe de l'enregistrement. Knot ne supporte actuellement que
  14858. @code{"IN"} et partiellement @code{"CH"}.
  14859. @item @code{type} (par défaut : @code{"A"})
  14860. Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
  14861. (serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
  14862. définis.
  14863. @item @code{data} (par défaut : @code{""})
  14864. Les données contenues dans l'enregistrement. Par exemple une adresse IP
  14865. associée à un enregistrement A, ou un nom de domaine associé à un
  14866. enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
  14867. l'origine à moins qu'ils ne finissent par un point.
  14868. @end table
  14869. @end deftp
  14870. @deftp {Type de données} zone-file
  14871. Type données représentant le contenu d'un fichier de zone. Ce type a les
  14872. paramètres suivants :
  14873. @table @asis
  14874. @item @code{entries} (par défaut : @code{'()})
  14875. La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
  14876. pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
  14877. contenir une entrée pour votre serveur DNS primaire faisant autorité. En
  14878. plus d'utiliser une liste des entrées directement, vous pouvez utiliser
  14879. @code{define-zone-entries} pour définir un objet contenant la liste des
  14880. entrées plus facilement, que vous pouvez ensuite passer au champ
  14881. @code{entries} de @code{zone-file}.
  14882. @item @code{origin} (par défaut : @code{""})
  14883. Le nom de votre zone. Ce paramètre ne peut pas être vide.
  14884. @item @code{ns} (par défaut : @code{"ns"})
  14885. Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
  14886. relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
  14887. que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
  14888. et qu'il soit associé à une adresse IP dans la liste des entrées.
  14889. @item @code{mail} (par défaut : @code{"hostmaster"})
  14890. Une adresse de courriel pour vous contacter en tant que propriétaire de la
  14891. zone. Cela se transforme en @code{<mail>@@<origin>}.
  14892. @item @code{serial} (par défaut : @code{1})
  14893. Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
  14894. changements à la fois par les esclaves et par les résolveurs, il est
  14895. nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
  14896. vous faites un changement sur votre zone.
  14897. @item @code{refresh} (par défaut : @code{(* 2 24 3600)})
  14898. La fréquence à laquelle les esclaves demanderont un transfert de zone.
  14899. Cette valeur est un nombre de secondes. On peut le calculer avec des
  14900. multiplications ou avec @code{(string->duration)}.
  14901. @item @code{retry} (par défaut : @code{(* 15 60)})
  14902. La période après laquelle un esclave essaiera de contacter son maître
  14903. lorsqu'il échoue à le faire la première fois.
  14904. @item @code{expiry} (par défaut : @code{(* 14 24 3600)})
  14905. TTL par défaut des enregistrements. Les enregistrements existants sont
  14906. considérés corrects pour au moins cette durée. Après cette période, les
  14907. résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
  14908. toujours.
  14909. @item @code{nx} (par défaut : @code{3600})
  14910. TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
  14911. court parce que vous voulez que vous nouveaux domaines soient disponibles
  14912. pour tout le monde le plus rapidement possible.
  14913. @end table
  14914. @end deftp
  14915. @deftp {Type de données} knot-remote-configuration
  14916. Type de données représentant une configuration de serveurs distants. Ce
  14917. type a les paramètres suivants :
  14918. @table @asis
  14919. @item @code{id} (par défaut : @code{""})
  14920. Un identifiant pour que les autres champs de configuration se réfèrent à ce
  14921. serveur distant. les ID doivent être uniques et non vides.
  14922. @item @code{address} (par défaut : @code{'()})
  14923. Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
  14924. en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
  14925. exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
  14926. 53.
  14927. @item @code{via} (par défaut : @code{'()})
  14928. Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
  14929. IP source appropriée à Knot. Un port facultatif peut être donné avec le
  14930. séparateur @@. La valeur par défaut est de choisir aléatoirement.
  14931. @item @code{key} (par défaut : @code{#f})
  14932. Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
  14933. d'une clef définie dans un champ @code{knot-key-configuration}.
  14934. @end table
  14935. @end deftp
  14936. @deftp {Type de données} knot-keystore-configuration
  14937. Type de données représentant une base de clefs pour garder les clefs
  14938. dnssec. Ce type a les paramètres suivants :
  14939. @table @asis
  14940. @item @code{id} (par défaut : @code{""})
  14941. L'id de cette base de clefs. Il ne doit pas être vide.
  14942. @item @code{backend} (par défaut : @code{'pem})
  14943. Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
  14944. @code{'pkcs11}.
  14945. @item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
  14946. La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
  14947. @code{"pkcs11:token=knot;pin-value=1234
  14948. /gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
  14949. représente un chemin dans le système de fichiers.
  14950. @end table
  14951. @end deftp
  14952. @deftp {Type de données} knot-policy-configuration
  14953. Type de données représentant une politique dnssec. Knot DNS est capable de
  14954. signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
  14955. automatiquement ou utiliser des clefs que vous générez.
  14956. Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
  14957. key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
  14958. est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
  14959. doit être présente dans la zone parente (normalement un domaine de haut
  14960. niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
  14961. hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
  14962. zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
  14963. fois que vous changerez votre KSK.
  14964. La politique définie aussi la durée de vie des clefs. Habituellement, la
  14965. ZSK peut être changée facilement et utilise des fonctions cryptographiques
  14966. plus faibles (avec un paramètre plus faible) pour signer les enregistrements
  14967. rapidement, donc elles sont changées très régulièrement. La KSK en revanche
  14968. requiert une interaction manuelle avec le registrar, donc elle change moins
  14969. souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
  14970. seul enregistrement.
  14971. Ce type a les paramètres suivants :
  14972. @table @asis
  14973. @item @code{id} (par défaut : @code{""})
  14974. L'id de la politique. Il ne doit pas être vide.
  14975. @item @code{keystore} (par défaut : @code{"default"})
  14976. Une référence à une base de clefs, c'est-à-dire une chaîne contenant
  14977. l'identifiant d'une base de clefs définie dans un champ
  14978. @code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
  14979. la base par défaut (une base de données kasp initialisée par ce service).
  14980. @item @code{manual?} (par défaut : @code{#f})
  14981. Indique si la clef est gérée manuellement ou automatiquement.
  14982. @item @code{single-type-signing?} (par défaut : @code{#f})
  14983. Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type
  14984. @item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
  14985. Un algorithme de clef de signature et de signatures.
  14986. @item @code{ksk-size} (par défaut : @code{256})
  14987. La longueur de la KSK. Remarquez que cette valeur est correcte pour
  14988. l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
  14989. algorithmes.
  14990. @item @code{zsk-size} (par défaut : @code{256})
  14991. La longueur de la ZSK. Remarquez que cette valeur est correcte pour
  14992. l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
  14993. algorithmes.
  14994. @item @code{dnskey-ttl} (par défaut : @code{'default})
  14995. La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
  14996. zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
  14997. du SOA de la zone.
  14998. @item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
  14999. La période entre la publication d'une ZSK et l'initialisation d'un nouveau
  15000. changement.
  15001. @item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
  15002. Un délai supplémentaire pour chaque étape du changement. Cette valeur
  15003. devrait être assez grande pour couvrir le temps de propagation des données
  15004. entre le serveur primaire et tous les secondaires.
  15005. @item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
  15006. Une période de validité des nouvelles signatures.
  15007. @item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
  15008. Une période qui indique combien de temps avant l'expiration d'une signature
  15009. elle sera rafraîchie.
  15010. @item @code{nsec3?} (par défaut : @code{#f})
  15011. Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
  15012. @item @code{nsec3-iterations} (par défaut : @code{5})
  15013. Le nombre de fois supplémentaires que le hash est effectué.
  15014. @item @code{nsec3-salt-length} (par défaut : @code{8})
  15015. La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
  15016. de hasher.
  15017. @item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
  15018. La période de validité des nouveaux champs sel.
  15019. @end table
  15020. @end deftp
  15021. @deftp {Type de données} knot-zone-configuration
  15022. Type de données représentant la zone servie par Knot. ce type a les
  15023. paramètres suivants :
  15024. @table @asis
  15025. @item @code{domain} (par défaut : @code{""})
  15026. Le domaine servi par cette configuration. Il ne doit pas être vide.
  15027. @item @code{file} (par défaut : @code{""})
  15028. Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
  15029. zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
  15030. du nom de domaine.
  15031. @item @code{zone} (par défaut : @code{(zone-file)})
  15032. Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
  15033. esclaves. Il doit contenir un enregistrement zone-file.
  15034. @item @code{master} (par défaut : @code{'()})
  15035. Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
  15036. zone est un maître. Lorsque la valeur est indiquée, cette zone est un
  15037. esclave. C'est al liste des identifiants des serveurs distants.
  15038. @item @code{ddns-master} (par défaut : @code{#f})
  15039. Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
  15040. le premier maître de la liste des maîtres.
  15041. @item @code{notify} (par défaut : @code{'()})
  15042. Une liste d'identifiants de groupe de serveurs esclaves.
  15043. @item @code{acl} (par défaut : @code{'()})
  15044. Une liste d'identifiants d'ACL.
  15045. @item @code{semantic-checks?} (par défaut : @code{#f})
  15046. Lorsque la valeur est indiquée, cela ajoute plus de vérifications
  15047. sémantiques à la zone.
  15048. @item @code{disable-any?} (par défaut : @code{#f})
  15049. Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
  15050. @item @code{zonefile-sync} (par défaut : @code{0})
  15051. Le délai entre une modification en mémoire et sur le disque. 0 signifie une
  15052. synchronisation immédiate.
  15053. @item @code{serial-policy} (par défaut : @code{'increment})
  15054. Une politique entre @code{'increment} et @code{'unixtime}.
  15055. @end table
  15056. @end deftp
  15057. @deftp {Type de données} knot-configuration
  15058. Type de donées représentant la configuration de Knot. Ce type a les
  15059. paramètres suivants :
  15060. @table @asis
  15061. @item @code{knot} (par défaut : @code{knot})
  15062. Le paquet Knot.
  15063. @item @code{run-directory} (par défaut : @code{"/var/run/knot"})
  15064. Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
  15065. les sockets.
  15066. @item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
  15067. Une adresse IP sur laquelle écouter.
  15068. @item @code{listen-v6} (par défaut : @code{"::"})
  15069. Une adresse IP sur laquelle écouter.
  15070. @item @code{listen-port} (par défaut : @code{53})
  15071. Un port sur lequel écouter.
  15072. @item @code{keys} (par défaut : @code{'()})
  15073. La liste des knot-key-configuration utilisés par cette configuration.
  15074. @item @code{acls} (par défaut : @code{'()})
  15075. La liste des knot-acl-configuration utilisés par cette configuration.
  15076. @item @code{remotes} (par défaut : @code{'()})
  15077. La liste des knot-remote-configuration utilisés par cette configuration.
  15078. @item @code{zones} (par défaut : @code{'()})
  15079. La liste des knot-zone-configuration utilisés par cette configuration.
  15080. @end table
  15081. @end deftp
  15082. @subsubheading Services Dnsmasq
  15083. @deffn {Variable Scheme} dnsmasq-service-type
  15084. C'est le type du service dnsmasq, dont la valeur devrait être un objet
  15085. @code{dnsmasq-configuration} comme dans cet exemple :
  15086. @example
  15087. (service dnsmasq-service-type
  15088. (dnsmasq-configuration
  15089. (no-resolv? #t)
  15090. (servers '("192.168.1.1"))))
  15091. @end example
  15092. @end deffn
  15093. @deftp {Type de données} dnsmasq-configuration
  15094. Type de données qui représente la configuration de dnsmasq.
  15095. @table @asis
  15096. @item @code{package} (par défaut : @var{dnsmasq})
  15097. L'objet de paquet du serveur dnsmasq.
  15098. @item @code{no-hosts?} (par défaut : @code{#f})
  15099. Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
  15100. @item @code{port} (par défaut : @code{53})
  15101. Le port sur lequel écouter. Le mettre à zéro désactive complètement les
  15102. réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
  15103. @item @code{local-service?} (par défaut : @code{#t})
  15104. Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
  15105. sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
  15106. existe sur le serveur.
  15107. @item @code{listen-addresses} (par défaut : @code{'()})
  15108. Écoute sur le adresses IP données.
  15109. @item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
  15110. Le fichier où lire l'adresse IP des serveurs de noms en amont.
  15111. @item @code{no-resolv?} (par défaut : @code{#f})
  15112. Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
  15113. @item @code{servers} (par défaut : @code{'()})
  15114. Spécifiez l'adresse IP des serveurs en amont directement.
  15115. @item @code{cache-size} (par défaut : @code{150})
  15116. Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
  15117. @item @code{negative-cache?} (par défaut : @code{#t})
  15118. Lorsque la valeur est fausse, désactive le cache des réponses négatives.
  15119. @end table
  15120. @end deftp
  15121. @subsubheading Service ddclient
  15122. @cindex ddclient
  15123. Le srevice ddclient décrit plus bas lance le démon ddclient, qui prend en
  15124. charge la mise à jour automatique des entrées DNS pour les fournisseurs de
  15125. service comme @uref{https://dyn.com/dns/, Dyn}.
  15126. L'exemple suivant montre comment instantier le service avec sa configuration
  15127. par défaut :
  15128. @example
  15129. (service ddclient-service-type)
  15130. @end example
  15131. Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
  15132. @dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
  15133. @code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
  15134. manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
  15135. fichier dans une partie de votre configuration, par exemple avec
  15136. @code{plain-file}, mais il serait lisible pour tout le monde via
  15137. @file{/gnu/store}). Vois les exemples dans le répertoire
  15138. @file{share/ddclient} du paquet @code{ddclient}.
  15139. @c %start of fragment
  15140. Les champs de @code{ddclient-configuration} disponibles sont :
  15141. @deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
  15142. Le paquet ddclient.
  15143. @end deftypevr
  15144. @deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
  15145. La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
  15146. domaine.
  15147. La valeur par défaut est @samp{300}.
  15148. @end deftypevr
  15149. @deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
  15150. Utiliser syslog pour la sortie.
  15151. La valeur par défaut est @samp{#t}.
  15152. @end deftypevr
  15153. @deftypevr {paramètre de @code{ddclient-configuration}} string mail
  15154. Courriel de l'utilisateur.
  15155. La valeur par défaut est @samp{"root"}.
  15156. @end deftypevr
  15157. @deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
  15158. Courriel de l'utilisateur pour les échecs.
  15159. La valeur par défaut est @samp{"root"}.
  15160. @end deftypevr
  15161. @deftypevr {paramètre de @code{ddclient-configuration}} string pid
  15162. Le fichier de PID de ddclient.
  15163. La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
  15164. @end deftypevr
  15165. @deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
  15166. Activer le support de SSL.
  15167. La valeur par défaut est @samp{#t}.
  15168. @end deftypevr
  15169. @deftypevr {paramètre de @code{ddclient-configuration}} string user
  15170. Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
  15171. programme ddclient.
  15172. La valeur par défaut est @samp{"ddclient"}.
  15173. @end deftypevr
  15174. @deftypevr {paramètre de @code{ddclient-configuration}} string group
  15175. Groupe de l'utilisateur qui lancera le programme ddclient.
  15176. La valeur par défaut est @samp{"ddclient"}.
  15177. @end deftypevr
  15178. @deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
  15179. Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
  15180. fichier contient les paramètres d'authentification utilisés par ddclient.
  15181. On s'attend à ce que vous le créiez manuellement.
  15182. La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
  15183. @end deftypevr
  15184. @deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
  15185. Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
  15186. La valeur par défaut est @samp{()}.
  15187. @end deftypevr
  15188. @c %end of fragment
  15189. @node Services VPN
  15190. @subsubsection Services VPN
  15191. @cindex VPN (réseau privé virtuel)
  15192. @cindex réseau privé virtuel (VPN)
  15193. Le module @code{(gnu services vpn)} fournit des services liés aux
  15194. @dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
  15195. pour que votre machine se connecte à un VPN et un service @emph{serveur}
  15196. pour que votre machine héberge un VPN. Les deux services utilisent
  15197. @uref{https://openvpn.net/, OpenVPN}.
  15198. @deffn {Procédure Scheme} openvpn-client-service @
  15199. [#:config (openvpn-client-configuration)]
  15200. Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
  15201. client.
  15202. @end deffn
  15203. @deffn {Procédure Scheme} openvpn-server-service @
  15204. [#:config (openvpn-server-configuration)]
  15205. Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
  15206. serveur.
  15207. Les deux services peuvent être lancés en même temps.
  15208. @end deffn
  15209. @c %automatically generated documentation
  15210. Les champs de @code{openvpn-client-configuration} disponibles sont :
  15211. @deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
  15212. Le paquet OpenVPN.
  15213. @end deftypevr
  15214. @deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
  15215. Le fichier de PID d'OpenVPN.
  15216. La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
  15217. @end deftypevr
  15218. @deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
  15219. Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
  15220. les serveurs.
  15221. La valeur par défaut est @samp{udp}.
  15222. @end deftypevr
  15223. @deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
  15224. Le périphérique utilisé pour représenter la connexion VPN.
  15225. La valeur par défaut est @samp{tun}.
  15226. @end deftypevr
  15227. @deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
  15228. L'autorité de certification qui sert à vérifier les connexions.
  15229. La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
  15230. @end deftypevr
  15231. @deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
  15232. Le certificat de la machine sur laquelle tourne le démon. Il devrait être
  15233. signé par l'autorité indiquée dans @code{ca}.
  15234. La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
  15235. @end deftypevr
  15236. @deftypevr {paramètre de @code{openvpn-client-configuration}} string key
  15237. La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
  15238. dont le certificat est donné dans @code{cert}.
  15239. La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
  15240. @end deftypevr
  15241. @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
  15242. Indique s'il faut utiliser l'algorithme de compression lzo.
  15243. La valeur par défaut est @samp{#t}.
  15244. @end deftypevr
  15245. @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
  15246. Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
  15247. La valeur par défaut est @samp{#t}.
  15248. @end deftypevr
  15249. @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
  15250. Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
  15251. démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
  15252. La valeur par défaut est @samp{#t}.
  15253. @end deftypevr
  15254. @deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
  15255. Niveau de verbosité.
  15256. La valeur par défaut est @samp{3}.
  15257. @end deftypevr
  15258. @deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
  15259. Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
  15260. de contrôle TLS pour se protéger contre les attaques DoS.
  15261. La valeur par défaut est @samp{#f}.
  15262. @end deftypevr
  15263. @deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
  15264. Indique s'il faut vérifier que le certificat du serveur a l'extension
  15265. d'utilisation.
  15266. La valeur par défaut est @samp{#t}.
  15267. @end deftypevr
  15268. @deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
  15269. Se lier à un port spécifique.
  15270. La valeur par défaut est @samp{#f}.
  15271. @end deftypevr
  15272. @deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
  15273. Réessayer de résoudre l'adresse du serveur.
  15274. La valeur par défaut est @samp{#t}.
  15275. @end deftypevr
  15276. @deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
  15277. Une liste de serveurs distants sur lesquels se connecter.
  15278. La valeur par défaut est @samp{()}.
  15279. Les champs de @code{openvpn-remote-configuration} disponibles sont :
  15280. @deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
  15281. Nom du serveur.
  15282. La valeur par défaut est @samp{"my-server"}.
  15283. @end deftypevr
  15284. @deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
  15285. Numéro de port sur lequel écoute le serveur.
  15286. La valeur par défaut est @samp{1194}.
  15287. @end deftypevr
  15288. @end deftypevr
  15289. @c %end of automatic openvpn-client documentation
  15290. @c %automatically generated documentation
  15291. Les champs de @code{openvpn-server-configuration} disponibles sont :
  15292. @deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
  15293. Le paquet OpenVPN.
  15294. @end deftypevr
  15295. @deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
  15296. Le fichier de PID d'OpenVPN.
  15297. La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
  15298. @end deftypevr
  15299. @deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
  15300. Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
  15301. les serveurs.
  15302. La valeur par défaut est @samp{udp}.
  15303. @end deftypevr
  15304. @deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
  15305. Le périphérique utilisé pour représenter la connexion VPN.
  15306. La valeur par défaut est @samp{tun}.
  15307. @end deftypevr
  15308. @deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
  15309. L'autorité de certification qui sert à vérifier les connexions.
  15310. La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
  15311. @end deftypevr
  15312. @deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
  15313. Le certificat de la machine sur laquelle tourne le démon. Il devrait être
  15314. signé par l'autorité indiquée dans @code{ca}.
  15315. La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
  15316. @end deftypevr
  15317. @deftypevr {paramètre de @code{openvpn-server-configuration}} string key
  15318. La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
  15319. dont le certificat est donné dans @code{cert}.
  15320. La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
  15321. @end deftypevr
  15322. @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
  15323. Indique s'il faut utiliser l'algorithme de compression lzo.
  15324. La valeur par défaut est @samp{#t}.
  15325. @end deftypevr
  15326. @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
  15327. Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
  15328. La valeur par défaut est @samp{#t}.
  15329. @end deftypevr
  15330. @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
  15331. Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
  15332. démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
  15333. La valeur par défaut est @samp{#t}.
  15334. @end deftypevr
  15335. @deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
  15336. Niveau de verbosité.
  15337. La valeur par défaut est @samp{3}.
  15338. @end deftypevr
  15339. @deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
  15340. Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
  15341. de contrôle TLS pour se protéger contre les attaques DoS.
  15342. La valeur par défaut est @samp{#f}.
  15343. @end deftypevr
  15344. @deftypevr {paramètre de @code{openvpn-server-configuration}} number port
  15345. Spécifie le numéro de port sur lequel les serveurs écoutent.
  15346. La valeur par défaut est @samp{1194}.
  15347. @end deftypevr
  15348. @deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
  15349. Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
  15350. virtuel.
  15351. La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
  15352. @end deftypevr
  15353. @deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
  15354. Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
  15355. La valeur par défaut est @samp{#f}.
  15356. @end deftypevr
  15357. @deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
  15358. Le fichier de paramètres Diffie-Hellman.
  15359. La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
  15360. @end deftypevr
  15361. @deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
  15362. Le fichier qui enregistre les IP des clients.
  15363. La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
  15364. @end deftypevr
  15365. @deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
  15366. Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
  15367. clients.
  15368. La valeur par défaut est @samp{#f}.
  15369. @end deftypevr
  15370. @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
  15371. Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
  15372. eux dans le VPN.
  15373. La valeur par défaut est @samp{#f}.
  15374. @end deftypevr
  15375. @deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
  15376. Fait que des messages de ping sont envoyés régulièrement dans les deux sens
  15377. pour que chaque côté sache quand l'autre n'est plus disponible.
  15378. @code{keepalive} a besoin d'une paire. Le premier élément est la période
  15379. d'envoie du ping, et le second élément est le délai d'attente avant de
  15380. considéré que l'autre côté n'est plus disponible.
  15381. @end deftypevr
  15382. @deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
  15383. Le nombre maximum de clients.
  15384. La valeur par défaut est @samp{100}.
  15385. @end deftypevr
  15386. @deftypevr {paramètre de @code{openvpn-server-configuration}} string status
  15387. Le fichier de statut. Ce fichier montre un court rapport sur les connexions
  15388. actuelles. Il est tronqué et réécrit toutes les minutes.
  15389. La valeur par défaut est @samp{"/var/run/openvpn/status"}.
  15390. @end deftypevr
  15391. @deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
  15392. La liste des configuration pour certains clients.
  15393. La valeur par défaut est @samp{()}.
  15394. Les champs de @code{openvpn-ccd-configuration} disponibles sont :
  15395. @deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
  15396. Nom du client.
  15397. La valeur par défaut est @samp{"client"}.
  15398. @end deftypevr
  15399. @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
  15400. Le réseau du client.
  15401. La valeur par défaut est @samp{#f}.
  15402. @end deftypevr
  15403. @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
  15404. IP du client sur le VPN.
  15405. La valeur par défaut est @samp{#f}.
  15406. @end deftypevr
  15407. @end deftypevr
  15408. @c %end of automatic openvpn-server documentation
  15409. @node Système de fichiers en réseau
  15410. @subsubsection Système de fichiers en réseau
  15411. @cindex NFS
  15412. Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
  15413. tous utilisés pour monter et exporter des arborescences de répertoires en
  15414. @dfn{network file systems} (NFS).
  15415. @subsubheading Service RPC Bind
  15416. @cindex rpcbind
  15417. Le service RPC Bind fournit un dispositif pour faire correspondre les
  15418. numéros de programmes à des adresses universelles. De nombreux services
  15419. liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
  15420. lorsqu'un service qui en dépend est démarré.
  15421. @defvr {Variable Scheme} rpcbind-service-type
  15422. Un type de service pour le démon RPC portmapper.
  15423. @end defvr
  15424. @deftp {Type de données} rpcbind-configuration
  15425. Type données représentant la configuration du service RPC Bind. Ce type a
  15426. les paramètres suivants :
  15427. @table @asis
  15428. @item @code{rpcbind} (par défaut : @code{rpcbind})
  15429. Le paquet rpcbind à utiliser.
  15430. @item @code{warm-start?} (par défaut : @code{#t})
  15431. Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
  15432. démarrage ce qui lui fait recharger les informations d'états sauvegardés par
  15433. une instance précédente.
  15434. @end table
  15435. @end deftp
  15436. @subsubheading Pseudo-système de fichiers Pipefs
  15437. @cindex pipefs
  15438. @cindex rpc_pipefs
  15439. Le système de fichiers pipefs est utilisé pour transférer des données liées
  15440. à NFS entre le noyau et les programmes en espace utilisateur.
  15441. @defvr {Variable Scheme} pipefs-service-type
  15442. Un type de service pour le pseudo-système de fichiers pipefs.
  15443. @end defvr
  15444. @deftp {Type de données} pipefs-configuration
  15445. Type de données représentant la configuration du service du pseudo-système
  15446. de fichiers pipefs. Ce type a les paramètres suivants :
  15447. @table @asis
  15448. @item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
  15449. Le répertoire dans lequel le système de fichiers est attaché.
  15450. @end table
  15451. @end deftp
  15452. @subsubheading Service de démon GSS
  15453. @cindex GSSD
  15454. @cindex GSS
  15455. @cindex système de sécurité global
  15456. Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
  15457. forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
  15458. RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
  15459. fait avec la commande Kerberos @command{kinit} ou automatiquement à la
  15460. connexion avec les services PAM (@pxref{Services Kerberos}).
  15461. @defvr {Variable Scheme} gss-service-type
  15462. Un type de service pour le démon du système de sécurité global (GSS).
  15463. @end defvr
  15464. @deftp {Type de données} gss-configuration
  15465. Type de données représentant la configuration du service du démon GSS. Ce
  15466. type a les paramètres suivants :
  15467. @table @asis
  15468. @item @code{nfs-utils} (par défaut : @code{nfs-utils})
  15469. Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
  15470. @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
  15471. Le répertoire où le système de fichier pipefs doit être monté.
  15472. @end table
  15473. @end deftp
  15474. @subsubheading Service de démon IDMAP
  15475. @cindex idmapd
  15476. @cindex correspondance de nom
  15477. Le service du démon idmap fournit une correspondance entre les ID
  15478. utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
  15479. accéder aux systèmes de fichiers montés via NFSv4.
  15480. @defvr {Variable Scheme} idmap-service-type
  15481. Un type de service pour le démon de correspondance d'identité (IDMAP).
  15482. @end defvr
  15483. @deftp {Type de données} idmap-configuration
  15484. Type de données représentant la configuration du service du démon IDMAP. Ce
  15485. type a les paramètres suivants :
  15486. @table @asis
  15487. @item @code{nfs-utils} (par défaut : @code{nfs-utils})
  15488. Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
  15489. @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
  15490. Le répertoire où le système de fichier pipefs doit être monté.
  15491. @item @code{domain} (par défaut : @code{#f})
  15492. Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
  15493. ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
  15494. domaine pleinement qualifié de l'hôte.
  15495. @end table
  15496. @end deftp
  15497. @node Intégration continue
  15498. @subsubsection Intégration continue
  15499. @cindex intégration continue
  15500. @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
  15501. un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
  15502. pour le développement que pour fournir des substituts à d'autres
  15503. (@pxref{Substituts}).
  15504. Le module @code{(gnu services cuirass)} fournit le service suivant.
  15505. @defvr {Procédure Scheme} cuirass-service-type
  15506. Le type du service Cuirass. Sa valeur doit être un objet
  15507. @code{cuirass-configuration}, décrit ci-dessous.
  15508. @end defvr
  15509. Pour ajouter des travaux de construction, vous devez indiquer le champ
  15510. @code{specifications} de la configuration. Voici un exemple de service qui
  15511. récupère le dépôt Guix et construit les paquets depuis un manifeste.
  15512. Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
  15513. qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
  15514. @example
  15515. (define %cuirass-specs
  15516. #~(list
  15517. '((#:name . "my-manifest")
  15518. (#:load-path-inputs . ("guix"))
  15519. (#:package-path-inputs . ("custom-packages"))
  15520. (#:proc-input . "guix")
  15521. (#:proc-file . "build-aux/cuirass/gnu-system.scm")
  15522. (#:proc . cuirass-jobs)
  15523. (#:proc-args . ((subset . "manifests")
  15524. (systems . ("x86_64-linux"))
  15525. (manifests . (("config" . "guix/manifest.scm")))))
  15526. (#:inputs . (((#:name . "guix")
  15527. (#:url . "git://git.savannah.gnu.org/guix.git")
  15528. (#:load-path . ".")
  15529. (#:branch . "master")
  15530. (#:no-compile? . #t))
  15531. ((#:name . "config")
  15532. (#:url . "git://git.example.org/config.git")
  15533. (#:load-path . ".")
  15534. (#:branch . "master")
  15535. (#:no-compile? . #t))
  15536. ((#:name . "custom-packages")
  15537. (#:url . "git://git.example.org/custom-packages.git")
  15538. (#:load-path . ".")
  15539. (#:branch . "master")
  15540. (#:no-compile? . #t)))))))
  15541. (service cuirass-service-type
  15542. (cuirass-configuration
  15543. (specifications %cuirass-specs)))
  15544. @end example
  15545. Tandis que les informations liés aux travaux de construction sont
  15546. directement dans les spécifications, les paramètres globaux pour le
  15547. processus @command{cuirass} sont accessibles dans les autres champs de
  15548. @code{cuirass-configuration}.
  15549. @deftp {Type de données} cuirass-configuration
  15550. Type de données représentant la configuration de Cuirass.
  15551. @table @asis
  15552. @item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
  15553. Emplacement du fichier de journal.
  15554. @item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
  15555. Emplacement du cache du dépôt.
  15556. @item @code{user} (par défaut : @code{"cuirass"})
  15557. Propriétaire du processus @code{cuirass}.
  15558. @item @code{group} (par défaut : @code{"cuirass"})
  15559. Groupe du propriétaire du processus @code{cuirass}.
  15560. @item @code{interval} (par défaut : @code{60})
  15561. Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
  15562. Cuirass.
  15563. @item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
  15564. Emplacement de la base de données sqlite qui contient les résultats de
  15565. construction et les spécifications précédemment ajoutées.
  15566. @item @code{ttl} (par défaut : @code{(* 30 24 3600)})
  15567. Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
  15568. sont enregistrés comme des résultats de construction. Cela signifie que les
  15569. résultats de construction ne seront pas glanés pendant au moins @var{ttl}
  15570. secondes.
  15571. @item @code{port} (par défaut : @code{8081})
  15572. Numéro de port utilisé pour le serveur HTTP.
  15573. @item --listen=@var{hôte}
  15574. Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
  15575. d'accepter les connexions depuis localhost.
  15576. @item @code{specifications} (par défaut : @code{#~'()})
  15577. Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
  15578. spécifications, où une spécification est une liste d'association
  15579. (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
  15580. clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
  15581. l'exemple plus haut.
  15582. @item @code{use-substitutes?} (par défaut : @code{#f})
  15583. Cela permet d'utiliser des substituts pour éviter de construire toutes les
  15584. dépendance d'un travail depuis les sources.
  15585. @item @code{one-shot?} (par défaut : @code{#f})
  15586. N'évaluer les spécification et construire les dérivations qu'une seule fois.
  15587. @item @code{fallback?} (par défaut : @code{#f})
  15588. Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
  15589. construction locale du paquet.
  15590. @item @code{cuirass} (par défaut : @code{cuirass})
  15591. Le paquet Cuirass à utiliser.
  15592. @end table
  15593. @end deftp
  15594. @node Services de gestion de l'énergie
  15595. @subsubsection Services de gestion de l'énergie
  15596. @cindex tlp
  15597. @cindex gestion de l'énergie avec TLP
  15598. @subsubheading démon TLP
  15599. Le module @code{(gnu services pm)} fournit une définition de service Guix
  15600. pour l'outil de gestion d'énergie Linux TLP.
  15601. TLP active plusieurs modes un espace utilisateur et dans le noyau.
  15602. Contrairement à @code{upower-service}, ce n'est pas un outil passif de
  15603. surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
  15604. qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
  15605. d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
  15606. d'accueil de TLP}.
  15607. @deffn {Variable Scheme} tlp-service-type
  15608. Le type de service pour l'outil TLP. Sa valeur devrait être une
  15609. configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
  15610. par défaut, écrivez simplement :
  15611. @example
  15612. (service tlp-service-type)
  15613. @end example
  15614. @end deffn
  15615. Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
  15616. des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
  15617. Chaque définition de paramètre est précédée par son type ; par exemple,
  15618. @samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
  15619. comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
  15620. paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
  15621. valeur est @code{'disabled}.
  15622. @c The following documentation was initially generated by
  15623. @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
  15624. @c documentation is better, so we shouldn't hesitate to edit below as
  15625. @c needed. However if the change you want to make to this documentation
  15626. @c can be done in an automated way, it's probably easier to change
  15627. @c (generate-documentation) than to make it below and have to deal with
  15628. @c the churn as TLP updates.
  15629. Les champs de @code{tlp-configuration} disponibles sont :
  15630. @deftypevr {paramètre de @code{tlp-configuration}} package tlp
  15631. Le paquet TLP.
  15632. @end deftypevr
  15633. @deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
  15634. Indiquez vrai si vous souhaitez activer TLP.
  15635. La valeur par défaut est @samp{#t}.
  15636. @end deftypevr
  15637. @deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
  15638. Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
  15639. possibilités sont AC et BAT.
  15640. La valeur par défaut est @samp{"AC"}.
  15641. @end deftypevr
  15642. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
  15643. Nombre de secondes que le noyau Linux doit attendre après que les disques
  15644. s'arrêtent pour se synchroniser quand il est sur secteur.
  15645. La valeur par défaut est @samp{0}.
  15646. @end deftypevr
  15647. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
  15648. Comme @code{disk-idle-ac} mais en mode batterie.
  15649. La valeur par défaut est @samp{2}.
  15650. @end deftypevr
  15651. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
  15652. Périodicité du nettoyage des pages invalidées, en secondes.
  15653. La valeur par défaut est @samp{15}.
  15654. @end deftypevr
  15655. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
  15656. Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
  15657. La valeur par défaut est @samp{60}.
  15658. @end deftypevr
  15659. @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
  15660. Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
  15661. les possibilités sont powersave et performance. Avec le pilote
  15662. acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
  15663. conservative.
  15664. La valeur par défaut est @samp{disabled}.
  15665. @end deftypevr
  15666. @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
  15667. Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
  15668. La valeur par défaut est @samp{disabled}.
  15669. @end deftypevr
  15670. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
  15671. Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
  15672. La valeur par défaut est @samp{disabled}.
  15673. @end deftypevr
  15674. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
  15675. Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
  15676. La valeur par défaut est @samp{disabled}.
  15677. @end deftypevr
  15678. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
  15679. Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
  15680. La valeur par défaut est @samp{disabled}.
  15681. @end deftypevr
  15682. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
  15683. Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
  15684. La valeur par défaut est @samp{disabled}.
  15685. @end deftypevr
  15686. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
  15687. Limite le P-état minimum pour contrôler la dissipation de puissance dans le
  15688. CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
  15689. performances disponibles.
  15690. La valeur par défaut est @samp{disabled}.
  15691. @end deftypevr
  15692. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
  15693. Limite le P-état maximum pour contrôler la dissipation de puissance dans le
  15694. CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
  15695. performances disponibles.
  15696. La valeur par défaut est @samp{disabled}.
  15697. @end deftypevr
  15698. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
  15699. Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
  15700. La valeur par défaut est @samp{disabled}.
  15701. @end deftypevr
  15702. @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
  15703. Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
  15704. La valeur par défaut est @samp{disabled}.
  15705. @end deftypevr
  15706. @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
  15707. Active la fonctionnalité turbo boost du CPU sur secteur.
  15708. La valeur par défaut est @samp{disabled}.
  15709. @end deftypevr
  15710. @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
  15711. Comme @code{cpu-boost-on-ac?} mais en mode batterie.
  15712. La valeur par défaut est @samp{disabled}.
  15713. @end deftypevr
  15714. @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
  15715. Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
  15716. utilisés lorsque la charge est faible.
  15717. La valeur par défaut est @samp{#f}.
  15718. @end deftypevr
  15719. @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
  15720. Comme @code{sched-powersave-on-ac?} mais en mode batterie.
  15721. La valeur par défaut est @samp{#t}.
  15722. @end deftypevr
  15723. @deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
  15724. Active le chien de garde NMI du noyau Linux.
  15725. La valeur par défaut est @samp{#f}.
  15726. @end deftypevr
  15727. @deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
  15728. Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
  15729. valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
  15730. La valeur par défaut est @samp{disabled}.
  15731. @end deftypevr
  15732. @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
  15733. Indique le niveau de performance du CPU par rapport à la politique de
  15734. gestion de l'énergie sur secteur. Les possibilités sont performance, normal
  15735. et powersave.
  15736. La valeur par défaut est @samp{"performance"}.
  15737. @end deftypevr
  15738. @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
  15739. Comme @code{energy-perf-policy-ac} mais en mode batterie.
  15740. La valeur par défaut est @samp{"powersave"}.
  15741. @end deftypevr
  15742. @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
  15743. Périphériques de disque dur.
  15744. @end deftypevr
  15745. @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
  15746. Niveau de gestion de l'énergie avancé des disques durs.
  15747. @end deftypevr
  15748. @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
  15749. Comme @code{disk-apm-bat} mais en mode batterie.
  15750. @end deftypevr
  15751. @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
  15752. Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
  15753. être spécifiée pour chaque disque dur déclaré.
  15754. La valeur par défaut est @samp{disabled}.
  15755. @end deftypevr
  15756. @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
  15757. Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
  15758. La valeur par défaut est @samp{disabled}.
  15759. @end deftypevr
  15760. @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
  15761. Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
  15762. doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
  15763. exemple cfq, deadline et noop.
  15764. La valeur par défaut est @samp{disabled}.
  15765. @end deftypevr
  15766. @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
  15767. Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
  15768. possibilités sont min_power, medium_power et max_performance.
  15769. La valeur par défaut est @samp{"max_performance"}.
  15770. @end deftypevr
  15771. @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
  15772. Comme @code{sata-linkpwr-ac} mais en mode batterie.
  15773. La valeur par défaut est @samp{"min_power"}.
  15774. @end deftypevr
  15775. @deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
  15776. Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
  15777. La valeur par défaut est @samp{disabled}.
  15778. @end deftypevr
  15779. @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
  15780. Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
  15781. les disques, sur secteur
  15782. La valeur par défaut est @samp{disabled}.
  15783. @end deftypevr
  15784. @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
  15785. Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
  15786. La valeur par défaut est @samp{disabled}.
  15787. @end deftypevr
  15788. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
  15789. Secondes d'inactivités avant de suspendre les disques.
  15790. La valeur par défaut est @samp{15}.
  15791. @end deftypevr
  15792. @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
  15793. Niveau de gestion de l'énergie des états actifs de PCI Express. Les
  15794. possibilités sont default, performance et powersave.
  15795. La valeur par défaut est @samp{"performance"}.
  15796. @end deftypevr
  15797. @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
  15798. Comme @code{pcie-aspm-ac} mais en mode batterie.
  15799. La valeur par défaut est @samp{"powersave"}.
  15800. @end deftypevr
  15801. @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
  15802. Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
  15803. possibilités sont low, mid, high, auto et default.
  15804. La valeur par défaut est @samp{"high"}.
  15805. @end deftypevr
  15806. @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
  15807. Comme @code{radeon-power-ac} mais en mode batterie.
  15808. La valeur par défaut est @samp{"low"}.
  15809. @end deftypevr
  15810. @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
  15811. Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
  15812. sont battery et performance.
  15813. La valeur par défaut est @samp{"performance"}.
  15814. @end deftypevr
  15815. @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
  15816. Comme @code{radeon-dpm-state-ac} mais en mode batterie.
  15817. La valeur par défaut est @samp{"battery"}.
  15818. @end deftypevr
  15819. @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
  15820. Niveau de performance de DPM. Les possibilités sont auto, low et high.
  15821. La valeur par défaut est @samp{"auto"}.
  15822. @end deftypevr
  15823. @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
  15824. Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
  15825. La valeur par défaut est @samp{"auto"}.
  15826. @end deftypevr
  15827. @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
  15828. Mode de gestion de l'énergie wifi.
  15829. La valeur par défaut est @samp{#f}.
  15830. @end deftypevr
  15831. @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
  15832. Comme @code{wifi-power-ac?} mais en mode batterie.
  15833. La valeur par défaut est @samp{#t}.
  15834. @end deftypevr
  15835. @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
  15836. Désactive wake on LAN.
  15837. La valeur par défaut est @samp{#t}.
  15838. @end deftypevr
  15839. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
  15840. Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
  15841. sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
  15842. de l'énergie.
  15843. La valeur par défaut est @samp{0}.
  15844. @end deftypevr
  15845. @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
  15846. Comme @code{sound-powersave-ac} mais en mode batterie.
  15847. La valeur par défaut est @samp{1}.
  15848. @end deftypevr
  15849. @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
  15850. Désactive le contrôleur en mode de gestion de l'énergie sur les
  15851. périphériques Intel HDA.
  15852. La valeur par défaut est @samp{#t}.
  15853. @end deftypevr
  15854. @deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
  15855. Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
  15856. périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
  15857. levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
  15858. plus récents.
  15859. La valeur par défaut est @samp{#f}.
  15860. @end deftypevr
  15861. @deftypevr {paramètre de @code{tlp-configuration}} string bay-device
  15862. Nom du périphérique optique à éteindre.
  15863. La valeur par défaut est @samp{"sr0"}.
  15864. @end deftypevr
  15865. @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
  15866. Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
  15867. sont on et auto.
  15868. La valeur par défaut est @samp{"on"}.
  15869. @end deftypevr
  15870. @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
  15871. Comme @code{runtime-pm-ac} mais en mode batterie.
  15872. La valeur par défaut est @samp{"auto"}.
  15873. @end deftypevr
  15874. @deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
  15875. Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
  15876. liste noire.
  15877. La valeur par défaut est @samp{#t}.
  15878. @end deftypevr
  15879. @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
  15880. Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
  15881. l'énergie à l'exécution.
  15882. La valeur par défaut est @samp{disabled}.
  15883. @end deftypevr
  15884. @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
  15885. Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
  15886. de l'énergie à l'exécution.
  15887. @end deftypevr
  15888. @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
  15889. Active la fonctionnalité de mise en veille automatique de l'USB.
  15890. La valeur par défaut est @samp{#t}.
  15891. @end deftypevr
  15892. @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
  15893. Exclue les périphériques spécifiés de la mise en veille automatique de
  15894. l'USB.
  15895. La valeur par défaut est @samp{disabled}.
  15896. @end deftypevr
  15897. @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
  15898. Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
  15899. La valeur par défaut est @samp{#t}.
  15900. @end deftypevr
  15901. @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
  15902. Inclue les périphériques spécifiés dans la mise en veille automatique de
  15903. l'USB, même s'ils sont déjà exclus par le pilote ou via
  15904. @code{usb-blacklist-wwan?}.
  15905. La valeur par défaut est @samp{disabled}.
  15906. @end deftypevr
  15907. @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
  15908. Active la mise en veille de l'USB avant l'arrêt.
  15909. La valeur par défaut est @samp{disabled}.
  15910. @end deftypevr
  15911. @deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
  15912. Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
  15913. arrêt au démarrage du système.
  15914. La valeur par défaut est @samp{#f}.
  15915. @end deftypevr
  15916. @cindex thermald
  15917. @cindex gestion de la fréquence du CPU avec thermald
  15918. @subsubheading démon Thermald
  15919. Le module @code{(gnu services pm)} fournit une interface pour thermald, un
  15920. service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
  15921. @defvr {Variable Scheme} thermald-service-type
  15922. C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
  15923. thermald}, le démon de température de Linux, responsable du contrôle de
  15924. l'état thermique des processeurs et d'éviter la surchauffe.
  15925. @end defvr
  15926. @deftp {Type de données} thermald-configuration
  15927. Type de données représentant la configuration de
  15928. @code{thermald-service-type}.
  15929. @table @asis
  15930. @item @code{ignore-cpuid-check?} (par défaut : @code{#f})
  15931. Ignore la vérification des modèles CPU supportés avec cpuid.
  15932. @item @code{thermald} (par défaut : @var{thermald})
  15933. Objet du paquet de thermald.
  15934. @end table
  15935. @end deftp
  15936. @node Services audio
  15937. @subsubsection Services audio
  15938. Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
  15939. démon de lecture de musique).
  15940. @cindex mpd
  15941. @subsubheading Music Player Daemon
  15942. Le démon de lecture de musique (MPD) est un service qui joue de la musique
  15943. tout en étant contrôlé depuis la machine locale ou à travers le réseau par
  15944. divers clients.
  15945. L'exemple suivant montre comment on peut lancer @code{mpd} en tant
  15946. qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
  15947. pour la sortie audio.
  15948. @example
  15949. (service mpd-service-type
  15950. (mpd-configuration
  15951. (user "bob")
  15952. (port "6666")))
  15953. @end example
  15954. @defvr {Variable Scheme} mpd-service-type
  15955. Le type de service pour @command{mpd}.
  15956. @end defvr
  15957. @deftp {Type de données} mpd-configuration
  15958. Type de données représentant la configuration de @command{mpd}.
  15959. @table @asis
  15960. @item @code{user} (par défaut : @code{"mpd"})
  15961. L'utilisateur qui lance mpd.
  15962. @item @code{music-dir} (par défaut : @code{"~/Music"})
  15963. Le répertoire à scanner pour trouver les fichiers de musique.
  15964. @item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
  15965. Le répertoire où stocker les playlists.
  15966. @item @code{port} (par défaut : @code{"6600"})
  15967. Le port sur lequel lancer mpd.
  15968. @item @code{address} (par défaut : @code{"any"})
  15969. L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
  15970. chemin absolu peut être spécifié ici.
  15971. @end table
  15972. @end deftp
  15973. @node Services de virtualisation
  15974. @subsubsection services de virtualisation
  15975. Le module @code{(gnu services virtualization)} fournit des services pour les
  15976. démons libvirt et virtlog, ainsi que d'autres services liés à la
  15977. virtualisation.
  15978. @subsubheading démon libvirt
  15979. @code{libvirtd} est le démon côté serveur du système de gestion de
  15980. virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
  15981. les taches de gestion requises pour les clients virtualisés.
  15982. @deffn {Variable Scheme} libvirt-service-type
  15983. C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
  15984. être un @code{libvirt-configuration}.
  15985. @example
  15986. (service libvirt-service-type
  15987. (libvirt-configuration
  15988. (unix-sock-group "libvirt")
  15989. (tls-port "16555")))
  15990. @end example
  15991. @end deffn
  15992. @c Auto-generated with (generate-libvirt-documentation)
  15993. Les champs de @code{libvirt-configuration} disponibles sont :
  15994. @deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
  15995. Paquet libvirt.
  15996. @end deftypevr
  15997. @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
  15998. Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
  15999. public. Vous devez remplir le champ @code{listen} pour que cela ait un
  16000. effet.
  16001. Il est nécessaire de mettre en place une CA et de créer un certificat
  16002. serveur avant d'utiliser cette fonctionnalité.
  16003. La valeur par défaut est @samp{#t}.
  16004. @end deftypevr
  16005. @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
  16006. Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
  16007. remplir le champ @code{listen} pour que cela ait un effet.
  16008. L'utilisation des sockets TCP requiert une authentification SASL par
  16009. défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
  16010. sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
  16011. La valeur par défaut est @samp{#f}.
  16012. @end deftypevr
  16013. @deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
  16014. Pour pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
  16015. numéro de port ou d'un nom de service.
  16016. La valeur par défaut est @samp{"16514"}.
  16017. @end deftypevr
  16018. @deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
  16019. Pour sur lequel accepter les connexions TCP non sécurisées. Cela peut être
  16020. un numéro de port ou un nom de service.
  16021. La valeur par défaut est @samp{"16509"}.
  16022. @end deftypevr
  16023. @deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
  16024. Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
  16025. La valeur par défaut est @samp{"0.0.0.0"}.
  16026. @end deftypevr
  16027. @deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
  16028. Indique s'il faut publier le service libvirt en mDNS.
  16029. Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
  16030. démon Avahi.
  16031. La valeur par défaut est @samp{#f}.
  16032. @end deftypevr
  16033. @deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
  16034. Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
  16035. La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
  16036. @end deftypevr
  16037. @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
  16038. Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
  16039. permettre à un ensemble d'utilisateurs « de confiance » de gérer les
  16040. fonctionnalités sans devenir root.
  16041. La valeur par défaut est @samp{"root"}.
  16042. @end deftypevr
  16043. @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
  16044. Permission Unix pour le socket en lecture seule. Il est utilisé pour
  16045. surveiller le statut des VM uniquement.
  16046. La valeur par défaut est @samp{"0777"}.
  16047. @end deftypevr
  16048. @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
  16049. Permission Unix pour le socket en lecture-écriture. La valeur par défaut
  16050. n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
  16051. défaut change et permet tout le monde (c.-à-d.@: 0777).
  16052. La valeur par défaut est @samp{"0770"}.
  16053. @end deftypevr
  16054. @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
  16055. permissions Unix pour le socket d'administration. La valeur par défaut ne
  16056. permet que le propriétaire (root), ne la changez pas à moins que vous ne
  16057. soyez sûr de savoir à qui vous exposez cet accès.
  16058. La valeur par défaut est @samp{"0777"}.
  16059. @end deftypevr
  16060. @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
  16061. Le répertoire dans lequel les sockets sont créés.
  16062. La valeur par défaut est @samp{"/var/run/libvirt"}.
  16063. @end deftypevr
  16064. @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
  16065. Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
  16066. les permissions des socket permettent à n'importe qui de se connecter.
  16067. La valeur par défaut est @samp{"polkit"}.
  16068. @end deftypevr
  16069. @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
  16070. Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
  16071. défaut les permissions du socket ne permettent que root. Si le support de
  16072. PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
  16073. l'authentification « polkit ».
  16074. La valeur par défaut est @samp{"polkit"}.
  16075. @end deftypevr
  16076. @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
  16077. Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
  16078. SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
  16079. scénario de développement ou de test.
  16080. La valeur par défaut est @samp{"sasl"}.
  16081. @end deftypevr
  16082. @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
  16083. Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
  16084. chiffrés par la couche TLS, et une authentification limitée est effectuée
  16085. avec les certificats.
  16086. Il est possible d'utiliser de n'importe quel mécanisme d'authentification
  16087. SASL en utilisant « sasl » pour cette option.
  16088. La valeur par défaut est @samp{"none"}.
  16089. @end deftypevr
  16090. @deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
  16091. Schéma de contrôle d'accès à l'API.
  16092. Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
  16093. pilotes d'accès peuvent placer des restrictions là-dessus.
  16094. La valeur par défaut est @samp{()}.
  16095. @end deftypevr
  16096. @deftypevr {paramètre de @code{libvirt-configuration}} string key-file
  16097. Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
  16098. aucune clef privée n'est chargée.
  16099. La valeur par défaut est @samp{""}.
  16100. @end deftypevr
  16101. @deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
  16102. Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
  16103. certificat n'est chargé.
  16104. La valeur par défaut est @samp{""}.
  16105. @end deftypevr
  16106. @deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
  16107. Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
  16108. certificat de CA n'est chargé.
  16109. La valeur par défaut est @samp{""}.
  16110. @end deftypevr
  16111. @deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
  16112. Chemin de la liste de révocation des certificats. Si la chaîne est vide,
  16113. aucun CRL n'est chargé.
  16114. La valeur par défaut est @samp{""}.
  16115. @end deftypevr
  16116. @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
  16117. Désactive la vérification de nos propres certificats serveurs.
  16118. Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
  16119. propres certificats.
  16120. La valeur par défaut est @samp{#f}.
  16121. @end deftypevr
  16122. @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
  16123. Désactive la vérification des certificats clients.
  16124. La vérification des certificats clients est le mécanisme d'authentification
  16125. principal. Tout client qui ne présent pas de certificat signé par la CA
  16126. sera rejeté.
  16127. La valeur par défaut est @samp{#f}.
  16128. @end deftypevr
  16129. @deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
  16130. Liste blanche des Distinguished Name x509 autorisés.
  16131. La valeur par défaut est @samp{()}.
  16132. @end deftypevr
  16133. @deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
  16134. Liste blanche des noms d'utilisateur SASL permis. Le format des noms
  16135. d'utilisateurs dépend du mécanisme d'authentification SASL.
  16136. La valeur par défaut est @samp{()}.
  16137. @end deftypevr
  16138. @deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
  16139. Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
  16140. valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
  16141. modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
  16142. agisse différemment des paramètres par défaut globaux.
  16143. La valeur par défaut est @samp{"NORMAL"}.
  16144. @end deftypevr
  16145. @deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
  16146. Nombre maximum de connexions clientes en même temps sur tous les sockets.
  16147. La valeur par défaut est @samp{5000}.
  16148. @end deftypevr
  16149. @deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
  16150. Longueur maximum de la queue de connexions en attente d'acceptation du
  16151. démon. Remarquez que certains protocoles supportant la retransmission
  16152. peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
  16153. La valeur par défaut est @samp{1000}.
  16154. @end deftypevr
  16155. @deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
  16156. Longueur maximum de la queue des clients acceptés mais pas authentifiés.
  16157. Indiquez zéro pour désactiver ce paramètre.
  16158. La valeur par défaut est @samp{20}.
  16159. @end deftypevr
  16160. @deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
  16161. Nombre de processus de travail démarrés initialement.
  16162. La valeur par défaut est @samp{5}.
  16163. @end deftypevr
  16164. @deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
  16165. Nombre maximum de threads de travail.
  16166. Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
  16167. seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
  16168. que max_workers soit égal au nombre maximum de clients permis.
  16169. La valeur par défaut est @samp{20}.
  16170. @end deftypevr
  16171. @deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
  16172. Nombre de travailleurs prioritaires. Si tous les threads de travail du
  16173. groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
  16174. (notamment domainDestroy) peuvent être exécutés par ce groupe.
  16175. La valeur par défaut est @samp{5}.
  16176. @end deftypevr
  16177. @deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
  16178. Limite globale totale sur les appels RPC concurrents.
  16179. La valeur par défaut est @samp{20}.
  16180. @end deftypevr
  16181. @deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
  16182. Limit on concurrent requests from a single client connection. To avoid one
  16183. client monopolizing the server this should be a small fraction of the global
  16184. max_requests and max_workers parameter.
  16185. La valeur par défaut est @samp{5}.
  16186. @end deftypevr
  16187. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
  16188. Same as @code{min-workers} but for the admin interface.
  16189. La valeur par défaut est @samp{1}.
  16190. @end deftypevr
  16191. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
  16192. Same as @code{max-workers} but for the admin interface.
  16193. La valeur par défaut est @samp{5}.
  16194. @end deftypevr
  16195. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
  16196. Same as @code{max-clients} but for the admin interface.
  16197. La valeur par défaut est @samp{5}.
  16198. @end deftypevr
  16199. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
  16200. Same as @code{max-queued-clients} but for the admin interface.
  16201. La valeur par défaut est @samp{5}.
  16202. @end deftypevr
  16203. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
  16204. Same as @code{max-client-requests} but for the admin interface.
  16205. La valeur par défaut est @samp{5}.
  16206. @end deftypevr
  16207. @deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
  16208. Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
  16209. La valeur par défaut est @samp{3}.
  16210. @end deftypevr
  16211. @deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
  16212. Logging filters.
  16213. A filter allows to select a different logging level for a given category of
  16214. logs The format for a filter is one of:
  16215. @itemize @bullet
  16216. @item
  16217. x:nom
  16218. @item
  16219. x:+nom
  16220. @end itemize
  16221. where @code{name} is a string which is matched against the category given in
  16222. the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
  16223. "remote", "qemu", or "util.json" (the name in the filter can be a substring
  16224. of the full category name, in order to match multiple similar categories),
  16225. the optional "+" prefix tells libvirt to log stack trace for each message
  16226. matching name, and @code{x} is the minimal level where matching messages
  16227. should be logged:
  16228. @itemize @bullet
  16229. @item
  16230. 1: DEBUG
  16231. @item
  16232. 2: INFO
  16233. @item
  16234. 3: WARNING
  16235. @item
  16236. 4: ERROR
  16237. @end itemize
  16238. Multiple filters can be defined in a single filters statement, they just
  16239. need to be separated by spaces.
  16240. La valeur par défaut est @samp{"3:remote 4:event"}.
  16241. @end deftypevr
  16242. @deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
  16243. Logging outputs.
  16244. An output is one of the places to save logging information The format for an
  16245. output can be:
  16246. @table @code
  16247. @item x:stderr
  16248. output goes to stderr
  16249. @item x:syslog:name
  16250. use syslog for the output and use the given name as the ident
  16251. @item x:file:file_path
  16252. output to a file, with the given filepath
  16253. @item x:journald
  16254. output to journald logging system
  16255. @end table
  16256. In all case the x prefix is the minimal level, acting as a filter
  16257. @itemize @bullet
  16258. @item
  16259. 1: DEBUG
  16260. @item
  16261. 2: INFO
  16262. @item
  16263. 3: WARNING
  16264. @item
  16265. 4: ERROR
  16266. @end itemize
  16267. Multiple outputs can be defined, they just need to be separated by spaces.
  16268. La valeur par défaut est @samp{"3:stderr"}.
  16269. @end deftypevr
  16270. @deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
  16271. Allows usage of the auditing subsystem to be altered
  16272. @itemize @bullet
  16273. @item
  16274. 0: disable all auditing
  16275. @item
  16276. 1: enable auditing, only if enabled on host
  16277. @item
  16278. 2: enable auditing, and exit if disabled on host.
  16279. @end itemize
  16280. La valeur par défaut est @samp{1}.
  16281. @end deftypevr
  16282. @deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
  16283. Send audit messages via libvirt logging infrastructure.
  16284. La valeur par défaut est @samp{#f}.
  16285. @end deftypevr
  16286. @deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
  16287. Host UUID. UUID must not have all digits be the same.
  16288. La valeur par défaut est @samp{""}.
  16289. @end deftypevr
  16290. @deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
  16291. Source to read host UUID.
  16292. @itemize @bullet
  16293. @item
  16294. @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
  16295. @item
  16296. @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
  16297. @end itemize
  16298. If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
  16299. generated.
  16300. La valeur par défaut est @samp{"smbios"}.
  16301. @end deftypevr
  16302. @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
  16303. A keepalive message is sent to a client after @code{keepalive_interval}
  16304. seconds of inactivity to check if the client is still responding. If set to
  16305. -1, libvirtd will never send keepalive requests; however clients can still
  16306. send them and the daemon will send responses.
  16307. La valeur par défaut est @samp{5}.
  16308. @end deftypevr
  16309. @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
  16310. Maximum number of keepalive messages that are allowed to be sent to the
  16311. client without getting any response before the connection is considered
  16312. broken.
  16313. In other words, the connection is automatically closed approximately after
  16314. @code{keepalive_interval * (keepalive_count + 1)} seconds since the last
  16315. message received from the client. When @code{keepalive-count} is set to 0,
  16316. connections will be automatically closed after @code{keepalive-interval}
  16317. seconds of inactivity without sending any keepalive messages.
  16318. La valeur par défaut est @samp{5}.
  16319. @end deftypevr
  16320. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
  16321. Same as above but for admin interface.
  16322. La valeur par défaut est @samp{5}.
  16323. @end deftypevr
  16324. @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
  16325. Same as above but for admin interface.
  16326. La valeur par défaut est @samp{5}.
  16327. @end deftypevr
  16328. @deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
  16329. Timeout for Open vSwitch calls.
  16330. The @code{ovs-vsctl} utility is used for the configuration and its timeout
  16331. option is set by default to 5 seconds to avoid potential infinite waits
  16332. blocking libvirt.
  16333. La valeur par défaut est @samp{5}.
  16334. @end deftypevr
  16335. @c %end of autogenerated docs
  16336. @subsubheading démon Virrlog
  16337. The virtlogd service is a server side daemon component of libvirt that is
  16338. used to manage logs from virtual machine consoles.
  16339. This daemon is not used directly by libvirt client applications, rather it
  16340. is called on their behalf by @code{libvirtd}. By maintaining the logs in a
  16341. standalone daemon, the main @code{libvirtd} daemon can be restarted without
  16342. risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
  16343. itself upon receiving @code{SIGUSR1}, to allow live upgrades without
  16344. downtime.
  16345. @deffn {Variable Scheme} virtlog-service-type
  16346. This is the type of the virtlog daemon. Its value must be a
  16347. @code{virtlog-configuration}.
  16348. @example
  16349. (service virtlog-service-type
  16350. (virtlog-configuration
  16351. (max-clients 1000)))
  16352. @end example
  16353. @end deffn
  16354. @deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
  16355. Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
  16356. La valeur par défaut est @samp{3}.
  16357. @end deftypevr
  16358. @deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
  16359. Logging filters.
  16360. A filter allows to select a different logging level for a given category of
  16361. logs The format for a filter is one of:
  16362. @itemize @bullet
  16363. @item
  16364. x:nom
  16365. @item
  16366. x:+nom
  16367. @end itemize
  16368. where @code{name} is a string which is matched against the category given in
  16369. the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
  16370. "remote", "qemu", or "util.json" (the name in the filter can be a substring
  16371. of the full category name, in order to match multiple similar categories),
  16372. the optional "+" prefix tells libvirt to log stack trace for each message
  16373. matching name, and @code{x} is the minimal level where matching messages
  16374. should be logged:
  16375. @itemize @bullet
  16376. @item
  16377. 1: DEBUG
  16378. @item
  16379. 2: INFO
  16380. @item
  16381. 3: WARNING
  16382. @item
  16383. 4: ERROR
  16384. @end itemize
  16385. Multiple filters can be defined in a single filters statement, they just
  16386. need to be separated by spaces.
  16387. La valeur par défaut est @samp{"3:remote 4:event"}.
  16388. @end deftypevr
  16389. @deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
  16390. Logging outputs.
  16391. An output is one of the places to save logging information The format for an
  16392. output can be:
  16393. @table @code
  16394. @item x:stderr
  16395. output goes to stderr
  16396. @item x:syslog:name
  16397. use syslog for the output and use the given name as the ident
  16398. @item x:file:file_path
  16399. output to a file, with the given filepath
  16400. @item x:journald
  16401. output to journald logging system
  16402. @end table
  16403. In all case the x prefix is the minimal level, acting as a filter
  16404. @itemize @bullet
  16405. @item
  16406. 1: DEBUG
  16407. @item
  16408. 2: INFO
  16409. @item
  16410. 3: WARNING
  16411. @item
  16412. 4: ERROR
  16413. @end itemize
  16414. Multiple outputs can be defined, they just need to be separated by spaces.
  16415. La valeur par défaut est @samp{"3:stderr"}.
  16416. @end deftypevr
  16417. @deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
  16418. Nombre maximum de connexions clientes en même temps sur tous les sockets.
  16419. La valeur par défaut est @samp{1024}.
  16420. @end deftypevr
  16421. @deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
  16422. Maximum file size before rolling over.
  16423. La valeur par défaut est @samp{2MB}.
  16424. @end deftypevr
  16425. @deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
  16426. Maximum number of backup files to keep.
  16427. La valeur par défaut est @samp{3}.
  16428. @end deftypevr
  16429. @subsubheading Émulation transparente avec QEMU
  16430. @cindex émulation
  16431. @cindex @code{binfmt_misc}
  16432. @code{qemu-binfmt-service-type} provides support for transparent emulation
  16433. of program binaries built for different architectures---e.g., it allows you
  16434. to transparently execute an ARMv7 program on an x86_64 machine. It achieves
  16435. this by combining the @uref{https://www.qemu.org, QEMU} emulator and the
  16436. @code{binfmt_misc} feature of the kernel Linux.
  16437. @defvr {Variable Scheme} qemu-binfmt-service-type
  16438. This is the type of the QEMU/binfmt service for transparent emulation. Its
  16439. value must be a @code{qemu-binfmt-configuration} object, which specifies the
  16440. QEMU package to use as well as the architecture we want to emulated:
  16441. @example
  16442. (service qemu-binfmt-service-type
  16443. (qemu-binfmt-configuration
  16444. (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
  16445. @end example
  16446. In this example, we enable transparent emulation for the ARM and aarch64
  16447. platforms. Running @code{herd stop qemu-binfmt} turns it off, and running
  16448. @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the
  16449. @command{herd} command,, shepherd, The GNU Shepherd Manual}).
  16450. @end defvr
  16451. @deftp {Type de données} qemu-binfmt-configuration
  16452. This is the configuration for the @code{qemu-binfmt} service.
  16453. @table @asis
  16454. @item @code{platforms} (par défaut : @code{'()})
  16455. The list of emulated QEMU platforms. Each item must be a @dfn{platform
  16456. object} as returned by @code{lookup-qemu-platforms} (see below).
  16457. @item @code{guix-support?} (par défaut : @code{#f})
  16458. When it is true, QEMU and all its dependencies are added to the build
  16459. environment of @command{guix-daemon} (@pxref{Invoquer guix-daemon,
  16460. @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
  16461. handlers to be used within the build environment, which in turn means that
  16462. you can transparently build programs for another architecture.
  16463. For example, let's suppose you're on an x86_64 machine and you have this
  16464. service:
  16465. @example
  16466. (service qemu-binfmt-service-type
  16467. (qemu-binfmt-configuration
  16468. (platforms (lookup-qemu-platforms "arm"))
  16469. (guix-support? #t)))
  16470. @end example
  16471. Vous pouvez lancer :
  16472. @example
  16473. guix build -s armhf-linux inkscape
  16474. @end example
  16475. @noindent
  16476. and it will build Inkscape for ARMv7 @emph{as if it were a native build},
  16477. transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd
  16478. like to test a package build for an architecture you don't have access to!
  16479. @item @code{qemu} (par défaut : @code{qemu})
  16480. Le paquet QEMU à utiliser.
  16481. @end table
  16482. @end deftp
  16483. @deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
  16484. Return the list of QEMU platform objects corresponding to
  16485. @var{platforms}@dots{}. @var{platforms} must be a list of strings
  16486. corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
  16487. @code{"mips64el"}, and so on.
  16488. @end deffn
  16489. @deffn {Procédure Scheme} qemu-platform? @var{obj}
  16490. Return true if @var{obj} is a platform object.
  16491. @end deffn
  16492. @deffn {Procédure Scheme} qemu-platform-name @var{platform}
  16493. Return the name of @var{platform}---a string such as @code{"arm"}.
  16494. @end deffn
  16495. @node Services de contrôle de version
  16496. @subsubsection Services de contrôle de version
  16497. The @code{(gnu services version-control)} module provides a service to allow
  16498. remote access to local Git repositories. There are three options: the
  16499. @code{git-daemon-service}, which provides access to repositories via the
  16500. @code{git://} unsecured TCP-based protocol, extending the @code{nginx} web
  16501. server to proxy some requests to @code{git-http-backend}, or providing a web
  16502. interface with @code{cgit-service-type}.
  16503. @deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
  16504. Return a service that runs @command{git daemon}, a simple TCP server to
  16505. expose repositories over the Git protocol for anonymous access.
  16506. The optional @var{config} argument should be a
  16507. @code{<git-daemon-configuration>} object, by default it allows read-only
  16508. access to exported@footnote{By creating the magic file
  16509. "git-daemon-export-ok" in the repository directory.} repositories under
  16510. @file{/srv/git}.
  16511. @end deffn
  16512. @deftp {Type de données} git-daemon-configuration
  16513. Data type representing the configuration for @code{git-daemon-service}.
  16514. @table @asis
  16515. @item @code{package} (par défaut : @var{git})
  16516. Package object of the Git distributed version control system.
  16517. @item @code{export-all?} (par défaut : @var{#f})
  16518. Whether to allow access for all Git repositories, even if they do not have
  16519. the @file{git-daemon-export-ok} file.
  16520. @item @code{base-path} (par défaut : @file{/srv/git})
  16521. Whether to remap all the path requests as relative to the given path. If
  16522. you run git daemon with @var{(base-path "/srv/git")} on example.com, then if
  16523. you later try to pull @code{git://example.com/hello.git}, git daemon will
  16524. interpret the path as @code{/srv/git/hello.git}.
  16525. @item @code{user-path} (par défaut : @var{#f})
  16526. Whether to allow @code{~user} notation to be used in requests. When
  16527. specified with empty string, requests to @code{git://host/~alice/foo} is
  16528. taken as a request to access @code{foo} repository in the home directory of
  16529. user @code{alice}. If @var{(user-path "path")} is specified, the same
  16530. request is taken as a request to access @code{path/foo} repository in the
  16531. home directory of user @code{alice}.
  16532. @item @code{listen} (par défaut : @var{'()})
  16533. Whether to listen on specific IP addresses or hostnames, defaults to all.
  16534. @item @code{port} (par défaut : @var{#f})
  16535. Whether to listen on an alternative port, which defaults to 9418.
  16536. @item @code{whitelist} (par défaut : @var{'()})
  16537. If not empty, only allow access to this list of directories.
  16538. @item @code{extra-options} (par défaut : @var{'()})
  16539. Extra options will be passed to @code{git daemon}, please run @command{man
  16540. git-daemon} for more information.
  16541. @end table
  16542. @end deftp
  16543. The @code{git://} protocol lacks authentication. When you pull from a
  16544. repository fetched via @code{git://}, you don't know that the data you
  16545. receive was modified is really coming from the specified host, and you have
  16546. your connection is subject to eavesdropping. It's better to use an
  16547. authenticated and encrypted transport, such as @code{https}. Although Git
  16548. allows you to serve repositories using unsophisticated file-based web
  16549. servers, there is a faster protocol implemented by the
  16550. @code{git-http-backend} program. This program is the back-end of a proper
  16551. Git web service. It is designed to sit behind a FastCGI proxy. @xref{Services web}, for more on running the necessary @code{fcgiwrap} daemon.
  16552. Guix has a separate configuration data type for serving Git repositories
  16553. over HTTP.
  16554. @deftp {Type de données} git-http-configuration
  16555. Data type representing the configuration for @code{git-http-service}.
  16556. @table @asis
  16557. @item @code{package} (par défaut : @var{git})
  16558. Package object of the Git distributed version control system.
  16559. @item @code{git-root} (par défaut : @file{/srv/git})
  16560. Directory containing the Git repositories to expose to the world.
  16561. @item @code{export-all?} (par défaut : @var{#f})
  16562. Whether to expose access for all Git repositories in @var{git-root}, even if
  16563. they do not have the @file{git-daemon-export-ok} file.
  16564. @item @code{uri-path} (par défaut : @file{/git/})
  16565. Path prefix for Git access. With the default @code{/git/} prefix, this will
  16566. map @code{http://@var{server}/git/@var{repo}.git} to
  16567. @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with
  16568. this prefix are not passed on to this Git instance.
  16569. @item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
  16570. The socket on which the @code{fcgiwrap} daemon is listening. @xref{Services web}.
  16571. @end table
  16572. @end deftp
  16573. There is no @code{git-http-service-type}, currently; instead you can create
  16574. an @code{nginx-location-configuration} from a @code{git-http-configuration}
  16575. and then add that location to a web server.
  16576. @deffn {Procédure Scheme} git-http-nginx-location-configuration @
  16577. [config=(git-http-configuration)] Compute an
  16578. @code{nginx-location-configuration} that corresponds to the given Git http
  16579. configuration. An example nginx service definition to serve the default
  16580. @file{/srv/git} over HTTPS might be:
  16581. @example
  16582. (service nginx-service-type
  16583. (nginx-configuration
  16584. (server-blocks
  16585. (list
  16586. (nginx-server-configuration
  16587. (listen '("443 ssl"))
  16588. (server-name "git.my-host.org")
  16589. (ssl-certificate
  16590. "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
  16591. (ssl-certificate-key
  16592. "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
  16593. (locations
  16594. (list
  16595. (git-http-nginx-location-configuration
  16596. (git-http-configuration (uri-path "/"))))))))))
  16597. @end example
  16598. This example assumes that you are using Let's Encrypt to get your TLS
  16599. certificate. @xref{Services de certificats}. The default @code{certbot}
  16600. service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS.
  16601. You will also need to add an @code{fcgiwrap} proxy to your system services.
  16602. @xref{Services web}.
  16603. @end deffn
  16604. @subsubheading Service Cgit
  16605. @cindex service cgit
  16606. @cindex git, interface web
  16607. @uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
  16608. dépôts Git écrite en C.
  16609. The following example will configure the service with default values. By
  16610. default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
  16611. @example
  16612. (service cgit-service-type)
  16613. @end example
  16614. The @code{file-object} type designates either a file-like object
  16615. (@pxref{G-Expressions, file-like objects}) or a string.
  16616. @c %start of fragment
  16617. Les champs de @code{cgit-configuration} disponibles sont :
  16618. @deftypevr {paramètre de @code{cgit-configuration}} package package
  16619. Le paquet cgit.
  16620. @end deftypevr
  16621. @deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
  16622. Configuration Nginx.
  16623. @end deftypevr
  16624. @deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
  16625. Specifies a command which will be invoked to format the content of about
  16626. pages (both top-level and for each repository).
  16627. La valeur par défaut est @samp{""}.
  16628. @end deftypevr
  16629. @deftypevr {paramètre de @code{cgit-configuration}} string agefile
  16630. Specifies a path, relative to each repository path, which can be used to
  16631. specify the date and time of the youngest commit in the repository.
  16632. La valeur par défaut est @samp{""}.
  16633. @end deftypevr
  16634. @deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
  16635. Specifies a command that will be invoked for authenticating repository
  16636. access.
  16637. La valeur par défaut est @samp{""}.
  16638. @end deftypevr
  16639. @deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
  16640. Flag which, when set to @samp{age}, enables date ordering in the branch ref
  16641. list, and when set @samp{name} enables ordering by branch name.
  16642. La valeur par défaut est @samp{"name"}.
  16643. @end deftypevr
  16644. @deftypevr {paramètre de @code{cgit-configuration}} string cache-root
  16645. Path used to store the cgit cache entries.
  16646. La valeur par défaut est @samp{"/var/cache/cgit"}.
  16647. @end deftypevr
  16648. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
  16649. Number which specifies the time-to-live, in minutes, for the cached version
  16650. of repository pages accessed with a fixed SHA1.
  16651. La valeur par défaut est @samp{-1}.
  16652. @end deftypevr
  16653. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
  16654. Number which specifies the time-to-live, in minutes, for the cached version
  16655. of repository pages accessed without a fixed SHA1.
  16656. La valeur par défaut est @samp{5}.
  16657. @end deftypevr
  16658. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
  16659. Number which specifies the time-to-live, in minutes, for the cached version
  16660. of the repository summary page.
  16661. La valeur par défaut est @samp{5}.
  16662. @end deftypevr
  16663. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
  16664. Number which specifies the time-to-live, in minutes, for the cached version
  16665. of the repository index page.
  16666. La valeur par défaut est @samp{5}.
  16667. @end deftypevr
  16668. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
  16669. Number which specifies the time-to-live, in minutes, for the result of
  16670. scanning a path for Git repositories.
  16671. La valeur par défaut est @samp{15}.
  16672. @end deftypevr
  16673. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
  16674. Number which specifies the time-to-live, in minutes, for the cached version
  16675. of the repository about page.
  16676. La valeur par défaut est @samp{15}.
  16677. @end deftypevr
  16678. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
  16679. Number which specifies the time-to-live, in minutes, for the cached version
  16680. of snapshots.
  16681. La valeur par défaut est @samp{5}.
  16682. @end deftypevr
  16683. @deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
  16684. The maximum number of entries in the cgit cache. When set to @samp{0},
  16685. caching is disabled.
  16686. La valeur par défaut est @samp{0}.
  16687. @end deftypevr
  16688. @deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
  16689. Sort items in the repo list case sensitively.
  16690. La valeur par défaut est @samp{#t}.
  16691. @end deftypevr
  16692. @deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
  16693. List of common prefixes which, when combined with a repository URL,
  16694. generates valid clone URLs for the repository.
  16695. La valeur par défaut est @samp{()}.
  16696. @end deftypevr
  16697. @deftypevr {paramètre de @code{cgit-configuration}} list clone-url
  16698. List of @code{clone-url} templates.
  16699. La valeur par défaut est @samp{()}.
  16700. @end deftypevr
  16701. @deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
  16702. Command which will be invoked to format commit messages.
  16703. La valeur par défaut est @samp{""}.
  16704. @end deftypevr
  16705. @deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
  16706. Flag which, when set to @samp{date}, enables strict date ordering in the
  16707. commit log, and when set to @samp{topo} enables strict topological ordering.
  16708. La valeur par défaut est @samp{"git log"}.
  16709. @end deftypevr
  16710. @deftypevr {paramètre de @code{cgit-configuration}} file-object css
  16711. URL which specifies the css document to include in all cgit pages.
  16712. La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
  16713. @end deftypevr
  16714. @deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
  16715. Specifies a command which will be invoked to format names and email address
  16716. of committers, authors, and taggers, as represented in various places
  16717. throughout the cgit interface.
  16718. La valeur par défaut est @samp{""}.
  16719. @end deftypevr
  16720. @deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
  16721. Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment
  16722. suitable for embedding in other HTML pages.
  16723. La valeur par défaut est @samp{#f}.
  16724. @end deftypevr
  16725. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
  16726. Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit
  16727. history graph to the left of the commit messages in the repository log page.
  16728. La valeur par défaut est @samp{#f}.
  16729. @end deftypevr
  16730. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
  16731. Flag which, when set to @samp{#t}, allows all filter settings to be
  16732. overridden in repository-specific cgitrc files.
  16733. La valeur par défaut est @samp{#f}.
  16734. @end deftypevr
  16735. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
  16736. Flag which, when set to @samp{#t}, allows users to follow a file in the log
  16737. view.
  16738. La valeur par défaut est @samp{#f}.
  16739. @end deftypevr
  16740. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
  16741. If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones.
  16742. La valeur par défaut est @samp{#t}.
  16743. @end deftypevr
  16744. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
  16745. Flag which, when set to @samp{#t}, will make cgit generate extra links
  16746. "summary", "commit", "tree" for each repo in the repository index.
  16747. La valeur par défaut est @samp{#f}.
  16748. @end deftypevr
  16749. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
  16750. Flag which, when set to @samp{#t}, will make cgit display the owner of each
  16751. repo in the repository index.
  16752. La valeur par défaut est @samp{#t}.
  16753. @end deftypevr
  16754. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
  16755. Flag which, when set to @samp{#t}, will make cgit print the number of
  16756. modified files for each commit on the repository log page.
  16757. La valeur par défaut est @samp{#f}.
  16758. @end deftypevr
  16759. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
  16760. Flag which, when set to @samp{#t}, will make cgit print the number of added
  16761. and removed lines for each commit on the repository log page.
  16762. La valeur par défaut est @samp{#f}.
  16763. @end deftypevr
  16764. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
  16765. Flag which, when set to @code{#t}, will make cgit display remote branches in
  16766. the summary and refs views.
  16767. La valeur par défaut est @samp{#f}.
  16768. @end deftypevr
  16769. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
  16770. Flag which, when set to @code{1}, will make cgit use the subject of the
  16771. parent commit as link text when generating links to parent commits in commit
  16772. view.
  16773. La valeur par défaut est @samp{#f}.
  16774. @end deftypevr
  16775. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
  16776. Flag which, when set to @samp{#t}, will make cgit use the subject of the
  16777. parent commit as link text when generating links to parent commits in commit
  16778. view.
  16779. La valeur par défaut est @samp{#f}.
  16780. @end deftypevr
  16781. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
  16782. Flag which, when set to @samp{#t}, will make cgit generate linenumber links
  16783. for plaintext blobs printed in the tree view.
  16784. La valeur par défaut est @samp{#t}.
  16785. @end deftypevr
  16786. @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
  16787. Flag which, when set to @samp{#f}, will allow cgit to use Git config to set
  16788. any repo specific settings.
  16789. La valeur par défaut est @samp{#f}.
  16790. @end deftypevr
  16791. @deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
  16792. URL used as link to a shortcut icon for cgit.
  16793. La valeur par défaut est @samp{"/favicon.ico"}.
  16794. @end deftypevr
  16795. @deftypevr {paramètre de @code{cgit-configuration}} string footer
  16796. The content of the file specified with this option will be included verbatim
  16797. at the bottom of all pages (i.e.@: it replaces the standard "generated
  16798. by..."@: message).
  16799. La valeur par défaut est @samp{""}.
  16800. @end deftypevr
  16801. @deftypevr {paramètre de @code{cgit-configuration}} string head-include
  16802. The content of the file specified with this option will be included verbatim
  16803. in the HTML HEAD section on all pages.
  16804. La valeur par défaut est @samp{""}.
  16805. @end deftypevr
  16806. @deftypevr {paramètre de @code{cgit-configuration}} string header
  16807. The content of the file specified with this option will be included verbatim
  16808. at the top of all pages.
  16809. La valeur par défaut est @samp{""}.
  16810. @end deftypevr
  16811. @deftypevr {paramètre de @code{cgit-configuration}} file-object include
  16812. Name of a configfile to include before the rest of the current config- file
  16813. is parsed.
  16814. La valeur par défaut est @samp{""}.
  16815. @end deftypevr
  16816. @deftypevr {paramètre de @code{cgit-configuration}} string index-header
  16817. The content of the file specified with this option will be included verbatim
  16818. above the repository index.
  16819. La valeur par défaut est @samp{""}.
  16820. @end deftypevr
  16821. @deftypevr {paramètre de @code{cgit-configuration}} string index-info
  16822. The content of the file specified with this option will be included verbatim
  16823. below the heading on the repository index page.
  16824. La valeur par défaut est @samp{""}.
  16825. @end deftypevr
  16826. @deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
  16827. Flag which, if set to @samp{#t}, makes cgit print commit and tag times in
  16828. the servers timezone.
  16829. La valeur par défaut est @samp{#f}.
  16830. @end deftypevr
  16831. @deftypevr {paramètre de @code{cgit-configuration}} file-object logo
  16832. URL which specifies the source of an image which will be used as a logo on
  16833. all cgit pages.
  16834. La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
  16835. @end deftypevr
  16836. @deftypevr {paramètre de @code{cgit-configuration}} string logo-link
  16837. URL loaded when clicking on the cgit logo image.
  16838. La valeur par défaut est @samp{""}.
  16839. @end deftypevr
  16840. @deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
  16841. Command which will be invoked to format the Owner column of the main page.
  16842. La valeur par défaut est @samp{""}.
  16843. @end deftypevr
  16844. @deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
  16845. Number of items to display in atom feeds view.
  16846. La valeur par défaut est @samp{10}.
  16847. @end deftypevr
  16848. @deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
  16849. Number of entries to list per page in "log" view.
  16850. La valeur par défaut est @samp{50}.
  16851. @end deftypevr
  16852. @deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
  16853. Number of commit message characters to display in "log" view.
  16854. La valeur par défaut est @samp{80}.
  16855. @end deftypevr
  16856. @deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
  16857. Specifies the number of entries to list per page on the repository index
  16858. page.
  16859. La valeur par défaut est @samp{50}.
  16860. @end deftypevr
  16861. @deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
  16862. Specifies the maximum number of repo description characters to display on
  16863. the repository index page.
  16864. La valeur par défaut est @samp{80}.
  16865. @end deftypevr
  16866. @deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
  16867. Specifies the maximum size of a blob to display HTML for in KBytes.
  16868. La valeur par défaut est @samp{0}.
  16869. @end deftypevr
  16870. @deftypevr {paramètre de @code{cgit-configuration}} string max-stats
  16871. Maximum statistics period. Valid values are @samp{week},@samp{month},
  16872. @samp{quarter} and @samp{year}.
  16873. La valeur par défaut est @samp{""}.
  16874. @end deftypevr
  16875. @deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
  16876. Mimetype for the specified filename extension.
  16877. La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
  16878. "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
  16879. (svg "image/svg+xml"))}.
  16880. @end deftypevr
  16881. @deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
  16882. Specifies the file to use for automatic mimetype lookup.
  16883. La valeur par défaut est @samp{""}.
  16884. @end deftypevr
  16885. @deftypevr {paramètre de @code{cgit-configuration}} string module-link
  16886. Text which will be used as the formatstring for a hyperlink when a submodule
  16887. is printed in a directory listing.
  16888. La valeur par défaut est @samp{""}.
  16889. @end deftypevr
  16890. @deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
  16891. If set to the value @samp{#t} caching will be disabled.
  16892. La valeur par défaut est @samp{#f}.
  16893. @end deftypevr
  16894. @deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
  16895. If set to @samp{#t} showing full author email addresses will be disabled.
  16896. La valeur par défaut est @samp{#f}.
  16897. @end deftypevr
  16898. @deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
  16899. Flag which, when set to @samp{#t}, will make cgit omit the standard header
  16900. on all pages.
  16901. La valeur par défaut est @samp{#f}.
  16902. @end deftypevr
  16903. @deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
  16904. A list of subdirectories inside of @code{repository-directory}, relative to
  16905. it, that should loaded as Git repositories. An empty list means that all
  16906. subdirectories will be loaded.
  16907. La valeur par défaut est @samp{()}.
  16908. @end deftypevr
  16909. @deftypevr {paramètre de @code{cgit-configuration}} file-object readme
  16910. Text which will be used as default value for @code{cgit-repo-readme}.
  16911. La valeur par défaut est @samp{""}.
  16912. @end deftypevr
  16913. @deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
  16914. If set to @code{#t} and @code{repository-directory} is enabled, if any
  16915. repositories are found with a suffix of @code{.git}, this suffix will be
  16916. removed for the URL and name.
  16917. La valeur par défaut est @samp{#f}.
  16918. @end deftypevr
  16919. @deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
  16920. Maximum number of files to consider when detecting renames.
  16921. La valeur par défaut est @samp{-1}.
  16922. @end deftypevr
  16923. @deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
  16924. The way in which repositories in each section are sorted.
  16925. La valeur par défaut est @samp{""}.
  16926. @end deftypevr
  16927. @deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
  16928. Text used as content for the @code{robots} meta-tag.
  16929. La valeur par défaut est @samp{("noindex" "nofollow")}.
  16930. @end deftypevr
  16931. @deftypevr {paramètre de @code{cgit-configuration}} string root-desc
  16932. Text printed below the heading on the repository index page.
  16933. La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
  16934. @end deftypevr
  16935. @deftypevr {paramètre de @code{cgit-configuration}} string root-readme
  16936. The content of the file specified with this option will be included verbatim
  16937. below thef "about" link on the repository index page.
  16938. La valeur par défaut est @samp{""}.
  16939. @end deftypevr
  16940. @deftypevr {paramètre de @code{cgit-configuration}} string root-title
  16941. Text printed as heading on the repository index page.
  16942. La valeur par défaut est @samp{""}.
  16943. @end deftypevr
  16944. @deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
  16945. If set to @samp{#t} and repository-directory is enabled,
  16946. repository-directory will recurse into directories whose name starts with a
  16947. period. Otherwise, repository-directory will stay away from such
  16948. directories, considered as "hidden". Note that this does not apply to the
  16949. ".git" directory in non-bare repos.
  16950. La valeur par défaut est @samp{#f}.
  16951. @end deftypevr
  16952. @deftypevr {paramètre de @code{cgit-configuration}} list snapshots
  16953. Text which specifies the default set of snapshot formats that cgit generates
  16954. links for.
  16955. La valeur par défaut est @samp{()}.
  16956. @end deftypevr
  16957. @deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
  16958. Name of the directory to scan for repositories (represents
  16959. @code{scan-path}).
  16960. La valeur par défaut est @samp{"/srv/git"}.
  16961. @end deftypevr
  16962. @deftypevr {paramètre de @code{cgit-configuration}} string section
  16963. The name of the current repository section - all repositories defined after
  16964. this option will inherit the current section name.
  16965. La valeur par défaut est @samp{""}.
  16966. @end deftypevr
  16967. @deftypevr {paramètre de @code{cgit-configuration}} string section-sort
  16968. Flag which, when set to @samp{1}, will sort the sections on the repository
  16969. listing by name.
  16970. La valeur par défaut est @samp{""}.
  16971. @end deftypevr
  16972. @deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
  16973. A number which, if defined prior to repository-directory, specifies how many
  16974. path elements from each repo path to use as a default section name.
  16975. La valeur par défaut est @samp{0}.
  16976. @end deftypevr
  16977. @deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
  16978. If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
  16979. default.
  16980. La valeur par défaut est @samp{#f}.
  16981. @end deftypevr
  16982. @deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
  16983. Specifies a command which will be invoked to format plaintext blobs in the
  16984. tree view.
  16985. La valeur par défaut est @samp{""}.
  16986. @end deftypevr
  16987. @deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
  16988. Specifies the number of branches to display in the repository "summary"
  16989. view.
  16990. La valeur par défaut est @samp{10}.
  16991. @end deftypevr
  16992. @deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
  16993. Specifies the number of log entries to display in the repository "summary"
  16994. view.
  16995. La valeur par défaut est @samp{10}.
  16996. @end deftypevr
  16997. @deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
  16998. Specifies the number of tags to display in the repository "summary" view.
  16999. La valeur par défaut est @samp{10}.
  17000. @end deftypevr
  17001. @deftypevr {paramètre de @code{cgit-configuration}} string strict-export
  17002. Filename which, if specified, needs to be present within the repository for
  17003. cgit to allow access to that repository.
  17004. La valeur par défaut est @samp{""}.
  17005. @end deftypevr
  17006. @deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
  17007. URL which, if specified, will be used as root for all cgit links.
  17008. La valeur par défaut est @samp{"/"}.
  17009. @end deftypevr
  17010. @deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
  17011. A list of @dfn{cgit-repo} records to use with config.
  17012. La valeur par défaut est @samp{()}.
  17013. Les champs de @code{repository-cgit-configuration} disponibles sont :
  17014. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
  17015. A mask of snapshot formats for this repo that cgit generates links for,
  17016. restricted by the global @code{snapshots} setting.
  17017. La valeur par défaut est @samp{()}.
  17018. @end deftypevr
  17019. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
  17020. Override the default @code{source-filter}.
  17021. La valeur par défaut est @samp{""}.
  17022. @end deftypevr
  17023. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
  17024. The relative URL used to access the repository.
  17025. La valeur par défaut est @samp{""}.
  17026. @end deftypevr
  17027. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
  17028. Override the default @code{about-filter}.
  17029. La valeur par défaut est @samp{""}.
  17030. @end deftypevr
  17031. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
  17032. Flag which, when set to @samp{age}, enables date ordering in the branch ref
  17033. list, and when set to @samp{name} enables ordering by branch name.
  17034. La valeur par défaut est @samp{""}.
  17035. @end deftypevr
  17036. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
  17037. A list of URLs which can be used to clone repo.
  17038. La valeur par défaut est @samp{()}.
  17039. @end deftypevr
  17040. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
  17041. Override the default @code{commit-filter}.
  17042. La valeur par défaut est @samp{""}.
  17043. @end deftypevr
  17044. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
  17045. Flag which, when set to @samp{date}, enables strict date ordering in the
  17046. commit log, and when set to @samp{topo} enables strict topological ordering.
  17047. La valeur par défaut est @samp{""}.
  17048. @end deftypevr
  17049. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
  17050. The name of the default branch for this repository. If no such branch
  17051. exists in the repository, the first branch name (when sorted) is used as
  17052. default instead. By default branch pointed to by HEAD, or "master" if there
  17053. is no suitable HEAD.
  17054. La valeur par défaut est @samp{""}.
  17055. @end deftypevr
  17056. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
  17057. The value to show as repository description.
  17058. La valeur par défaut est @samp{""}.
  17059. @end deftypevr
  17060. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
  17061. The value to show as repository homepage.
  17062. La valeur par défaut est @samp{""}.
  17063. @end deftypevr
  17064. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
  17065. Override the default @code{email-filter}.
  17066. La valeur par défaut est @samp{""}.
  17067. @end deftypevr
  17068. @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-commit-graph?
  17069. A flag which can be used to disable the global setting
  17070. @code{enable-commit-graph?}.
  17071. La valeur par défaut est @samp{disabled}.
  17072. @end deftypevr
  17073. @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-filecount?
  17074. A flag which can be used to disable the global setting
  17075. @code{enable-log-filecount?}.
  17076. La valeur par défaut est @samp{disabled}.
  17077. @end deftypevr
  17078. @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-linecount?
  17079. A flag which can be used to disable the global setting
  17080. @code{enable-log-linecount?}.
  17081. La valeur par défaut est @samp{disabled}.
  17082. @end deftypevr
  17083. @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-remote-branches?
  17084. Flag which, when set to @code{#t}, will make cgit display remote branches in
  17085. the summary and refs views.
  17086. La valeur par défaut est @samp{disabled}.
  17087. @end deftypevr
  17088. @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-subject-links?
  17089. A flag which can be used to override the global setting
  17090. @code{enable-subject-links?}.
  17091. La valeur par défaut est @samp{disabled}.
  17092. @end deftypevr
  17093. @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-html-serving?
  17094. A flag which can be used to override the global setting
  17095. @code{enable-html-serving?}.
  17096. La valeur par défaut est @samp{disabled}.
  17097. @end deftypevr
  17098. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
  17099. Flag which, when set to @code{#t}, hides the repository from the repository
  17100. index.
  17101. La valeur par défaut est @samp{#f}.
  17102. @end deftypevr
  17103. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
  17104. Flag which, when set to @samp{#t}, ignores the repository.
  17105. La valeur par défaut est @samp{#f}.
  17106. @end deftypevr
  17107. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
  17108. URL which specifies the source of an image which will be used as a logo on
  17109. this repo’s pages.
  17110. La valeur par défaut est @samp{""}.
  17111. @end deftypevr
  17112. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
  17113. URL loaded when clicking on the cgit logo image.
  17114. La valeur par défaut est @samp{""}.
  17115. @end deftypevr
  17116. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
  17117. Override the default @code{owner-filter}.
  17118. La valeur par défaut est @samp{""}.
  17119. @end deftypevr
  17120. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
  17121. Text which will be used as the formatstring for a hyperlink when a submodule
  17122. is printed in a directory listing. The arguments for the formatstring are
  17123. the path and SHA1 of the submodule commit.
  17124. La valeur par défaut est @samp{""}.
  17125. @end deftypevr
  17126. @deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
  17127. Text which will be used as the formatstring for a hyperlink when a submodule
  17128. with the specified subdirectory path is printed in a directory listing.
  17129. La valeur par défaut est @samp{()}.
  17130. @end deftypevr
  17131. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
  17132. Override the default maximum statistics period.
  17133. La valeur par défaut est @samp{""}.
  17134. @end deftypevr
  17135. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
  17136. The value to show as repository name.
  17137. La valeur par défaut est @samp{""}.
  17138. @end deftypevr
  17139. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
  17140. A value used to identify the owner of the repository.
  17141. La valeur par défaut est @samp{""}.
  17142. @end deftypevr
  17143. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
  17144. An absolute path to the repository directory.
  17145. La valeur par défaut est @samp{""}.
  17146. @end deftypevr
  17147. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
  17148. A path (relative to repo) which specifies a file to include verbatim as the
  17149. "About" page for this repo.
  17150. La valeur par défaut est @samp{""}.
  17151. @end deftypevr
  17152. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
  17153. The name of the current repository section - all repositories defined after
  17154. this option will inherit the current section name.
  17155. La valeur par défaut est @samp{""}.
  17156. @end deftypevr
  17157. @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
  17158. Extra options will be appended to cgitrc file.
  17159. La valeur par défaut est @samp{()}.
  17160. @end deftypevr
  17161. @end deftypevr
  17162. @deftypevr {paramètre de @code{cgit-configuration}} list extra-options
  17163. Extra options will be appended to cgitrc file.
  17164. La valeur par défaut est @samp{()}.
  17165. @end deftypevr
  17166. @c %end of fragment
  17167. However, it could be that you just want to get a @code{cgitrc} up and
  17168. running. In that case, you can pass an @code{opaque-cgit-configuration} as
  17169. a record to @code{cgit-service-type}. As its name indicates, an opaque
  17170. configuration does not have easy reflective capabilities.
  17171. Les champs de @code{opaque-cgit-configuration} disponibles sont :
  17172. @deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
  17173. The cgit package.
  17174. @end deftypevr
  17175. @deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
  17176. The contents of the @code{cgitrc}, as a string.
  17177. @end deftypevr
  17178. For example, if your @code{cgitrc} is just the empty string, you could
  17179. instantiate a cgit service like this:
  17180. @example
  17181. (service cgit-service-type
  17182. (opaque-cgit-configuration
  17183. (cgitrc "")))
  17184. @end example
  17185. @subsubheading Service Gitolite
  17186. @cindex service Gitolite
  17187. @cindex Git, hébergement
  17188. @uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
  17189. repositories on a central server.
  17190. Gitolite can handle multiple repositories and users, and supports flexible
  17191. configuration of the permissions for the users on the repositories.
  17192. The following example will configure Gitolite using the default @code{git}
  17193. user, and the provided SSH public key.
  17194. @example
  17195. (service gitolite-service-type
  17196. (gitolite-configuration
  17197. (admin-pubkey (plain-file
  17198. "yourname.pub"
  17199. "ssh-rsa AAAA... guix@@example.com"))))
  17200. @end example
  17201. Gitolite is configured through a special admin repository which you can
  17202. clone, for example, if you setup Gitolite on @code{example.com}, you would
  17203. run the following command to clone the admin repository.
  17204. @example
  17205. git clone git@@example.com:gitolite-admin
  17206. @end example
  17207. When the Gitolite service is activated, the provided @code{admin-pubkey}
  17208. will be inserted in to the @file{keydir} directory in the gitolite-admin
  17209. repository. If this results in a change in the repository, it will be
  17210. committed using the message ``gitolite setup by GNU Guix''.
  17211. @deftp {Type de données} gitolite-configuration
  17212. Type de données représentant la configuration de
  17213. @code{gitolite-service-type}.
  17214. @table @asis
  17215. @item @code{package} (par défaut : @var{gitolite})
  17216. Le paquet Gitolite à utiliser.
  17217. @item @code{user} (par défaut : @var{git})
  17218. User to use for Gitolite. This will be user that you use when accessing
  17219. Gitolite over SSH.
  17220. @item @code{group} (par défaut : @var{git})
  17221. Groupe à utiliser pour Gitolite.
  17222. @item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
  17223. Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
  17224. @item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
  17225. Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
  17226. représentant la configuration de Gitolite.
  17227. @item @code{admin-pubkey} (par défaut : @var{#f})
  17228. Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
  17229. utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
  17230. @file{keydir} dans le dépôt gitolite-admin.
  17231. To specify the SSH key as a string, use the @code{plain-file} function.
  17232. @example
  17233. (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
  17234. @end example
  17235. @end table
  17236. @end deftp
  17237. @deftp {Type de données} gitolite-rc-file
  17238. Type de données représentant le fichier RC de Gitolite.
  17239. @table @asis
  17240. @item @code{umask} (par défaut : @code{#o0077})
  17241. This controls the permissions Gitolite sets on the repositories and their
  17242. contents.
  17243. A value like @code{#o0027} will give read access to the group used by
  17244. Gitolite (by default: @code{git}). This is necessary when using Gitolite
  17245. with software like cgit or gitweb.
  17246. @item @code{git-config-keys} (par défaut : @code{""})
  17247. Gitolite allows you to set git config values using the "config"
  17248. keyword. This setting allows control over the config keys to accept.
  17249. @item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
  17250. Set the role names allowed to be used by users running the perms command.
  17251. @item @code{enable} (par défaut : @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
  17252. This setting controls the commands and features to enable within Gitolite.
  17253. @end table
  17254. @end deftp
  17255. @node Services de jeu
  17256. @subsubsection Services de jeu
  17257. @subsubheading The Battle for Wesnoth Service
  17258. @cindex wesnothd
  17259. @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn based
  17260. tactical strategy game, with several single player campaigns, and
  17261. multiplayer games (both networked and local).
  17262. @defvar {Variable Scheme} wesnothd-service-type
  17263. Service type for the wesnothd service. Its value must be a
  17264. @code{wesnothd-configuration} object. To run wesnothd in the default
  17265. configuration, instantiate it as:
  17266. @example
  17267. (service wesnothd-service-type)
  17268. @end example
  17269. @end defvar
  17270. @deftp {Type de données} wesnothd-configuration
  17271. Data type representing the configuration of @command{wesnothd}.
  17272. @table @asis
  17273. @item @code{package} (par défaut : @code{wesnoth-server})
  17274. The wesnoth server package to use.
  17275. @item @code{port} (par défaut : @code{15000})
  17276. The port to bind the server to.
  17277. @end table
  17278. @end deftp
  17279. @node Services divers
  17280. @subsubsection Services divers
  17281. @cindex fingerprint
  17282. @subsubheading Service d'empreintes digitales
  17283. Le module @code{(gnu services fingerprint)} fournit un service DBus pour
  17284. lire et identifier les empreintes digitales via un lecteur d'empreinte.
  17285. @defvr {Variable Scheme} fprintd-service-type
  17286. The service type for @command{fprintd}, which provides the fingerprint
  17287. reading capability.
  17288. @example
  17289. (service fprintd-service-type)
  17290. @end example
  17291. @end defvr
  17292. @cindex sysctl
  17293. @subsubheading System Control Service
  17294. The @code{(gnu services sysctl)} provides a service to configure kernel
  17295. parameters at boot.
  17296. @defvr {Variable Scheme} sysctl-service-type
  17297. The service type for @command{sysctl}, which modifies kernel parameters
  17298. under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated
  17299. as:
  17300. @example
  17301. (service sysctl-service-type
  17302. (sysctl-configuration
  17303. (settings '(("net.ipv4.ip_forward" . "1")))))
  17304. @end example
  17305. @end defvr
  17306. @deftp {Type de données} sysctl-configuration
  17307. The data type representing the configuration of @command{sysctl}.
  17308. @table @asis
  17309. @item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
  17310. The @command{sysctl} executable to use.
  17311. @item @code{settings} (par défaut : @code{'()})
  17312. An association list specifies kernel parameters and their values.
  17313. @end table
  17314. @end deftp
  17315. @cindex pcscd
  17316. @subsubheading PC/SC Smart Card Daemon Service
  17317. The @code{(gnu services security-token)} module provides the following
  17318. service to run @command{pcscd}, the PC/SC Smart Card Daemon.
  17319. @command{pcscd} is the daemon program for pcsc-lite and the MuscleCard
  17320. framework. It is a resource manager that coordinates communications with
  17321. smart card readers, smart cards and cryptographic tokens that are connected
  17322. to the system.
  17323. @defvr {Variable Scheme} pcscd-service-type
  17324. Le type de service pour le service @command{pcscd}. Sa valeur doit être un
  17325. objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
  17326. par défaut, instantiez-le avec :
  17327. @example
  17328. (service pcscd-service-type)
  17329. @end example
  17330. @end defvr
  17331. @deftp {Type de données} pcscd-configuration
  17332. Type de données représentant la configuration de @command{pcscd}.
  17333. @table @asis
  17334. @item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
  17335. Le paquet pcsc-lite qui fournit pcscd.
  17336. @item @code{usb-drivers} (par défaut : @code{(list ccid)})
  17337. List of packages that provide USB drivers to pcscd. Drivers are expected to
  17338. be under @file{pcsc/drivers} in the store directory of the package.
  17339. @end table
  17340. @end deftp
  17341. @cindex lirc
  17342. @subsubheading Lirc Service
  17343. The @code{(gnu services lirc)} module provides the following service.
  17344. @deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
  17345. [#:device #f] [#:driver #f] [#:config-file #f] @ [#:extra-options '()]
  17346. Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
  17347. decodes infrared signals from remote controls.
  17348. Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
  17349. file name) may be specified. See @command{lircd} manual for details.
  17350. Finally, @var{extra-options} is a list of additional command-line options
  17351. passed to @command{lircd}.
  17352. @end deffn
  17353. @cindex spice
  17354. @subsubheading Spice Service
  17355. The @code{(gnu services spice)} module provides the following service.
  17356. @deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
  17357. Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a
  17358. daemon that enables sharing the clipboard with a vm and setting the guest
  17359. display resolution when the graphical console window resizes.
  17360. @end deffn
  17361. @subsubsection Dictionary Services
  17362. @cindex dictionary
  17363. The @code{(gnu services dict)} module provides the following service:
  17364. @deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
  17365. Return a service that runs the @command{dicod} daemon, an implementation of
  17366. DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
  17367. The optional @var{config} argument specifies the configuration for
  17368. @command{dicod}, which should be a @code{<dicod-configuration>} object, by
  17369. default it serves the GNU Collaborative International Dictonary of English.
  17370. You can add @command{open localhost} to your @file{~/.dico} file to make
  17371. @code{localhost} the default server for @command{dico} client
  17372. (@pxref{Initialization File,,, dico, GNU Dico Manual}).
  17373. @end deffn
  17374. @deftp {Type de données} dicod-configuration
  17375. Data type representing the configuration of dicod.
  17376. @table @asis
  17377. @item @code{dico} (par défaut : @var{dico})
  17378. Package object of the GNU Dico dictionary server.
  17379. @item @code{interfaces} (par défaut : @var{'("localhost")})
  17380. This is the list of IP addresses and ports and possibly socket file names to
  17381. listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico
  17382. Manual}).
  17383. @item @code{handlers} (par défaut : @var{'()})
  17384. List of @code{<dicod-handler>} objects denoting handlers (module instances).
  17385. @item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
  17386. List of @code{<dicod-database>} objects denoting dictionaries to be served.
  17387. @end table
  17388. @end deftp
  17389. @deftp {Type de données} dicod-handler
  17390. Data type representing a dictionary handler (module instance).
  17391. @table @asis
  17392. @item @code{name}
  17393. Name of the handler (module instance).
  17394. @item @code{module} (par défaut : @var{#f})
  17395. Name of the dicod module of the handler (instance). If it is @code{#f}, the
  17396. module has the same name as the handler. (@pxref{Modules,,, dico, GNU Dico
  17397. Manual}).
  17398. @item @code{options}
  17399. List of strings or gexps representing the arguments for the module handler
  17400. @end table
  17401. @end deftp
  17402. @deftp {Type de données} dicod-database
  17403. Data type representing a dictionary database.
  17404. @table @asis
  17405. @item @code{name}
  17406. Name of the database, will be used in DICT commands.
  17407. @item @code{handler}
  17408. Name of the dicod handler (module instance) used by this database
  17409. (@pxref{Handlers,,, dico, GNU Dico Manual}).
  17410. @item @code{complex?} (par défaut : @var{#f})
  17411. Whether the database configuration complex. The complex configuration will
  17412. need a corresponding @code{<dicod-handler>} object, otherwise not.
  17413. @item @code{options}
  17414. List of strings or gexps representing the arguments for the database
  17415. (@pxref{Databases,,, dico, GNU Dico Manual}).
  17416. @end table
  17417. @end deftp
  17418. @defvr {Variable Scheme} %dicod-database:gcide
  17419. A @code{<dicod-database>} object serving the GNU Collaborative International
  17420. Dictionary of English using the @code{gcide} package.
  17421. @end defvr
  17422. The following is an example @code{dicod-service} configuration.
  17423. @example
  17424. (dicod-service #:config
  17425. (dicod-configuration
  17426. (handlers (list (dicod-handler
  17427. (name "wordnet")
  17428. (module "dictorg")
  17429. (options
  17430. (list #~(string-append "dbdir=" #$wordnet))))))
  17431. (databases (list (dicod-database
  17432. (name "wordnet")
  17433. (complex? #t)
  17434. (handler "wordnet")
  17435. (options '("database=wn")))
  17436. %dicod-database:gcide))))
  17437. @end example
  17438. @node Programmes setuid
  17439. @subsection Programmes setuid
  17440. @cindex setuid programs
  17441. Some programs need to run with ``root'' privileges, even when they are
  17442. launched by unprivileged users. A notorious example is the @command{passwd}
  17443. program, which users can run to change their password, and which needs to
  17444. access the @file{/etc/passwd} and @file{/etc/shadow} files---something
  17445. normally restricted to root, for obvious security reasons. To address that,
  17446. these executables are @dfn{setuid-root}, meaning that they always run with
  17447. root privileges (@pxref{How Change Persona,,, libc, The GNU C Library
  17448. Reference Manual}, for more info about the setuid mechanism.)
  17449. The store itself @emph{cannot} contain setuid programs: that would be a
  17450. security issue since any user on the system can write derivations that
  17451. populate the store (@pxref{Le dépôt}). Thus, a different mechanism is
  17452. used: instead of changing the setuid bit directly on files that are in the
  17453. store, we let the system administrator @emph{declare} which programs should
  17454. be setuid root.
  17455. The @code{setuid-programs} field of an @code{operating-system} declaration
  17456. contains a list of G-expressions denoting the names of programs to be
  17457. setuid-root (@pxref{Utiliser le système de configuration}). For instance, the
  17458. @command{passwd} program, which is part of the Shadow package, can be
  17459. designated by this G-expression (@pxref{G-Expressions}):
  17460. @example
  17461. #~(string-append #$shadow "/bin/passwd")
  17462. @end example
  17463. A default set of setuid programs is defined by the @code{%setuid-programs}
  17464. variable of the @code{(gnu system)} module.
  17465. @defvr {Variable Scheme} %setuid-programs
  17466. A list of G-expressions denoting common programs that are setuid-root.
  17467. The list includes commands such as @command{passwd}, @command{ping},
  17468. @command{su}, and @command{sudo}.
  17469. @end defvr
  17470. Under the hood, the actual setuid programs are created in the
  17471. @file{/run/setuid-programs} directory at system activation time. The files
  17472. in this directory refer to the ``real'' binaries, which are in the store.
  17473. @node Certificats X.509
  17474. @subsection Certificats X.509
  17475. @cindex HTTPS, certificates
  17476. @cindex X.509 certificates
  17477. @cindex TLS
  17478. Web servers available over HTTPS (that is, HTTP over the transport-layer
  17479. security mechanism, TLS) send client programs an @dfn{X.509 certificate}
  17480. that the client can then use to @emph{authenticate} the server. To do that,
  17481. clients verify that the server's certificate is signed by a so-called
  17482. @dfn{certificate authority} (CA). But to verify the CA's signature, clients
  17483. must have first acquired the CA's certificate.
  17484. Web browsers such as GNU@tie{}IceCat include their own set of CA
  17485. certificates, such that they are able to verify CA signatures
  17486. out-of-the-box.
  17487. However, most other programs that can talk HTTPS---@command{wget},
  17488. @command{git}, @command{w3m}, etc.---need to be told where CA certificates
  17489. can be found.
  17490. @cindex @code{nss-certs}
  17491. In GuixSD, this is done by adding a package that provides certificates to
  17492. the @code{packages} field of the @code{operating-system} declaration
  17493. (@pxref{Référence de système d'exploitation}). GuixSD includes one such package,
  17494. @code{nss-certs}, which is a set of CA certificates provided as part of
  17495. Mozilla's Network Security Services.
  17496. Note that it is @emph{not} part of @var{%base-packages}, so you need to
  17497. explicitly add it. The @file{/etc/ssl/certs} directory, which is where most
  17498. applications and libraries look for certificates by default, points to the
  17499. certificates installed globally.
  17500. Unprivileged users, including users of Guix on a foreign distro, can also
  17501. install their own certificate package in their profile. A number of
  17502. environment variables need to be defined so that applications and libraries
  17503. know where to find them. Namely, the OpenSSL library honors the
  17504. @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE} variables. Some applications
  17505. add their own environment variables; for instance, the Git version control
  17506. system honors the certificate bundle pointed to by the @code{GIT_SSL_CAINFO}
  17507. environment variable. Thus, you would typically run something like:
  17508. @example
  17509. $ guix package -i nss-certs
  17510. $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
  17511. $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
  17512. $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
  17513. @end example
  17514. As another example, R requires the @code{CURL_CA_BUNDLE} environment
  17515. variable to point to a certificate bundle, so you would have to run
  17516. something like this:
  17517. @example
  17518. $ guix package -i nss-certs
  17519. $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
  17520. @end example
  17521. For other applications you may want to look up the required environment
  17522. variable in the relevant documentation.
  17523. @node Name Service Switch
  17524. @subsection Name Service Switch
  17525. @cindex name service switch
  17526. @cindex NSS
  17527. The @code{(gnu system nss)} module provides bindings to the configuration
  17528. file of the libc @dfn{name service switch} or @dfn{NSS} (@pxref{NSS
  17529. Configuration File,,, libc, The GNU C Library Reference Manual}). In a
  17530. nutshell, the NSS is a mechanism that allows libc to be extended with new
  17531. ``name'' lookup methods for system databases, which includes host names,
  17532. service names, user accounts, and more (@pxref{Name Service Switch, System
  17533. Databases and Name Service Switch,, libc, The GNU C Library Reference
  17534. Manual}).
  17535. The NSS configuration specifies, for each system database, which lookup
  17536. method is to be used, and how the various methods are chained together---for
  17537. instance, under which circumstances NSS should try the next method in the
  17538. list. The NSS configuration is given in the @code{name-service-switch}
  17539. field of @code{operating-system} declarations (@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
  17540. @cindex nss-mdns
  17541. @cindex .local, host name lookup
  17542. As an example, the declaration below configures the NSS to use the
  17543. @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
  17544. back-end}, which supports host name lookups over multicast DNS (mDNS) for
  17545. host names ending in @code{.local}:
  17546. @example
  17547. (name-service-switch
  17548. (hosts (list %files ;first, check /etc/hosts
  17549. ;; If the above did not succeed, try
  17550. ;; with 'mdns_minimal'.
  17551. (name-service
  17552. (name "mdns_minimal")
  17553. ;; 'mdns_minimal' is authoritative for
  17554. ;; '.local'. When it returns "not found",
  17555. ;; no need to try the next methods.
  17556. (reaction (lookup-specification
  17557. (not-found => return))))
  17558. ;; Then fall back to DNS.
  17559. (name-service
  17560. (name "dns"))
  17561. ;; Finally, try with the "full" 'mdns'.
  17562. (name-service
  17563. (name "mdns")))))
  17564. @end example
  17565. Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
  17566. contains this configuration, so you will not have to type it if all you want
  17567. is to have @code{.local} host lookup working.
  17568. Note that, in this case, in addition to setting the
  17569. @code{name-service-switch} of the @code{operating-system} declaration, you
  17570. also need to use @code{avahi-service} (@pxref{Services réseau,
  17571. @code{avahi-service}}), or @var{%desktop-services}, which includes it
  17572. (@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to
  17573. the name service cache daemon (@pxref{Services de base, @code{nscd-service}}).
  17574. For convenience, the following variables provide typical NSS configurations.
  17575. @defvr {Variable Scheme} %default-nss
  17576. This is the default name service switch configuration, a
  17577. @code{name-service-switch} object.
  17578. @end defvr
  17579. @defvr {Variable Scheme} %mdns-host-lookup-nss
  17580. This is the name service switch configuration with support for host name
  17581. lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
  17582. @end defvr
  17583. The reference for name service switch configuration is given below. It is a
  17584. direct mapping of the configuration file format of the C library , so please
  17585. refer to the C library manual for more information (@pxref{NSS Configuration
  17586. File,,, libc, The GNU C Library Reference Manual}). Compared to the
  17587. configuration file format of libc NSS, it has the advantage not only of
  17588. adding this warm parenthetic feel that we like, but also static checks: you
  17589. will know about syntax errors and typos as soon as you run @command{guix
  17590. system}.
  17591. @deftp {Type de données} name-service-switch
  17592. This is the data type representation the configuration of libc's name
  17593. service switch (NSS). Each field below represents one of the supported
  17594. system databases.
  17595. @table @code
  17596. @item aliases
  17597. @itemx ethers
  17598. @itemx group
  17599. @itemx gshadow
  17600. @itemx hosts
  17601. @itemx initgroups
  17602. @itemx netgroup
  17603. @itemx networks
  17604. @itemx password
  17605. @itemx public-key
  17606. @itemx rpc
  17607. @itemx services
  17608. @itemx shadow
  17609. The system databases handled by the NSS. Each of these fields must be a
  17610. list of @code{<name-service>} objects (see below).
  17611. @end table
  17612. @end deftp
  17613. @deftp {Type de données} name-service
  17614. This is the data type representing an actual name service and the associated
  17615. lookup action.
  17616. @table @code
  17617. @item name
  17618. A string denoting the name service (@pxref{Services in the NSS
  17619. configuration,,, libc, The GNU C Library Reference Manual}).
  17620. Note that name services listed here must be visible to nscd. This is
  17621. achieved by passing the @code{#:name-services} argument to
  17622. @code{nscd-service} the list of packages providing the needed name services
  17623. (@pxref{Services de base, @code{nscd-service}}).
  17624. @item reaction
  17625. An action specified using the @code{lookup-specification} macro
  17626. (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
  17627. Reference Manual}). For example:
  17628. @example
  17629. (lookup-specification (unavailable => continue)
  17630. (success => return))
  17631. @end example
  17632. @end table
  17633. @end deftp
  17634. @node Disque de RAM initial
  17635. @subsection Disque de RAM initial
  17636. @cindex initrd
  17637. @cindex disque de RAM initial
  17638. For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial
  17639. RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system
  17640. as well as an initialization script. The latter is responsible for mounting
  17641. the real root file system, and for loading any kernel modules that may be
  17642. needed to achieve that.
  17643. The @code{initrd-modules} field of an @code{operating-system} declaration
  17644. allows you to specify Linux-libre kernel modules that must be available in
  17645. the initrd. In particular, this is where you would list modules needed to
  17646. actually drive the hard disk where your root partition is---although the
  17647. default value of @code{initrd-modules} should cover most use cases. For
  17648. example, assuming you need the @code{megaraid_sas} module in addition to the
  17649. default modules to be able to access your root file system, you would write:
  17650. @example
  17651. (operating-system
  17652. ;; @dots{}
  17653. (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
  17654. @end example
  17655. @defvr {Variable Scheme} %base-initrd-modules
  17656. This is the list of kernel modules included in the initrd by default.
  17657. @end defvr
  17658. Furthermore, if you need lower-level customization, the @code{initrd} field
  17659. of an @code{operating-system} declaration allows you to specify which initrd
  17660. you would like to use. The @code{(gnu system linux-initrd)} module provides
  17661. three ways to build an initrd: the high-level @code{base-initrd} procedure
  17662. and the low-level @code{raw-initrd} and @code{expression->initrd}
  17663. procedures.
  17664. The @code{base-initrd} procedure is intended to cover most common uses. For
  17665. example, if you want to add a bunch of kernel modules to be loaded at boot
  17666. time, you can define the @code{initrd} field of the operating system
  17667. declaration like this:
  17668. @example
  17669. (initrd (lambda (file-systems . rest)
  17670. ;; Create a standard initrd but set up networking
  17671. ;; with the parameters QEMU expects by default.
  17672. (apply base-initrd file-systems
  17673. #:qemu-networking? #t
  17674. rest)))
  17675. @end example
  17676. The @code{base-initrd} procedure also handles common use cases that involves
  17677. using the system as a QEMU guest, or as a ``live'' system with volatile root
  17678. file system.
  17679. The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
  17680. Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
  17681. such as trying to guess which kernel modules and packages should be included
  17682. to the initrd. An example use of @code{raw-initrd} is when a user has a
  17683. custom Linux kernel configuration and default kernel modules included by
  17684. @code{base-initrd} are not available.
  17685. The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
  17686. honors several options passed on the Linux kernel command line (that is,
  17687. arguments passed @i{via} the @code{linux} command of GRUB, or the
  17688. @code{-append} option of QEMU), notably:
  17689. @table @code
  17690. @item --load=@var{boot}
  17691. Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
  17692. program, once it has mounted the root file system.
  17693. GuixSD uses this option to yield control to a boot program that runs the
  17694. service activation programs and then spawns the GNU@tie{}Shepherd, the
  17695. initialization system.
  17696. @item --root=@var{root}
  17697. Mount @var{root} as the root file system. @var{root} can be a device name
  17698. like @code{/dev/sda1}, a file system label, or a file system UUID.
  17699. @item --system=@var{système}
  17700. Have @file{/run/booted-system} and @file{/run/current-system} point to
  17701. @var{system}.
  17702. @item modprobe.blacklist=@var{modules}@dots{}
  17703. @cindex module, black-listing
  17704. @cindex black list, of kernel modules
  17705. Instruct the initial RAM disk as well as the @command{modprobe} command
  17706. (from the kmod package) to refuse to load @var{modules}. @var{modules} must
  17707. be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}.
  17708. @item --repl
  17709. Start a read-eval-print loop (REPL) from the initial RAM disk before it
  17710. tries to load kernel modules and to mount the root file system. Our
  17711. marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will love
  17712. it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference Manual},
  17713. for more information on Guile's REPL.
  17714. @end table
  17715. Now that you know all the features that initial RAM disks produced by
  17716. @code{base-initrd} and @code{raw-initrd} provide, here is how to use it and
  17717. customize it further.
  17718. @cindex initrd
  17719. @cindex disque de RAM initial
  17720. @deffn {Procédure Scheme} raw-initrd @var{file-systems} @
  17721. [#:linux-modules '()] [#:mapped-devices '()] @ [#:helper-packages '()]
  17722. [#:qemu-networking? #f] [#:volatile-root? #f] Return a derivation that
  17723. builds a raw initrd. @var{file-systems} is a list of file systems to be
  17724. mounted by the initrd, possibly in addition to the root file system
  17725. specified on the kernel command line via @code{--root}. @var{linux-modules}
  17726. is a list of kernel modules to be loaded at boot time. @var{mapped-devices}
  17727. is a list of device mappings to realize before @var{file-systems} are
  17728. mounted (@pxref{Périphériques mappés}). @var{helper-packages} is a list of
  17729. packages to be copied in the initrd. It may include @code{e2fsck/static} or
  17730. other packages needed by the initrd to check the root file system.
  17731. When @var{qemu-networking?} is true, set up networking with the standard
  17732. QEMU parameters. When @var{virtio?} is true, load additional modules so
  17733. that the initrd can be used as a QEMU guest with para-virtualized I/O
  17734. drivers.
  17735. When @var{volatile-root?} is true, the root file system is writable but any
  17736. changes to it are lost.
  17737. @end deffn
  17738. @deffn {Procédure Scheme} base-initrd @var{file-systems} @
  17739. [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
  17740. [#:linux-modules '()] Return as a file-like object a generic initrd, with
  17741. kernel modules taken from @var{linux}. @var{file-systems} is a list of
  17742. file-systems to be mounted by the initrd, possibly in addition to the root
  17743. file system specified on the kernel command line via @code{--root}.
  17744. @var{mapped-devices} is a list of device mappings to realize before
  17745. @var{file-systems} are mounted.
  17746. @var{qemu-networking?} and @var{volatile-root?} behaves as in
  17747. @code{raw-initrd}.
  17748. The initrd is automatically populated with all the kernel modules necessary
  17749. for @var{file-systems} and for the given options. Additional kernel modules
  17750. can be listed in @var{linux-modules}. They will be added to the initrd, and
  17751. loaded at boot time in the order in which they appear.
  17752. @end deffn
  17753. Needless to say, the initrds we produce and use embed a statically-linked
  17754. Guile, and the initialization program is a Guile program. That gives a lot
  17755. of flexibility. The @code{expression->initrd} procedure builds such an
  17756. initrd, given the program to run in that initrd.
  17757. @deffn {Procédure Scheme} expression->initrd @var{exp} @
  17758. [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return as a
  17759. file-like object a Linux initrd (a gzipped cpio archive) containing
  17760. @var{guile} and that evaluates @var{exp}, a G-expression, upon booting. All
  17761. the derivations referenced by @var{exp} are automatically copied to the
  17762. initrd.
  17763. @end deffn
  17764. @node Configuration du chargeur d'amorçage
  17765. @subsection Configuration du chargeur d'amorçage
  17766. @cindex bootloader
  17767. @cindex boot loader
  17768. The operating system supports multiple bootloaders. The bootloader is
  17769. configured using @code{bootloader-configuration} declaration. All the
  17770. fields of this structure are bootloader agnostic except for one field,
  17771. @code{bootloader} that indicates the bootloader to be configured and
  17772. installed.
  17773. Some of the bootloaders do not honor every field of
  17774. @code{bootloader-configuration}. For instance, the extlinux bootloader does
  17775. not support themes and thus ignores the @code{theme} field.
  17776. @deftp {Type de données} bootloader-configuration
  17777. The type of a bootloader configuration declaration.
  17778. @table @asis
  17779. @item @code{bootloader}
  17780. @cindex EFI, bootloader
  17781. @cindex UEFI, bootloader
  17782. @cindex BIOS, bootloader
  17783. The bootloader to use, as a @code{bootloader} object. For now
  17784. @code{grub-bootloader}, @code{grub-efi-bootloader},
  17785. @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
  17786. @vindex grub-efi-bootloader
  17787. @code{grub-efi-bootloader} allows to boot on modern systems using the
  17788. @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
  17789. use if the installation image contains a @file{/sys/firmware/efi} directory
  17790. when you boot it on your system.
  17791. @vindex grub-bootloader
  17792. @code{grub-bootloader} allows you to boot in particular Intel-based machines
  17793. in ``legacy'' BIOS mode.
  17794. @cindex ARM, chargeurs d'amorçage
  17795. @cindex AArch64, chargeurs d'amorçage
  17796. Available bootloaders are described in @code{(gnu bootloader @dots{})}
  17797. modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
  17798. of bootloaders for a wide range of ARM and AArch64 systems, using the
  17799. @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
  17800. @item @code{target}
  17801. This is a string denoting the target onto which to install the bootloader.
  17802. The interpretation depends on the bootloader in question. For
  17803. @code{grub-bootloader}, for example, it should be a device name understood
  17804. by the bootloader @command{installer} command, such as @code{/dev/sda} or
  17805. @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
  17806. @code{grub-efi-bootloader}, it should be the mount point of the EFI file
  17807. system, usually @file{/boot/efi}.
  17808. @item @code{menu-entries} (par défaut : @code{()})
  17809. A possibly empty list of @code{menu-entry} objects (see below), denoting
  17810. entries to appear in the bootloader menu, in addition to the current system
  17811. entry and the entry pointing to previous system generations.
  17812. @item @code{default-entry} (par défaut : @code{0})
  17813. The index of the default boot menu entry. Index 0 is for the entry of the
  17814. current system.
  17815. @item @code{timeout} (par défaut : @code{5})
  17816. The number of seconds to wait for keyboard input before booting. Set to 0
  17817. to boot immediately, and to -1 to wait indefinitely.
  17818. @item @code{theme} (par défaut : @var{#f})
  17819. The bootloader theme object describing the theme to use. If no theme is
  17820. provided, some bootloaders might use a default theme, that's true for GRUB.
  17821. @item @code{terminal-outputs} (par défaut : @code{'gfxterm})
  17822. The output terminals used for the bootloader boot menu, as a list of
  17823. symbols. GRUB accepts the values: @code{console}, @code{serial},
  17824. @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text},
  17825. @code{morse}, and @code{pkmodem}. This field corresponds to the GRUB
  17826. variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,,
  17827. grub,GNU GRUB manual}).
  17828. @item @code{terminal-inputs} (par défaut : @code{'()})
  17829. The input terminals used for the bootloader boot menu, as a list of
  17830. symbols. For GRUB, the default is the native platform terminal as
  17831. determined at run-time. GRUB accepts the values: @code{console},
  17832. @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
  17833. @code{usb_keyboard}. This field corresponds to the GRUB variable
  17834. @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
  17835. manual}).
  17836. @item @code{serial-unit} (par défaut : @code{#f})
  17837. The serial unit used by the bootloader, as an integer from 0 to 3. For
  17838. GRUB, it is chosen at run-time; currently GRUB chooses 0, which corresponds
  17839. to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
  17840. @item @code{serial-speed} (par défaut : @code{#f})
  17841. The speed of the serial interface, as an integer. For GRUB, the default
  17842. value is chosen at run-time; currently GRUB chooses 9600@tie{}bps
  17843. (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
  17844. @end table
  17845. @end deftp
  17846. @cindex dual boot
  17847. @cindex boot menu
  17848. Should you want to list additional boot menu entries @i{via} the
  17849. @code{menu-entries} field above, you will need to create them with the
  17850. @code{menu-entry} form. For example, imagine you want to be able to boot
  17851. another distro (hard to imagine!), you can define a menu entry along these
  17852. lines:
  17853. @example
  17854. (menu-entry
  17855. (label "The Other Distro")
  17856. (linux "/boot/old/vmlinux-2.6.32")
  17857. (linux-arguments '("root=/dev/sda2"))
  17858. (initrd "/boot/old/initrd"))
  17859. @end example
  17860. Details below.
  17861. @deftp {Type de données} menu-entry
  17862. The type of an entry in the bootloader menu.
  17863. @table @asis
  17864. @item @code{label}
  17865. The label to show in the menu---e.g., @code{"GNU"}.
  17866. @item @code{linux}
  17867. The Linux kernel image to boot, for example:
  17868. @example
  17869. (file-append linux-libre "/bzImage")
  17870. @end example
  17871. For GRUB, it is also possible to specify a device explicitly in the file
  17872. path using GRUB's device naming convention (@pxref{Naming convention,,,
  17873. grub, GNU GRUB manual}), for example:
  17874. @example
  17875. "(hd0,msdos1)/boot/vmlinuz"
  17876. @end example
  17877. If the device is specified explicitly as above, then the @code{device} field
  17878. is ignored entirely.
  17879. @item @code{linux-arguments} (par défaut : @code{()})
  17880. The list of extra Linux kernel command-line arguments---e.g.,
  17881. @code{("console=ttyS0")}.
  17882. @item @code{initrd}
  17883. A G-Expression or string denoting the file name of the initial RAM disk to
  17884. use (@pxref{G-Expressions}).
  17885. @item @code{device} (par défaut : @code{#f})
  17886. The device where the kernel and initrd are to be found---i.e., for GRUB,
  17887. @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
  17888. This may be a file system label (a string), a file system UUID (a
  17889. bytevector, @pxref{Systèmes de fichiers}), or @code{#f}, in which case the
  17890. bootloader will search the device containing the file specified by the
  17891. @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must
  17892. @emph{not} be an OS device name such as @file{/dev/sda1}.
  17893. @end table
  17894. @end deftp
  17895. @c FIXME: Write documentation once it's stable.
  17896. Fow now only GRUB has theme support. GRUB themes are created using the
  17897. @code{grub-theme} form, which is not documented yet.
  17898. @defvr {Variable Scheme} %default-theme
  17899. This is the default GRUB theme used by the operating system if no
  17900. @code{theme} field is specified in @code{bootloader-configuration} record.
  17901. It comes with a fancy background image displaying the GNU and Guix logos.
  17902. @end defvr
  17903. @node Invoquer guix system
  17904. @subsection Invoquer @code{guix system}
  17905. Once you have written an operating system declaration as seen in the
  17906. previous section, it can be @dfn{instantiated} using the @command{guix
  17907. system} command. The synopsis is:
  17908. @example
  17909. guix system @var{options}@dots{} @var{action} @var{file}
  17910. @end example
  17911. @var{file} must be the name of a file containing an @code{operating-system}
  17912. declaration. @var{action} specifies how the operating system is
  17913. instantiated. Currently the following values are supported:
  17914. @table @code
  17915. @item search
  17916. Display available service type definitions that match the given regular
  17917. expressions, sorted by relevance:
  17918. @example
  17919. $ guix system search console font
  17920. name: console-fonts
  17921. location: gnu/services/base.scm:729:2
  17922. extends: shepherd-root
  17923. description: Install the given fonts on the specified ttys (fonts are
  17924. + per virtual console on GNU/Linux). The value of this service is a list
  17925. + of tty/font pairs like:
  17926. +
  17927. + '(("tty1" . "LatGrkCyr-8x16"))
  17928. relevance: 20
  17929. name: mingetty
  17930. location: gnu/services/base.scm:1048:2
  17931. extends: shepherd-root
  17932. description: Provide console login using the `mingetty' program.
  17933. relevance: 2
  17934. name: login
  17935. location: gnu/services/base.scm:775:2
  17936. extends: pam
  17937. description: Provide a console log-in service as specified by its
  17938. + configuration value, a `login-configuration' object.
  17939. relevance: 2
  17940. @dots{}
  17941. @end example
  17942. As for @command{guix package --search}, the result is written in
  17943. @code{recutils} format, which makes it easy to filter the output
  17944. (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
  17945. @item reconfigure
  17946. Build the operating system described in @var{file}, activate it, and switch
  17947. to it@footnote{This action (and the related actions @code{switch-generation}
  17948. and @code{roll-back}) are usable only on systems already running GuixSD.}.
  17949. This effects all the configuration specified in @var{file}: user accounts,
  17950. system services, global package list, setuid programs, etc. The command
  17951. starts system services specified in @var{file} that are not currently
  17952. running; if a service is currently running this command will arrange for it
  17953. to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or
  17954. @code{herd restart X}).
  17955. This command creates a new generation whose number is one greater than the
  17956. current generation (as reported by @command{guix system list-generations}).
  17957. If that generation already exists, it will be overwritten. This behavior
  17958. mirrors that of @command{guix package} (@pxref{Invoquer guix package}).
  17959. It also adds a bootloader menu entry for the new OS configuration, ---unless
  17960. @option{--no-bootloader} is passed. For GRUB, it moves entries for older
  17961. configurations to a submenu, allowing you to choose an older system
  17962. generation at boot time should you need it.
  17963. @quotation Remarque
  17964. @c The paragraph below refers to the problem discussed at
  17965. @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
  17966. It is highly recommended to run @command{guix pull} once before you run
  17967. @command{guix system reconfigure} for the first time (@pxref{Invoquer guix pull}). Failing to do that you would see an older version of Guix once
  17968. @command{reconfigure} has completed.
  17969. @end quotation
  17970. @item switch-generation
  17971. @cindex générations
  17972. Switch to an existing system generation. This action atomically switches
  17973. the system profile to the specified system generation. It also rearranges
  17974. the system's existing bootloader menu entries. It makes the menu entry for
  17975. the specified system generation the default, and it moves the entries for
  17976. the other generatiors to a submenu, if supported by the bootloader being
  17977. used. The next time the system boots, it will use the specified system
  17978. generation.
  17979. The bootloader itself is not being reinstalled when using this command.
  17980. Thus, the installed bootloader is used with an updated configuration file.
  17981. The target generation can be specified explicitly by its generation number.
  17982. For example, the following invocation would switch to system generation 7:
  17983. @example
  17984. guix system switch-generation 7
  17985. @end example
  17986. The target generation can also be specified relative to the current
  17987. generation with the form @code{+N} or @code{-N}, where @code{+3} means ``3
  17988. generations ahead of the current generation,'' and @code{-1} means ``1
  17989. generation prior to the current generation.'' When specifying a negative
  17990. value such as @code{-1}, you must precede it with @code{--} to prevent it
  17991. from being parsed as an option. For example:
  17992. @example
  17993. guix system switch-generation -- -1
  17994. @end example
  17995. Currently, the effect of invoking this action is @emph{only} to switch the
  17996. system profile to an existing generation and rearrange the bootloader menu
  17997. entries. To actually start using the target system generation, you must
  17998. reboot after running this action. In the future, it will be updated to do
  17999. the same things as @command{reconfigure}, like activating and deactivating
  18000. services.
  18001. This action will fail if the specified generation does not exist.
  18002. @item roll-back
  18003. @cindex revenir en arrière
  18004. Switch to the preceding system generation. The next time the system boots,
  18005. it will use the preceding system generation. This is the inverse of
  18006. @command{reconfigure}, and it is exactly the same as invoking
  18007. @command{switch-generation} with an argument of @code{-1}.
  18008. Currently, as with @command{switch-generation}, you must reboot after
  18009. running this action to actually start using the preceding system generation.
  18010. @item build
  18011. Build the derivation of the operating system, which includes all the
  18012. configuration files and programs needed to boot and run the system. This
  18013. action does not actually install anything.
  18014. @item init
  18015. Populate the given directory with all the files necessary to run the
  18016. operating system specified in @var{file}. This is useful for first-time
  18017. installations of GuixSD. For instance:
  18018. @example
  18019. guix system init my-os-config.scm /mnt
  18020. @end example
  18021. copies to @file{/mnt} all the store items required by the configuration
  18022. specified in @file{my-os-config.scm}. This includes configuration files,
  18023. packages, and so on. It also creates other essential files needed for the
  18024. system to operate correctly---e.g., the @file{/etc}, @file{/var}, and
  18025. @file{/run} directories, and the @file{/bin/sh} file.
  18026. This command also installs bootloader on the target specified in
  18027. @file{my-os-config}, unless the @option{--no-bootloader} option was passed.
  18028. @item vm
  18029. @cindex virtual machine
  18030. @cindex VM
  18031. @anchor{guix system vm}
  18032. Build a virtual machine that contains the operating system declared in
  18033. @var{file}, and return a script to run that virtual machine (VM). Arguments
  18034. given to the script are passed to QEMU as in the example below, which
  18035. enables networking and requests 1@tie{}GiB of RAM for the emulated machine:
  18036. @example
  18037. $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
  18038. @end example
  18039. The VM shares its store with the host system.
  18040. Additional file systems can be shared between the host and the VM using the
  18041. @code{--share} and @code{--expose} command-line options: the former
  18042. specifies a directory to be shared with write access, while the latter
  18043. provides read-only access to the shared directory.
  18044. The example below creates a VM in which the user's home directory is
  18045. accessible read-only, and where the @file{/exchange} directory is a
  18046. read-write mapping of @file{$HOME/tmp} on the host:
  18047. @example
  18048. guix system vm my-config.scm \
  18049. --expose=$HOME --share=$HOME/tmp=/exchange
  18050. @end example
  18051. On GNU/Linux, the default is to boot directly to the kernel; this has the
  18052. advantage of requiring only a very tiny root disk image since the store of
  18053. the host can then be mounted.
  18054. The @code{--full-boot} option forces a complete boot sequence, starting with
  18055. the bootloader. This requires more disk space since a root image containing
  18056. at least the kernel, initrd, and bootloader data files must be created. The
  18057. @code{--image-size} option can be used to specify the size of the image.
  18058. @cindex System images, creation in various formats
  18059. @cindex Creating system images in various formats
  18060. @item vm-image
  18061. @itemx disk-image
  18062. @itemx docker-image
  18063. Return a virtual machine, disk image, or Docker image of the operating
  18064. system declared in @var{file} that stands alone. By default, @command{guix
  18065. system} estimates the size of the image needed to store the system, but you
  18066. can use the @option{--image-size} option to specify a value. Docker images
  18067. are built to contain exactly what they need, so the @option{--image-size}
  18068. option is ignored in the case of @code{docker-image}.
  18069. You can specify the root file system type by using the
  18070. @option{--file-system-type} option. It defaults to @code{ext4}.
  18071. When using @code{vm-image}, the returned image is in qcow2 format, which the
  18072. QEMU emulator can efficiently use. @xref{Lancer GuixSD dans une VM}, for more
  18073. information on how to run the image in a virtual machine.
  18074. When using @code{disk-image}, a raw disk image is produced; it can be copied
  18075. as is to a USB stick, for instance. Assuming @code{/dev/sdc} is the device
  18076. corresponding to a USB stick, one can copy the image to it using the
  18077. following command:
  18078. @example
  18079. # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
  18080. @end example
  18081. When using @code{docker-image}, a Docker image is produced. Guix builds the
  18082. image from scratch, not from a pre-existing Docker base image. As a result,
  18083. it contains @emph{exactly} what you define in the operating system
  18084. configuration file. You can then load the image and launch a Docker
  18085. container using commands like the following:
  18086. @example
  18087. image_id="$(docker load < guixsd-docker-image.tar.gz)"
  18088. docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
  18089. --entrypoint /var/guix/profiles/system/profile/bin/guile \\
  18090. $image_id /var/guix/profiles/system/boot
  18091. @end example
  18092. This command starts a new Docker container from the specified image. It
  18093. will boot the GuixSD system in the usual manner, which means it will start
  18094. any services you have defined in the operating system configuration.
  18095. Depending on what you run in the Docker container, it may be necessary to
  18096. give the container additional permissions. For example, if you intend to
  18097. build software using Guix inside of the Docker container, you may need to
  18098. pass the @option{--privileged} option to @code{docker run}.
  18099. @item conteneur
  18100. Return a script to run the operating system declared in @var{file} within a
  18101. container. Containers are a set of lightweight isolation mechanisms
  18102. provided by the kernel Linux-libre. Containers are substantially less
  18103. resource-demanding than full virtual machines since the kernel, shared
  18104. objects, and other resources can be shared with the host system; this also
  18105. means they provide thinner isolation.
  18106. Currently, the script must be run as root in order to support more than a
  18107. single user and group. The container shares its store with the host system.
  18108. As with the @code{vm} action (@pxref{guix system vm}), additional file
  18109. systems to be shared between the host and container can be specified using
  18110. the @option{--share} and @option{--expose} options:
  18111. @example
  18112. guix system container my-config.scm \
  18113. --expose=$HOME --share=$HOME/tmp=/exchange
  18114. @end example
  18115. @quotation Remarque
  18116. This option requires Linux-libre 3.19 or newer.
  18117. @end quotation
  18118. @end table
  18119. @var{options} can contain any of the common build options (@pxref{Options de construction communes}). In addition, @var{options} can contain one of the
  18120. following:
  18121. @table @option
  18122. @item --expression=@var{expr}
  18123. @itemx -e @var{expr}
  18124. Consider the operating-system @var{expr} evaluates to. This is an
  18125. alternative to specifying a file which evaluates to an operating system.
  18126. This is used to generate the GuixSD installer @pxref{Construire l'image d'installation}).
  18127. @item --system=@var{système}
  18128. @itemx -s @var{système}
  18129. Attempt to build for @var{system} instead of the host system type. This
  18130. works as per @command{guix build} (@pxref{Invoquer guix build}).
  18131. @item --derivation
  18132. @itemx -d
  18133. Return the derivation file name of the given operating system without
  18134. building anything.
  18135. @item --file-system-type=@var{type}
  18136. @itemx -t @var{type}
  18137. For the @code{disk-image} action, create a file system of the given
  18138. @var{type} on the image.
  18139. When this option is omitted, @command{guix system} uses @code{ext4}.
  18140. @cindex ISO-9660 format
  18141. @cindex CD image format
  18142. @cindex DVD image format
  18143. @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable for
  18144. burning on CDs and DVDs.
  18145. @item --image-size=@var{size}
  18146. For the @code{vm-image} and @code{disk-image} actions, create an image of
  18147. the given @var{size}. @var{size} may be a number of bytes, or it may
  18148. include a unit as a suffix (@pxref{Block size, size specifications,,
  18149. coreutils, GNU Coreutils}).
  18150. When this option is omitted, @command{guix system} computes an estimate of
  18151. the image size as a function of the size of the system declared in
  18152. @var{file}.
  18153. @item --root=@var{fichier}
  18154. @itemx -r @var{fichier}
  18155. Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
  18156. en tant que racine du ramasse-miettes.
  18157. @item --skip-checks
  18158. Skip pre-installation safety checks.
  18159. By default, @command{guix system init} and @command{guix system reconfigure}
  18160. perform safety checks: they make sure the file systems that appear in the
  18161. @code{operating-system} declaration actually exist (@pxref{Systèmes de fichiers}),
  18162. and that any Linux kernel modules that may be needed at boot time are listed
  18163. in @code{initrd-modules} (@pxref{Disque de RAM initial}). Passing this option
  18164. skips these tests altogether.
  18165. @item --on-error=@var{strategy}
  18166. Apply @var{strategy} when an error occurs when reading @var{file}.
  18167. @var{strategy} may be one of the following:
  18168. @table @code
  18169. @item nothing-special
  18170. Report the error concisely and exit. This is the default strategy.
  18171. @item backtrace
  18172. Likewise, but also display a backtrace.
  18173. @item debug
  18174. Report the error and enter Guile's debugger. From there, you can run
  18175. commands such as @code{,bt} to get a backtrace, @code{,locals} to display
  18176. local variable values, and more generally inspect the state of the program.
  18177. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for a list of
  18178. available debugging commands.
  18179. @end table
  18180. @end table
  18181. @quotation Remarque
  18182. All the actions above, except @code{build} and @code{init}, can use KVM
  18183. support in the Linux-libre kernel. Specifically, if the machine has
  18184. hardware virtualization support, the corresponding KVM kernel module should
  18185. be loaded, and the @file{/dev/kvm} device node must exist and be readable
  18186. and writable by the user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}).
  18187. @end quotation
  18188. Once you have built, configured, re-configured, and re-re-configured your
  18189. GuixSD installation, you may find it useful to list the operating system
  18190. generations available on disk---and that you can choose from the bootloader
  18191. boot menu:
  18192. @table @code
  18193. @item list-generations
  18194. List a summary of each generation of the operating system available on disk,
  18195. in a human-readable way. This is similar to the @option{--list-generations}
  18196. option of @command{guix package} (@pxref{Invoquer guix package}).
  18197. Optionally, one can specify a pattern, with the same syntax that is used in
  18198. @command{guix package --list-generations}, to restrict the list of
  18199. generations displayed. For instance, the following command displays
  18200. generations that are up to 10 days old:
  18201. @example
  18202. $ guix system list-generations 10d
  18203. @end example
  18204. @end table
  18205. The @command{guix system} command has even more to offer! The following
  18206. sub-commands allow you to visualize how your system services relate to each
  18207. other:
  18208. @anchor{system-extension-graph}
  18209. @table @code
  18210. @item extension-graph
  18211. Emit in Dot/Graphviz format to standard output the @dfn{service extension
  18212. graph} of the operating system defined in @var{file} (@pxref{Composition de services}, for more information on service extensions.)
  18213. The command:
  18214. @example
  18215. $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
  18216. @end example
  18217. produces a PDF file showing the extension relations among services.
  18218. @anchor{system-shepherd-graph}
  18219. @item shepherd-graph
  18220. Emit in Dot/Graphviz format to standard output the @dfn{dependency graph} of
  18221. shepherd services of the operating system defined in @var{file}.
  18222. @xref{Services Shepherd}, for more information and for an example graph.
  18223. @end table
  18224. @node Lancer GuixSD dans une VM
  18225. @subsection Running GuixSD in a Virtual Machine
  18226. @cindex virtual machine
  18227. To run GuixSD in a virtual machine (VM), one can either use the pre-built
  18228. GuixSD VM image distributed at
  18229. @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
  18230. , or build their own virtual machine image using @command{guix system
  18231. vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2
  18232. format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
  18233. use.
  18234. @cindex QEMU
  18235. If you built your own image, you must copy it out of the store (@pxref{Le dépôt}) and give yourself permission to write to the copy before you can use
  18236. it. When invoking QEMU, you must choose a system emulator that is suitable
  18237. for your hardware platform. Here is a minimal QEMU invocation that will
  18238. boot the result of @command{guix system vm-image} on x86_64 hardware:
  18239. @example
  18240. $ qemu-system-x86_64 \
  18241. -net user -net nic,model=virtio \
  18242. -enable-kvm -m 256 /tmp/qemu-image
  18243. @end example
  18244. Here is what each of these options means:
  18245. @table @code
  18246. @item qemu-system-x86_64
  18247. This specifies the hardware platform to emulate. This should match the
  18248. host.
  18249. @item -net user
  18250. Enable the unprivileged user-mode network stack. The guest OS can access
  18251. the host but not vice versa. This is the simplest way to get the guest OS
  18252. online.
  18253. @item -net nic,model=virtio
  18254. You must create a network interface of a given model. If you do not create
  18255. a NIC, the boot will fail. Assuming your hardware platform is x86_64, you
  18256. can get a list of available NIC models by running
  18257. @command{qemu-system-x86_64 -net nic,model=help}.
  18258. @item -enable-kvm
  18259. If your system has hardware virtualization extensions, enabling the virtual
  18260. machine support (KVM) of the Linux kernel will make things run faster.
  18261. @item -m 256
  18262. RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
  18263. which may be insufficient for some operations.
  18264. @item /tmp/qemu-image
  18265. The file name of the qcow2 image.
  18266. @end table
  18267. The default @command{run-vm.sh} script that is returned by an invocation of
  18268. @command{guix system vm} does not add a @command{-net user} flag by
  18269. default. To get network access from within the vm add the
  18270. @code{(dhcp-client-service)} to your system definition and start the VM
  18271. using @command{`guix system vm config.scm` -net user}. An important caveat
  18272. of using @command{-net user} for networking is that @command{ping} will not
  18273. work, because it uses the ICMP protocol. You'll have to use a different
  18274. command to check for network connectivity, for example @command{guix
  18275. download}.
  18276. @subsubsection Connecting Through SSH
  18277. @cindex SSH
  18278. @cindex serveur SSH
  18279. To enable SSH inside a VM you need to add a SSH server like
  18280. @code{(dropbear-service)} or @code{(lsh-service)} to your VM. The
  18281. @code{(lsh-service}) doesn't currently boot unsupervised. It requires you
  18282. to type some characters to initialize the randomness generator. In addition
  18283. you need to forward the SSH port, 22 by default, to the host. You can do
  18284. this with
  18285. @example
  18286. `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
  18287. @end example
  18288. To connect to the VM you can run
  18289. @example
  18290. ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
  18291. @end example
  18292. The @command{-p} tells @command{ssh} the port you want to connect to.
  18293. @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from
  18294. complaining every time you modify your @command{config.scm} file and the
  18295. @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
  18296. connection to an unknown host every time you connect.
  18297. @subsubsection Using @command{virt-viewer} with Spice
  18298. As an alternative to the default @command{qemu} graphical client you can use
  18299. the @command{remote-viewer} from the @command{virt-viewer} package. To
  18300. connect pass the @command{-spice port=5930,disable-ticketing} flag to
  18301. @command{qemu}. See previous section for further information on how to do
  18302. this.
  18303. Spice also allows you to do some nice stuff like share your clipboard with
  18304. your VM. To enable that you'll also have to pass the following flags to
  18305. @command{qemu}:
  18306. @example
  18307. -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
  18308. -chardev spicevmc,name=vdagent,id=vdagent
  18309. -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
  18310. name=com.redhat.spice.0
  18311. @end example
  18312. You'll also need to add the @pxref{Services divers, Spice service}.
  18313. @node Définir des services
  18314. @subsection Définir des services
  18315. The previous sections show the available services and how one can combine
  18316. them in an @code{operating-system} declaration. But how do we define them
  18317. in the first place? And what is a service anyway?
  18318. @menu
  18319. * Composition de services:: Le modèle de composition des services.
  18320. * Types service et services:: Types et services.
  18321. * Référence de service:: Référence de l'API@.
  18322. * Services Shepherd:: Un type de service particulier.
  18323. @end menu
  18324. @node Composition de services
  18325. @subsubsection Composition de services
  18326. @cindex services
  18327. @cindex daemons
  18328. Here we define a @dfn{service} as, broadly, something that extends the
  18329. functionality of the operating system. Often a service is a process---a
  18330. @dfn{daemon}---started when the system boots: a secure shell server, a Web
  18331. server, the Guix build daemon, etc. Sometimes a service is a daemon whose
  18332. execution can be triggered by another daemon---e.g., an FTP server started
  18333. by @command{inetd} or a D-Bus service activated by @command{dbus-daemon}.
  18334. Occasionally, a service does not map to a daemon. For instance, the
  18335. ``account'' service collects user accounts and makes sure they exist when
  18336. the system runs; the ``udev'' service collects device management rules and
  18337. makes them available to the eudev daemon; the @file{/etc} service populates
  18338. the @file{/etc} directory of the system.
  18339. @cindex service extensions
  18340. GuixSD services are connected by @dfn{extensions}. For instance, the secure
  18341. shell service @emph{extends} the Shepherd---the GuixSD initialization
  18342. system, running as PID@tie{}1---by giving it the command lines to start and
  18343. stop the secure shell daemon (@pxref{Services réseau,
  18344. @code{lsh-service}}); the UPower service extends the D-Bus service by
  18345. passing it its @file{.service} specification, and extends the udev service
  18346. by passing it device management rules (@pxref{Services de bureaux,
  18347. @code{upower-service}}); the Guix daemon service extends the Shepherd by
  18348. passing it the command lines to start and stop the daemon, and extends the
  18349. account service by passing it a list of required build user accounts
  18350. (@pxref{Services de base}).
  18351. All in all, services and their ``extends'' relations form a directed acyclic
  18352. graph (DAG). If we represent services as boxes and extensions as arrows, a
  18353. typical system might provide something like this:
  18354. @image{images/service-graph,,5in,Typical service extension graph.}
  18355. @cindex system service
  18356. At the bottom, we see the @dfn{system service}, which produces the directory
  18357. containing everything to run and boot the system, as returned by the
  18358. @command{guix system build} command. @xref{Référence de service}, to learn
  18359. about the other service types shown here. @xref{system-extension-graph, the
  18360. @command{guix system extension-graph} command}, for information on how to
  18361. generate this representation for a particular operating system definition.
  18362. @cindex service types
  18363. Technically, developers can define @dfn{service types} to express these
  18364. relations. There can be any number of services of a given type on the
  18365. system---for instance, a system running two instances of the GNU secure
  18366. shell server (lsh) has two instances of @var{lsh-service-type}, with
  18367. different parameters.
  18368. The following section describes the programming interface for service types
  18369. and services.
  18370. @node Types service et services
  18371. @subsubsection Types service et services
  18372. A @dfn{service type} is a node in the DAG described above. Let us start
  18373. with a simple example, the service type for the Guix build daemon
  18374. (@pxref{Invoquer guix-daemon}):
  18375. @example
  18376. (define guix-service-type
  18377. (service-type
  18378. (name 'guix)
  18379. (extensions
  18380. (list (service-extension shepherd-root-service-type guix-shepherd-service)
  18381. (service-extension account-service-type guix-accounts)
  18382. (service-extension activation-service-type guix-activation)))
  18383. (default-value (guix-configuration))))
  18384. @end example
  18385. @noindent
  18386. It defines three things:
  18387. @enumerate
  18388. @item
  18389. A name, whose sole purpose is to make inspection and debugging easier.
  18390. @item
  18391. A list of @dfn{service extensions}, where each extension designates the
  18392. target service type and a procedure that, given the parameters of the
  18393. service, returns a list of objects to extend the service of that type.
  18394. Every service type has at least one service extension. The only exception
  18395. is the @dfn{boot service type}, which is the ultimate service.
  18396. @item
  18397. Optionally, a default value for instances of this type.
  18398. @end enumerate
  18399. In this example, @var{guix-service-type} extends three services:
  18400. @table @var
  18401. @item shepherd-root-service-type
  18402. The @var{guix-shepherd-service} procedure defines how the Shepherd service
  18403. is extended. Namely, it returns a @code{<shepherd-service>} object that
  18404. defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
  18405. @item account-service-type
  18406. This extension for this service is computed by @var{guix-accounts}, which
  18407. returns a list of @code{user-group} and @code{user-account} objects
  18408. representing the build user accounts (@pxref{Invoquer guix-daemon}).
  18409. @item activation-service-type
  18410. Here @var{guix-activation} is a procedure that returns a gexp, which is a
  18411. code snippet to run at ``activation time''---e.g., when the service is
  18412. booted.
  18413. @end table
  18414. A service of this type is instantiated like this:
  18415. @example
  18416. (service guix-service-type
  18417. (guix-configuration
  18418. (build-accounts 5)
  18419. (use-substitutes? #f)))
  18420. @end example
  18421. The second argument to the @code{service} form is a value representing the
  18422. parameters of this specific service instance.
  18423. @xref{guix-configuration-type, @code{guix-configuration}}, for information
  18424. about the @code{guix-configuration} data type. When the value is omitted,
  18425. the default value specified by @code{guix-service-type} is used:
  18426. @example
  18427. (service guix-service-type)
  18428. @end example
  18429. @var{guix-service-type} is quite simple because it extends other services
  18430. but is not extensible itself.
  18431. @c @subsubsubsection Extensible Service Types
  18432. The service type for an @emph{extensible} service looks like this:
  18433. @example
  18434. (define udev-service-type
  18435. (service-type (name 'udev)
  18436. (extensions
  18437. (list (service-extension shepherd-root-service-type
  18438. udev-shepherd-service)))
  18439. (compose concatenate) ;concatenate the list of rules
  18440. (extend (lambda (config rules)
  18441. (match config
  18442. (($ <udev-configuration> udev initial-rules)
  18443. (udev-configuration
  18444. (udev udev) ;the udev package to use
  18445. (rules (append initial-rules rules)))))))))
  18446. @end example
  18447. This is the service type for the
  18448. @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
  18449. daemon}. Compared to the previous example, in addition to an extension of
  18450. @var{shepherd-root-service-type}, we see two new fields:
  18451. @table @code
  18452. @item compose
  18453. This is the procedure to @dfn{compose} the list of extensions to services of
  18454. this type.
  18455. Services can extend the udev service by passing it lists of rules; we
  18456. compose those extensions simply by concatenating them.
  18457. @item extend
  18458. This procedure defines how the value of the service is @dfn{extended} with
  18459. the composition of the extensions.
  18460. Udev extensions are composed into a list of rules, but the udev service
  18461. value is itself a @code{<udev-configuration>} record. So here, we extend
  18462. that record by appending the list of rules it contains to the list of
  18463. contributed rules.
  18464. @item description
  18465. This is a string giving an overview of the service type. The string can
  18466. contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
  18467. @command{guix system search} command searches these strings and displays
  18468. them (@pxref{Invoquer guix system}).
  18469. @end table
  18470. There can be only one instance of an extensible service type such as
  18471. @var{udev-service-type}. If there were more, the @code{service-extension}
  18472. specifications would be ambiguous.
  18473. Still here? The next section provides a reference of the programming
  18474. interface for services.
  18475. @node Référence de service
  18476. @subsubsection Référence de service
  18477. We have seen an overview of service types (@pxref{Types service et services}). This section provides a reference on how to manipulate services
  18478. and service types. This interface is provided by the @code{(gnu services)}
  18479. module.
  18480. @deffn {Procédure Scheme} service @var{type} [@var{value}]
  18481. Return a new service of @var{type}, a @code{<service-type>} object (see
  18482. below.) @var{value} can be any object; it represents the parameters of this
  18483. particular service instance.
  18484. When @var{value} is omitted, the default value specified by @var{type} is
  18485. used; if @var{type} does not specify a default value, an error is raised.
  18486. For instance, this:
  18487. @example
  18488. (service openssh-service-type)
  18489. @end example
  18490. @noindent
  18491. is equivalent to this:
  18492. @example
  18493. (service openssh-service-type
  18494. (openssh-configuration))
  18495. @end example
  18496. In both cases the result is an instance of @code{openssh-service-type} with
  18497. the default configuration.
  18498. @end deffn
  18499. @deffn {Procédure Scheme} service? @var{obj}
  18500. Return true if @var{obj} is a service.
  18501. @end deffn
  18502. @deffn {Procédure Scheme} service-kind @var{service}
  18503. Return the type of @var{service}---i.e., a @code{<service-type>} object.
  18504. @end deffn
  18505. @deffn {Procédure Scheme} service-value @var{service}
  18506. Return the value associated with @var{service}. It represents its
  18507. parameters.
  18508. @end deffn
  18509. Here is an example of how a service is created and manipulated:
  18510. @example
  18511. (define s
  18512. (service nginx-service-type
  18513. (nginx-configuration
  18514. (nginx nginx)
  18515. (log-directory log-directory)
  18516. (run-directory run-directory)
  18517. (file config-file))))
  18518. (service? s)
  18519. @result{} #t
  18520. (eq? (service-kind s) nginx-service-type)
  18521. @result{} #t
  18522. @end example
  18523. The @code{modify-services} form provides a handy way to change the
  18524. parameters of some of the services of a list such as @var{%base-services}
  18525. (@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
  18526. services. Of course, you could always use standard list combinators such as
  18527. @code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
  18528. GNU Guile Reference Manual}); @code{modify-services} simply provides a more
  18529. concise form for this common pattern.
  18530. @deffn {Scheme Syntax} modify-services @var{services} @
  18531. (@var{type} @var{variable} => @var{body}) @dots{}
  18532. Modify the services listed in @var{services} according to the given
  18533. clauses. Each clause has the form:
  18534. @example
  18535. (@var{type} @var{variable} => @var{body})
  18536. @end example
  18537. where @var{type} is a service type---e.g., @code{guix-service-type}---and
  18538. @var{variable} is an identifier that is bound within the @var{body} to the
  18539. service parameters---e.g., a @code{guix-configuration} instance---of the
  18540. original service of that @var{type}.
  18541. The @var{body} should evaluate to the new service parameters, which will be
  18542. used to configure the new service. This new service will replace the
  18543. original in the resulting list. Because a service's service parameters are
  18544. created using @code{define-record-type*}, you can write a succinct
  18545. @var{body} that evaluates to the new service parameters by using the
  18546. @code{inherit} feature that @code{define-record-type*} provides.
  18547. @xref{Utiliser le système de configuration}, for example usage.
  18548. @end deffn
  18549. Next comes the programming interface for service types. This is something
  18550. you want to know when writing new service definitions, but not necessarily
  18551. when simply looking for ways to customize your @code{operating-system}
  18552. declaration.
  18553. @deftp {Type de données} service-type
  18554. @cindex type de service
  18555. This is the representation of a @dfn{service type} (@pxref{Types service et services}).
  18556. @table @asis
  18557. @item @code{name}
  18558. This is a symbol, used only to simplify inspection and debugging.
  18559. @item @code{extensions}
  18560. A non-empty list of @code{<service-extension>} objects (see below).
  18561. @item @code{compose} (par défaut : @code{#f})
  18562. If this is @code{#f}, then the service type denotes services that cannot be
  18563. extended---i.e., services that do not receive ``values'' from other
  18564. services.
  18565. Otherwise, it must be a one-argument procedure. The procedure is called by
  18566. @code{fold-services} and is passed a list of values collected from
  18567. extensions. It may return any single value.
  18568. @item @code{extend} (par défaut : @code{#f})
  18569. If this is @code{#f}, services of this type cannot be extended.
  18570. Otherwise, it must be a two-argument procedure: @code{fold-services} calls
  18571. it, passing it the initial value of the service as the first argument and
  18572. the result of applying @code{compose} to the extension values as the second
  18573. argument. It must return a value that is a valid parameter value for the
  18574. service instance.
  18575. @end table
  18576. @xref{Types service et services}, for examples.
  18577. @end deftp
  18578. @deffn {Procédure Scheme} service-extension @var{target-type} @
  18579. @var{compute} Return a new extension for services of type
  18580. @var{target-type}. @var{compute} must be a one-argument procedure:
  18581. @code{fold-services} calls it, passing it the value associated with the
  18582. service that provides the extension; it must return a valid value for the
  18583. target service.
  18584. @end deffn
  18585. @deffn {Procédure Scheme} service-extension? @var{obj}
  18586. Return true if @var{obj} is a service extension.
  18587. @end deffn
  18588. Occasionally, you might want to simply extend an existing service. This
  18589. involves creating a new service type and specifying the extension of
  18590. interest, which can be verbose; the @code{simple-service} procedure provides
  18591. a shorthand for this.
  18592. @deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
  18593. Return a service that extends @var{target} with @var{value}. This works by
  18594. creating a singleton service type @var{name}, of which the returned service
  18595. is an instance.
  18596. For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an
  18597. additional job:
  18598. @example
  18599. (simple-service 'my-mcron-job mcron-service-type
  18600. #~(job '(next-hour (3)) "guix gc -F 2G"))
  18601. @end example
  18602. @end deffn
  18603. At the core of the service abstraction lies the @code{fold-services}
  18604. procedure, which is responsible for ``compiling'' a list of services down to
  18605. a single directory that contains everything needed to boot and run the
  18606. system---the directory shown by the @command{guix system build} command
  18607. (@pxref{Invoquer guix system}). In essence, it propagates service
  18608. extensions down the service graph, updating each node parameters on the way,
  18609. until it reaches the root node.
  18610. @deffn {Procédure Scheme} fold-services @var{services} @
  18611. [#:target-type @var{system-service-type}] Fold @var{services} by propagating
  18612. their extensions down to the root of type @var{target-type}; return the root
  18613. service adjusted accordingly.
  18614. @end deffn
  18615. Lastly, the @code{(gnu services)} module also defines several essential
  18616. service types, some of which are listed below.
  18617. @defvr {Variable Scheme} system-service-type
  18618. This is the root of the service graph. It produces the system directory as
  18619. returned by the @command{guix system build} command.
  18620. @end defvr
  18621. @defvr {Variable Scheme} boot-service-type
  18622. The type of the ``boot service'', which produces the @dfn{boot script}. The
  18623. boot script is what the initial RAM disk runs when booting.
  18624. @end defvr
  18625. @defvr {Variable Scheme} etc-service-type
  18626. The type of the @file{/etc} service. This service is used to create files
  18627. under @file{/etc} and can be extended by passing it name/file tuples such
  18628. as:
  18629. @example
  18630. (list `("issue" ,(plain-file "issue" "Welcome!\n")))
  18631. @end example
  18632. In this example, the effect would be to add an @file{/etc/issue} file
  18633. pointing to the given file.
  18634. @end defvr
  18635. @defvr {Variable Scheme} setuid-program-service-type
  18636. Type for the ``setuid-program service''. This service collects lists of
  18637. executable file names, passed as gexps, and adds them to the set of
  18638. setuid-root programs on the system (@pxref{Programmes setuid}).
  18639. @end defvr
  18640. @defvr {Variable Scheme} profile-service-type
  18641. Type of the service that populates the @dfn{system profile}---i.e., the
  18642. programs under @file{/run/current-system/profile}. Other services can
  18643. extend it by passing it lists of packages to add to the system profile.
  18644. @end defvr
  18645. @node Services Shepherd
  18646. @subsubsection Services Shepherd
  18647. @cindex services shepherd
  18648. @cindex PID 1
  18649. @cindex init system
  18650. The @code{(gnu services shepherd)} module provides a way to define services
  18651. managed by the GNU@tie{}Shepherd, which is the GuixSD initialization
  18652. system---the first process that is started when the system boots, also known
  18653. as PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
  18654. Services in the Shepherd can depend on each other. For instance, the SSH
  18655. daemon may need to be started after the syslog daemon has been started,
  18656. which in turn can only happen once all the file systems have been mounted.
  18657. The simple operating system defined earlier (@pxref{Utiliser le système de configuration}) results in a service graph like this:
  18658. @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
  18659. You can actually generate such a graph for any operating system definition
  18660. using the @command{guix system shepherd-graph} command
  18661. (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
  18662. The @var{%shepherd-root-service} is a service object representing
  18663. PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended by
  18664. passing it lists of @code{<shepherd-service>} objects.
  18665. @deftp {Type de données} shepherd-service
  18666. The data type representing a service managed by the Shepherd.
  18667. @table @asis
  18668. @item @code{provision}
  18669. This is a list of symbols denoting what the service provides.
  18670. These are the names that may be passed to @command{herd start},
  18671. @command{herd status}, and similar commands (@pxref{Invoking herd,,,
  18672. shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
  18673. @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
  18674. @item @code{requirements} (par défaut : @code{'()})
  18675. List of symbols denoting the Shepherd services this one depends on.
  18676. @item @code{respawn?} (par défaut : @code{#t})
  18677. Whether to restart the service when it stops, for instance when the
  18678. underlying process dies.
  18679. @item @code{start}
  18680. @itemx @code{stop} (par défaut : @code{#~(const #f)})
  18681. The @code{start} and @code{stop} fields refer to the Shepherd's facilities
  18682. to start and stop processes (@pxref{Service De- and Constructors,,,
  18683. shepherd, The GNU Shepherd Manual}). They are given as G-expressions that
  18684. get expanded in the Shepherd configuration file (@pxref{G-Expressions}).
  18685. @item @code{actions} (par défaut : @code{'()})
  18686. @cindex action, des services Shepherd
  18687. This is a list of @code{shepherd-action} objects (see below) defining
  18688. @dfn{actions} supported by the service, in addition to the standard
  18689. @code{start} and @code{stop} actions. Actions listed here become available
  18690. as @command{herd} sub-commands:
  18691. @example
  18692. herd @var{action} @var{service} [@var{arguments}@dots{}]
  18693. @end example
  18694. @item @code{documentation}
  18695. A documentation string, as shown when running:
  18696. @example
  18697. herd doc @var{service-name}
  18698. @end example
  18699. where @var{service-name} is one of the symbols in @var{provision}
  18700. (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
  18701. @item @code{modules} (par défaut : @var{%default-modules})
  18702. This is the list of modules that must be in scope when @code{start} and
  18703. @code{stop} are evaluated.
  18704. @end table
  18705. @end deftp
  18706. @deftp {Type de données} shepherd-action
  18707. This is the data type that defines additional actions implemented by a
  18708. Shepherd service (see above).
  18709. @table @code
  18710. @item name
  18711. Symbole nommant l'action
  18712. @item documentation
  18713. This is a documentation string for the action. It can be viewed by running:
  18714. @example
  18715. herd doc @var{service} action @var{action}
  18716. @end example
  18717. @item procedure
  18718. This should be a gexp that evaluates to a procedure of at least one
  18719. argument, which is the ``running value'' of the service (@pxref{Slots of
  18720. services,,, shepherd, The GNU Shepherd Manual}).
  18721. @end table
  18722. The following example defines an action called @code{say-hello} that kindly
  18723. greets the user:
  18724. @example
  18725. (shepherd-action
  18726. (name 'say-hello)
  18727. (documentation "Say hi!")
  18728. (procedure #~(lambda (running . args)
  18729. (format #t "Hello, friend! arguments: ~s\n"
  18730. args)
  18731. #t)))
  18732. @end example
  18733. Assuming this action is added to the @code{example} service, then you can
  18734. do:
  18735. @example
  18736. # herd say-hello example
  18737. Hello, friend! arguments: ()
  18738. # herd say-hello example a b c
  18739. Hello, friend! arguments: ("a" "b" "c")
  18740. @end example
  18741. This, as you can see, is a fairly sophisticated way to say hello.
  18742. @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
  18743. info on actions.
  18744. @end deftp
  18745. @defvr {Variable Scheme} shepherd-root-service-type
  18746. The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
  18747. This is the service type that extensions target when they want to create
  18748. shepherd services (@pxref{Types service et services}, for an example).
  18749. Each extension must pass a list of @code{<shepherd-service>}.
  18750. @end defvr
  18751. @defvr {Variable Scheme} %shepherd-root-service
  18752. This service represents PID@tie{}1.
  18753. @end defvr
  18754. @node Documentation
  18755. @section Documentation
  18756. @cindex documentation, searching for
  18757. @cindex searching for documentation
  18758. @cindex Info, documentation format
  18759. @cindex man pages
  18760. @cindex manual pages
  18761. In most cases packages installed with Guix come with documentation. There
  18762. are two main documentation formats: ``Info'', a browseable hypertext format
  18763. used for GNU software, and ``manual pages'' (or ``man pages''), the linear
  18764. documentation format traditionally found on Unix. Info manuals are accessed
  18765. with the @command{info} command or with Emacs, and man pages are accessed
  18766. using @command{man}.
  18767. You can look for documentation of software installed on your system by
  18768. keyword. For example, the following command searches for information about
  18769. ``TLS'' in Info manuals:
  18770. @example
  18771. $ info -k TLS
  18772. "(emacs)Network Security" -- STARTTLS
  18773. "(emacs)Network Security" -- TLS
  18774. "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
  18775. "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
  18776. @dots{}
  18777. @end example
  18778. @noindent
  18779. The command below searches for the same keyword in man pages:
  18780. @example
  18781. $ man -k TLS
  18782. SSL (7) - OpenSSL SSL/TLS library
  18783. certtool (1) - GnuTLS certificate tool
  18784. @dots {}
  18785. @end example
  18786. These searches are purely local to your computer so you have the guarantee
  18787. that documentation you find corresponds to what you have actually installed,
  18788. you can access it off-line, and your privacy is respected.
  18789. Once you have these results, you can view the relevant documentation by
  18790. running, say:
  18791. @example
  18792. $ info "(gnutls)Core TLS API"
  18793. @end example
  18794. @noindent
  18795. or:
  18796. @example
  18797. $ man certtool
  18798. @end example
  18799. Info manuals contain sections and indices as well as hyperlinks like those
  18800. found in Web pages. The @command{info} reader (@pxref{Top, Info reader,,
  18801. info-stnd, Stand-alone GNU Info}) and its Emacs counterpart (@pxref{Misc
  18802. Help,,, emacs, The GNU Emacs Manual}) provide intuitive key bindings to
  18803. navigate manuals. @xref{Getting Started,,, info, Info: An Introduction},
  18804. for an introduction to Info navigation.
  18805. @node Installer les fichiers de débogage
  18806. @section Installer les fichiers de débogage
  18807. @cindex debugging files
  18808. Program binaries, as produced by the GCC compilers for instance, are
  18809. typically written in the ELF format, with a section containing
  18810. @dfn{debugging information}. Debugging information is what allows the
  18811. debugger, GDB, to map binary code to source code; it is required to debug a
  18812. compiled program in good conditions.
  18813. Le problème avec les informations de débogage est qu'elles prennent pas mal
  18814. de place sur le disque. Par exemple, les informations de débogage de la
  18815. bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
  18816. garder toutes les informations de débogage de tous les programmes installés
  18817. n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
  18818. pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
  18819. faciliter pour ses utilisateurs l'exercice de leurs libertés
  18820. (@pxref{Distribution GNU}).
  18821. Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a mechanism
  18822. that allows users to get the best of both worlds: debugging information can
  18823. be stripped from the binaries and stored in separate files. GDB is then
  18824. able to load debugging information from those files, when they are available
  18825. (@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
  18826. The GNU distribution takes advantage of this by storing debugging
  18827. information in the @code{lib/debug} sub-directory of a separate package
  18828. output unimaginatively called @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Users can choose to install the @code{debug} output of a package
  18829. when they need it. For instance, the following command installs the
  18830. debugging information for the GNU C Library and for GNU Guile:
  18831. @example
  18832. guix package -i glibc:debug guile:debug
  18833. @end example
  18834. GDB must then be told to look for debug files in the user's profile, by
  18835. setting the @code{debug-file-directory} variable (consider setting it from
  18836. the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with GDB}):
  18837. @example
  18838. (gdb) set debug-file-directory ~/.guix-profile/lib/debug
  18839. @end example
  18840. From there on, GDB will pick up debugging information from the @code{.debug}
  18841. files under @file{~/.guix-profile/lib/debug}.
  18842. In addition, you will most likely want GDB to be able to show the source
  18843. code being debugged. To do that, you will have to unpack the source code of
  18844. the package of interest (obtained with @code{guix build --source},
  18845. @pxref{Invoquer guix build}), and to point GDB to that source directory
  18846. using the @code{directory} command (@pxref{Source Path, @code{directory},,
  18847. gdb, Debugging with GDB}).
  18848. @c XXX: keep me up-to-date
  18849. The @code{debug} output mechanism in Guix is implemented by the
  18850. @code{gnu-build-system} (@pxref{Systèmes de construction}). Currently, it is
  18851. opt-in---debugging information is available only for the packages with
  18852. definitions explicitly declaring a @code{debug} output. This may be changed
  18853. to opt-out in the future if our build farm servers can handle the load. To
  18854. check whether a package has a @code{debug} output, use @command{guix package
  18855. --list-available} (@pxref{Invoquer guix package}).
  18856. @node Mises à jour de sécurité
  18857. @section Mises à jour de sécurité
  18858. @cindex security updates
  18859. @cindex vulnérabilités
  18860. Occasionally, important security vulnerabilities are discovered in software
  18861. packages and must be patched. Guix developers try hard to keep track of
  18862. known vulnerabilities and to apply fixes as soon as possible in the
  18863. @code{master} branch of Guix (we do not yet provide a ``stable'' branch
  18864. containing only security updates.) The @command{guix lint} tool helps
  18865. developers find out about vulnerable versions of software packages in the
  18866. distribution:
  18867. @smallexample
  18868. $ guix lint -c cve
  18869. gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
  18870. gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
  18871. gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
  18872. @dots{}
  18873. @end smallexample
  18874. @xref{Invoquer guix lint}, for more information.
  18875. @quotation Remarque
  18876. As of version @value{VERSION}, the feature described below is considered
  18877. ``beta''.
  18878. @end quotation
  18879. Guix suit une discipline de gestion de paquets fonctionnelle
  18880. (@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
  18881. @emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
  18882. peut grandement ralentir le déploiement de corrections dans les paquets du
  18883. cœur comme libc ou bash comme presque toute la distribution aurait besoin
  18884. d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
  18885. (@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
  18886. temps de souhaité.
  18887. @cindex greffes
  18888. To address this, Guix implements @dfn{grafts}, a mechanism that allows for
  18889. fast deployment of critical updates without the costs associated with a
  18890. whole-distribution rebuild. The idea is to rebuild only the package that
  18891. needs to be patched, and then to ``graft'' it onto packages explicitly
  18892. installed by the user and that were previously referring to the original
  18893. package. The cost of grafting is typically very low, and order of
  18894. magnitudes lower than a full rebuild of the dependency chain.
  18895. @cindex replacements of packages, for grafts
  18896. For instance, suppose a security update needs to be applied to Bash. Guix
  18897. developers will provide a package definition for the ``fixed'' Bash, say
  18898. @var{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
  18899. original package definition is augmented with a @code{replacement} field
  18900. pointing to the package containing the bug fix:
  18901. @example
  18902. (define bash
  18903. (package
  18904. (name "bash")
  18905. ;; @dots{}
  18906. (replacement bash-fixed)))
  18907. @end example
  18908. From there on, any package depending directly or indirectly on Bash---as
  18909. reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
  18910. is installed is automatically ``rewritten'' to refer to @var{bash-fixed}
  18911. instead of @var{bash}. This grafting process takes time proportional to the
  18912. size of the package, usually less than a minute for an ``average'' package
  18913. on a recent machine. Grafting is recursive: when an indirect dependency
  18914. requires grafting, then grafting ``propagates'' up to the package that the
  18915. user is installing.
  18916. Currently, the length of the name and version of the graft and that of the
  18917. package it replaces (@var{bash-fixed} and @var{bash} in the example above)
  18918. must be equal. This restriction mostly comes from the fact that grafting
  18919. works by patching files, including binary files, directly. Other
  18920. restrictions may apply: for instance, when adding a graft to a package
  18921. providing a shared library, the original shared library and its replacement
  18922. must have the same @code{SONAME} and be binary-compatible.
  18923. The @option{--no-grafts} command-line option allows you to forcefully avoid
  18924. grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the
  18925. command:
  18926. @example
  18927. guix build bash --no-grafts
  18928. @end example
  18929. @noindent
  18930. returns the store file name of the original Bash, whereas:
  18931. @example
  18932. guix build bash
  18933. @end example
  18934. @noindent
  18935. returns the store file name of the ``fixed'', replacement Bash. This allows
  18936. you to distinguish between the two variants of Bash.
  18937. To verify which Bash your whole profile refers to, you can run
  18938. (@pxref{Invoquer guix gc}):
  18939. @example
  18940. guix gc -R `readlink -f ~/.guix-profile` | grep bash
  18941. @end example
  18942. @noindent
  18943. @dots{} and compare the store file names that you get with those above.
  18944. Likewise for a complete GuixSD system generation:
  18945. @example
  18946. guix gc -R `guix system build my-config.scm` | grep bash
  18947. @end example
  18948. Lastly, to check which Bash running processes are using, you can use the
  18949. @command{lsof} command:
  18950. @example
  18951. lsof | grep /gnu/store/.*bash
  18952. @end example
  18953. @node Modules de paquets
  18954. @section Modules de paquets
  18955. From a programming viewpoint, the package definitions of the GNU
  18956. distribution are provided by Guile modules in the @code{(gnu packages
  18957. @dots{})} name space@footnote{Note that packages under the @code{(gnu
  18958. packages @dots{})} module name space are not necessarily ``GNU packages''.
  18959. This module naming scheme follows the usual Guile module naming convention:
  18960. @code{gnu} means that these modules are distributed as part of the GNU
  18961. system, and @code{packages} identifies modules that define packages.}
  18962. (@pxref{Modules, Guile modules,, guile, GNU Guile Reference Manual}). For
  18963. instance, the @code{(gnu packages emacs)} module exports a variable named
  18964. @code{emacs}, which is bound to a @code{<package>} object (@pxref{Définition des paquets}).
  18965. The @code{(gnu packages @dots{})} module name space is automatically scanned
  18966. for packages by the command-line tools. For instance, when running
  18967. @code{guix package -i emacs}, all the @code{(gnu packages @dots{})} modules
  18968. are scanned until one that exports a package object whose name is
  18969. @code{emacs} is found. This package search facility is implemented in the
  18970. @code{(gnu packages)} module.
  18971. @cindex personnalisation, des paquets
  18972. @cindex package module search path
  18973. Users can store package definitions in modules with different names---e.g.,
  18974. @code{(my-packages emacs)}@footnote{Note that the file name and module name
  18975. must match. For instance, the @code{(my-packages emacs)} module must be
  18976. stored in a @file{my-packages/emacs.scm} file relative to the load path
  18977. specified with @option{--load-path} or @code{GUIX_PACKAGE_PATH}.
  18978. @xref{Modules and the File System,,, guile, GNU Guile Reference Manual}, for
  18979. details.}. There are two ways to make these package definitions visible to
  18980. the user interfaces:
  18981. @enumerate
  18982. @item
  18983. By adding the directory containing your package modules to the search path
  18984. with the @code{-L} flag of @command{guix package} and other commands
  18985. (@pxref{Options de construction communes}), or by setting the @code{GUIX_PACKAGE_PATH}
  18986. environment variable described below.
  18987. @item
  18988. By defining a @dfn{channel} and configuring @command{guix pull} so that it
  18989. pulls from it. A channel is essentially a Git repository containing package
  18990. modules. @xref{Canaux}, for more information on how to define and use
  18991. channels.
  18992. @end enumerate
  18993. @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
  18994. @defvr {Environment Variable} GUIX_PACKAGE_PATH
  18995. This is a colon-separated list of directories to search for additional
  18996. package modules. Directories listed in this variable take precedence over
  18997. the own modules of the distribution.
  18998. @end defvr
  18999. The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: each
  19000. package is built based solely on other packages in the distribution. The
  19001. root of this dependency graph is a small set of @dfn{bootstrap binaries},
  19002. provided by the @code{(gnu packages bootstrap)} module. For more
  19003. information on bootstrapping, @pxref{Bootstrapping}.
  19004. @node Consignes d'empaquetage
  19005. @section Consignes d'empaquetage
  19006. @cindex packages, creating
  19007. The GNU distribution is nascent and may well lack some of your favorite
  19008. packages. This section describes how you can help make the distribution
  19009. grow. @xref{Contribuer}, for additional information on how you can help.
  19010. Free software packages are usually distributed in the form of @dfn{source
  19011. code tarballs}---typically @file{tar.gz} files that contain all the source
  19012. files. Adding a package to the distribution means essentially two things:
  19013. adding a @dfn{recipe} that describes how to build the package, including a
  19014. list of other packages required to build it, and adding @dfn{package
  19015. metadata} along with that recipe, such as a description and licensing
  19016. information.
  19017. In Guix all this information is embodied in @dfn{package definitions}.
  19018. Package definitions provide a high-level view of the package. They are
  19019. written using the syntax of the Scheme programming language; in fact, for
  19020. each package we define a variable bound to the package definition, and
  19021. export that variable from a module (@pxref{Modules de paquets}). However,
  19022. in-depth Scheme knowledge is @emph{not} a prerequisite for creating
  19023. packages. For more information on package definitions, @pxref{Définition des paquets}.
  19024. Once a package definition is in place, stored in a file in the Guix source
  19025. tree, it can be tested using the @command{guix build} command
  19026. (@pxref{Invoquer guix build}). For example, assuming the new package is
  19027. called @code{gnew}, you may run this command from the Guix build tree
  19028. (@pxref{Lancer Guix avant qu'il ne soit installé}):
  19029. @example
  19030. ./pre-inst-env guix build gnew --keep-failed
  19031. @end example
  19032. Using @code{--keep-failed} makes it easier to debug build failures since it
  19033. provides access to the failed build tree. Another useful command-line
  19034. option when debugging is @code{--log-file}, to access the build log.
  19035. If the package is unknown to the @command{guix} command, it may be that the
  19036. source file contains a syntax error, or lacks a @code{define-public} clause
  19037. to export the package variable. To figure it out, you may load the module
  19038. from Guile to get more information about the actual error:
  19039. @example
  19040. ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
  19041. @end example
  19042. Once your package builds correctly, please send us a patch
  19043. (@pxref{Contribuer}). Well, if you need help, we will be happy to help
  19044. you too. Once the patch is committed in the Guix repository, the new
  19045. package automatically gets built on the supported platforms by
  19046. @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
  19047. system}.
  19048. @cindex substituter
  19049. On peut obtenir la nouvelle définition du paquet simplement en lançant
  19050. @command{guix pull} (@pxref{Invoquer guix pull}). Lorsque
  19051. @code{hydra.gnu.org} a fini de construire le paquet, l'installation du
  19052. paquet y télécharge automatiquement les binaires (@pxref{Substituts}). La
  19053. seule intervention humaine requise est pendant la revue et l'application du
  19054. correctif.
  19055. @menu
  19056. * Liberté logiciel:: Ce que la distribution peut contenir.
  19057. * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
  19058. * Numéros de version:: Lorsque le nom n'est pas suffisant.
  19059. * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
  19060. paquet.
  19061. * Modules python:: Un peu de comédie anglaise.
  19062. * Modules perl:: Petites perles.
  19063. * Paquets java:: Pause café.
  19064. * Polices de caractères:: À fond les fontes.
  19065. @end menu
  19066. @node Liberté logiciel
  19067. @subsection Liberté logiciel
  19068. @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
  19069. @cindex free software
  19070. The GNU operating system has been developed so that users can have freedom
  19071. in their computing. GNU is @dfn{free software}, meaning that users have the
  19072. @url{http://www.gnu.org/philosophy/free-sw.html,four essential freedoms}: to
  19073. run the program, to study and change the program in source code form, to
  19074. redistribute exact copies, and to distribute modified versions. Packages
  19075. found in the GNU distribution provide only software that conveys these four
  19076. freedoms.
  19077. In addition, the GNU distribution follow the
  19078. @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
  19079. software distribution guidelines}. Among other things, these guidelines
  19080. reject non-free firmware, recommendations of non-free software, and discuss
  19081. ways to deal with trademarks and patents.
  19082. Some otherwise free upstream package sources contain a small and optional
  19083. subset that violates the above guidelines, for instance because this subset
  19084. is itself non-free code. When that happens, the offending items are removed
  19085. with appropriate patches or code snippets in the @code{origin} form of the
  19086. package (@pxref{Définition des paquets}). This way, @code{guix build --source}
  19087. returns the ``freed'' source rather than the unmodified upstream source.
  19088. @node Conventions de nommage
  19089. @subsection Conventions de nommage
  19090. @cindex package name
  19091. A package has actually two names associated with it: First, there is the
  19092. name of the @emph{Scheme variable}, the one following @code{define-public}.
  19093. By this name, the package can be made known in the Scheme code, for instance
  19094. as input to another package. Second, there is the string in the @code{name}
  19095. field of a package definition. This name is used by package management
  19096. commands such as @command{guix package} and @command{guix build}.
  19097. Both are usually the same and correspond to the lowercase conversion of the
  19098. project name chosen upstream, with underscores replaced with hyphens. For
  19099. instance, GNUnet is available as @code{gnunet}, and SDL_net as
  19100. @code{sdl-net}.
  19101. We do not add @code{lib} prefixes for library packages, unless these are
  19102. already part of the official project name. But @pxref{Modules python} and
  19103. @ref{Modules perl} for special rules concerning modules for the Python and
  19104. Perl languages.
  19105. Font package names are handled differently, @pxref{Polices de caractères}.
  19106. @node Numéros de version
  19107. @subsection Numéros de version
  19108. @cindex package version
  19109. We usually package only the latest version of a given free software
  19110. project. But sometimes, for instance for incompatible library versions, two
  19111. (or more) versions of the same package are needed. These require different
  19112. Scheme variable names. We use the name as defined in @ref{Conventions de nommage}
  19113. for the most recent version; previous versions use the same name, suffixed
  19114. by @code{-} and the smallest prefix of the version number that may
  19115. distinguish the two versions.
  19116. The name inside the package definition is the same for all versions of a
  19117. package and does not contain any version number.
  19118. For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as
  19119. follows:
  19120. @example
  19121. (define-public gtk+
  19122. (package
  19123. (name "gtk+")
  19124. (version "3.9.12")
  19125. ...))
  19126. (define-public gtk+-2
  19127. (package
  19128. (name "gtk+")
  19129. (version "2.24.20")
  19130. ...))
  19131. @end example
  19132. If we also wanted GTK+ 3.8.2, this would be packaged as
  19133. @example
  19134. (define-public gtk+-3.8
  19135. (package
  19136. (name "gtk+")
  19137. (version "3.8.2")
  19138. ...))
  19139. @end example
  19140. @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
  19141. @c for a discussion of what follows.
  19142. @cindex version number, for VCS snapshots
  19143. Occasionally, we package snapshots of upstream's version control system
  19144. (VCS) instead of formal releases. This should remain exceptional, because
  19145. it is up to upstream developers to clarify what the stable release is. Yet,
  19146. it is sometimes necessary. So, what should we put in the @code{version}
  19147. field?
  19148. Clearly, we need to make the commit identifier of the VCS snapshot visible
  19149. in the version string, but we also need to make sure that the version string
  19150. is monotonically increasing so that @command{guix package --upgrade} can
  19151. determine which version is newer. Since commit identifiers, notably with
  19152. Git, are not monotonically increasing, we add a revision number that we
  19153. increase each time we upgrade to a newer snapshot. The resulting version
  19154. string looks like this:
  19155. @example
  19156. 2.0.11-3.cabba9e
  19157. ^ ^ ^
  19158. | | `-- upstream commit ID
  19159. | |
  19160. | `--- Guix package revision
  19161. |
  19162. latest upstream version
  19163. @end example
  19164. It is a good idea to strip commit identifiers in the @code{version} field
  19165. to, say, 7 digits. It avoids an aesthetic annoyance (assuming aesthetics
  19166. have a role to play here) as well as problems related to OS limits such as
  19167. the maximum shebang length (127 bytes for the Linux kernel.) It is best to
  19168. use the full commit identifiers in @code{origin}s, though, to avoid
  19169. ambiguities. A typical package definition may look like this:
  19170. @example
  19171. (define my-package
  19172. (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
  19173. (revision "1")) ;révision du paquet Guix
  19174. (package
  19175. (version (git-version "0.9" revision commit))
  19176. (source (origin
  19177. (method git-fetch)
  19178. (uri (git-reference
  19179. (url "git://example.org/my-package.git")
  19180. (commit commit)))
  19181. (sha256 (base32 "1mbikn@dots{}"))
  19182. (file-name (git-file-name name version))))
  19183. ;; @dots{}
  19184. )))
  19185. @end example
  19186. @node Synopsis et descriptions
  19187. @subsection Synopsis et descriptions
  19188. @cindex package description
  19189. @cindex package synopsis
  19190. As we have seen before, each package in GNU@tie{}Guix includes a synopsis
  19191. and a description (@pxref{Définition des paquets}). Synopses and descriptions
  19192. are important: They are what @command{guix package --search} searches, and a
  19193. crucial piece of information to help users determine whether a given package
  19194. suits their needs. Consequently, packagers should pay attention to what
  19195. goes into them.
  19196. Synopses must start with a capital letter and must not end with a period.
  19197. They must not start with ``a'' or ``the'', which usually does not bring
  19198. anything; for instance, prefer ``File-frobbing tool'' over ``A tool that
  19199. frobs files''. The synopsis should say what the package is---e.g., ``Core
  19200. GNU utilities (file, text, shell)''---or what it is used for---e.g., the
  19201. synopsis for GNU@tie{}grep is ``Print lines matching a pattern''.
  19202. Keep in mind that the synopsis must be meaningful for a very wide audience.
  19203. For example, ``Manipulate alignments in the SAM format'' might make sense
  19204. for a seasoned bioinformatics researcher, but might be fairly unhelpful or
  19205. even misleading to a non-specialized audience. It is a good idea to come up
  19206. with a synopsis that gives an idea of the application domain of the
  19207. package. In this example, this might give something like ``Manipulate
  19208. nucleotide sequence alignments'', which hopefully gives the user a better
  19209. idea of whether this is what they are looking for.
  19210. Descriptions should take between five and ten lines. Use full sentences,
  19211. and avoid using acronyms without first introducing them. Please avoid
  19212. marketing phrases such as ``world-leading'', ``industrial-strength'', and
  19213. ``next-generation'', and avoid superlatives like ``the most
  19214. advanced''---they are not helpful to users looking for a package and may
  19215. even sound suspicious. Instead, try to be factual, mentioning use cases and
  19216. features.
  19217. @cindex Texinfo markup, in package descriptions
  19218. Descriptions can include Texinfo markup, which is useful to introduce
  19219. ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or hyperlinks
  19220. (@pxref{Overview,,, texinfo, GNU Texinfo}). However you should be careful
  19221. when using some characters for example @samp{@@} and curly braces which are
  19222. the basic special characters in Texinfo (@pxref{Special Characters,,,
  19223. texinfo, GNU Texinfo}). User interfaces such as @command{guix package
  19224. --show} take care of rendering it appropriately.
  19225. Synopses and descriptions are translated by volunteers
  19226. @uref{http://translationproject.org/domain/guix-packages.html, at the
  19227. Translation Project} so that as many users as possible can read them in
  19228. their native language. User interfaces search them and display them in the
  19229. language specified by the current locale.
  19230. To allow @command{xgettext} to extract them as translatable strings,
  19231. synopses and descriptions @emph{must be literal strings}. This means that
  19232. you cannot use @code{string-append} or @code{format} to construct these
  19233. strings:
  19234. @lisp
  19235. (package
  19236. ;; @dots{}
  19237. (synopsis "This is translatable")
  19238. (description (string-append "This is " "*not*" " translatable.")))
  19239. @end lisp
  19240. Translation is a lot of work so, as a packager, please pay even more
  19241. attention to your synopses and descriptions as every change may entail
  19242. additional work for translators. In order to help them, it is possible to
  19243. make recommendations or instructions visible to them by inserting special
  19244. comments like this (@pxref{xgettext Invocation,,, gettext, GNU Gettext}):
  19245. @example
  19246. ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
  19247. (description "ARandR is designed to provide a simple visual front end
  19248. for the X11 resize-and-rotate (RandR) extension. @dots{}")
  19249. @end example
  19250. @node Modules python
  19251. @subsection Modules python
  19252. @cindex python
  19253. We currently package Python 2 and Python 3, under the Scheme variable names
  19254. @code{python-2} and @code{python} as explained in @ref{Numéros de version}. To
  19255. avoid confusion and naming clashes with other programming languages, it
  19256. seems desirable that the name of a package for a Python module contains the
  19257. word @code{python}.
  19258. Some modules are compatible with only one version of Python, others with
  19259. both. If the package Foo compiles only with Python 3, we name it
  19260. @code{python-foo}; if it compiles only with Python 2, we name it
  19261. @code{python2-foo}. If it is compatible with both versions, we create two
  19262. packages with the corresponding names.
  19263. If a project already contains the word @code{python}, we drop this; for
  19264. instance, the module python-dateutil is packaged under the names
  19265. @code{python-dateutil} and @code{python2-dateutil}. If the project name
  19266. starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as
  19267. described above.
  19268. @subsubsection Specifying Dependencies
  19269. @cindex inputs, for Python packages
  19270. Dependency information for Python packages is usually available in the
  19271. package source tree, with varying degrees of accuracy: in the
  19272. @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
  19273. Your mission, when writing a recipe for a Python package, is to map these
  19274. dependencies to the appropriate type of ``input'' (@pxref{Référence de paquet,
  19275. inputs}). Although the @code{pypi} importer normally does a good job
  19276. (@pxref{Invoquer guix import}), you may want to check the following check
  19277. list to determine which dependency goes where.
  19278. @itemize
  19279. @item
  19280. We currently package Python 2 with @code{setuptools} and @code{pip}
  19281. installed like Python 3.4 has per default. Thus you don't need to specify
  19282. either of these as an input. @command{guix lint} will warn you if you do.
  19283. @item
  19284. Python dependencies required at run time go into @code{propagated-inputs}.
  19285. They are typically defined with the @code{install_requires} keyword in
  19286. @file{setup.py}, or in the @file{requirements.txt} file.
  19287. @item
  19288. Python packages required only at build time---e.g., those listed with the
  19289. @code{setup_requires} keyword in @file{setup.py}---or only for
  19290. testing---e.g., those in @code{tests_require}---go into
  19291. @code{native-inputs}. The rationale is that (1) they do not need to be
  19292. propagated because they are not needed at run time, and (2) in a
  19293. cross-compilation context, it's the ``native'' input that we'd want.
  19294. Examples are the @code{pytest}, @code{mock}, and @code{nose} test
  19295. frameworks. Of course if any of these packages is also required at
  19296. run-time, it needs to go to @code{propagated-inputs}.
  19297. @item
  19298. Anything that does not fall in the previous categories goes to
  19299. @code{inputs}, for example programs or C libraries required for building
  19300. Python packages containing C extensions.
  19301. @item
  19302. If a Python package has optional dependencies (@code{extras_require}), it is
  19303. up to you to decide whether to add them or not, based on their
  19304. usefulness/overhead ratio (@pxref{Envoyer des correctifs, @command{guix size}}).
  19305. @end itemize
  19306. @node Modules perl
  19307. @subsection Modules perl
  19308. @cindex perl
  19309. Perl programs standing for themselves are named as any other package, using
  19310. the lowercase upstream name. For Perl packages containing a single class,
  19311. we use the lowercase class name, replace all occurrences of @code{::} by
  19312. dashes and prepend the prefix @code{perl-}. So the class @code{XML::Parser}
  19313. becomes @code{perl-xml-parser}. Modules containing several classes keep
  19314. their lowercase upstream name and are also prepended by @code{perl-}. Such
  19315. modules tend to have the word @code{perl} somewhere in their name, which
  19316. gets dropped in favor of the prefix. For instance, @code{libwww-perl}
  19317. becomes @code{perl-libwww}.
  19318. @node Paquets java
  19319. @subsection Paquets java
  19320. @cindex java
  19321. Java programs standing for themselves are named as any other package, using
  19322. the lowercase upstream name.
  19323. To avoid confusion and naming clashes with other programming languages, it
  19324. is desirable that the name of a package for a Java package is prefixed with
  19325. @code{java-}. If a project already contains the word @code{java}, we drop
  19326. this; for instance, the package @code{ngsjava} is packaged under the name
  19327. @code{java-ngs}.
  19328. For Java packages containing a single class or a small class hierarchy, we
  19329. use the lowercase class name, replace all occurrences of @code{.} by dashes
  19330. and prepend the prefix @code{java-}. So the class @code{apache.commons.cli}
  19331. becomes package @code{java-apache-commons-cli}.
  19332. @node Polices de caractères
  19333. @subsection Polices de caractères
  19334. @cindex polices
  19335. For fonts that are in general not installed by a user for typesetting
  19336. purposes, or that are distributed as part of a larger software package, we
  19337. rely on the general packaging rules for software; for instance, this applies
  19338. to the fonts delivered as part of the X.Org system or fonts that are part of
  19339. TeX Live.
  19340. To make it easier for a user to search for fonts, names for other packages
  19341. containing only fonts are constructed as follows, independently of the
  19342. upstream package name.
  19343. The name of a package containing only one font family starts with
  19344. @code{font-}; it is followed by the foundry name and a dash @code{-} if the
  19345. foundry is known, and the font family name, in which spaces are replaced by
  19346. dashes (and as usual, all upper case letters are transformed to lower
  19347. case). For example, the Gentium font family by SIL is packaged under the
  19348. name @code{font-sil-gentium}.
  19349. For a package containing several font families, the name of the collection
  19350. is used in the place of the font family name. For instance, the Liberation
  19351. fonts consist of three families, Liberation Sans, Liberation Serif and
  19352. Liberation Mono. These could be packaged separately under the names
  19353. @code{font-liberation-sans} and so on; but as they are distributed together
  19354. under a common name, we prefer to package them together as
  19355. @code{font-liberation}.
  19356. In the case where several formats of the same font family or font collection
  19357. are packaged separately, a short form of the format, prepended by a dash, is
  19358. added to the package name. We use @code{-ttf} for TrueType fonts,
  19359. @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
  19360. fonts.
  19361. @node Bootstrapping
  19362. @section Bootstrapping
  19363. @c Adapted from the ELS 2013 paper.
  19364. @cindex bootstrapping
  19365. Bootstrapping in our context refers to how the distribution gets built
  19366. ``from nothing''. Remember that the build environment of a derivation
  19367. contains nothing but its declared inputs (@pxref{Introduction}). So there's
  19368. an obvious chicken-and-egg problem: how does the first package get built?
  19369. How does the first compiler get compiled? Note that this is a question of
  19370. interest only to the curious hacker, not to the regular user, so you can
  19371. shamelessly skip this section if you consider yourself a ``regular user''.
  19372. @cindex bootstrap binaries
  19373. The GNU system is primarily made of C code, with libc at its core. The GNU
  19374. build system itself assumes the availability of a Bourne shell and
  19375. command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
  19376. `grep'. Furthermore, build programs---programs that run @code{./configure},
  19377. @code{make}, etc.---are written in Guile Scheme (@pxref{Dérivations}).
  19378. Consequently, to be able to build anything at all, from scratch, Guix relies
  19379. on pre-built binaries of Guile, GCC, Binutils, libc, and the other packages
  19380. mentioned above---the @dfn{bootstrap binaries}.
  19381. These bootstrap binaries are ``taken for granted'', though we can also
  19382. re-create them if needed (more on that later).
  19383. @unnumberedsubsec Preparing to Use the Bootstrap Binaries
  19384. @c As of Emacs 24.3, Info-mode displays the image, but since it's a
  19385. @c large image, it's hard to scroll. Oh well.
  19386. @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap
  19387. derivations}
  19388. The figure above shows the very beginning of the dependency graph of the
  19389. distribution, corresponding to the package definitions of the @code{(gnu
  19390. packages bootstrap)} module. A similar figure can be generated with
  19391. @command{guix graph} (@pxref{Invoquer guix graph}), along the lines of:
  19392. @example
  19393. guix graph -t derivation \
  19394. -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
  19395. | dot -Tps > t.ps
  19396. @end example
  19397. At this level of detail, things are slightly complex. First, Guile itself
  19398. consists of an ELF executable, along with many source and compiled Scheme
  19399. files that are dynamically loaded when it runs. This gets stored in the
  19400. @file{guile-2.0.7.tar.xz} tarball shown in this graph. This tarball is part
  19401. of Guix's ``source'' distribution, and gets inserted into the store with
  19402. @code{add-to-store} (@pxref{Le dépôt}).
  19403. But how do we write a derivation that unpacks this tarball and adds it to
  19404. the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
  19405. derivation---the first one that gets built---uses @code{bash} as its
  19406. builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
  19407. @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, @file{xz},
  19408. and @file{mkdir} are statically-linked binaries, also part of the Guix
  19409. source distribution, whose sole purpose is to allow the Guile tarball to be
  19410. unpacked.
  19411. Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning Guile
  19412. that can be used to run subsequent build programs. Its first task is to
  19413. download tarballs containing the other pre-built binaries---this is what the
  19414. @code{.tar.xz.drv} derivations do. Guix modules such as
  19415. @code{ftp-client.scm} are used for this purpose. The
  19416. @code{module-import.drv} derivations import those modules in a directory in
  19417. the store, using the original layout. The @code{module-import-compiled.drv}
  19418. derivations compile those modules, and write them in an output directory
  19419. with the right layout. This corresponds to the @code{#:modules} argument of
  19420. @code{build-expression->derivation} (@pxref{Dérivations}).
  19421. Finally, the various tarballs are unpacked by the derivations
  19422. @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc., at which
  19423. point we have a working C tool chain.
  19424. @unnumberedsubsec Building the Build Tools
  19425. Bootstrapping is complete when we have a full tool chain that does not
  19426. depend on the pre-built bootstrap tools discussed above. This no-dependency
  19427. requirement is verified by checking whether the files of the final tool
  19428. chain contain references to the @file{/gnu/store} directories of the
  19429. bootstrap inputs. The process that leads to this ``final'' tool chain is
  19430. described by the package definitions found in the @code{(gnu packages
  19431. commencement)} module.
  19432. The @command{guix graph} command allows us to ``zoom out'' compared to the
  19433. graph above, by looking at the level of package objects instead of
  19434. individual derivations---remember that a package may translate to several
  19435. derivations, typically one derivation to download its source, one to build
  19436. the Guile modules it needs, and one to actually build the package from
  19437. source. The command:
  19438. @example
  19439. guix graph -t bag \
  19440. -e '(@@@@ (gnu packages commencement)
  19441. glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
  19442. @end example
  19443. @noindent
  19444. produces the dependency graph leading to the ``final'' C
  19445. library@footnote{You may notice the @code{glibc-intermediate} label,
  19446. suggesting that it is not @emph{quite} final, but as a good approximation,
  19447. we will consider it final.}, depicted below.
  19448. @image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
  19449. paquets}
  19450. @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
  19451. The first tool that gets built with the bootstrap binaries is
  19452. GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite for
  19453. all the following packages. From there Findutils and Diffutils get built.
  19454. Then come the first-stage Binutils and GCC, built as pseudo cross
  19455. tools---i.e., with @code{--target} equal to @code{--host}. They are used to
  19456. build libc. Thanks to this cross-build trick, this libc is guaranteed not
  19457. to hold any reference to the initial tool chain.
  19458. From there the final Binutils and GCC (not shown above) are built. GCC uses
  19459. @code{ld} from the final Binutils, and links programs against the just-built
  19460. libc. This tool chain is used to build the other packages used by Guix and
  19461. by the GNU Build System: Guile, Bash, Coreutils, etc.
  19462. And voilà! At this point we have the complete set of build tools that the
  19463. GNU Build System expects. These are in the @code{%final-inputs} variable of
  19464. the @code{(gnu packages commencement)} module, and are implicitly used by
  19465. any package that uses @code{gnu-build-system} (@pxref{Systèmes de construction,
  19466. @code{gnu-build-system}}).
  19467. @unnumberedsubsec Building the Bootstrap Binaries
  19468. @cindex bootstrap binaries
  19469. Because the final tool chain does not depend on the bootstrap binaries,
  19470. those rarely need to be updated. Nevertheless, it is useful to have an
  19471. automated way to produce them, should an update occur, and this is what the
  19472. @code{(gnu packages make-bootstrap)} module provides.
  19473. The following command builds the tarballs containing the bootstrap binaries
  19474. (Guile, Binutils, GCC, libc, and a tarball containing a mixture of Coreutils
  19475. and other basic command-line tools):
  19476. @example
  19477. guix build bootstrap-tarballs
  19478. @end example
  19479. The generated tarballs are those that should be referred to in the
  19480. @code{(gnu packages bootstrap)} module mentioned at the beginning of this
  19481. section.
  19482. Still here? Then perhaps by now you've started to wonder: when do we reach a
  19483. fixed point? That is an interesting question! The answer is unknown, but if
  19484. you would like to investigate further (and have significant computational
  19485. and storage resources to do so), then let us know.
  19486. @unnumberedsubsec Reducing the Set of Bootstrap Binaries
  19487. Our bootstrap binaries currently include GCC, Guile, etc. That's a lot of
  19488. binary code! Why is that a problem? It's a problem because these big chunks
  19489. of binary code are practically non-auditable, which makes it hard to
  19490. establish what source code produced them. Every unauditable binary also
  19491. leaves us vulnerable to compiler backdoors as described by Ken Thompson in
  19492. the 1984 paper @emph{Reflections on Trusting Trust}.
  19493. This is mitigated by the fact that our bootstrap binaries were generated
  19494. from an earlier Guix revision. Nevertheless it lacks the level of
  19495. transparency that we get in the rest of the package dependency graph, where
  19496. Guix always gives us a source-to-binary mapping. Thus, our goal is to
  19497. reduce the set of bootstrap binaries to the bare minimum.
  19498. The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
  19499. on-going projects to do that. One of these is about replacing the bootstrap
  19500. GCC with a sequence of assemblers, interpreters, and compilers of increasing
  19501. complexity, which could be built from source starting from a simple and
  19502. auditable assembler. Your help is welcome!
  19503. @node Porter
  19504. @section Porter vers une nouvelle plateforme
  19505. As discussed above, the GNU distribution is self-contained, and
  19506. self-containment is achieved by relying on pre-built ``bootstrap binaries''
  19507. (@pxref{Bootstrapping}). These binaries are specific to an operating system
  19508. kernel, CPU architecture, and application binary interface (ABI). Thus, to
  19509. port the distribution to a platform that is not yet supported, one must
  19510. build those bootstrap binaries, and update the @code{(gnu packages
  19511. bootstrap)} module to use them on that platform.
  19512. Fortunately, Guix can @emph{cross compile} those bootstrap binaries. When
  19513. everything goes well, and assuming the GNU tool chain supports the target
  19514. platform, this can be as simple as running a command like this one:
  19515. @example
  19516. guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
  19517. @end example
  19518. For this to work, the @code{glibc-dynamic-linker} procedure in @code{(gnu
  19519. packages bootstrap)} must be augmented to return the right file name for
  19520. libc's dynamic linker on that platform; likewise,
  19521. @code{system->linux-architecture} in @code{(gnu packages linux)} must be
  19522. taught about the new platform.
  19523. Once these are built, the @code{(gnu packages bootstrap)} module needs to be
  19524. updated to refer to these binaries on the target platform. That is, the
  19525. hashes and URLs of the bootstrap tarballs for the new platform must be added
  19526. alongside those of the currently supported platforms. The bootstrap Guile
  19527. tarball is treated specially: it is expected to be available locally, and
  19528. @file{gnu/local.mk} has rules to download it for the supported
  19529. architectures; a rule for the new platform must be added as well.
  19530. In practice, there may be some complications. First, it may be that the
  19531. extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
  19532. above) is not recognized by all the GNU tools. Typically, glibc recognizes
  19533. some of these, whereas GCC uses an extra @code{--with-abi} configure flag
  19534. (see @code{gcc.scm} for examples of how to handle this). Second, some of
  19535. the required packages could fail to build for that platform. Lastly, the
  19536. generated binaries could be broken for some reason.
  19537. @c *********************************************************************
  19538. @include contributing.fr.texi
  19539. @c *********************************************************************
  19540. @node Remerciements
  19541. @chapter Remerciements
  19542. Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
  19543. Nix} conçu et implémenté par Eelco Dolstra, avec des constributions d'autres
  19544. personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
  19545. gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
  19546. comme les mises à jour de paquets transactionnelles et les retours en
  19547. arrière, les profils par utilisateurs et les processus de constructions
  19548. transparents pour les références. Sans ce travail, Guix n'existerait pas.
  19549. Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
  19550. été une inspiration pour Guix.
  19551. GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
  19552. grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
  19553. plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
  19554. liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
  19555. de l'infrastructure, en fournissant des images et des thèmes, en faisant des
  19556. suggestions et bien plus. Merci !
  19557. @c *********************************************************************
  19558. @node La licence GNU Free Documentation
  19559. @appendix La licence GNU Free Documentation
  19560. @cindex license, GNU Free Documentation License
  19561. @include fdl-1.3.texi
  19562. @c *********************************************************************
  19563. @node Index des concepts
  19564. @unnumbered Index des concepts
  19565. @printindex cp
  19566. @node Index de programmation
  19567. @unnumbered Index de programmation
  19568. @syncodeindex tp fn
  19569. @syncodeindex vr fn
  19570. @printindex fn
  19571. @bye
  19572. @c Local Variables:
  19573. @c ispell-local-dictionary: "american";
  19574. @c End: