123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924 |
- \input texinfo
- @c ===========================================================================
- @c
- @c This file was generated with po4a. Translate the source file.
- @c
- @c ===========================================================================
- @c -*-texinfo-*-
- @c %**start of header
- @setfilename guix.fr.info
- @documentencoding UTF-8
- @documentlanguage fr
- @frenchspacing on
- @settitle Manuel de référence de GNU Guix
- @c %**end of header
- @include version-fr.texi
- @c Identifier of the OpenPGP key used to sign tarballs and such.
- @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
- @set KEY-SERVER pool.sks-keyservers.net
- @copying
- Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic
- Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@* Copyright
- @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014, 2015,
- 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
- Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
- 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
- Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo
- Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
- 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018
- Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright
- @copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017,
- 2018 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
- Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2017,
- 2018 Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
- Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
- 2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
- Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
- Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
- Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
- Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
- Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
- Andy Wingo@* Copyright @copyright{} 2017, 2018 Arun Isaac@* Copyright
- @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
- Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
- Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
- @copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
- Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
- 2018 Alex Vong@*
- Vous avez la permission de copier, distribuer ou modifier ce document sous
- les termes de la Licence GNU Free Documentation, version 1.3 ou toute
- version ultérieure publiée par la Free Software Foundation ; sans section
- invariante, texte de couverture et sans texte de quatrième de couverture.
- Une copie de la licence est incluse dans la section intitulée « GNU Free
- Documentation License ».
- @end copying
- @dircategory Administration système
- @direntry
- * Guix: (guix.fr). Gérer les logiciels installés et la
- configuration du système.
- * guix package : (guix.fr)Invoquer guix package. Intaller, supprimer et
- mettre à jour des
- paquets.
- * guix gc : (guix.fr)Invoquer guix gc. Récupérer de l'espace disque
- inutilisé.
- * guix pull : (guix.fr)Invoquer guix pull. Mettre à jour la liste des
- paquets disponibles.
- * guix system : (guix.fr)Invoquer guix system. Gérer la configuration du
- système d'exploitation.
- @end direntry
- @dircategory Développement logiciel
- @direntry
- * guix environment : (guix.fr)Invoquer guix environment. Construire des
- environnements
- de construction
- avec Guix.
- * guix build : (guix.fr)Invoquer guix build. Construire des paquets.
- * guix pack : (guix.fr) Invoquer guix pack. Créer des lots binaires.
- @end direntry
- @titlepage
- @title Manuel de référence de GNU Guix
- @subtitle Utiliser le gestionnaire de paquet fonctionnel GNU Guix
- @author Les développeurs de GNU Guix
- @page
- @vskip 0pt plus 1filll
- Édition @value{EDITION} @* @value{UPDATED} @*
- @insertcopying
- @end titlepage
- @contents
- @c *********************************************************************
- @node Top
- @top GNU Guix
- Cette documentation décrit GNU Guix version @value{VERSION}, un outil de
- gestion de paquets fonctionnel écrit pour le système GNU@.
- @c TRANSLATORS: You can replace the following paragraph with information on
- @c how to join your own translation team and how to report issues with the
- @c translation.
- Ce manuel est aussi disponible en anglais (@pxref{Top,,, guix, GNU Guix
- Reference Manual}) et en allemand (@pxref{Top,,, guix.de, Referenzhandbuch
- zu GNU Guix}). Si vous souhaitez nous aider à traduire ce manuel en
- français, vous pouvez nous rejoindre sur le
- @uref{https://translationproject.org/domain/guix-manual.html, projet de
- traduction} et sur la liste de diffusion
- @uref{https://listes.traduc.org/mailman/listinfo/traduc/,
- traduc@@traduc.org}.
- @menu
- * Introduction:: Qu'est-ce que Guix ?
- * Installation:: Installer Guix.
- * Gestion de paquets:: Installation des paquets, mises à jour, etc.
- * Interface de programmation:: Utiliser Guix en Scheme.
- * Utilitaires:: Commandes de gestion de paquets.
- * Distribution GNU:: Des logiciels pour un système GNU convivial.
- * Contribuer:: Nous avons besoin de votre aide !
- * Remerciements:: Merci !
- * La licence GNU Free Documentation:: La licence de ce manuel.
- * Index des concepts:: Les concepts.
- * Index de programmation:: Types de données, fonctions et variables.
- @detailmenu
- --- Liste détaillée des nœuds ---
- Installation
- * Installation binaire:: Commencer à utiliser Guix en un rien de temps
- !
- * Prérequis:: Logiciels requis pour construire et lancer
- Guix.
- * Lancer la suite de tests:: Tester Guix.
- * Paramétrer le démon:: Préparer l'environnement du démon de
- construction.
- * Invoquer guix-daemon:: Lancer le démon de construction.
- * Réglages applicatifs:: Réglages spécifiques pour les application.
- Paramétrer le démon
- * Réglages de l'environnement de construction:: Préparer l'environnement
- de construction isolé.
- * Réglages du délestage du démon:: Envoyer des constructions à des
- machines distantes.
- * Support de SELinux:: Utiliser une politique SELinux pour le démon.
- Gestion de paquets
- * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
- * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
- * Substituts:: Télécharger des binaire déjà construits.
- * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
- résultats.
- * Invoquer guix gc:: Lancer le ramasse-miettes.
- * Invoquer guix pull:: Récupérer la dernière version de Guix et de
- la distribution.
- * Canaux:: Personnaliser la collection des paquets.
- * Inférieurs:: Interagir avec une autre révision de Guix.
- * Invoquer guix describe:: Affiche des informations sur la révision Guix
- actuelle.
- * Invoquer guix pack:: Créer des lots de logiciels.
- * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
- Substituts
- * Serveur de substituts officiel:: Une source particulière de substituts.
- * Autoriser un serveur de substituts:: Comment activer ou désactiver les
- substituts.
- * Authentification des substituts:: Coment Guix vérifie les substituts.
- * Paramètres de serveur mandataire:: Comment récupérer des substituts à
- travers un serveur mandataire.
- * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
- * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
- un paquet binaire ?
- Interface de programmation
- * Définition des paquets:: Définir de nouveaux paquets.
- * Systèmes de construction:: Spécifier comment construire les paquets.
- * Le dépôt:: Manipuler le dépôt de paquets.
- * Dérivations:: Interface de bas-niveau avec les dérivations
- de paquets.
- * La monad du dépôt:: Interface purement fonctionnelle avec le
- dépôt.
- * G-Expressions:: Manipuler les expressions de construction.
- * Invoquer guix repl:: S'amuser avec Guix de manière interactive.
- Définition des paquets
- * Référence de paquet:: Le type de donnée des paquets.
- * Référence d'origine:: Le type de données d'origine.
- Utilitaires
- * Invoquer guix build:: Construire des paquets depuis la ligne de
- commande.
- * Invoquer guix edit:: Modifier les définitions de paquets.
- * Invoquer guix download:: Télécharger un fichier et afficher son hash.
- * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
- * Invoquer guix import:: Importer des définitions de paquets.
- * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
- * Invoquer guix lint:: Trouver des erreurs dans les définitions de
- paquets.
- * Invoquer guix size:: Profiler l'utilisation du disque.
- * Invoquer guix graph:: Visualiser le graphe des paquets.
- * Invoquer guix environment:: Mettre en place des environnements de
- développement.
- * Invoquer guix publish:: Partager des substituts.
- * Invoquer guix challenge:: Défier les serveurs de substituts.
- * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
- * Invoquer guix container:: Isolation de processus.
- * Invoquer guix weather:: Mesurer la disponibilité des substituts.
- * Invoquer guix processes:: Lister les processus clients.
- Invoquer @command{guix build}
- * Options de construction communes:: Options de construction pour la
- plupart des commandes.
- * Options de transformation de paquets:: Créer des variantes de paquets.
- * Options de construction supplémentaires:: Options spécifiques à «
- guix build ».
- * Débogage des échecs de construction:: La vie d'un empaqueteur.
- Distribution GNU
- * Installation du système:: Installer le système d'exploitation complet.
- * Configuration système:: Configurer le système d'exploitation.
- * Documentation:: Visualiser les manuels d'utilisateur des
- logiciels.
- * Installer les fichiers de débogage:: Nourrir le débogueur.
- * Mises à jour de sécurité:: Déployer des correctifs de sécurité
- rapidement.
- * Modules de paquets:: Les paquets du point de vu du programmeur.
- * Consignes d'empaquetage:: Faire grandir la distribution.
- * Bootstrapping:: GNU/Linux depuis zéro.
- * Porter:: Cibler une autre plateforme ou un autre noyau.
- Installation du système
- * Limitations:: Ce à quoi vous attendre.
- * Considérations matérielles:: Matériel supporté.
- * Installation depuis une clef USB ou un DVD:: Préparer le média
- d'installation.
- * Préparer l'installation:: Réseau, partitionnement, etc.
- * Effectuer l'installation:: Pour de vrai.
- * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
- * Construire l'image d'installation:: D'où vient tout cela.
- Configuration système
- * Utiliser le système de configuration:: Personnaliser votre système
- GNU@.
- * Référence de système d'exploitation:: Détail sur la déclaration de
- système d'exploitation.
- * Systèmes de fichiers:: Configurer les montages de systèmes de
- fichiers.
- * Périphériques mappés:: Gestion des périphériques de bloc.
- * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
- * Régionalisation:: Paramétrer la langue et les conventions
- culturelles.
- * Services:: Spécifier les services du système.
- * Programmes setuid:: Programmes tournant avec les privilèges root.
- * Certificats X.509:: Authentifier les serveurs HTTPS@.
- * Name Service Switch:: Configurer le « name service switch » de la
- libc.
- * Disque de RAM initial:: Démarrage de Linux-Libre.
- * Configuration du chargeur d'amorçage:: Configurer le chargeur
- d'amorçage.
- * Invoquer guix system:: Instantier une configuration du système.
- * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
- virtuelle.
- * Définir des services:: Ajouter de nouvelles définitions de services.
- Services
- * Services de base:: Services systèmes essentiels.
- * Exécution de tâches planifiées:: Le service mcron.
- * Rotation des journaux:: Le service rottlog.
- * Services réseau:: Paramétres réseau, démon SSH, etc.
- * Système de fenêtrage X:: Affichage graphique.
- * Services d'impression:: Support pour les imprimantes locales et
- distantes.
- * Services de bureaux:: D-Bus et les services de bureaux.
- * Services de son:: Services ALSA et Pulseaudio.
- * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
- * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
- * Services de messagerie:: Services de messagerie.
- * Services de téléphonie:: Services de téléphonie.
- * Services de surveillance:: Services de surveillance.
- * Services Kerberos:: Services Kerberos.
- * Services web:: Services web.
- * Services de certificats:: Certificats TLS via Let's Encrypt.
- * Services DNS:: Démons DNS@.
- * Services VPN:: Démons VPN
- * Système de fichiers en réseau:: Services liés à NFS@.
- * Intégration continue:: Le service Cuirass.
- * Services de gestion de l'énergie:: Augmenter la durée de vie de la
- batterie.
- * Services audio:: MPD@.
- * Services de virtualisation:: Services de virtualisation.
- * Services de contrôle de version:: Fournit des accès distants à des
- dépôts Git.
- * Services de jeu:: Serveurs de jeu.
- * Services divers:: D'autres services.
- Définir des services
- * Composition de services:: Le modèle de composition des services.
- * Types service et services:: Types et services.
- * Référence de service:: Référence de l'API@.
- * Services Shepherd:: Un type de service particulier.
- Consignes d'empaquetage
- * Liberté logiciel:: Ce que la distribution peut contenir.
- * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
- * Numéros de version:: Lorsque le nom n'est pas suffisant.
- * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
- paquet.
- * Modules python:: Un peu de comédie anglaise.
- * Modules perl:: Petites perles.
- * Paquets java:: Pause café.
- * Polices de caractères:: À fond les fontes.
- Contribuer
- * Construire depuis Git:: toujours le plus récent.
- * Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers.
- * La configuration parfaite:: Les bons outils.
- * Style de code:: Hygiène du contributeur.
- * Envoyer des correctifs:: Partager votre travail.
- Style de code
- * Paradigme de programmation:: Comment composer vos éléments.
- * Modules:: Où stocker votre code ?
- * Types de données et reconnaissance de motif:: Implémenter des
- structures de données.
- * Formatage du code:: Conventions d'écriture.
- @end detailmenu
- @end menu
- @c *********************************************************************
- @node Introduction
- @chapter Introduction
- @cindex but
- GNU Guix@footnote{« Guix » se prononce comme « geeks » (en prononçant le
- « s »), ou « ɡiːks » dans l'alphabet phonétique international (API).} est un
- outil de gestion de paquets pour le système GNU@. Guix facilite pour les
- utilisateurs non privilégiés l'installation, la mise à jour et la
- suppression de paquets, la restauration à un ensemble de paquets précédent,
- la construction de paquets depuis les sources et plus généralement aide à la
- création et à la maintenance d'environnements logiciels.
- @cindex interfaces utilisateurs
- Guix fournit une interface de gestion des paquets par la ligne de commande
- (@pxref{Invoquer guix package}), un ensemble d'utilitaires en ligne de
- commande (@pxref{Utilitaires}) ainsi que des interfaces de programmation
- Scheme (@pxref{Interface de programmation}).
- @cindex démon de construction
- Son @dfn{démon de construction} est responsable de la construction des
- paquets pour les utilisateurs (@pxref{Paramétrer le démon}) et du
- téléchargement des binaires pré-construits depuis les sources autorisées
- (@pxref{Substituts}).
- @cindex extensibilité de la distribution
- @cindex personnalisation, des paquets
- Guix contient de nombreuses définitions de paquet GNU et non-GNU qui
- respectent tous les @uref{https://www.gnu.org/philosophy/free-sw.fr.html,
- libertés de l'utilisateur}. Il est @emph{extensible} : les utilisateurs
- peuvent écrire leurs propres définitions de paquets (@pxref{Définition des paquets}) et les rendre disponibles dans des modules de paquets
- indépendants (@pxref{Modules de paquets}). Il est aussi
- @emph{personnalisable} : les utilisateurs peuvent @emph{dériver} des
- définitions de paquets spécialisées à partir de définitions existantes, même
- depuis la ligne de commande (@pxref{Options de transformation de paquets}).
- @cindex Distribution Système Guix
- @cindex GuixSD
- Vous pouvez installer GNU@tie{}Guix sur un système GNU/Linux existant pour
- compléter les outils disponibles sans interférence (@pxref{Installation}) ou
- vous pouvez l'utiliser à travers la @dfn{Distribution Système Guix} ou
- GuixSD (@pxref{Distribution GNU}) distincte. Avec GNU@tie{}GuixSD, vous
- @emph{déclarez} tous les aspects de la configuration du système
- d'exploitation et Guix s'occupe de créer la configuration d'une manière
- transactionnelle, reproductible et sans état (@pxref{Configuration
- système}).
- @cindex gestion de paquet fonctionnelle
- @cindex isolation
- Sous le capot, Guix implémente la discipline de @dfn{gestion de paquet
- fonctionnel} inventé par Nix (@pxref{Remerciements}). Dans Guix le
- processus de construction et d'installation des paquets est vu comme une
- @emph{fonction} dans le sens mathématique du terme. Cette fonction a des
- entrées (comme des scripts de construction, un compilateur et des
- bibliothèques) et renvoie un paquet installé. En tant que fonction pure,
- son résultat ne dépend que de ses entrées. Par exemple, il ne peut pas
- faire référence à des logiciels ou des scripts qui n'ont pas été
- explicitement passés en entrée. Une fonction de construction produit
- toujours le même résultat quand on lui donne le même ensemble d'entrée.
- Elle ne peut pas modifier l'environnement du système en cours d'exécution
- d'aucune manière ; par exemple elle ne peut pas créer, modifier ou supprimer
- des fichiers en dehors de ses répertoires de construction et
- d'installation. Ce résultat s'obtient en lançant les processus de
- construction dans des environnements isolés (ou des @dfn{conteneurs}) où
- seules les entrées explicites sont visibles.
- @cindex dépôt
- Le résultat des fonctions de construction de paquets est mis en @dfn{cache}
- dans le système de fichier, dans répertoire spécial appelé le @dfn{dépôt}
- (@pxref{Le dépôt}). Chaque paquet est installé dans son répertoire propre
- dans le dépôt — par défaut dans @file{/gnu/store}. Le nom du répertoire
- contient un hash de toutes les entrées utilisées pour construire le paquet ;
- ainsi, changer une entrée donnera un nom de répertoire différent.
- Cette approche est le fondement des fonctionnalités les plus importante de
- Guix : le support des mises à jour des paquets et des retours en arrière
- transactionnels, l'installation différenciée par utilisateur et le ramassage
- de miettes pour les paquets (@pxref{Fonctionnalités}).
- @c *********************************************************************
- @node Installation
- @chapter Installation
- @cindex installer Guix
- @cindex site officiel
- GNU Guix est disponible au téléchargement depuis son site web sur
- @url{http://www.gnu.org/software/guix/}. Cette section décrit les
- pré-requis logiciels de Guix ainsi que la manière de l'installer et de se
- préparer à l'utiliser.
- Remarquez que cette section concerne l'installation du gestionnaire de
- paquet, ce qui se fait sur un système GNU/Linux en cours d'exécution. Si
- vous souhaitez plutôt installer le système d'exploitation GNU complet,
- @pxref{Installation du système}.
- @cindex distro extérieure
- @cindex répertoires liés aux distro extérieures
- Lorsqu'il est installé sur un système GNU/Linux existant — ci-après nommé
- @dfn{distro extérieure} — GNU@tie{}Guix complète les outils disponibles sans
- interférence. Ses données se trouvent exclusivement dans deux répertoires,
- typiquement @file{/gnu/store} et @file{/var/guix} ; les autres fichiers de
- votre système comme @file{/etc} sont laissés intacts.
- Une fois installé, Guix peut être mis à jour en lançant @command{guix pull}
- (@pxref{Invoquer guix pull}).
- @menu
- * Installation binaire:: Commencer à utiliser Guix en un rien de temps
- !
- * Prérequis:: Logiciels requis pour construire et lancer
- Guix.
- * Lancer la suite de tests:: Tester Guix.
- * Paramétrer le démon:: Préparer l'environnement du démon de
- construction.
- * Invoquer guix-daemon:: Lancer le démon de construction.
- * Réglages applicatifs:: Réglages spécifiques pour les application.
- @end menu
- @node Installation binaire
- @section Installation binaire
- @cindex installer Guix depuis les binaires
- @cindex script d'installation
- Cette section décrit comment intaller Guix sur un système quelconque depuis
- un archive autonome qui fournit les binaires pour Guix et toutes ses
- dépendances. C'est souvent plus rapide que d'installer depuis les sources,
- ce qui est décrit dans les sections suivantes. Le seul pré-requis est
- d'avoir GNU@tie{}tar et Xz.
- Nous fournissons un script
- @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
- script d'intallation shell} qui automatise le téléchargement, l'installation
- et la configuration initiale de Guix. Il devrait être lancé en tant
- qu'utilisateur root.
- L'installation se comme ceci :
- @enumerate
- @item
- @cindex téléchargement du Guix binaire
- Téléchargez l'archive binaire depuis
- @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz},
- où @var{système} est @code{x86_64-linux} pour une machine @code{x86_64} sur
- laquelle tourne déjà le noyau Linux, etc.
- @c The following is somewhat duplicated in ``System Installation''.
- Assurez-vous de télécharger le fichier @file{.sig} associé et de vérifier
- l'authenticité de l'archive avec, comme ceci :
- @example
- $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
- $ gpg --verify guix-binary-@value{VERSION}.@var{système}.tar.xz.sig
- @end example
- Si cette commande échoue parce que vous n'avez pas la clef publique requise,
- lancez cette commande pour l'importer :
- @example
- $ gpg --keyserver @value{KEY-SERVER} \
- --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
- @end example
- @noindent
- @c end authentication part
- et relancez la commande @code{gpg --verify}.
- @item
- Maintenant, vous devez devenir l'utilisateur @code{root}. En fonction de
- votre distribution, vous devrez lancer @code{su -} ou @code{sudo -i}. En
- tant que @code{root}, lancez :
- @example
- # cd /tmp
- # tar --warning=no-timestamp -xf \
- guix-binary-@value{VERSION}.@var{système}.tar.xz
- # mv var/guix /var/ && mv gnu /
- @end example
- Cela crée @file{/gnu/store} (@pxref{Le dépôt}) and @file{/var/guix}. Ce
- deuxième dossier contient un profil pret à être utilisé pour @code{root}
- (voir les étapes suivantes).
- Ne décompressez @emph{pas} l'archive sur un système Guix lancé car cela
- écraserait ses propres fichiers essentiels.
- L'option @code{--warning=no-timestamp} s'assure que GNU@tie{}tar ne produise
- pas d'avertissement disant que « l'horodatage est trop vieux pour être
- plausible » (ces avertissements étaient produits par GNU@tie{}tar 1.26 et
- précédents ; les versions récentes n'ont pas ce problème). Cela vient du
- fait que les fichiers de l'archive ont pour date de modification zéro (ce
- qui signifie le 1er janvier 1970). C'est fait exprès pour s'assurer que le
- contenu de l'archive ne dépende pas de la date de création, ce qui la rend
- reproductible.
- @item
- Rendez le profil disponible sous @file{~root/.config/guix/current}, qui est
- l'emplacement où @command{guix pull} installera les mises à jour
- (@pxref{Invoquer guix pull}) :
- @example
- # mkdir -p ~root/.config/guix
- # ln -sf /var/guix/profiles/per-user/root/current-guix \
- ~root/.config/guix/current
- @end example
- Sourcez @file{etc/profile} pour augmenter @code{PATH} et les autres
- variables d'environnement nécessaires :
- @example
- # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
- source $GUIX_PROFILE/etc/profile
- @end example
- @item
- Créez le groupe et les comptes utilisateurs pour les utilisateurs de
- construction comme expliqué plus loin (@pxref{Réglages de l'environnement de construction}).
- @item
- Lancez le démon et paramétrez-le pour démarrer automatiquement au démarrage.
- Si votre distribution hôte utilise le système d'initialisation systemd, cela
- peut se faire avec ces commandes :
- @c Versions of systemd that supported symlinked service files are not
- @c yet widely deployed, so we should suggest that users copy the service
- @c files into place.
- @c
- @c See this thread for more information:
- @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
- @example
- # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
- /etc/systemd/system/
- # systemctl start guix-daemon && systemctl enable guix-daemon
- @end example
- Si votre distribution hôte utilise le système d'initialisation Upstart :
- @example
- # initctl reload-configuration
- # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
- /etc/init/
- # start guix-daemon
- @end example
- Sinon, vous pouvez toujours démarrer le démon manuellement avec :
- @example
- # ~root/.config/guix/current/bin/guix-daemon \
- --build-users-group=guixbuild
- @end example
- @item
- Rendez la commande @command{guix} disponible pour les autres utilisateurs
- sur la machine, par exemple avec :
- @example
- # mkdir -p /usr/local/bin
- # cd /usr/local/bin
- # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
- @end example
- C'est aussi une bonne idée de rendre la version Info de ce manuel disponible
- ici :
- @example
- # mkdir -p /usr/local/share/info
- # cd /usr/local/share/info
- # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
- do ln -s $i ; done
- @end example
- Comme cela, en supposant que @file{/usr/local/share/info} est dans le chemin
- de recherche, lancer @command{info guix} ouvrira ce manuel (@pxref{Other
- Info Directories,,, texinfo, GNU Texinfo}, pour plus de détails sur comment
- changer le chemin de recherche de Info).
- @item
- @cindex substituts, autorisations
- Pour utiliser les substituts de @code{hydra.gnu.org} ou l'un de ses mirroirs
- (@pxref{Substituts}), autorisez-les :
- @example
- # guix archive --authorize < \
- ~root/.config/guix/current/share/guix/hydra.gnu.org.pub
- @end example
- @item
- Chaque utilisateur peut avoir besoin d'effectuer des étapes supplémentaires
- pour que leur environnement Guix soit prêt à être utilisé,
- @pxref{Réglages applicatifs}.
- @end enumerate
- Voilà, l'installation est terminée !
- Vous pouvez confirmer que Guix fonctionne en installant un paquet d'exemple
- dans le profil de root :
- @example
- # guix package -i hello
- @end example
- Le paquet @code{guix} doit rester disponible dans le profil de @code{root}
- ou il pourrait être sujet au ramassage de miettes — dans ce cas vous vous
- retrouveriez gravement handicapé par l'absence de la commande
- @command{guix}. En d'autres termes, ne supprimez pas @code{guix} en lançant
- @code{guix package -r guix}.
- L'archive d'installation binaire peut être (re)produite et vérifiée
- simplement en lançaint la commande suivante dans l'arborescence des sources
- de Guix :
- @example
- make guix-binary.@var{system}.tar.xz
- @end example
- @noindent
- ...@: which, in turn, runs:
- @example
- guix pack -s @var{system} --localstatedir \
- --profile-name=current-guix guix
- @end example
- @xref{Invoquer guix pack}, pour plus d'info sur cet outil pratique.
- @node Prérequis
- @section Prérequis
- Cette section dresse la liste des pré-requis pour la construction de Guix
- depuis les sources. La procédure de construction pour Guix est la même que
- pour les autres logiciels GNU, et n'est pas expliquée ici. Regardez les
- fichiers @file{README} et @file{INSTALL} dans l'arborescence des sources de
- Guix pour plus de détails.
- GNU Guix dépend des paquets suivants :
- @itemize
- @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 ou
- supérieure, dont 2.2.x,
- @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
- 0.1.0 ou supérieure,
- @item
- @uref{http://gnutls.org/, GnuTLS}, en particulier ses liaisons Guile
- (@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
- gnutls-guile, GnuTLS-Guile}),
- @item
- @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
- version 0.1.0 ou supérieure,
- @item
- @c FIXME: Specify a version number once a release has been made.
- @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, d'août 2017 ou
- ultérieur,
- @item @url{http://zlib.net, zlib},
- @item @url{http://www.gnu.org/software/make/, GNU Make}.
- @end itemize
- Les dépendances suivantes sont facultatives :
- @itemize
- @item
- Installer @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
- vous permettra d'utiliser la commande @command{guix import pypi}
- (@pxref{Invoquer guix import}). Il est surtout utile pour les développeurs
- et pas pour les utilisateurs occasionnels.
- @item
- @c Note: We need at least 0.10.2 for 'channel-send-eof'.
- Le support pour la décharge de construction (@pxref{Réglages du délestage du démon})
- et @command{guix copy} (@pxref{Invoquer guix copy}) dépend de
- @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, version
- 0.10.2 ou ulltérieure.
- @item
- Lorsque @url{http://www.bzip.org, libbz2} est disponible,
- @command{guix-daemon} peut l'utiliser pour compresser les journaux de
- construction.
- @end itemize
- À moins que @code{--disable-daemon} ne soit passé à @command{configure}, les
- paquets suivants sont aussi requis :
- @itemize
- @item @url{http://gnupg.org/, GNU libgcrypt},
- @item @url{http://sqlite.org, SQLite 3},
- @item @url{http://gcc.gnu.org, GCC's g++}, avec le support pour le
- standard C++11.
- @end itemize
- @cindex répertoire d'état
- Lorsque vous configurez Guix sur un système qui a déjà une installation de
- Guix, assurez-vous de spécifier le même répertoire d'état que l'installation
- existante avec l'option @code{--localstatedir} du script @command{configure}
- (@pxref{Directory Variables, @code{localstatedir},, standards, GNU Coding
- Standards}). Le script @command{configure} vous protège des mauvaises
- configurations involontaires de @var{localstatedir} pour éviter que vous ne
- corrompiez votre dépôt (@pxref{Le dépôt}).
- @cindex Nix, compatibilité
- Lorsque vous avez une installation fonctionnelle du
- @url{http://nixos.org/nix/, gestionnaire de paquets Nix}, vous pouvez
- configurer Guix avec @code{--disable-daemon}. Dan ce cas, Nix remplace les
- trois dépendances au dessus.
- Guix est compatible avec Nix, donc il est possible de partager le même dépôt
- entre les deux. Pour cela, vous devez passer à @command{configure} non
- seulement la même valeur de @code{--with-store-dir} mais aussi la même
- valeur de @code{--localstatedir}. Cette dernière est nécessaires car elle
- spécifie l'emplacement de la base de données qui stocke les métadonnées sur
- le dépôt, entre autres choses. Les valeurs par défaut pour Nix sont
- @code{--with-store-dir=/nix/store} et @code{--localstatedir=/nix/var}.
- Remarquez que @code{--disable-daemon} n'est pas requis si votre but est de
- partager le dépôt avec Nix.
- @node Lancer la suite de tests
- @section Lancer la suite de tests
- @cindex suite de tests
- Après avoir lancé @command{configure} et @code{make} correctement, c'est une
- bonne idée de lancer la suite de tests. Elle peut aider à trouver des
- erreurs avec la configuration ou l'environnement, ou des bogues dans Guix
- lui-même — et vraiment, rapporter des échecs de tests est une bonne manière
- d'aider à améliorer le logiciel. Pour lancer la suite de tests, tapez :
- @example
- make check
- @end example
- Les cas de tests peuvent être lancés en parallèle : vous pouvez utiliser
- l'option @code{-j} de GNU@tie{}make pour accélérer les choses. Le premier
- lancement peut prendre plusieurs minutes sur une machine récente ; les
- lancements suivants seront plus rapides car le dépôt créé pour les tests
- aura déjà plusieurs choses en cache.
- Il est aussi possible de lancer un sous-ensemble des tests en définissant la
- variable makefile @code{TESTS} comme dans cet exemple :
- @example
- make check TESTS="tests/store.scm tests/cpio.scm"
- @end example
- Par défaut, les résultats des tests sont affichés au niveau du fichier.
- Pour voir les détails de chaque cas de test individuel, il est possible de
- définire la variable makefile @code{SCM_LOG_DRIVER_FLAGS} comme dans cet
- exemple :
- @example
- make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
- @end example
- Après un échec, envoyez un courriel à @email{bug-guix@@gnu.org} et attachez
- le fichier @file{test-suite.log}. Précisez la version de Guix utilisée
- ainsi que les numéros de version de ses dépendances (@pxref{Prérequis})
- dans votre message.
- Guix possède aussi une suite de tests de systèmes complets qui test des
- instances complètes du système d'exploitation GuixSD@. Elle ne peut être
- lancée qui sur un système où Guix est déjà installé, avec :
- @example
- make check-system
- @end example
- @noindent
- Ou, de nouveau, en définissant @code{TESTS} pour choisir un sous-ensemble
- des tests à lancer :
- @example
- make check-system TESTS="basic mcron"
- @end example
- Ces tests systèmes sont définis dans les modules @code{(gnu tests
- @dots{})}. Ils fonctionnent en lançant les systèmes d'exploitation sous test
- avec une instrumentation légère dans une machine virtuelle (VM). Ils
- peuvent être intenses en terme de calculs ou plutôt rapides en fonction de
- la disponibilité des substituts de leurs dépendances (@pxref{Substituts}).
- Certains requièrent beaucoup d'espace disque pour contenir les images des
- VM@.
- De nouveau, en cas d'échec, envoyez tous les détails à
- @email{bug-guix@@gnu.org}.
- @node Paramétrer le démon
- @section Paramétrer le démon
- @cindex démon
- Les opérations comme la construction d'un paquet ou le lancement du
- ramasse-miettes sont toutes effectuées par un processus spécialisé, le
- @dfn{démon de construction}, pour le compte des clients. Seul le démon peut
- accéder au dépôt et à sa base de données associée. Ainsi, toute opération
- manipulant le dépôt passe par le démon. Par exemple, les outils en ligne de
- commande comme @command{guix package} et @command{guix build} communiquent
- avec le démon (@i{via} des appels de procédures distantes) pour lui dire
- quoi faire.
- Les sections suivantes expliquent comment préparer l'environnement du démon
- de construction. Voir aussi @ref{Substituts} pour apprendre comment
- permettre le téléchargement de binaires pré-construits.
- @menu
- * Réglages de l'environnement de construction:: Préparer l'environnement
- de construction isolé.
- * Réglages du délestage du démon:: Envoyer des constructions à des
- machines distantes.
- * Support de SELinux:: Utiliser une politique SELinux pour le démon.
- @end menu
- @node Réglages de l'environnement de construction
- @subsection Réglages de l'environnement de construction
- @cindex environnement de construction
- Dans une installation standard multi-utilisateurs, Guix et son démon — le
- programme @command{guix-daemon} — sont installé par l'administrateur système
- ; @file{/gnu/store} appartient à @code{root} et @command{guix-daemon} est
- lancé en @code{root}. Les utilisateurs non-privilégiés peuvent utiliser les
- outils Guix pour construire des paquets ou accéder au dépôt et le démon le
- fera pour leur compte en s'assurant que le dépôt garde un état cohérent et
- permet le partage des paquets déjà construits entre les utilisateurs.
- @cindex utilisateurs de construction
- Alors que @command{guix-daemon} tourne en @code{root}, vous n'avez pas
- forcément envie que les processus de construction de paquets tournent aussi
- en @code{root}, pour des raisons de sécurité évidentes. Pour éviter cela,
- vous devriez créer une réserve spéciale d'@dfn{utilisateurs de construction}
- que les processus de construction démarrés par le démon utiliseront. Ces
- utilisateurs de construction n'ont pas besoin d'un shell ou d'un répertoire
- personnel ; ils seront seulement utilisés quand le démon délaissera ses
- privilèges @code{root} dans les processus de construction. En ayant
- plusieurs de ces utilisateurs, vous permettez au démon de lancer des
- processus de construction distincts sous des UID différent, ce qui garanti
- qu'aucune interférence n'ait lieu entre les uns et les autres — une
- fonctionnalité essentielle puisque les constructions sont supposées être des
- fonctions pures (@pxref{Introduction}).
- Sur un système GNU/Linux, on peut créer une réserve d'utilisateurs de
- construction comme ceci (avec la syntaxe Bash et les commandes
- @code{shadow}) :
- @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
- @c for why `-G' is needed.
- @example
- # groupadd --system guixbuild
- # for i in `seq -w 1 10`;
- do
- useradd -g guixbuild -G guixbuild \
- -d /var/empty -s `which nologin` \
- -c "Utilisateur de construction Guix $i" --system \
- guixbuilder$i;
- done
- @end example
- @noindent
- Le nombre d'utilisateurs de construction détermine le nombre de tâches de
- constructions qui peuvent tourner en parallèle, tel que spécifié par
- l'option @option{--max-jobs} (@pxref{Invoquer guix-daemon,
- @option{--max-jobs}}). Pour utiliser @command{guix system vm} et les
- commandes liées, vous devrez ajouter les utilisateurs de construction au
- groupe @code{kvm} pour qu'ils puissent accéder à @file{/dev/kvm} avec
- @code{-G guixbuild,kvm} plutôt que @code{-G guixbuild} (@pxref{Invoquer guix system}).
- Le programme @code{guix-daemon} peut ensuite être lancé en @code{root} avec
- la commande suivante@footnote{Si votre machine utilise le système
- d'initialisation systemd, copiez le fichier
- @file{@var{prefix}/lib/systemd/system/guix-daemon.service} dans
- @file{/etc/systemd/system} pour vous assurer que @command{guix-daemon} est
- démarré automatiquement. De même, si votre machine utilise le système
- d'initialisation Upstart, copiez le fichier
- @file{@var{prefix}/lib/upstart/system/guix-daemon.conf} dans
- @file{/etc/init}.} :
- @example
- # guix-daemon --build-users-group=guixbuild
- @end example
- @cindex chroot
- @noindent
- De cette façon, le démon démarre les processus de construction dans un
- chroot, sous un des utilisateurs @code{guixbuilder}. Sur GNU/Linux par
- défaut, l'environnement chroot ne contient rien d'autre que :
- @c Keep this list in sync with libstore/build.cc! -----------------------
- @itemize
- @item
- un répertoire @code{/dev} minimal, créé presque indépendamment du
- @code{/dev} de l'hôte@footnote{« presque », parce que même si l'ensemble des
- fichiers qui apparaissent dans le @code{/dev} du chroot sont déterminés à
- l'avance, la plupart de ces fichiers ne peut pas être créée si l'hôte ne les
- a pas.} ;
- @item
- le répertoire @code{/proc} ; il ne montre que les processus du conteneur car
- on utilise une espace de nom séparé pour les PID ;
- @item
- @file{/etc/passwd} avec une entrée pour l'utilisateur actuel et une entrée
- pour l'utilisateur @file{nobody} ;
- @item
- @file{/etc/group} avec une entrée pour le groupe de l'utilisateur ;
- @item
- @file{/etc/hosts} avec une entrée qui fait correspondre @code{localhost} à
- @code{127.0.0.1} ;
- @item
- un répertoire @file{/tmp} inscriptible.
- @end itemize
- Vous pouvez influencer le répertoire où le démon stocke les arbres de
- construction @i{via} la variable d'environnement @code{TMPDIR}. Cependant,
- l'arbre de construction dans le chroot sera toujours appelé
- @file{/tmp/guix-build-@var{nom}.drv-0}, où @var{nom} est le nom de la
- dérivation — p.@: ex.@: @code{coreutils-8.24}. De cette façon, la valeur de
- @code{TMPDIR} ne fuite pas à l'intérieur des environnements de construction,
- ce qui évite des différences lorsque le processus de construction retient le
- nom de leur répertoire de construction.
- @vindex http_proxy
- Le démon tient aussi compte de la variable d'environnement @code{http_proxy}
- pour ses téléchargements HTTP, que ce soit pour les dérivations à sortie
- fixes (@pxref{Dérivations}) ou pour les substituts (@pxref{Substituts}).
- Si vous installez Guix en tant qu'utilisateur non-privilégié, il est
- toujours possible de lancer @command{guix-daemon} si vous passez
- @code{--disable-chroot}. Cependant, les processus de construction ne seront
- pas isolés les uns des autres ni du reste du système. Ainsi les processus
- de construction peuvent interférer les uns avec les autres, et peuvent
- accéder à des programmes, des bibliothèques et d'autres fichiers présents
- sur le système — ce qui rend plus difficile de les voir comme des fonctions
- @emph{pures}.
- @node Réglages du délestage du démon
- @subsection Utiliser le dispositif de déchargement
- @cindex déchargement
- @cindex crochet de construction
- Si vous le souhaitez, le démon de construction peut @dfn{décharger} des
- constructions de dérivations sur d'autres machines Guix avec le @dfn{crochet
- de construction} @code{offload}@footnote{Cette fonctionnalité n'est
- disponible que si @uref{https://github.com/artyom-poptsov/guile-ssh,
- Guile-SSH} est présent.}. Lorsque cette fonctionnalité est activée, Guix
- lit une liste de machines de constructions spécifiée par l'utilisateur dans
- @file{/etc/guix/machines.scm} ; à chaque fois qu'une construction est
- demandée, par exemple par @code{guix build}, le démon essaie de la décharger
- sur une des machines qui satisfont les contraintes de la dérivation, en
- particulier le type de système, p.@: ex.@: @file{x86_64-linux}. Les
- prérequis manquants pour la construction sont copiés par SSH sur la machine
- de construction qui procède ensuite à la construction ; si elle réussi, les
- sorties de la construction sont copiés vers la machine de départ.
- Le fichier @file{/etc/guix/machines.scm} ressemble typiquement à cela :
- @example
- (list (build-machine
- (name "eightysix.example.org")
- (system "x86_64-linux")
- (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
- (user "bob")
- (speed 2.)) ;très rapide !
- (build-machine
- (name "meeps.example.org")
- (system "mips64el-linux")
- (host-key "ssh-rsa AAAAB3Nza@dots{}")
- (user "alice")
- (private-key
- (string-append (getenv "HOME")
- "/.ssh/identity-for-guix"))))
- @end example
- @noindent
- Dans l'exemple ci-dessus nous spécifions une liste de deux machines de
- construction, une pour l'architecture @code{x86_64} et une pour
- l'architecture @code{mips64el}.
- En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un
- fichier Scheme qui est évalué au démarrage du crochet @code{offload}. Sa
- valeur de retour doit être une liste d'objets @code{build-machine}. Même si
- cet exemple montre une liste fixée de machines de construction, on pourrait
- imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de
- constructions potentielles découvertes sur le réseau local
- (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme
- Programs}). Le type de données @code{build-machine} est détaillé plus bas.
- @deftp {Type de données} build-machine
- Ce type de données représente les machines de construction sur lesquelles le
- démon peut décharger des constructions. Les champs importants sont :
- @table @code
- @item name
- Le nom d'hôte de la machine distante.
- @item system
- Le type de système de la machine distante, p.@: ex.@: @code{"x86_64-linux"}.
- @item user
- Le compte utilisateur à utiliser lors de la connexion à la machine distante
- par SSH@. Remarquez que la paire de clef SSH ne doit @emph{pas} être
- protégée par mot de passe pour permettre des connexions non-interactives.
- @item host-key
- Cela doit être la @dfn{clef d'hôte SSH publique} de la machine au format
- OpenSSH@. Elle est utilisée pour authentifier la machine lors de la
- connexion. C'est une longue chaîne qui ressemble à cela :
- @example
- ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
- @end example
- Si la machine utilise le démon OpenSSH, @command{sshd}, la clef d'hôte se
- trouve dans un fichier comme @file{/etc/ssh/ssh_host_ed25519_key.pub}.
- Si la machine utilise le démon SSH de GNU@tie{}lsh, la clef d'hôte est dans
- @file{/etc/lsh/host-key.pub} ou un fichier similaire. Elle peut être
- convertie au format OpenSSH avec @command{lsh-export-key}
- (@pxref{Converting keys,,, lsh, LSH Manual}) :
- @example
- $ lsh-export-key --openssh < /etc/lsh/host-key.pub
- ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
- @end example
- @end table
- Il y a un certain nombre de champs facultatifs que vous pouvez remplir :
- @table @asis
- @item @code{port} (par défaut : @code{22})
- Numéro de port du serveur SSH sur la machine.
- @item @code{private-key} (par défaut : @file{~root/.ssh/id_rsa})
- Le fichier de clef privée SSH à utiliser lors de la connexion à la machine,
- au format OpenSSH@. Cette clef ne doit pas être protégée par phrase de
- passe.
- Remarquez que la valeur par défaut est la clef privée @emph{du compte
- root}. Assurez-vous qu'elle existe si vous utilisez la valeur par défaut.
- @item @code{compression} (par défaut : @code{"zlib@@openssh.com,zlib"})
- @itemx @code{compression-level} (par défaut : @code{3})
- Les méthodes de compression au niveau SSH et le niveau de compression
- demandé.
- Remarquez que le déchargement utilise la compression SSH pour réduire la
- bande passante utilisée lors du transfert vers et depuis les machines de
- construction.
- @item @code{daemon-socket} (par défaut : @code{"/var/guix/daemon-socket/socket"})
- Le nom de fichier du socket Unix-domain sur lequel @command{guix-daemon}
- écoute sur cette machine.
- @item @code{parallel-builds} (par défaut : @code{1})
- Le nombre de constructions qui peuvent tourner simultanément sur la machine.
- @item @code{speed} (par défaut : @code{1.0})
- Un « facteur de vitesse relatif ». L'ordonnanceur des constructions tendra
- à préférer les machines avec un plus grand facteur de vitesse.
- @item @code{features} (par défaut : @code{'()})
- Une liste de chaînes qui contient les fonctionnalités spécifiques supportées
- par la machine. Un exemple est @code{"kvm"} pour les machines qui ont le
- module Linux KVM et le support matériel correspondant. Les dérivations
- peuvent demander des fonctionnalités par leur nom et seront orchestrées sur
- les machines de construction correspondantes.
- @end table
- @end deftp
- La commande @code{guile} doit être dans le chemin de recherche des machines
- de construction. En plus, les modules Guix doivent se trouver dans
- @code{$GUILE_LOAD_PATH} sur la machine de construction. Vous pouvez
- vérifier si c'est le cas en lançant :
- @example
- ssh build-machine guile -c "'(use-modules (guix config))'"
- @end example
- Il reste une dernière chose à faire maintenant que @file{machines.scm} est
- en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont
- transférés entre les dépôts des machines. Pour que cela fonctionne, vous
- devez d'abord générer une paire de clef sur chaque machine pour permettre au
- démon d'exporter des archives signées des fichiers de son dépôt
- (@pxref{Invoquer guix archive}) :
- @example
- # guix archive --generate-key
- @end example
- @noindent
- Chaque machine de construction doit autoriser la clef de la machine
- maîtresse pour qu'ils acceptent les éléments de dépôt de celle-ci :
- @example
- # guix archive --authorize < master-public-key.txt
- @end example
- @noindent
- De même, la machine maîtresse doit autoriser les clefs de chaque machine de
- construction.
- Toute cette histoire de clefs permet d'exprimer la confiance mutuelle
- deux-à-deux entre le maître et les machines de construction. Concrètement,
- lorsque le maître reçoit des fichiers d'une machine de construction (et
- vice-versa), son démon de construction s'assure qu'ils sont authentiques,
- n'ont pas été modifiés par un tiers et qu'il sont signés par un clef
- autorisée.
- @cindex test du déchargement
- Pour tester que votre paramétrage fonctionne, lancez cette commande sur le
- nœud maître :
- @example
- # guix offload test
- @end example
- Cela essaiera de se connecter à toutes les machines de construction
- spécifiées dans @file{/etc/guix/machines.scm}, s'assurera que Guile et les
- modules Guix sont disponibles sur toutes les machines et tentera d'exporter
- vers la machine et d'importer depuis elle, et rapportera toute erreur
- survenu pendant le processus.
- Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur
- la ligne de commande :
- @example
- # guix offload test machines-qualif.scm
- @end example
- Enfin, vous pouvez tester un sous-ensemble de machines dont le nom
- correspond à une expression rationnelle comme ceci :
- @example
- # guix offload test machines.scm '\.gnu\.org$'
- @end example
- @cindex statut du déchargement
- Pour afficher la charge actuelle de tous les hôtes de construction, lancez
- cette commande sur le nœud principal :
- @example
- # guix offload status
- @end example
- @node Support de SELinux
- @subsection Support de SELinux
- @cindex SELinux, politique du démon
- @cindex contrôle d'accès obligatoire, SELinux
- @cindex sécurité, guix-daemon
- Guix inclus un fichier de politique SELniux dans @file{etc/guix-daemon.cil}
- qui peut être installé sur un système où SELinux est activé pour que les
- fichiers Guix soient étiquetés et pour spécifier le comportement attendu du
- démon. Comme GuixSD ne fournit pas de politique SELniux de base, la
- politique du démon ne peut pas être utilisée sur GuixSD@.
- @subsubsection Installer la politique SELinux
- @cindex SELinux, installation de la politique
- Pour installer la politique, lancez cette commande en root :
- @example
- semodule -i etc/guix-daemon.cil
- @end example
- Puis ré-étiquetez le système de fichier avec @code{restorecon} ou par un
- mécanisme différent fournit par votre système.
- Une fois la politique installée, le système de fichier ré-étiqueté et le
- démon redémarré, il devrait être lancé dans le contexte
- @code{guix_daemon_t}. Vous pouvez le confirmer avec la commande suivante :
- @example
- ps -Zax | grep guix-daemon
- @end example
- Surveillez les fichiers journaux de SELinux pendant que vous lancez une
- commande comme @code{guix build hello} pour vous convaincre que SELniux
- permet toutes les opérations nécessaires.
- @subsubsection Limitations
- @cindex SELinux, limites
- La politique n'et pas parfaite. Voici une liste de limitations et de
- bizarreries qui vous devriez prendre en compte avant de déployer la
- politique SELinux fournie pour le démon Guix.
- @enumerate
- @item
- @code{guix_daemon_socket_t} n'est pas vraiment utilisé. Aucune des
- opérations sur les sockets n'impliquent de contextes qui ont quoi que ce
- soit à voir avec @code{guix_daemon_socket_t}. Ça ne fait pas de mal d'avoir
- une étiquette inutilisée, mais il serait préférable de définir des règles
- sur les sockets uniquement pour cette étiquette.
- @item
- @code{guix gc} ne peut pas accéder à n'importe quel lien vers les profils.
- Par conception, l'étiquette de fichier de la destination d'un lien
- symbolique est indépendant de l'étiquette du lien lui-même. Bien que tous
- les profils sous $localstatedir aient une étiquette, les liens vers ces
- profils héritent de l'étiquette du répertoire dans lequel ils se trouvent.
- Pour les liens dans le répertoire personnel cela sera @code{user_home_t}.
- Mais pour les liens du répertoire personnel de l'utilisateur root, ou
- @file{/tmp}, ou du répertoire de travail du serveur HTTP, etc, cela ne
- fonctionnera pas. SELinux empêcherait @code{guix gc} de lire et de suivre
- ces liens.
- @item
- La fonctionnalité du démon d'écouter des connexions TCP pourrait ne plus
- fonctionner. Cela demande des règles supplémentaires car SELinux traite les
- sockets réseau différemment des fichiers.
- @item
- Actuellement tous les fichiers qui correspondent à l'expression rationnelle
- @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} reçoivent l'étiquette
- @code{guix_daemon_exec_t} ; cela signifie que @emph{tout} fichier avec ce
- nom dans n'importe quel profil serait autorisé à se lancer dans le domaine
- @code{guix_daemon_t}. Ce n'est pas idéal. Un attaquant pourrait construire
- un paquet qui fournit cet exécutable et convaincre un utilisateur de
- l'installer et de le lancer, ce qui l'élève dans le domaine
- @code{guix_daemon_t}. À ce moment SELinux ne pourrait pas l'empêcher
- d'accéder à des fichiers autorisés pour les processus de ce domaine.
- Nous pourrions générer une politique bien plus restrictive à l'installation,
- pour que seuls les noms de fichiers @emph{exacts} de l'exécutable
- @code{guix-daemon} actuellement installé soit étiqueté avec
- @code{guix_daemon_exec_t}, plutôt que d'utiliser une expression rationnelle
- plus large. L'inconvénient c'est que root devrait installer ou mettre à
- jour la politique à l'installation à chaque fois que le paquet Guix qui
- fournit l'exécutable @code{guix-daemon} effectivement exécuté est mis à
- jour.
- @end enumerate
- @node Invoquer guix-daemon
- @section Invoquer @command{guix-daemon}
- Le programme @command{guix-daemon} implémente toutes les fonctionnalités
- d'accès au dépôt. Cela inclus le lancement des processus de construction,
- le lancement du ramasse-miettes, la demande de disponibilité des résultats
- de construction, etc. Il tourne normalement en @code{root} comme ceci :
- @example
- # guix-daemon --build-users-group=guixbuild
- @end example
- @noindent
- Pour des détails sur son paramétrage, @pxref{Paramétrer le démon}.
- @cindex chroot
- @cindex conteneur, environnement de construction
- @cindex environnement de construction
- @cindex constructions reproductibles
- Par défaut, @command{guix-daemon} lance les processus de construction sous
- différents UID récupérés depuis le groupe de construction spécifié avec
- @code{--build-users-group}. En plus, chaque processus de construction est
- lancé dans un environnement chroot qui ne contient que le sous-ensemble du
- dépôt dont le processus de construction dépend, tel que spécifié par sa
- dérivation (@pxref{Interface de programmation, dérivation}), plus un
- ensemble de répertoires systèmes spécifiques. Par défaut ce dernier
- contient @file{/dev} et @file{/dev/pts}. De plus, sous GNU/Linux,
- l'environnement de construction est un @dfn{conteneur} : en plus d'avoir sa
- propre arborescence du système de fichier, elle a un espace de montage
- séparé, son propre espace de PID, son espace de réseau, etc. Cela aide à
- obtenir des constructions reproductibles (@pxref{Fonctionnalités}).
- Lorsque le démon effectue une construction pour le compte de l'utilisateur,
- il crée un répertoire sous @file{/tmp} ou sous le répertoire spécifié par sa
- variable d'environnement @code{TMPDIR}. Ce répertoire est partagé avec le
- conteneur pendant la durée de la construction, bien que dans le conteneur,
- l'arborescence de construction est toujours appelée
- @file{/tmp/guix-build-@var{name}.drv-0}.
- Le répertoire de construction est automatiquement supprimé à la fin, à moins
- que la construction n'ait échoué et que le client ait spécifié
- @option{--keep-failed} (@pxref{Invoquer guix build,
- @option{--keep-failed}}).
- Le démon écoute les connexions et démarre un sous-processus pour chaque
- session démarrée par un client (l'une des sous-commandes de
- @command{guix}). La commande @command{guix processes} vous permet d'obtenir
- un aperçu de l'activité sur votre système en affichant chaque session et
- client actif. @xref{Invoquer guix processes} pour plus d'informations.
- Les options en ligne de commande suivantes sont disponibles :
- @table @code
- @item --build-users-group=@var{groupe}
- Prendre les utilisateurs de @var{group} pour lancer les processus de
- construction (@pxref{Paramétrer le démon, utilisateurs de construction}).
- @item --no-substitutes
- @cindex substituts
- Ne pas utiliser de substitut pour les résultats de la construction.
- C'est-à-dire, toujours construire localement plutôt que de permettre le
- téléchargement de binaires pré-construits (@pxref{Substituts}).
- Lorsque le démon tourne avec @code{--no-substitutes}, les clients peuvent
- toujours activer explicitement la substitution @i{via} l'appel de procédure
- distante @code{set-build-options} (@pxref{Le dépôt}).
- @item --substitute-urls=@var{urls}
- @anchor{daemon-substitute-urls}
- Considèrer @var{urls} comme la liste séparée par des espaces des URL des
- sources de substituts par défaut. Lorsque cette option est omise,
- @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} est utilisé
- (@code{mirror.hydra.gnu.org} est un mirroire de @code{hydra.gnu.org}).
- Cela signifie que les substituts sont téléchargés depuis les @var{urls},
- tant qu'ils sont signés par une signature de confiance (@pxref{Substituts}).
- @cindex crochet de construction
- @item --no-build-hook
- Ne pas utiliser le @dfn{crochet de construction}.
- Le crochet de construction est un programme d'aide qui le démon peut
- démarrer et auquel soumettre les requêtes de construction. Ce mécanisme est
- utilisé pour décharger les constructions à d'autres machines (@pxref{Réglages du délestage du démon}).
- @item --cache-failures
- Mettre les échecs de construction en cache. Par défaut, seules les
- constructions réussies sont mises en cache.
- Lorsque cette option est utilisée, @command{guix gc --list-failures} peut
- être utilisé pour demander l'ensemble des éléments du dépôt marqués comme
- échoués ; @command{guix gc --clear-failures} vide la liste des éléments
- aillant échoué. @xref{Invoquer guix gc}.
- @item --cores=@var{n}
- @itemx -c @var{n}
- Utiliser @var{n} cœurs CPU pour construire chaque dérivation ; @code{0}
- signifie autant que possible.
- La valeur par défaut est @code{0}, mais elle peut être modifiée par les
- clients comme avec l'option @code{--cores} de @command{guix build}
- (@pxref{Invoquer guix build}).
- L'effet est de définir la variable d'environnement @code{NIX_BUILD_CORES}
- dans le processus de construction, qui peut ensuite l'utiliser pour
- exploiter le parallélisme en interne — par exemple en lançant @code{make
- -j$NIX_BUILD_CORES}.
- @item --max-jobs=@var{n}
- @itemx -M @var{n}
- Permettre au plus @var{n} travaux de construction en parallèle. La valeur
- par défaut est @code{1}. La mettre à @code{0} signifie qu'aucune
- construction ne sera effectuée localement ; à la place, le démon déchargera
- les constructions (@pxref{Réglages du délestage du démon}) ou échouera.
- @item --max-silent-time=@var{secondes}
- Lorsque le processus de construction ou de substitution restent silencieux
- pendant plus de @var{secondes}, le terminer et rapporter une erreur de
- construction.
- La valeur par défaut est @code{0}, ce qui désactive le délai.
- La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--max-silent-time}}).
- @item --timeout=@var{secondes}
- De même, lorsque le processus de construction ou de substitution dure plus
- de @var{secondes}, le terminer et rapporter une erreur de construction.
- La valeur par défaut est @code{0}, ce qui désactive le délai.
- La valeur spécifiée ici peut être modifiée par les clients (@pxref{Options de construction communes, @code{--timeout}}).
- @item --rounds=@var{N}
- Construire chaque dérivations @var{N} fois à la suite, et lever une erreur
- si les résultats de construction consécutifs ne sont pas identiques
- bit-à-bit. Remarquez que ce paramètre peut être modifié par les clients
- comme @command{guix build} (@pxref{Invoquer guix build}).
- Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
- dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
- l'étude des différences entre les deux résultats.
- @item --debug
- Produire une sortie de débogage.
- Cela est utile pour déboguer des problèmes de démarrage du démon, mais
- ensuite elle peut être modifiée par les clients, par exemple par l'option
- @code{--verbosity} de @command{guix build} (@pxref{Invoquer guix build}).
- @item --chroot-directory=@var{rép}
- Ajouter @var{rép} au chroot de construction
- Cela peut changer le résultat d'un processus de construction — par exemple
- s'il utilise une dépendance facultative trouvée dans @var{rép} lorsqu'elle
- est disponible ou pas sinon. Pour cette raison, il n'est pas recommandé
- d'utiliser cette option. À la place, assurez-vous que chaque dérivation
- déclare toutes les entrées dont elle a besoin.
- @item --disable-chroot
- Désactive les constructions dans un chroot.
- Utiliser cette option n'est pas recommandé car, de nouveau, elle permet aux
- processus de construction d'accéder à des dépendances non déclarées. Elle
- est nécessaire cependant lorsque @command{guix-daemon} tourne en tant
- qu'utilisateur non privilégié.
- @item --log-compression=@var{type}
- Compresser les journaux de construction suivant le @var{type}, parmi
- @code{gzip}, @code{bzip2} ou @code{none}.
- À moins que @code{--lose-logs} ne soit utilisé, tous les journaux de
- construction sont gardés dans @var{localstatedir}. Pour gagner de la place,
- le démon les compresse automatiquement avec bzip2 par défaut.
- @item --disable-deduplication
- @cindex déduplication
- Désactiver la « déduplication » automatique des fichiers dans le dépôt.
- Par défaut, les fichiers ajoutés au dépôt sont automatiquement « dédupliqués
- » : si un nouveau fichier est identique à un autre fichier trouvé dans le
- dépôt, le démon en fait un lien en dur vers l'autre fichier. Cela réduit
- considérablement l'utilisation de l'espace disque au prix d'une charge en
- entrée/sortie plus grande à la fin d'un processus de construction. Cette
- option désactive cette optimisation.
- @item --gc-keep-outputs[=yes|no]
- Dire si le ramasse-miettes (GC) doit garder les sorties des dérivations
- utilisées.
- @cindex racines du GC
- @cindex racines du ramasse-miettes
- Lorsqu'elle est à « yes », le GC gardera les sorties de toutes les
- dérivations — les fichiers @code{.drv} — accessibles dans le dépôt. La
- valeur par défaut est « no », ce qui signifie que les sorties des
- dérivations ne sont gardées que si elles sont accessibles à partir d'une
- racine du GC. @xref{Invoquer guix gc} pour plus d'informations sur les
- racines du GC.
- @item --gc-keep-derivations[=yes|no]
- Dire si le ramasse-miettes (GC) doit garder les dérivations correspondant à
- des sorties utilisées.
- Lorsqu'elle est à « yes », comme c'est le cas par défaut, le GC garde les
- dérivations — c.-à-d.@: les fichiers @file{.drv} — tant qu'au moins une de
- leurs sorties est utilisée. Cela permet aux utilisateurs de garder une
- trace de l'origine des éléments du dépôt. Le mettre à « no » préserve un
- peu d'espace disque.
- De cette manière, avec @code{--gc-keep-derivations} à « yes »,
- l'accessibilité des sorties s'étend des sorties aux dérivations et avec
- @code{--gc-keep-outputs} à « yes », elle s'étend des dérivations aux
- sorties. Quand les deux options sont à « yes », le GC gardera tous les
- prérequis de construction (les sources, le compilateur, les bibliothèques,
- et les autres outils de construction) des objets accessibles dans le dépôt,
- indépendamment du fait qu'ils soient ou non accessibles depuis une racine du
- GC. Cela est pratique pour les développeurs car ça leur fait gagner du
- temps de reconstruction et de téléchargement.
- @item --impersonate-linux-2.6
- Sur les système basés sur Linux, se faire passer pour Linux 2.6. Cela
- signifie que l'appel système du noyau @code{uname} rapportera 2.6 comme
- numéro de version.
- Cela peut être utile pour construire des programmes qui dépendent
- (généralement sans fondement) du numéro de version du noyau.
- @item --lose-logs
- Ne pas garder les journaux de construction. Par défaut ils sont gardés dans
- @code{@var{localstatedir}/guix/log}.
- @item --system=@var{système}
- Supposer que @var{système} est le type de système actuel. Par défaut c'est
- la paire architecture-noyau trouvée à la configuration, comme
- @code{x86_64-linux}.
- @item --listen=@var{extrémité}
- Écouter les connexions sur @var{extrémité}. @var{extrémité} est interprété
- comme un nom de fichier d'un socket Unix-domain s'il commence par @code{/}
- (barre oblique). Sinon, @var{extrémité} est interprété comme un nom de
- domaine ou d'hôte et un port sur lequel écouter. Voici quelques exemples :
- @table @code
- @item --listen=/gnu/var/daemon
- Écouter les connexions sur le socket Unix-domain @file{/gnu/var/daemon} en
- le créant si besoin.
- @item --listen=localhost
- @cindex démon, accès distant
- @cindex accès distant au démon
- @cindex démon, paramètres de grappes
- @cindex grappes, paramètres du démon
- Écouter les connexions TCP sur l'interface réseau correspondant à
- @code{localhost} sur le port 44146.
- @item --listen=128.0.0.42:1234
- Écouter les connexions TCP sur l'interface réseau correspondant à
- @code{128.0.0.42} sur le port 1234.
- @end table
- Cette option peut être répétée plusieurs fois, auquel cas
- @command{guix-daemon} accepte des connexions sur toutes les extrémités
- spécifiées. Les utilisateurs peuvent dire aux commandes clientes à quelle
- extrémité se connecter en paramétrant la variable d'environnement
- @code{GUIX_DAEMON_SOCKET} (@pxref{Le dépôt, @code{GUIX_DAEMON_SOCKET}}).
- @quotation Remarque
- Le protocole du démon est @emph{non authentifié et non chiffré}. Utiliser
- @code{--listen=@var{host}} est adapté sur des réseaux locaux, comme pour des
- grappes de serveurs, où seuls des nœuds de confiance peuvent se connecter au
- démon de construction. Dans les autres cas où l'accès à distance au démon
- est requis, nous conseillons d'utiliser un socket Unix-domain avec SSH@.
- @end quotation
- Lorsque @code{--listen} est omis, @command{guix-daemon} écoute les
- connexions sur le socket Unix-domain situé à
- @file{@var{localstatedir}/guix/daemon-socket/socket}.
- @end table
- @node Réglages applicatifs
- @section Réglages applicatifs
- @cindex distro extérieure
- Lorsque vous utilisez Guix par dessus une distribution GNU/Linux différente
- de GuixSD — ce qu'on appelle une @dfn{distro externe} — quelques étapes
- supplémentaires sont requises pour que tout soit en place. En voici
- certaines.
- @subsection Régionalisation
- @anchor{locales-and-locpath}
- @cindex régionalisation, en dehors de GuixSD
- @vindex LOCPATH
- @vindex GUIX_LOCPATH
- Les paquets installés @i{via} Guix n'utiliseront pas les données de
- régionalisation du système hôte. À la place, vous devrez d'abord installer
- l'un des paquets linguistiques disponibles dans Guix puis définir la
- variable d'environnement @code{GUIX_LOCPATH} :
- @example
- $ guix package -i glibc-locales
- $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
- @end example
- Remarquez que le paquet @code{glibc-locales} contient les données pour tous
- les environnement linguistiques supportés par la GNU@tie{}libc et pèse
- environ 110@tie{}Mo. Autrement, les @code{glibc-utf8-locales} est plus
- petit mais limité à quelques environnements UTF-8.
- La variable @code{GUIX_LOCPATH} joue un rôle similaire à @code{LOCPATH}
- (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
- Manual}). Il y a deux différences importantes cependant :
- @enumerate
- @item
- @code{GUIX_LOCPATH} n'est compris que par la libc dans Guix et pas par la
- libc fournie par les distros externes. Ainsi, utiliser @code{GUIX_LOCPATH}
- vous permet de vous assurer que les programmes de la distro externe ne
- chargeront pas de données linguistiques incompatibles.
- @item
- La libc ajoute un suffixe @code{/X.Y} à chaque entrée de
- @code{GUIX_LOCPATH}, où @code{X.Y} est la version de la libc — p.@: ex.@:
- @code{2.22}. Cela signifie que, si votre profile Guix contient un mélange
- de programmes liés avec des versions différentes de la libc, chaque version
- de la libc essaiera de charger les environnements linguistiques dans le bon
- format.
- @end enumerate
- Cela est important car le format des données linguistiques utilisés par
- différentes version de la libc peuvent être incompatibles.
- @subsection Name Service Switch
- @cindex name service switch, glibc
- @cindex NSS (name service switch), glibc
- @cindex nscd (name service caching daemon)
- @cindex name service caching daemon (nscd)
- Lorsque vous utilisez Guix sur une distro externe, nous @emph{recommandons
- fortement} que ce système fasse tourner le @dfn{démon de cache de service de
- noms} de la bibliothèque C de GNU, @command{nscd}, qui devrait écouter sur
- le socket @file{/var/run/nscd/socket}. Sans cela, les applications
- installées avec Guix peuvent échouer à résoudre des noms d'hôtes ou
- d'utilisateurs, ou même planter. Les paragraphes suivants expliquent
- pourquoi.
- @cindex @file{nsswitch.conf}
- La bibliothèque C de GNU implémente un @dfn{name service switch} (NSS), qui
- est un mécanisme d'extension pour les « résolutions de noms » en général :
- résolution de nom d'hôte, de compte utilisateur et plus (@pxref{Name Service Switch,,, libc, The GNU C Library Reference Manual}).
- @cindex Network information service (NIS)
- @cindex NIS (Network information service)
- Comme il est extensible, NSS supporte des @dfn{greffons} qui fournissent une
- nouvelle implémentation de résolution de nom : par exemple le greffon
- @code{nss-mdns} permet la résolution de noms d'hôtes en @code{.local}, le
- greffon @code{nis} permet la résolution de comptes utilisateurs avec le
- Network Information Service (NIS), etc. Ces « services de recherches »
- supplémentaires sont configurés au niveau du système dans
- @file{/etc/nsswitch.conf}, et tous les programmes qui tournent sur ce
- système honorent ces paramètres (@pxref{NSS Configuration File,,, libc, The
- GNU C Reference Manual})
- Lorsqu'ils essayent d'effectuer une résolution de nom — par exemple en
- appelant la fonction @code{getaddrinfo} en C — les applications essayent
- d'abord de se connecter au nscd ; en cas de réussite, nscd effectue la
- résolution de nom pour eux. Si le nscd ne tourne pas, alors ils effectue la
- résolution eux-même, en changeant les service de résolution dans leur propre
- espace d'adressage et en le lançant. Ce services de résolution de noms —
- les fichiers @file{libnns_*.so} — sont @code{dlopen}és mais ils peuvent
- provenir de la bibliothèque C du système, plutôt que de la bibliothèque C à
- laquelle l'application est liée (la bibliothèque C de Guix).
- Et c'est là que se trouve le problème : si votre application est liée à la
- bibliothèque C de Guix (disons, glibc-2.24) et essaye de charger les
- greffons NSS d'une autre bibliothèque C (disons, @code{libnss_mdns.so} pour
- glibc-2.22), il est très probable qu'elle plante ou que sa résolution de nom
- échoue de manière inattendue.
- Lancer @command{nscd} sur le système, entre autres avantages, élimine ce
- problème d'incompatibilité binaire car ces fichiers @code{libnss_*.so} sont
- chargés par le processus @command{nscd}, pas par l'application elle-même.
- @subsection Polices X11
- @cindex polices
- La majorité des applications graphiques utilisent fontconfig pour trouver et
- charger les police et effectuer le rendu côté client X11. Le paquet
- @code{fontconfig} dans Guix cherche les polices dans
- @file{$HOME/.guix-profile} par défaut. Ainsi, pour permettre aux
- applications graphiques installées avec Guix d'afficher des polices, vous
- devez aussi installer des polices avec Guix. Les paquets de polices
- essentiels sont @code{gs-fonts}, @code{font-dejavu} et
- @code{font-gnu-freefont-ttf}.
- Pour afficher des textes écrits en chinois, en japonais ou en coréen dans
- les applications graphiques, installez @code{font-adobe-source-han-sans} ou
- @code{font-wqy-zenhei}. Le premier a plusieurs sorties, une par famille de
- langue (@pxref{Des paquets avec plusieurs résultats}). Par exemple, la commande
- suivante installe les polices pour le chinois :
- @example
- guix package -i font-adobe-source-han-sans:cn
- @end example
- @cindex @code{xterm}
- Les vieux programmes comme @command{xterm} n'utilisent pas fontconfig et
- s'appuient sur le rendu du côté du serveur. Ces programmes ont besoin de
- spécifier le nom complet de la police en utlisant XLFD (X Logical Font
- Description), comme ceci :
- @example
- -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
- @end example
- Pour pouvoir utiliser ces noms complets avec les polices TrueType installées
- dans votre profil Guix, vous devez étendre le chemin des polices du serveur
- X :
- @c Note: 'xset' does not accept symlinks so the trick below arranges to
- @c get at the real directory. See <https://bugs.gnu.org/30655>.
- @example
- xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
- @end example
- @cindex @code{xlsfonts}
- Ensuite, vous pouvez lancer @code{xlsfonts} (du paquet @code{xlsfonts}) pour
- vous assurer que vos polices TrueType y sont listées.
- @cindex @code{fc-cache}
- @cindex cache de polices
- Après l'installation des polices vous devrez peut-être rafraîchir le cache
- des polices pour pouvoir les utiliser dans les applications. Ça s'applique
- aussi lorsque les applications installées avec Guix n'ont pas l'air de
- trouver les polices. Pour forcer la reconstruction du cache de polices
- lancez @code{fc-cache -f}. La commande @code{fc-cache} est fournie par le
- paquet @code{fontconfig}.
- @subsection Certificats X.509
- @cindex @code{nss-certs}
- Le paquet @code{nss-certs} fournit les certificats X.509 qui permettent aux
- programmes d'authentifier les serveurs web par HTTPS@.
- Lorsque vous utilisez Guix sur une distribution externe, vous pouvez
- installer ce paquet et définir les variables d'environnement adéquates pour
- que les paquets sachent où trouver les certificats. @xref{Certificats X.509}, pour des informations détaillées.
- @subsection Paquets emacs
- @cindex @code{emacs}
- Lorsque vous installez les paquets Emacs avec Guix, les fichiers elisp
- peuvent être placés soit dans
- @file{$HOME/.guix-profile/share/emacs/site-lisp/} soit dans des
- sous-répertoires de
- @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. Ce dernier existe
- car il existe potentiellement des milliers de paquets Emacs et stocker leurs
- fichiers dans un seul répertoire peut ne pas être fiable (à cause de
- conflits de noms). Donc on pense qu'utiliser un répertoire séparé est une
- bonne idée. C'est très similaire à la manière dont le système de paquet
- d'Emacs organise la structure de fichiers (@pxref{Package Files,,, emacs,
- The GNU Emacs Manual}).
- Par défaut, Emacs (installé avec Guix) « sait » où ces paquets ce trouvent,
- donc vous n'avez pas besoin de le configurer. Si, pour quelque raison que
- ce soit, vous souhaitez éviter de charger automatiquement les paquets Emacs
- installés avec Guix, vous pouvez le faire en lançaint Emacs avec l'option
- @code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
- @subsection La chaîne d'outils GCC
- @cindex GCC
- @cindex ld-wrapper
- Guix offre des paquets de compilateurs individuels comme @code{gcc} mais si
- vous avez besoin d'une chaîne de compilation complète pour compiler et lier
- du code source, vous avez en fait besoin du paquet @code{gcc-toolchain}. Ce
- paquet fournit une chaîne d'outils GCC pour le développement C/C++, dont GCC
- lui-même, la bibliothèque C de GNU (les en-têtes et les binaires, plus les
- symboles de débogage dans la sortie @code{debug}), Binutils et une enveloppe
- pour l'éditeur de liens.
- @cindex tentative d'utiliser une bibliothèque impure, message d'erreur
- Le rôle de l'enveloppe est d'inspecter les paramètres @code{-L} et @code{-l}
- passés à l'éditeur de liens, d'ajouter des arguments @code{-rpath}
- correspondants et d'invoquer le véritable éditeur de liens avec ce nouvel
- ensemble d'arguments. Par défaut, l'enveloppe refuse de lier des
- bibliothèques en dehors du dépôt pour assure la « pureté ». Cela peut être
- embêtant lorsque vous utilisez la chaîne d'outils pour lier des
- bibliothèques locales. Pour permettre des références à des bibliothèques en
- dehors du dépôt, vous devrez définir la variable d'environnement
- @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
- @c TODO What else?
- @c *********************************************************************
- @node Gestion de paquets
- @chapter Gestion de paquets
- @cindex paquets
- Le but de GNU Guix est de permettre à ses utilisateurs d'installer, mettre à
- jour et supprimer facilement des paquets logiciels sans devoir connaître
- leur procédure de construction ou leurs dépendances. Guix va aussi plus
- loin que ces fonctionnalités évidentes.
- Ce chapitre décrit les principales fonctionnalités de Guix, ainsi que des
- outils de gestion des paquets qu'il fournit. En plus de l'interface en
- ligne de commande décrite en dessous de (@pxref{Invoquer guix package,
- @code{guix package}}), vous pouvez aussi utiliser l'interface Emacs-Guix
- (@pxref{Top,,, emacs-guix, Le manuel de référence de emacs-guix}), après
- avoir installé le paquet @code{emacs-guix} (lancez la commande @kbd{M-x
- guix-help} pour le démarrer) :
- @example
- guix package -i emacs-guix
- @end example
- @menu
- * Fonctionnalités:: Comment Guix va rendre votre vie plus heureuse.
- * Invoquer guix package:: Installation, suppression, etc.@: de paquets.
- * Substituts:: Télécharger des binaire déjà construits.
- * Des paquets avec plusieurs résultats:: Un seul paquet source, plusieurs
- résultats.
- * Invoquer guix gc:: Lancer le ramasse-miettes.
- * Invoquer guix pull:: Récupérer la dernière version de Guix et de
- la distribution.
- * Canaux:: Personnaliser la collection des paquets.
- * Inférieurs:: Interagir avec une autre révision de Guix.
- * Invoquer guix describe:: Affiche des informations sur la révision Guix
- actuelle.
- * Invoquer guix pack:: Créer des lots de logiciels.
- * Invoquer guix archive:: Exporter et importer des fichiers du dépôt.
- @end menu
- @node Fonctionnalités
- @section Fonctionnalités
- Lorsque vous utilisez Guix, chaque paquet arrive dans @dfn{dépôt des
- paquets}, dans son propre répertoire — quelque chose comme
- @file{/gnu/store/xxx-paquet-1.2}, où @code{xxx} est une chaîne en base32.
- Plutôt que de se rapporter à ces répertoires, les utilisateurs ont leur
- propre @dfn{profil} qui pointe vers les paquets qu'ils veulent vraiment
- utiliser. Ces profils sont stockés dans le répertoire personnel de chaque
- utilisateur dans @code{$HOME/.guix-profile}.
- Par exemple, @code{alice} installe GCC 4.7.2. Il en résulte que
- @file{/home/alice/.guix-profile/bin/gcc} pointe vers
- @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Maintenant, sur la même
- machine, @code{bob} a déjà intallé GCC 4.8.0. Le profil de @code{bob}
- continue simplement de pointer vers
- @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc} — c.-à-d.@: les deux versions de
- GCC coexistent surs le même système sans aucune interférence.
- La commande @command{guix package} est l'outil central pour gérer les
- paquets (@pxref{Invoquer guix package}). Il opère sur les profils
- utilisateurs et peut être utilisé avec les @emph{privilèges utilisateurs
- normaux}.
- @cindex transactions
- La commande fournit les opérations évidentes d'installation, de suppression
- et de mise à jour. Chaque invocation est en fait une @emph{transaction} :
- soit l'opération demandée réussi, soit rien ne se passe. Ainsi, si le
- processus @command{guix package} est terminé pendant la transaction ou si
- une panne de courant arrive pendant la transaction, le profil de
- l'utilisateur reste dans son état précédent et reste utilisable.
- En plus, il est possible @emph{d'annuler} toute transaction sur les
- paquets. Donc si par exemple un mise à jour installe une nouvelle version
- d'un paquet qui révèle un bogue sérieux, les utilisateurs peuvent revenir en
- arrière à l'instance précédente de leur profil qui est connu pour bien
- fonctionner. De manière similaire, la configuration globale du système dans
- GuixSD est sujette aux mises à jour transactionnelles et aux annulations
- (@pxref{Utiliser le système de configuration}).
- Tous les paquets du dépôt des paquets peut être @emph{glané}. Guix peut
- déterminer quels paquets sont toujours référencés par les profils des
- utilisateurs et supprimer ceux qui ne sont plus référencés de manière
- prouvable (@pxref{Invoquer guix gc}). Les utilisateurs peuvent toujours
- explicitement supprimer les anciennes générations de leur profil pour que
- les paquets auxquels elles faisaient référence puissent être glanés.
- @cindex reproductibilité
- @cindex constructions reproductibles
- Guix prend une approche @dfn{purement fonctionnelle} de la gestion de
- paquets, telle que décrite dans l'introduction (@pxref{Introduction}).
- Chaque nom de répertoire de paquet dans @file{/gnu/store} contient un hash
- de toutes les entrées qui ont été utilisées pendant la construction de ce
- paquet — le compilateur, les bibliothèques, les scripts de construction,
- etc. Cette correspondance directe permet aux utilisateurs de s'assurer que
- l'installation d'un paquet donné correspond à l'état actuel de leur
- distribution. Elle aide aussi à maximiser la @dfn{reproductibilité} : grâce
- aux environnements de construction utilisés, une construction donnée à de
- forte chances de donner des fichiers identiques bit-à-bit lorsqu'elle est
- effectuée sur des machines différents (@pxref{Invoquer guix-daemon,
- container}).
- @cindex substituts
- Ce fondement permet à Guix de supporter le @dfn{déploiement transparent de
- binaire ou source}. Lorsqu'une binaire pré-construit pour une entrée de
- @file{/gnu/store} est disponible depuis une source externe (un
- @dfn{substitut}), Guix le télécharge simplement et le décompresse ; sinon,
- il construit le paquet depuis les sources localement (@pxref{Substituts}).
- Comme les résultats des constructions sont généralement reproductibles au
- bit près, si vous n'avez pas besoin de faire confiance aux serveurs qui
- fournissent les substituts : vous pouvez forcer une construction locale et
- @emph{défier} les fournisseurs (@pxref{Invoquer guix challenge}).
- Le contrôle de l'environnement de construction est aussi une fonctionnalité
- utile pour les développeurs. La commande @command{guix environment} permet
- aux développeurs d'un paquet de mettre en place rapidement le bon
- environnement de développement pour leur paquet, sans avoir à installer
- manuellement les dépendances du paquet dans leur profil (@pxref{Invoquer guix environment}).
- @cindex réplication, des environnements logiciels
- @cindex suivi de la provenance, des artefacts logiciels
- La totalité de Guix et des définitions de paquets sont placés sous contrôle
- de version, et @command{guix pull} vous permet de « voyager dans le temps »
- de l'historique de Guix lui-même (@pxref{Invoquer guix pull}). Cela est
- rend possible la réplication d'une instance Guix sur une machine différente
- ou plus tard, ce qui vous permet de @emph{répliquer des environnements
- logiciels complets}, tout en garantissant un @dfn{suivi de provenance}
- précis des logiciels.
- @node Invoquer guix package
- @section Invoquer @command{guix package}
- @cindex installer des paquets
- @cindex supprimer des paquets
- @cindex installation de paquets
- @cindex suppression de paquets
- La commande @command{guix package} est l'outil qui permet d'installer,
- mettre à jour et supprimer les paquets ainsi que de revenir à une
- configuration précédente. Elle n'opère que dans le profil de l'utilisateur
- et fonctionne avec les privilèges utilisateurs normaux
- (@pxref{Fonctionnalités}). Sa syntaxe est :
- @example
- guix package @var{options}
- @end example
- @cindex transactions
- @var{options} spécifie d'abord les opérations à effectuer pendant la
- transaction. À la fin, une nouvelle génération du profil est créée mais les
- @dfn{générations} précédentes du profil restent disponibles si l'utilisateur
- souhaite y revenir.
- Par exemple, pour supprimer @code{lua} et installer @code{guile} et
- @code{guile-cairo} en une seule transaction :
- @example
- guix package -r lua -i guile guile-cairo
- @end example
- @command{guix package} supporte aussi une @dfn{approche déclarative} où
- l'utilisateur spécifie l'ensemble exact des paquets qui doivent être
- disponibles le passe @i{via} l'option @option{--manifest}
- (@pxref{profile-manifest, @option{--manifest}}).
- @cindex profil
- Pour chaque utilisateur, un lien symbolique vers le profil par défaut de cet
- utilisateur est automatiquement créé dans @file{$HOME/.guix-profile}. Ce
- lien symbolique pointe toujours vers la génération actuelle du profil par
- défaut de l'utilisateur. Ainsi, les utilisateurs peuvent ajouter
- @file{$HOME/.guix-profile/bin} à leur variable d'environnement @code{PATH}
- etc.
- @cindex chemins de recherche
- Si vous n'utilisez pas la distribution système Guix, vous devriez ajouter
- les lignes suivantes à votre @file{~/.bash_profile} (@pxref{Bash Startup
- Files,,, bash, The GNU Bash Reference Manual}) pour que les shells créés
- ensuite aient les bonnes définitions des variables d'environnement :
- @example
- GUIX_PROFILE="$HOME/.guix-profile" ; \
- source "$HOME/.guix-profile/etc/profile"
- @end example
- Dans un environnement multi-utilisateur, les profils utilisateurs sont
- stockés comme une @dfn{racine du ramasse-miettes}, vers laquelle pointe
- @file{$HOME/.guix-profile} (@pxref{Invoquer guix gc}). Ce répertoire est
- normalement
- @code{@var{localstatedir}/guix/profiles/per-user/@var{utilisateur}}, où
- @var{localstatedir} est la valeur passée à @code{configure} avec
- @code{--localstatedir} et @var{utilisateur} le nom d'utilisateur. Le
- répertoire @file{per-user} est créé lorsque @command{guix-daemon} est
- démarré et sous-répertoire @var{utilisateur} est créé par @command{guix
- package}.
- Les @var{options} peuvent être les suivante :
- @table @code
- @item --install=@var{paquet} @dots{}
- @itemx -i @var{paquet} @dots{}
- Installer les @var{paquet}s spécifiés.
- Chaque @var{paquet} peut spécifier soit un simple nom de paquet, comme
- @code{guile} ou un nom de paquet suivi d'un arobase et d'un numéro de
- version, comme @code{guile@@1.8.8} ou simplement @code{guile@@1.8} (dans ce
- dernier cas, la version la plus récente commençant par @code{1.8} est
- utilisée).
- Si aucun numéro de version n'est spécifié, la version la plus récente
- disponible est choisie. En plus, @var{paquet} peut contenir un deux-points,
- suivi du nom d'une des sorties du paquet, comme dans @code{gcc:doc} ou
- @code{binutils@@2.22:lib} (@pxref{Des paquets avec plusieurs résultats}). Des
- paquets avec un nom correspondant et (éventuellement une version) sont
- recherchés dans les modules de la distribution GNU (@pxref{Modules de paquets}).
- @cindex entrées propagées
- Parfois les paquets ont des @dfn{entrées propagées} : ce sont des
- dépendances qui sont installées automatiquement avec le paquet demandé
- (@pxref{package-propagated-inputs, @code{propagated-inputs} in
- @code{package} objects} pour plus d'informations sur les entrées propagées
- dans les définitions des paquets).
- @anchor{package-cmd-propagated-inputs}
- Un exemple est la bibliothèque MPC de GNU : ses fichiers d'en-tête C se
- réfèrent à ceux de la bibliothèque MPFR de GNU, qui se réfèrent en retour à
- ceux de la bibliothèque GMP. Ainsi, lorsqu'on installe MPC, les
- bibliothèques MPFR et GMP sont aussi installées dans le profil ; supprimer
- MPC supprimera aussi MPFR et GMP — à moins qu'ils n'aient été aussi
- installés explicitement par l'utilisateur.
- D'autre part, les paquets dépendent parfois de la définition de variables
- d'environnement pour leur chemin de recherche (voir les explications sur
- @code{--search-paths} plus bas). Toute définition de variable
- d'environnement manquante ou possiblement incorrecte est rapportée ici.
- @item --install-from-expression=@var{exp}
- @itemx -e @var{exp}
- Installer le paquet évalué par @var{exp}
- @var{exp} doit être une expression Scheme qui s'évalue en un objet
- @code{<package>}. Cette option est notamment utile pour distinguer les
- variantes d'un paquet avec le même nom, avec des expressions comme @code{(@@
- (gnu packages base) guile-final)}.
- Remarquez que cette option installe la première sortie du paquet, ce qui
- peut être insuffisant lorsque vous avez besoin d'une sortie spécifique d'un
- paquet à plusieurs sorties.
- @item --install-from-file=@var{fichier}
- @itemx -f @var{fichier}
- Installer le paquet évalué par le code dans le @var{fichier}.
- Par exemple, @var{fichier} peut contenir une définition comme celle-ci
- (@pxref{Définition des paquets}) :
- @example
- @verbatiminclude package-hello.scm
- @end example
- Les développeurs peuvent trouver utile d'inclure un tel fichier
- @file{guix.scm} à la racine de l'arborescence des sources de leur projet qui
- pourrait être utilisé pour tester des versions de développement et créer des
- environnements de développement reproductibles (@pxref{Invoquer guix environment}).
- @item --remove=@var{paquet} @dots{}
- @itemx -r @var{paquet} @dots{}
- Supprimer les @var{paquet}s spécifiés.
- Comme pour @code{--install}, chaque @var{paquet} peut spécifier un numéro de
- version ou un nom de sortie en plus du nom du paquet. Par exemple, @code{-r
- glibc:debug} supprimerait la sortie @code{debug} de @code{glibc}.
- @item --upgrade[=@var{regexp} @dots{}]
- @itemx -u [@var{regexp} @dots{}]
- @cindex mettre à jour des paquets
- Mettre à jour tous les paquets installés. Si une @var{regexp} ou plus est
- spécifiée, la mise à jour n'installera que les paquets dont le nom
- correspond à @var{regexp}. Voyez aussi l'option @code{--do-not-upgrade} en
- dessous.
- Remarquez que cela met à jour vers la dernière version des paquets trouvée
- dans la distribution actuellement installée. Pour mettre à jour votre
- distribution, vous devriez lancer régulièrement @command{guix pull}
- (@pxref{Invoquer guix pull}).
- @item --do-not-upgrade[=@var{regexp} @dots{}]
- Lorsqu'elle est utilisée avec l'option @code{--upgrade}, ne @emph{pas}
- mettre à jour les paquets dont le nom correspond à @var{regexp}. Par
- exemple, pour mettre à jour tous les paquets du profil actuel à l'exception
- de ceux qui contiennent la chaîne « emacs » :
- @example
- $ guix package --upgrade . --do-not-upgrade emacs
- @end example
- @item @anchor{profile-manifest}--manifest=@var{fichier}
- @itemx -m @var{fichier}
- @cindex déclaration de profil
- @cindex manifest de profil
- Créer une nouvelle génération du profil depuis l'objet manifeste renvoyé par
- le code Scheme dans @var{fichier}.
- Cela vous permet de @emph{déclarer} le contenu du profil plutôt que de le
- construire avec une série de @code{--install} et de commandes similaires.
- L'avantage étant que le @var{fichier} peut être placé sous contrôle de
- version, copié vers d'autres machines pour reproduire le même profil, etc.
- @c FIXME: Add reference to (guix profile) documentation when available.
- @var{fichier} doit retourner un objet @dfn{manifest} qui est en gros une
- liste de paquets :
- @findex packages->manifest
- @example
- (use-package-modules guile emacs)
- (packages->manifest
- (list emacs
- guile-2.0
- ;; Utiliser une sortie spécifique d'un paquet.
- (list guile-2.0 "debug")))
- @end example
- @findex specifications->manifest
- Dans cet exemple on doit savoir quels modules définissent les variables
- @code{emacs} et @code{guile-2.0} pour fournir la bonne ligne
- @code{use-package-modules} ce qui peut être embêtant. On peut à la place
- fournir des spécifications de paquets normales et laisser
- @code{specifications->manifest} rechercher les objets de paquets
- correspondants, comme ceci :
- @example
- (specifications->manifest
- '("emacs" "guile@@2.2" "guile@@2.2:debug"))
- @end example
- @item --roll-back
- @cindex revenir en arrière
- @cindex défaire des transactions
- @cindex transactions, défaire
- Revenir à la @dfn{génération} précédente du profil c.-à-d.@: défaire la
- dernière transaction.
- Lorsqu'elle est combinée avec des options comme @code{--install}, cette
- option revient en arrière avant toute autre action.
- Lorsque vous revenez de la première génération qui contient des fichiers, le
- profil pointera vers la @dfn{zéroième génération} qui ne contient aucun
- fichier en dehors de ses propres métadonnées.
- Après être revenu en arrière, l'installation, la suppression et la mise à
- jour de paquets réécrit les futures générations précédentes. Ainsi,
- l'historique des générations dans un profil est toujours linéaire.
- @item --switch-generation=@var{motif}
- @itemx -S @var{motif}
- @cindex générations
- Basculer vers une génération particulière définie par le @var{motif}.
- Le @var{motif} peut être soit un numéro de génération soit un nombre précédé
- de « + » ou « - ». Ce dernier signifie : se déplacer en avant ou en arrière
- d'un nombre donné de générations. Par exemple, si vous voulez retourner à
- la dernière génération après @code{--roll-back}, utilisez
- @code{--switch-generation=+1}.
- La différence entre @code{--roll-back} et @code{--switch-generation=-1} est
- que @code{--switch-generation} ne vous amènera pas à la zéroième génération,
- donc si la génération demandée n'existe pas la génération actuelle ne
- changera pas.
- @item --search-paths[=@var{genre}]
- @cindex chemins de recherche
- Rapporter les définitions des variables d'environnement dans la syntaxe Bash
- qui peuvent être requises pour utiliser l'ensemble des paquets installés.
- Ces variables d'environnement sont utilisées pour spécifier les @dfn{chemins
- de recherche} de fichiers utilisés par les paquets installés.
- Par exemple, GCC a besoin des variables d'environnement @code{CPATH} et
- @code{LIBRARY_PATH} pour trouver les en-têtes et les bibliothèques dans le
- profil de l'utilisateur (@pxref{Environment Variables,,, gcc, Using the GNU
- Compiler Collection (GCC)}). Si GCC et, disons, la bibliothèque C sont
- installés dans le profil, alors @code{--search-paths} suggérera
- d'initialiser ces variables à @code{@var{profil}/include} et
- @code{@var{profil}/lib}, respectivement.
- Le cas d'utilisation typique est de définir ces variables d'environnement
- dans le shell :
- @example
- $ eval `guix package --search-paths`
- @end example
- @var{genre} peut être l'une des valeurs @code{exact}, @code{prefix} ou
- @code{suffix}, ce qui signifie que les définitions des variables
- d'environnement retournées seront soit les paramètres exactes, ou placés
- avant ou après la valeur actuelle de ces paramètres. Lorsqu'il est omis,
- @var{genre} a pour valeur par défaut @code{exact}.
- Cette option peut aussi être utilisé pour calculer les chemins de recherche
- @emph{combinés} de plusieurs profils. Regardez cet exemple :
- @example
- $ guix package -p foo -i guile
- $ guix package -p bar -i guile-json
- $ guix package -p foo -p bar --search-paths
- @end example
- La dernière commande ci-dessus montre la variable @code{GUILE_LOAD_PATH}
- bien que, pris individuellement, ni @file{foo} ni @file{bar} n'auraient
- donné cette recommendation.
- @item --profile=@var{profil}
- @itemx -p @var{profil}
- Utiliser le @var{profil} à la place du profil par défaut de l'utilisateur.
- @cindex collisions, dans un profil
- @cindex faire des collisions de paquets dans des profils
- @cindex profil, collisions
- @item --allow-collisions
- Permettre des collisions de paquets dans le nouveau profil. À utiliser à
- vos risques et périls !
- Par défaut, @command{guix package} rapporte les @dfn{collisions} dans le
- profil comme des erreurs. Les collisions ont lieu quand deux version ou
- variantes d'un paquet donné se retrouvent dans le profil.
- @item --verbose
- Produire une sortie verbeuse. En particulier, fournir les journaux de
- construction de l'environnement sur le port d'erreur standard.
- @item --bootstrap
- Utiliser le programme d'amorçage Guile pour compiler le profil. Cette
- option n'est utile que pour les développeurs de la distriibution.
- @end table
- En plus de ces actions, @command{guix package} supporte les options
- suivantes pour demander l'état actuel d'un profil ou la disponibilité des
- paquets :
- @table @option
- @item --search=@var{regexp}
- @itemx -s @var{regexp}
- @cindex chercher des paquets
- Lister les paquets disponibles dont le nom, le synopsis ou la description
- correspondent à la @var{regexp}, triés par pertinence. Afficher toutes les
- métadonnées des paquets correspondants au format @code{recutils}
- (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
- Cela permet à des champs spécifiques d'être extraits avec la commande
- @command{recsel}, par exemple :
- @example
- $ guix package -s malloc | recsel -p name,version,relevance
- name: jemalloc
- version: 4.5.0
- relevance: 6
- name: glibc
- version: 2.25
- relevance: 1
- name: libgc
- version: 7.6.0
- relevance: 1
- @end example
- De manière similaire, pour montrer le nom de tous les paquets disponibles
- sous license GNU@tie{}LGPL version 3 :
- @example
- $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
- name: elfutils
- name: gmp
- @dots{}
- @end example
- Il est aussi possible de raffiner les résultats de la recherche avec
- plusieurs options @code{-s}. Par exemple, la commande suivante renvoie la
- liste des jeux de plateau :
- @example
- $ guix package -s '\<board\>' -s game | recsel -p name
- name: gnubg
- @dots{}
- @end example
- Si on avait oublié @code{-s game}, on aurait aussi eu les paquets logiciels
- qui s'occupent de circuits imprimés (en anglais : circuit board) ; supprimer
- les chevrons autour de @code{board} aurait aussi ajouté les paquets qui
- parlent de clavier (en anglais : key@emph{board}).
- Et maintenant un exemple plus élaboré. La commande suivante recherche les
- bibliothèques cryptographiques, retire les bibliothèques Haskell, Perl,
- Python et Ruby et affiche le nom et le synopsis des paquets correspondants :
- @example
- $ guix package -s crypto -s library | \
- recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
- @end example
- @noindent
- @xref{Selection Expressions,,, recutils, GNU recutils manual} pour plus
- d'information sur les @dfn{expressions de sélection} pour @code{recsel -e}.
- @item --show=@var{paquet}
- Afficher les détails du @var{paquet} dans la liste des paquets disponibles,
- au format @code{recutils} (@pxref{Top, GNU recutils databases,, recutils,
- GNU recutils manual}).
- @example
- $ guix package --show=python | recsel -p name,version
- name: python
- version: 2.7.6
- name: python
- version: 3.3.5
- @end example
- Vous pouvez aussi spécifier le nom complet d'un paquet pour n'avoir que les
- détails concernant une version spécifique :
- @example
- $ guix package --show=python@@3.4 | recsel -p name,version
- name: python
- version: 3.4.3
- @end example
- @item --list-installed[=@var{regexp}]
- @itemx -I [@var{regexp}]
- Liste les paquets actuellement installés dans le profil spécifié, avec les
- paquets les plus récemment installés en dernier. Lorsque @var{regexp} est
- spécifié, liste uniquement les paquets installés dont le nom correspond à
- @var{regexp}.
- Pour chaque paquet installé, affiche les éléments suivants, séparés par des
- tabulations : le nom du paquet, sa version, la partie du paquet qui est
- installé (par exemple, @code{out} pour la sortie par défaut, @code{include}
- pour ses en-têtes, etc) et le chemin du paquet dans le dépôt.
- @item --list-available[=@var{regexp}]
- @itemx -A [@var{regexp}]
- Lister les paquets actuellement disponibles dans la distribution pour ce
- système (@pxref{Distribution GNU}). Lorsque @var{regexp} est spécifié,
- liste uniquement les paquets dont le nom correspond à @var{regexp}.
- Pour chaque paquet, affiche les éléments suivants séparés par des
- tabulations : son nom, sa version, les parties du paquet (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement de sa définition.
- @item --list-generations[=@var{motif}]
- @itemx -l [@var{motif}]
- @cindex générations
- Renvoyer la liste des générations avec leur date de création ; pour chaque
- génération, montre les paquets installés avec les paquets installés les plus
- récemment en dernier. Remarquez que la zéroième génération n'est jamais
- montrée.
- Pour chaque paquet installé, afficher les éléments suivants, séparés par des
- tabulations : le nom du paquet, sa version, la partie du paquet qui a été
- installée (@pxref{Des paquets avec plusieurs résultats}), et l'emplacement du
- paquet dans le dépôt.
- Lorsque @var{motif} est utilisé, la commande ne renvoie que les générations
- correspondantes. Les motifs valides sont :
- @itemize
- @item @emph{Des entiers et des entiers séparés par des virgules}. Les deux motifs correspondent
- à des numéros de version. Par exemple, @code{--list-generations=1} renvoie
- la première.
- Et @code{--list-generations=1,8,2} renvoie les trois générations dans
- l'ordre spécifié. Aucune espace ni virgule surnuméraire n'est permise.
- @item @emph{Des interval}. @code{--list-generations=2..9} affiche les
- générations demandées et tout ce qui se trouvent entre elles. Remarquez que
- le début d'un interval doit être plus petit que sa fin.
- Il est aussi possible d'omettre le numéro final. Par exemple,
- @code{--list-generations=2..} renvoie toutes les générations à partir de la
- deuxième.
- @item @emph{Des durées}. Vous pouvez aussi récupérer les derniers @emph{N}@tie{}jours, semaines,
- ou moins en passant un entier avec la première lettre de la durée (en
- anglais : d, w ou m). Par exemple @code{--list-generations=20d} liste les
- générations qui sont agées d'au plus 20 jours.
- @end itemize
- @item --delete-generations[=@var{motif}]
- @itemx -d [@var{motif}]
- Lorsque @var{motif} est omis, supprimer toutes les générations en dehors de
- l'actuelle.
- Cette commande accepte les même motifs que @option{--list-generations}.
- Lorsque @var{motif} est spécifié, supprimer les générations correspondante.
- Lorsque @var{motif} spécifie une durée, les générations @emph{plus vieilles}
- que la durée spécifiée correspondent. Par exemple
- @code{--delete-generations=1m} supprime les générations vieilles de plus
- d'un mois.
- Si la génération actuelle correspond, elle n'est @emph{pas} supprimée. La
- zéroième génération n'est elle non plus jamais supprimée.
- Remarquez que supprimer des générations empêche de revenir en arrière vers
- elles. Ainsi, cette commande doit être utilisée avec précaution.
- @end table
- Enfin, comme @command{guix package} peut démarrer des processus de
- construction, elle supporte les options de construction communes
- (@pxref{Options de construction communes}). Elle supporte aussi les options de
- transformation de paquets comme @option{--with-source} (@pxref{Options de transformation de paquets}). Cependant, remarquez que les transformations de
- paquets sont perdues à la mise à jour ; pour les préserver à travers les
- mises à jours, vous devriez définir vos propres variantes des paquets dans
- une module Guile et l'ajouter à @code{GUIX_PACKAGE_PATH} (@pxref{Définition des paquets}).
- @node Substituts
- @section Substituts
- @cindex substituts
- @cindex binaires pré-construits
- Guix gère le déploiement depuis des binaires ou des sources de manière
- transparente ce qui signifie qu'il peut aussi bien construire localement que
- télécharger des éléments pré-construits depuis un serveur ou les deux. Nous
- appelons ces éléments pré-construits des @dfn{substituts} — ils se
- substituent aux résultats des constructions locales. Dans la plupart des
- cas, télécharger un substitut est bien plus rapide que de construire les
- choses localement.
- Les substituts peuvent être tout ce qui résulte d'une construction de
- dérivation (@pxref{Dérivations}). Bien sûr dans le cas général, il s'agit
- de paquets binaires pré-construits, mais les archives des sources par
- exemple résultent aussi de la construction d'une dérivation qui peut aussi
- être disponible en tant que substitut.
- @menu
- * Serveur de substituts officiel:: Une source particulière de substituts.
- * Autoriser un serveur de substituts:: Comment activer ou désactiver les
- substituts.
- * Authentification des substituts:: Coment Guix vérifie les substituts.
- * Paramètres de serveur mandataire:: Comment récupérer des substituts à
- travers un serveur mandataire.
- * Échec de substitution:: Qu'arrive-t-il quand la substitution échoue.
- * De la confiance en des binaires:: Comment pouvez-vous avoir confiance en
- un paquet binaire ?
- @end menu
- @node Serveur de substituts officiel
- @subsection Serveur de substituts officiel
- @cindex hydra
- @cindex ferme de construction
- Le serveur @code{mirror.hydra.gnu.org} est une interface à la ferme de
- construction officielle qui construit des paquets pour Guix continuellement
- pour certaines architectures et les rend disponibles en tant que
- substituts. C'est la source par défaut des substituts ; elle peut être
- modifiée en passant l'option @option{--substitute-urls} soit à
- @command{guix-daemon} (@pxref{daemon-substitute-urls,, @code{guix-daemon
- --substitute-urls}}) soit aux outils clients comme @command{guix package}
- (@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
- Les URL des substituts peuvent être soit en HTTP soit en HTTPS. Le HTTPS
- est recommandé parce que les communications sont chiffrées ; à l'inverse
- HTTP rend les communications visibles pour un espion qui peut utiliser les
- informations accumulées sur vous pour déterminer par exemple si votre
- système a des vulnérabilités de sécurités non corrigées.
- Les substituts de la ferme de construction officielle sont activés par
- défaut dans la distribution système Guix (@pxref{Distribution GNU}).
- Cependant, ils sont désactivés par défaut lorsque vous utilisez Guix sur une
- distribution externe, à moins que vous ne les ayez explicitement activés via
- l'une des étapes d'installation recommandées (@pxref{Installation}). Les
- paragraphes suivants décrivent comment activer ou désactiver les substituts
- de la ferme de construction ; la même procédure peut être utilisée pour
- activer les substituts de n'importe quel autre serveur de substituts.
- @node Autoriser un serveur de substituts
- @subsection Autoriser un serveur de substituts
- @cindex sécurité
- @cindex substituts, autorisations
- @cindex liste de contrôle d'accès (ACL), pour les substituts
- @cindex ACL (liste de contrôle d'accès), pour les substituts
- Pour permettre à Guix de télécharger les substituts depuis
- @code{hydra.gnu.org} ou un mirroir, vous devez ajouter sa clef publique à la
- liste de contrôle d'accès (ACL) des imports d'archives, avec la commande
- @command{guix archive} (@pxref{Invoquer guix archive}). Cela implique que
- vous faîtes confiance à @code{hydra.gnu.org} pour ne pas être compromis et
- vous servir des substituts authentiques.
- La clef publique pour @code{hydra.gnu.org} est installée avec Guix, dans
- @code{@var{préfixe}/share/guix/hydra.gnu.org.pub}, où @var{préfixe} est le
- préfixe d'installation de Guix. Si vous avez installé Guix depuis les
- sources, assurez-vous d'avoir vérifié la signature GPG de
- @file{guix-@value{VERSION}.tar.gz} qui contient ce fichier de clef
- publique. Ensuite vous pouvez lancer quelque chose comme ceci :
- @example
- # guix archive --authorize < @var{préfixe}/share/guix/hydra.gnu.org.pub
- @end example
- @quotation Remarque
- De même, le fichier @file{berlin.guixsd.org.pub} contient la clef publique
- de la nouvelle ferme de construction du projet, disponible depuis
- @indicateurl{https://berlin.guixsd.org}.
- Au moment où ces lignes sont écrites, @code{berlin.guixsd.org} est mis à
- niveau pour mieux passer à l'échelle, mais vous pourriez vouloir le tester.
- Il est associé à 20 nœuds de construction x86_64/i686 et pourrait fournir
- des substituts plus rapidement que @code{mirror.hydra.gnu.org}
- @end quotation
- Une fois que cela est en place, la sortie d'une commande comme @code{guix
- build} devrait changer de quelque chose comme :
- @example
- $ guix build emacs --dry-run
- Les dérivations suivantes seraient construites :
- /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
- /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
- /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
- /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
- @dots{}
- @end example
- @noindent
- à quelque chose comme :
- @example
- $ guix build emacs --dry-run
- 112.3 Mo seraient téléchargés :
- /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
- /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
- /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
- /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
- @dots{}
- @end example
- @noindent
- Cela indique que les substituts de @code{hydra.gnu.org} sont utilisables et
- seront téléchargés, si possible, pour les futures constructions.
- @cindex substituts, comment les désactiver
- Le mécanisme de substitution peut être désactivé globalement en lançant
- @code{guix-daemon} avec @code{--no-substitutes} (@pxref{Invoquer guix-daemon}). Il peut aussi être désactivé temporairement en passant
- l'option @code{--no-substitutes} à @command{guix package}, @command{guix
- build} et aux autres outils en ligne de commande.
- @node Authentification des substituts
- @subsection Authentification des substituts
- @cindex signatures numériques
- Guix détecte et lève une erreur lorsqu'il essaye d'utiliser un substituts
- qui a été modifié. De même, il ignore les substituts qui ne sont pas signés
- ou qui ne sont pas signés par l'une des clefs listés dans l'ACL.
- Il y a une exception cependant : si un serveur non autorisé fournit des
- substituts qui sont @emph{identiques bit-à-bit} à ceux fournis par un
- serveur autorisé, alors le serveur non autorisé devient disponible pour les
- téléchargements. Par exemple en supposant qu'on a choisi deux serveurs de
- substituts avec cette option :
- @example
- --substitute-urls="https://a.example.org https://b.example.org"
- @end example
- @noindent
- @cindex constructions reproductibles
- Si l'ACL contient uniquement la clef de @code{b.example.org}, et si
- @code{a.example.org} sert @emph{exactement les mêmes} substituts, alors Guix
- téléchargera les substituts de @code{a.example.org} parce qu'il vient en
- premier dans la liste et peut être considéré comme un mirroir de
- @code{b.example.org}. En pratique, des machines de constructions produisent
- souvent les mêmes binaires grâce à des construction reproductibles au bit
- près (voir plus bas).
- Lorsque vous utilisez HTTPS, le certificat X.509 du serveur n'est @emph{pas}
- validé (en d'autre termes, le serveur n'est pas authentifié), contrairement
- à ce que des clients HTTPS comme des navigateurs web font habituellement.
- Cela est dû au fait que Guix authentifie les informations sur les substituts
- eux-même, comme expliqué plus haut, ce dont on se soucie réellement (alors
- que les certificats X.509 authentifie la relation entre nom de domaine et
- clef publique).
- @node Paramètres de serveur mandataire
- @subsection Paramètres de serveur mandataire
- @vindex http_proxy
- Les substituts sont téléchargés par HTTP ou HTTPS. La variable
- d'environnement @code{http_proxy} peut être initialisée dans l'environnement
- de @command{guix-daemon} et est respectée pour le téléchargement des
- substituts. Remarquez que la valeur de @code{http_proxy} dans
- l'environnement où tournent @command{guix build}, @command{guix package} et
- les autres clients n'a @emph{absolument aucun effet}.
- @node Échec de substitution
- @subsection Échec de substitution
- Même lorsqu'un substitut pour une dérivation est disponible, la substitution
- échoue parfois. Cela peut arriver pour plusieurs raisons : le serveur de
- substitut peut être hors ligne, le substitut a récemment été supprimé du
- serveur, la connexion peut avoir été interrompue, etc.
- Lorsque les substituts sont activés et qu'un substitut pour une dérivation
- est disponible, mais que la tentative de substitution échoue, Guix essaiera
- de construire la dérivation localement si @code{--fallback} a été passé en
- argument (@pxref{option de repli,, common build option @code{--fallback}}).
- Plus spécifiquement, si cet option n'a pas été passée en argument, alors
- aucune construction locale n'est effectuée et la dérivation est considérée
- comme étant en échec. Cependant, si @code{--fallback} est passé en argument,
- alors Guix essaiera de construire la dérivation localement et l'échec ou le
- succès de la dérivation dépend de l'échec ou du succès de la construction
- locale. Remarquez que lorsque les substituts sont désactivés ou qu'aucun
- substitut n'est disponible pour la dérivation en question, une construction
- locale sera @emph{toujours} effectuée, indépendamment du fait que l'argument
- @code{--fallback} ait été ou non passé.
- Pour se donner une idée du nombre de substituts disponibles maintenant, vous
- pouvez essayer de lancer la commande @command{guix weather} (@pxref{Invoquer guix weather}). Cette command fournit des statistiques sur les substituts
- fournis par un serveur.
- @node De la confiance en des binaires
- @subsection De la confiance en des binaires
- @cindex confiance, en des binaires pré-construits
- De nos jours, le contrôle individuel sur son utilisation propre de
- l'informatique est à la merci d'institutions, de sociétés et de groupes avec
- assez de pouvoir et de détermination pour contourner les infrastructures
- informatiques et exploiter leurs faiblesses. Bien qu'utiliser les
- substituts de @code{hydra.gnu.org} soit pratique, nous encourageons les
- utilisateurs à construire aussi par eux-même, voir à faire tourner leur
- propre ferme de construction, pour que @code{hydra.gnu.org} devienne une
- cible moins intéressante. Une façon d'aider est de publier les logiciels
- que vous construisez avec @command{guix publish} pour que les autres aient
- plus de choix de serveurs où télécharger les substituts (@pxref{Invoquer guix publish}).
- Guix possède les fondations pour maximiser la reproductibilité logicielle
- (@pxref{Fonctionnalités}). Dans la plupart des cas, des constructions
- indépendantes d'un paquet donnée ou d'une dérivation devrait donner des
- résultats identiques au bit près. Ainsi, à travers un ensemble de
- constructions de paquets indépendantes il est possible de renforcer
- l'intégrité du système. La commande @command{guix challenge} a pour but
- d'aider les utilisateurs à tester les serveurs de substituts et à aider les
- développeurs à trouver les constructions de paquets non-déterministes
- (@pxref{Invoquer guix challenge}). De même, l'option @option{--check} de
- @command{guix build} permet aux utilisateurs de vérifier si les substituts
- précédemment installés sont authentiques en les reconstruisant localement
- (@pxref{vérification de la construction, @command{guix build --check}}).
- Dans le futur, nous aimerions que Guix puisse publier et recevoir des
- binaires d'autres utilisateurs, d'une manière pair-à-pair. Si vous voulez
- discuter de ce projet, rejoignez-nous sur @email{guix-devel@@gnu.org}.
- @node Des paquets avec plusieurs résultats
- @section Des paquets avec plusieurs résultats
- @cindex paquets avec plusieurs résultats
- @cindex sorties de paquets
- @cindex sorties
- Souvent, les paquets définis dans Guix ont une seule @dfn{sortie} —
- c.-à-d.@: que le paquet source conduit à exactement un répertoire dans le
- dépôt. Lorsque vous lancez @command{guix package -i glibc}, vous installez
- la sortie par défaut du paquet GNU libc ; la sortie par défaut est appelée
- @code{out} mais son nom peut être omis comme le montre cette commande. Dans
- ce cas particuliers, la sortie par défaut de @code{glibc} contient tous les
- fichiers d'en-tête C, les bibliothèques partagées, les bibliothèques
- statiques, la documentation Info et les autres fichiers de support.
- Parfois il est plus approprié de séparer les divers types de fichiers
- produits par un même paquet source en plusieurs sorties. Par exemple, la
- bibliothèque C GLib (utilisée par GTK+ et des paquets associés) installe
- plus de 20 Mo de documentation de référence dans des pages HTML. Pour
- préserver l'espace disque des utilisateurs qui n'en ont pas besoin, la
- documentation va dans une sortie séparée nommée @code{doc}. Pour installer
- la sortie principale de GLib, qui contient tout sauf la documentation, on
- devrait lancer :
- @example
- guix package -i glib
- @end example
- @cindex documentation
- La commande pour installer la documentation est :
- @example
- guix package -i glib:doc
- @end example
- Certains paquets installent des programmes avec des « empreintes dépendances
- » différentes. Par exemple le paquet WordNet installe à la fois les outils
- en ligne de commande et les interfaces graphiques (GUI). La première ne
- dépend que de la bibliothèque C, alors que cette dernière dépend de Tcl/Tk
- et des bibliothèques X sous-jacentes. Dans ce cas, nous laissons les outils
- en ligne de commande dans la sortie par défaut et l'interface graphique dans
- une sortie séparée. Cela permet aux utilisateurs qui n'ont pas besoin
- d'interface graphique de gagner de la place. La commande @command{guix
- size} peut aider à trouver ces situations (@pxref{Invoquer guix size}). @command{guix graph} peut aussi être utile (@pxref{Invoquer guix graph}).
- Il y a plusieurs paquets à sorties multiples dans la distribution GNU.
- D'autres noms de sorties conventionnels sont @code{lib} pour les
- bibliothèques et éventuellement les fichiers d'en-tête, @code{bin} pour les
- programmes indépendants et @code{debug} pour les informations de débogage
- (@pxref{Installer les fichiers de débogage}). Les sorties d'un paquet sont listés
- dans la troisième colonne de la sortie de @command{guix package
- --list-available} (@pxref{Invoquer guix package}).
- @node Invoquer guix gc
- @section Invoquer @command{guix gc}
- @cindex ramasse-miettes
- @cindex espace disque
- Les paquets qui sont installés mais pas utilisés peuvent être @dfn{glanés}.
- La commande @command{guix gc} permet aux utilisateurs de lancer
- explicitement le ramasse-miettes pour récupérer de l'espace dans le
- répertoire @file{/gnu/store}. C'est la @emph{seule} manière de supprimer
- des fichiers de @file{/gnu/store} — supprimer des fichiers ou des
- répertoires à la main peut le casser de manière impossible à réparer !
- @cindex racines du GC
- @cindex racines du ramasse-miettes
- Le ramasse-miettes a un ensemble de @dfn{racines} connues : tout fichier
- dans @file{/gnu/store} atteignable depuis une racine est considéré comme
- @dfn{utilisé} et ne peut pas être supprimé ; tous les autres fichiers sont
- considérés comme @dfn{inutilisés} et peuvent être supprimés. L'ensemble des
- racines du ramasse-miettes (ou « racines du GC » pour faire court) inclue
- les profils par défaut des utilisateurs ; par défaut les liens symboliques
- sous @file{/var/guix/gcroots} représentent ces racines du GC. De nouvelles
- racines du GC peuvent être ajoutées avec la @command{guix build -- root} par
- exemple (@pxref{Invoquer guix build}).
- Avant de lancer @code{guix gc --collect-garbage} pour faire de la place,
- c'est souvent utile de supprimer les anciennes génération des profils
- utilisateurs ; de cette façon les anciennes constructions de paquets
- référencées par ces générations peuvent être glanées. Cela se fait en
- lançaint @code{guix package --delete-generations} (@pxref{Invoquer guix package}).
- Nous recommandons de lancer le ramasse-miettes régulièrement ou lorsque vous
- avez besoin d'espace disque. Par exemple pour garantir qu'au moins
- 5@tie{}Go d'espace reste libre sur votre disque, lancez simplement :
- @example
- guix gc -F 5G
- @end example
- Il est parfaitement possible de le lancer comme une tâche périodique
- non-interactive (@pxref{Exécution de tâches planifiées} pour apprendre comment
- paramétrer une telle tâche sur GuixSD). Lancer @command{guix gc} sans
- argument ramassera autant de miettes que possible mais ça n'est pas le plus
- pratique : vous pourriez vous retrouver à reconstruire ou re-télécharger des
- logiciels « inutilisés » du point de vu du GC mais qui sont nécessaires pour
- construire d'autres logiciels — p.@: ex.@: la chaîne de compilation.
- La command @command{guix gc} a trois modes d'opération : il peut être
- utilisé pour glaner des fichiers inutilisés (par défaut), pour supprimer des
- fichiers spécifiques (l'option @code{--delete}), pour afficher des
- informations sur le ramasse-miettes ou pour des requêtes plus avancées. Les
- options du ramasse-miettes sont :
- @table @code
- @item --collect-garbage[=@var{min}]
- @itemx -C [@var{min}]
- Ramasse les miettes — c.-à-d.@: les fichiers inaccessibles de
- @file{/gnu/store} et ses sous-répertoires. C'est l'opération par défaut
- lorsqu'aucune option n'est spécifiée.
- Lorsque @var{min} est donné, s'arrêter une fois que @var{min} octets ont été
- collectés. @var{min} pour être un nombre d'octets ou inclure un suffixe
- d'unité, comme @code{MiB} pour mébioctet et @code{GB} pour gigaoctet
- (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
- Lorsque @var{min} est omis, tout glaner.
- @item --free-space=@var{libre}
- @itemx -F @var{libre}
- Glaner jusqu'à ce que @var{libre} espace soit disponible dans
- @file{/gnu/store} si possible ; @var{libre} est une quantité de stockage
- comme @code{500MiB} comme décrit ci-dessus.
- Lorsque @var{libre} ou plus est disponible dans @file{/gnu/store} ne rien
- faire et s'arrêter immédiatement.
- @item --delete
- @itemx -d
- Essayer de supprimer tous les fichiers et les répertoires du dépôt spécifiés
- en argument. Cela échoue si certains des fichiers ne sont pas dans le dépôt
- ou s'ils sont toujours utilisés.
- @item --list-failures
- Lister les éléments du dépôt qui correspondent à des échecs de construction
- Cela n'affiche rien à moins que le démon n'ait été démarré avec
- @option{--cache-failures} (@pxref{Invoquer guix-daemon,
- @option{--cache-failures}}).
- @item --clear-failures
- Supprimer les éléments du dépôt spécifiés du cache des constructions
- échouées.
- De nouveau, cette option ne fait de sens que lorsque le démon est démarré
- avec @option{--cache-failures}. Autrement elle ne fait rien.
- @item --list-dead
- Montrer la liste des fichiers et des répertoires inutilisés encore présents
- dans le dépôt — c.-à-d.@: les fichiers et les répertoires qui ne sont plus
- atteignables par aucune racine.
- @item --list-live
- Montrer la liste des fichiers et des répertoires du dépôt utilisés.
- @end table
- En plus, les références entre les fichiers existants du dépôt peuvent être
- demandés :
- @table @code
- @item --references
- @itemx --referrers
- @cindex dépendances des paquets
- Lister les références (respectivement les référents) des fichiers du dépôt
- en argument.
- @item --requisites
- @itemx -R
- @cindex closure
- Lister les prérequis des fichiers du dépôt passés en argument. Les
- prérequis sont le fichier du dépôt lui-même, leur références et les
- références de ces références, récursivement. En d'autre termes, la liste
- retournée est la @dfn{closure transitive} des fichiers du dépôt.
- @xref{Invoquer guix size} pour un outil pour surveiller la taille de la
- closure d'un élément. @xref{Invoquer guix graph} pour un outil pour
- visualiser le graphe des références.
- @item --derivers
- @cindex dérivation
- Renvoie les dérivations menant aux éléments du dépôt donnés
- (@pxref{Dérivations}).
- Par exemple cette commande :
- @example
- guix gc --derivers `guix package -I ^emacs$ | cut -f4`
- @end example
- @noindent
- renvoie les fichiers @file{.drv} menant au paquet @code{emacs} installé dans
- votre profil.
- Remarquez qu'il peut n'y avoir aucun fichier @file{.drv} par exemple quand
- ces fichiers ont été glanés. Il peut aussi y avoir plus d'un fichier
- @file{.drv} correspondant à cause de dérivations à sortie fixées.
- @end table
- Enfin, les options suivantes vous permettent de vérifier l'intégrité du
- dépôt et de contrôler l'utilisation du disque.
- @table @option
- @item --verify[=@var{options}]
- @cindex intégrité, du dépôt
- @cindex vérification d'intégrité
- Vérifier l'intégrité du dépôt.
- Par défaut, s'assurer que tous les éléments du dépôt marqués comme valides
- dans la base de données du démon existent bien dans @file{/gnu/store}.
- Lorsqu'elle est fournie, l'@var{option} doit être une liste séparée par des
- virgule de l'un ou plus parmi @code{contents} et @code{repair}.
- Lorsque vous passez @option{--verify=contents}, le démon calcul le hash du
- contenu de chaque élément du dépôt et le compare au hash de sa base de
- données. Les différences de hash sont rapportées comme des corruptions de
- données. Comme elle traverse @emph{tous les fichiers du dépôt}, cette
- commande peut prendre très longtemps pour terminer, surtout sur un système
- avec un disque lent.
- @cindex réparer le dépôt
- @cindex corruption, récupérer de
- Utiliser @option{--verify=repair} ou @option{--verify=contents,repair} fait
- que le démon essaie de réparer les objets du dépôt corrompus en récupérant
- leurs substituts (@pxref{Substituts}). Comme la réparation n'est pas
- atomique et donc potentiellement dangereuse, elle n'est disponible que pour
- l'administrateur système. Une alternative plus légère lorsque vous
- connaissez exactement quelle entrée est corrompue consiste à lancer
- @command{guix build --repair} (@pxref{Invoquer guix build}).
- @item --optimize
- @cindex déduplication
- Optimiser le dépôt en liant en dur les fichiers identiques — c'est la
- @dfn{déduplication}.
- Le démon effectue une déduplication à chaque construction réussie ou import
- d'archive à moins qu'il n'ait été démarré avec
- @code{--disable-deduplication} (@pxref{Invoquer guix-daemon,
- @code{--disable-deduplication}}). Ainsi, cette option est surtout utile
- lorsque le démon tourne avec @code{--disable-deduplication}.
- @end table
- @node Invoquer guix pull
- @section Invoquer @command{guix pull}
- @cindex mettre à niveau Guix
- @cindex mettre à jour Guix
- @cindex @command{guix pull}
- @cindex pull
- Les paquets sont installés ou mis à jour vers la dernière version disponible
- dans la distribution actuellement disponible sur votre machine locale. Pour
- mettre à jour cette distribution, en même temps que les outils Guix, vous
- devez lancer @command{guix pull} ; la commande télécharge le dernier code
- source de Guix et des descriptions de paquets et le déploie. Le code source
- est téléchargé depuis un dépôt @uref{https://git-scm.com, Git}, par défaut
- le dépôt officiel de GNU@tie{}Guix, bien que cela puisse être personnalisé.
- À la fin, @command{guix package} utilisera les paquets et les versions des
- paquets de la copie de Guix tout juste récupérée. Non seulement ça, mais
- toutes les commandes Guix et les modules Scheme seront aussi récupérés
- depuis la dernière version. Les nouvelles sous-commandes de @command{guix}
- ajoutés par la mise à jour sont aussi maintenant disponibles.
- Chaque utilisateur peut mettre à jour sa copie de Guix avec @command{guix
- pull} et l'effet est limité à l'utilisateur qui a lancé @command{guix
- pull}. Par exemple, lorsque l'utilisateur @code{root} lance @command{guix
- pull}, cela n'a pas d'effet sur la version de Guix que vois @code{alice} et
- vice-versa
- Le résultat après avoir lancé @command{guix pull} est un @dfn{profil}
- disponible sous @file{~/.config/guix/current} contenant la dernière version
- de Guix. Ainsi, assurez-vous de l'ajouter au début de votre chemin de
- recherche pour que vous utilisiez la dernière version. Le même conseil
- s'applique au manuel Info (@pxref{Documentation}) :
- @example
- export PATH="$HOME/.config/guix/current/bin:$PATH"
- export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
- @end example
- L'option @code{--list-generations} ou @code{-l} liste les anciennes
- générations produites par @command{guix pull}, avec des détails sur leur
- origine :
- @example
- $ guix pull -l
- Génération 1 10 juin 2018 00:18:18
- guix 65956ad
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : origin/master
- commit : 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
- Génération 2 11 juin 2018 11:02:49
- guix e0cc7f6
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : origin/master
- commit : e0cc7f669bec22c37481dd03a7941c7d11a64f1d
- 2 nouveaux paquets : keepalived, libnfnetlink
- 6 paquets mis à jour : emacs-nix-mode@@2.0.4,
- guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
- heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
- Génération 3 13 juin 2018 23:31:07 (actuelle)
- guix 844cc1c
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : origin/master
- commit : 844cc1c8f394f03b404c5bb3aee086922373490c
- 28 nouveaux paquets : emacs-helm-ls-git, emacs-helm-mu, @dots{}
- 69 paquets mis à jour : borg@@1.1.6, cheese@@3.28.0, @dots{}
- @end example
- @ref{Invoquer guix describe, @command{guix describe}} pour d'autres manières
- de décrire le statut actuel de Guix.
- Ce profil @code{~/.config/guix/current} fonctionne comme les autres profils
- créés par @command{guix package} (@pxref{Invoquer guix package}).
- C'est-à-dire que vous pouvez lister les générations, revenir en arrière à
- une génération précédente — c.-à-d.@: la version de Guix précédente — etc :
- @example
- $ guix package -p ~/.config/guix/current --roll-back
- passé de la génération 3 à 2
- $ guix package -p ~/.config/guix/current --delete-generations=1
- suppression de /var/guix/profiles/per-user/charlie/current-guix-1-link
- @end example
- La commande @command{guix pull} est typiquement invoquée sans arguments mais
- il supporte les options suivantes :
- @table @code
- @item --url=@var{url}
- @itemx --commit=@var{commit}
- @itemx --branch=@var{branche}
- Télécharger le code depuis l'@var{url} spécifié, au @var{commit} donné (un
- commit Git valide représenté par une chaîne hexadécimale) ou à la branche
- @var{branch}.
- @cindex @file{channels.scm}, fichier de configuration
- @cindex fichier de configuration pour les canaux
- Ces options sont fournies pour votre confort, mais vous pouvez aussi
- spécifier votre configuration dans le fichier
- @file{~/.config/guix/channels.scm} ou en utilisant l'option
- @option{--channels} (voir plus bas).
- @item --channels=@var{file}
- @itemx -C @var{file}
- Lit la liste des canaux dans @var{file} plutôt que dans
- @file{~/.config/guix/channels.scm}. @var{file} doit contenir un code Scheme
- qui s'évalue en une liste d'objets de canaux. @xref{Canaux} pour plus
- d'informations.
- @item --list-generations[=@var{motif}]
- @itemx -l [@var{motif}]
- Liste toutes les générations de @file{~/.config/guix/current} ou, si
- @var{motif} est fournit, le sous-ensemble des générations qui correspondent
- à @var{motif}. La syntaxe de @var{motif} est la même qu'avec @code{guix
- package --list-generations} (@pxref{Invoquer guix package}).
- @ref{Invoquer guix describe}, pour une manière d'afficher des informations
- sur la génération actuelle uniquement.
- @item --profile=@var{profil}
- @itemx -p @var{profil}
- Utiliser le @var{profil} à la place de @file{~/.config/guix/current}.
- @item --dry-run
- @itemx -n
- Montrer quels commits des canaux seraient utilisés et ce qui serait
- construit ou substitué mais ne pas le faire vraiment.
- @item --verbose
- Produire une sortie verbeuse, en écrivant les journaux de construction sur
- la sortie d'erreur standard.
- @item --bootstrap
- Utiliser le programme d'amorçage Guile pour construire la dernière version
- de Guix. Cette option n'est utile que pour les développeurs de Guix.
- @end table
- Le mécanisme de @dfn{canaux} vous permet de dire à @command{guix pull} quels
- répertoires et branches récupérer, ainsi que les dépôts
- @emph{supplémentaires} contenant des modules de paquets qui devraient être
- déployés. @xref{Canaux} pour plus d'information.
- En plus, @command{guix pull} supporte toutes les options de construction
- communes (@pxref{Options de construction communes}).
- @node Canaux
- @section Canaux
- @cindex canaux
- @cindex @file{channels.scm}, fichier de configuration
- @cindex fichier de configuration pour les canaux
- @cindex @command{guix pull}, fichier de configuration
- @cindex configuration de @command{guix pull}
- Guix et sa collection de paquets sont mis à jour en lançant @command{guix
- pull} (@pxref{Invoquer guix pull}). Par défaut @command{guix pull}
- télécharge et déploie Guix lui-même depuis le dépôt officiel de
- GNU@tie{}Guix. Cela peut être personnalisé en définissant des @dfn{canaux}
- dans le fichier @file{~/.config/guix/channels.scm}. Un canal spécifie l'URL
- et la branche d'un répertoire Git à déployer et on peut demander à
- @command{guix pull} de récupérer un ou plusieurs canaux. En d'autres
- termes, les canaux peuvent être utilisés pour personnaliser et pour
- @emph{étendre} Guix, comme on le verra plus bas.
- @subsection Utiliser un canal Guix personnalisé
- Le canal nommé @code{guix} spécifie où Guix lui-même — ses outils en ligne
- de commande ainsi que sa collection de paquets — sera téléchargé. Par
- exemple, supposons que vous voulez effectuer les mises à jour depuis votre
- propre copie du dépôt Guix sur @code{example.org}, et plus particulièrement
- depuis la branche @code{super-hacks}. Vous pouvez écrire cette
- spécification dans @code{~/.config/guix/channels.scm} :
- @lisp
- ;; Dit à « guix pull » d'utiliser mon propre dépôt.
- (list (channel
- (name 'guix)
- (url "https://example.org/my-guix.git")
- (branch "super-hacks")))
- @end lisp
- @noindent
- Maintenant, @command{guix pull} récupérera le code depuis la branche
- @code{super-hacks} du dépôt sur @code{example.org}.
- @subsection Spécifier des canaux supplémentaires
- @cindex étendre la collection de paquets (canaux)
- @cindex paquets personnels (canaux)
- @cindex canaux, pour des paquets personnels
- Vous pouvez aussi spécifier des @emph{canaux supplémentaires} à récupérer.
- Disons que vous avez un ensemble de paquets personnels ou de variantes
- personnalisées qu'il ne vaudrait pas le coup de contribuer au projet Guix,
- mais que vous voudriez pouvoir utiliser de manière transparente sur la ligne
- de commande. Vous écririez d'abord des modules contenant ces définitions de
- paquets (@pxref{Modules de paquets}), en les maintenant dans un dépôt Git, puis
- vous ou n'importe qui d'autre pourrait l'utiliser comme un canal
- supplémentaire où trouver ces paquets. Sympa, non ?
- @c What follows stems from discussions at
- @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
- @c earlier discussions on guix-devel@gnu.org.
- @quotation Attention
- Avant que vous, cher utilisateur, ne vous exclamiez « Oh mais c'est
- @emph{super génial} ! » et que vous ne publiez vos canaux personnels
- publiquement, nous voudrions vous donner quelques avertissements :
- @itemize
- @item
- Avant de publier un canal, envisagez de contribuer vos définitions de
- paquets dans Guix (@pxref{Contribuer}). Guix en tant que projet est
- ouvert à tous les logiciels libres de toutes sortes, et les paquets dans
- Guix sont déjà disponibles à tous les utilisateurs de Guix et bénéficient
- des processus d'assurance qualité du projet.
- @item
- Lorsque vous maintenez des définitions de paquets en dehors de Guix, nous,
- les développeurs de Guix, considérons que @emph{la charge de la
- compatibilité vous incombe}. Rappelez-vous que les modules de paquets et
- les définitions de paquets ne sont que du code Scheme qui utilise diverses
- interfaces de programmation (API). Nous souhaitons rester libres de changer
- ces API pour continuer à améliorer Guix, éventuellement d'une manière qui
- casse votre canal. Nous ne changeons jamais l'API gratuitement, mais nous
- ne nous engageons @emph{pas} à geler les API non plus.
- @item
- Corollaire : si vous utilisez un canal externe et que le canal est cassé,
- merci de @emph{rapporter le problème à l'auteur du canal}, pas au projet
- Guix.
- @end itemize
- Vous avez été prévenus ! Maintenant, nous pensons que des canaux externes
- sont une manière pratique d'exercer votre liberté pour augmenter la
- collection de paquets de Guix et de partager vos améliorations, qui sont les
- principes de bases du @uref{https://www.gnu.org/philosophy/free-sw.html,
- logiciel libe}. Contactez-nous par courriel sur @email{guix-devel@@gnu.org}
- si vous souhaitez discuter à ce propos.
- @end quotation
- Une fois que vous avez un dépôt Git contenant vos propres modules de
- paquets, vous pouvez écrire @code{~/.config/guix/channels.scm} pour dire à
- @command{guix pull} de récupérer votre canal personnel @emph{en plus} des
- canaux Guix par défaut :
- @vindex %default-channels
- @lisp
- ;; Ajouter mes paquets personnels à ceux fournis par Guix.
- (cons (channel
- (name 'my-personal-packages)
- (url "https://example.org/personal-packages.git"))
- %default-channels)
- @end lisp
- @noindent
- Note that the snippet above is (as always!)@: Scheme code; we use
- @code{cons} to add a channel the list of channels that the variable
- @code{%default-channels} is bound to (@pxref{Pairs, @code{cons} and lists,,
- guile, GNU Guile Reference Manual}). With this file in place, @command{guix
- pull} builds not only Guix but also the package modules from your own
- repository. The result in @file{~/.config/guix/current} is the union of
- Guix with your own package modules:
- @example
- $ guix pull --list-generations
- @dots{}
- Génération 19 Aug 27 2018 16:20:48
- guix d894ab8
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : master
- commit : d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
- my-personal-packages dd3df5e
- URL du dépôt : https://example.org/personal-packages.git
- branche : master
- commit : dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
- 11 nouveaux paquets : my-gimp, my-emacs-with-cool-features, @dots{}
- 4 paquets mis à jour : emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
- @end example
- @noindent
- La sortie de @command{guix pull} ci-dessus montre que la génération@tie{}19
- contient aussi bien Guix que les paquets du canal
- @code{my-personal-packages}. Parmi les nouveaux paquets et les paquets mis
- à jour qui sont listés, certains comme @code{my-gimp} et
- @code{my-emacs-with-cool-features} peuvent provenir de
- @code{my-personal-packages}, tandis que d'autres viennent du canal par
- défaut de Guix.
- @subsection Répliquer Guix
- @cindex épinglage, canaux
- @cindex répliquer Guix
- @cindex reproductibilité, de Guix
- La sortie de @command{guix pull --list-generations} ci-dessus montre
- précisément quels commits ont été utilisés pour construire cette instance de
- Guix. Nous pouvons donc la répliquer, disons sur une autre machine, en
- fournissant une spécification de canal dans
- @file{~/.config/guix/channels.scm} qui est « épinglé » à ces commits :
- @lisp
- ;; Déployer des commits précis de mes canaux préférés.
- (list (channel
- (name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
- (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
- (channel
- (name 'my-personal-packages)
- (url "https://example.org/personal-packages.git")
- (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
- @end lisp
- La commande @command{guix describe --format=channels} peut même générer
- cette liste de canaux directement (@pxref{Invoquer guix describe}).
- À ce moment les deux machines font tourner @emph{exactement le même Guix},
- avec l'accès @emph{exactement aux même paquets}. La sortie de @command{guix
- build gimp} sur une machine sera exactement la même, au bit près, que la
- sortie de la même commande sur l'autre machine. Cela signifie aussi que les
- deux machines ont accès à tous les codes sources de Guix, et transitivement,
- à tous les codes sources de tous les paquets qu'il définit.
- Cela vous donne des super-pouvoirs, ce qui vous permet de suivre la
- provenance des artefacts binaires avec un grain très fin et de reproduire
- les environnements logiciels à volonté — une sorte de capacité de «
- méta-reproductibilité », si vous voulez. @xref{Inférieurs}, pour une autre
- manière d'utiliser ces super-pouvoirs.
- @node Inférieurs
- @section Inférieurs
- @c TODO: Remove this once we're more confident about API stability.
- @quotation Remarque
- La fonctionnalité décrite ici est un « démonstrateur technique » à la
- version @value{VERSION}. Ainsi, l'interface est sujette à changements.
- @end quotation
- @cindex inférieurs
- @cindex composition de révisions de Guix
- Parfois vous pourriez avoir à mélanger des paquets de votre révision de Guix
- avec des paquets disponibles dans une révision différente de Guix. Les
- @dfn{inférieurs} de Guix vous permettent d'accomplir cette tâche en
- composant différentes versions de Guix de manière arbitraire.
- @cindex paquets inférieurs
- Techniquement, un « inférieur » est surtout un processus Guix séparé
- connecté à votre processus Guix principal à travers un REPL (@pxref{Invoquer guix repl}). Le module @code{(guix inferior)} vous permet de créer des
- inférieurs et de communiquer avec eux. Il fournit aussi une interface de
- haut-niveau pour naviguer dans les paquets d'un inférieur — @dfn{des paquets
- inférieurs} — et les manipuler.
- Lorsqu'on les combine avec des canaux (@pxref{Canaux}), les inférieurs
- fournissent une manière simple d'interagir avec un révision de Guix
- séparée. Par exemple, disons que vous souhaitiez installer dans votre
- profil le paquet guile actuel, avec le @code{guile-json} d'une ancienne
- révision de Guix — peut-être parce que la nouvelle version de
- @code{guile-json} a une API incompatible et que vous voulez lancer du code
- avec l'ancienne API. Pour cela, vous pourriez écrire un manifeste à
- utiliser avec @code{guix package --manifest} (@pxref{Invoquer guix package})
- ; dans ce manifeste, vous créeriez un inférieur pour l'ancienne révision de
- Guix qui vous intéresse et vous chercheriez le paquet @code{guile-json} dans
- l'inférieur :
- @lisp
- (use-modules (guix inferior) (guix channels)
- (srfi srfi-1)) ;pour « first »
- (define channels
- ;; L'ancienne révision depuis laquelle on veut
- ;; extraire guile-json.
- (list (channel
- (name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
- (commit
- "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
- (define inferior
- ;; Un inférieur représentant la révision ci-dessus.
- (inferior-for-channels channels))
- ;; Maintenant on crée un manifeste avec le paquet « guile » actuel
- ;; et l'ancien paquet « guile-json ».
- (packages->manifest
- (list (first (lookup-inferior-packages inferior "guile-json"))
- (specification->package "guile")))
- @end lisp
- Durant la première exécution, @command{guix package --manifest} pourrait
- avoir besoin de construire le canal que vous avez spécifié avant de créer
- l'inférieur ; les exécutions suivantes seront bien plus rapides parce que la
- révision de Guix sera déjà en cache.
- Le module @code{(guix inferior)} fournit les procédures suivantes pour
- ouvrir un inférieur :
- @deffn {Procédure Scheme} inferior-for-channels @var{channels} @
- [#:cache-directory] [#:ttl]
- Renvoie un inférieur pour @var{channels}, une liste de canaux. Elle utilise
- le cache dans @var{cache-directory}, où les entrées peuvent être glanées
- après @var{ttl} secondes. Cette procédure ouvre une nouvelle connexion au
- démon de construction.
- Elle a pour effet de bord de construire ou de substituer des binaires pour
- @var{channels}, ce qui peut prendre du temps.
- @end deffn
- @deffn {Procédure Scheme} open-inferior @var{directory} @
- [#:command "bin/guix"]
- Ouvre le Guix inférieur dans @var{directory} et lance
- @code{@var{directory}/@var{command} repl} ou équivalent. Renvoie @code{#f}
- si l'inférieur n'a pas pu être lancé.
- @end deffn
- @cindex paquets inférieurs
- Les procédures listées plus bas vous permettent d'obtenir et de manipuler
- des paquets inférieurs.
- @deffn {Procédure Scheme} inferior-packages @var{inferior}
- Renvoie la liste des paquets connus de l'inférieur @var{inferior}.
- @end deffn
- @deffn {Procédure Scheme} lookup-inferior-packages @var{inferior} @var{name} @
- [@var{version}]
- Renvoie la liste triée des paquets inférieurs qui correspondent à @var{name}
- dans @var{inferior}, avec le plus haut numéro de version en premier. Si
- @var{version} est vrai, renvoie seulement les paquets avec un numéro de
- version préfixé par @var{version}.
- @end deffn
- @deffn {Procédure Scheme} inferior-package? @var{obj}
- Renvoie vrai si @var{obj} est un paquet inférieur.
- @end deffn
- @deffn {Procédure Scheme} inferior-package-name @var{package}
- @deffnx {Procédure Scheme} inferior-package-version @var{package}
- @deffnx {Procédure Scheme} inferior-package-synopsis @var{package}
- @deffnx {Procédure Scheme} inferior-package-description @var{package}
- @deffnx {Procédure Scheme} inferior-package-home-page @var{package}
- @deffnx {Procédure Scheme} inferior-package-location @var{package}
- @deffnx {Procédure Scheme} inferior-package-inputs @var{package}
- @deffnx {Procédure Scheme} inferior-package-native-inputs @var{package}
- @deffnx {Procédure Scheme} inferior-package-propagated-inputs @var{package}
- @deffnx {Procédure Scheme} inferior-package-transitive-propagated-inputs @var{package}
- @deffnx {Procédure Scheme} inferior-package-native-search-paths @var{package}
- @deffnx {Procédure Scheme} inferior-package-transitive-native-search-paths @var{package}
- @deffnx {Procédure Scheme} inferior-package-search-paths @var{package}
- Ces procédures sont la contrepartie des accesseurs des enregistrements de
- paquets (@pxref{Référence de paquet}). La plupart fonctionne en effectuant
- des requêtes à l'inférieur dont provient @var{package}, donc l'inférieur
- doit toujours être disponible lorsque vous appelez ces procédures.
- @end deffn
- Les paquets inférieurs peuvent être utilisés de manière transparente comme
- tout autre paquet ou objet simili-fichier dans des G-expressions
- (@pxref{G-Expressions}). Ils sont aussi gérés de manière transparente par
- la procédure @code{packages->manifest}, qui est typiquement utilisée dans
- des manifestes (@pxref{Invoquer guix package, l'option @option{--manifest}
- de @command{guix package}}). Ainsi, vous pouvez insérer un paquet inférieur
- à peu près n'importe où vous utiliseriez un paquet normal : dans des
- manifestes, dans le champ @code{packages} de votre déclaration
- @code{operating-system}, etc.
- @node Invoquer guix describe
- @section Invoquer @command{guix describe}
- @cindex reproductibilité
- @cindex répliquer Guix
- Souvent vous voudrez répondre à des questions comme « quelle révision de
- Guix j'utilise ? » ou « quels canaux est-ce que j'utilise ? ». C'est une
- information utile dans de nombreuses situations : si vous voulez
- @emph{répliquer} un environnement sur une machine différente ou un compte
- utilisateur, si vous voulez rapporter un bogue ou pour déterminer quel
- changement dans les canaux que vous utilisez l'a causé ou si vous voulez
- enregistrer l'état de votre système pour le reproduire. La commande
- @command{guix describe} répond à ces questions.
- Lorsqu'elle est lancée depuis un @command{guix} mis à jour avec
- @command{guix pull}, @command{guix describe} affiche les canaux qui ont été
- construits, avec l'URL de leur dépôt et l'ID de leur commit
- (@pxref{Canaux}) :
- @example
- $ guix describe
- Generation 10 03 sep. 2018 17:32:44 (actuelle)
- guix e0fa68c
- URL du dépôt : https://git.savannah.gnu.org/git/guix.git
- branche : master
- commit : e0fa68c7718fffd33d81af415279d6ddb518f727
- @end example
- Si vous connaissez bien le système de contrôle de version Git, cela
- ressemble en essence à @command{git describe} ; la sortie est aussi
- similaire à celle de @command{guix pull --list-generations}, mais limitée à
- la génération actuelle (@pxref{Invoquer guix pull, l'option
- @option{--list-generations}}). Comme l'ID de commit de Git ci-dessus se
- réfère sans aucune ambiguïté à un instantané de Guix, cette information est
- tout ce dont vous avez besoin pour décrire la révision de Guix que vous
- utilisez et pour la répliquer.
- Pour rendre plus facile la réplication de Guix, @command{guix describe} peut
- aussi renvoyer une liste de canaux plutôt que la description lisible par un
- humain au-dessus :
- @example
- $ guix describe -f channels
- (list (channel
- (name 'guix)
- (url "https://git.savannah.gnu.org/git/guix.git")
- (commit
- "e0fa68c7718fffd33d81af415279d6ddb518f727")))
- @end example
- @noindent
- Vous pouvez sauvegarder ceci dans un fichier et le donner à @command{guix
- pull -C} sur une autre machine ou plus tard, ce qui instantiera
- @emph{exactement la même révision de Guix} (@pxref{Invoquer guix pull,
- l'option @option{-C}}). À partir de là, comme vous pouvez déployer la même
- révision de Guix, vous pouvez aussi bien @emph{répliquer un environnement
- logiciel complet}. Nous pensons humblement que c'est @emph{génial}, et nous
- espérons que vous aimerez ça aussi !
- Voici les détails des options supportées par @command{guix describe} :
- @table @code
- @item --format=@var{format}
- @itemx -f @var{format}
- Produire la sortie dans le @var{format} donné, parmi :
- @table @code
- @item human
- produire une sortie lisible par un humain,
- @item canaux
- produire une liste de spécifications de canaux qui peut être passée à
- @command{guix pull -C} ou installée dans @file{~/.config/guix/channels.scm}
- (@pxref{Invoquer guix pull}),
- @item json
- @cindex JSON
- produire une liste de spécifications de canaux dans le format JSON,
- @item recutils
- produire une liste de spécifications de canaux dans le format Recutils.
- @end table
- @item --profile=@var{profil}
- @itemx -p @var{profil}
- Afficher les informations sur le @var{profil}.
- @end table
- @node Invoquer guix pack
- @section Invoquer @command{guix pack}
- Parfois vous voulez passer un logiciel à des gens qui n'ont pas (encore !)
- la chance d'utiliser Guix. Vous leur diriez bien de lancer @command{guix
- package -i @var{quelque chose}} mais ce n'est pas possible dans ce cas.
- C'est là que @command{guix pack} entre en jeu.
- @quotation Remarque
- Si vous cherchez comment échanger des binaires entre des machines où Guix
- est déjà installé, @pxref{Invoquer guix copy}, @ref{Invoquer guix publish},
- et @ref{Invoquer guix archive}.
- @end quotation
- @cindex pack
- @cindex lot
- @cindex lot d'applications
- @cindex lot de logiciels
- La commande @command{guix pack} crée un @dfn{pack} ou @dfn{lot de logiciels}
- : elle crée une archive tar ou un autre type d'archive contenunt les
- binaires pour le logiciel qui vous intéresse ainsi que ses dépendances.
- L'archive qui en résulte peut être utilisée sur toutes les machines qui
- n'ont pas Guix et les gens peuvent lancer exactement les mêmes binaires que
- ceux que vous avez avec Guix. Le pack lui-même est créé d'une manière
- reproductible au bit près, pour que n'importe qui puisse vérifier qu'il
- contient bien les résultats que vous prétendez proposer.
- Par exemple, pour créer un lot contenant Guile, Emacs, Geiser et toutes
- leurs dépendances, vous pouvez lancer :
- @example
- $ guix pack guile emacs geiser
- @dots{}
- /gnu/store/@dots{}-pack.tar.gz
- @end example
- Le résultat ici est une archive tar contenant un répertoire
- @file{/gnu/store} avec tous les paquets nécessaires. L'archive qui en
- résulte contient un @dfn{profil} avec les trois paquets qui vous intéressent
- ; le profil est le même qui celui qui aurait été créé avec @command{guix
- package -i}. C'est ce mécanisme qui est utilisé pour créer les archives tar
- binaires indépendantes de Guix (@pxref{Installation binaire}).
- Les utilisateurs de ce pack devraient lancer
- @file{/gnu/store/@dots{}-profile/bin/guile} pour lancer Guile, ce qui n'est
- pas très pratique. Pour éviter cela, vous pouvez créer, disons, un lien
- symbolique @file{/opt/gnu/bin} vers le profil :
- @example
- guix pack -S /opt/gnu/bin=bin guile emacs geiser
- @end example
- @noindent
- De cette façon, les utilisateurs peuvent joyeusement taper
- @file{/opt/gnu/bin/guile} et profiter.
- @cindex binaires repositionnables, avec @command{guix pack}
- Et si le destinataire de votre pack n'a pas les privilèges root sur sa
- machine, et ne peut donc pas le décompresser dans le système de fichiers
- racine ? Dans ce cas, vous pourriez utiliser l'option @code{--relocatable}
- (voir plus bas). Cette option produite des @dfn{binaire repositionnables},
- ce qui signifie qu'ils peuvent être placés n'importe où dans l'arborescence
- du système de fichiers : dans l'exemple au-dessus, les utilisateurs peuvent
- décompresser votre archive dans leur répertoire personnel et lancer
- directement @file{./opt/gnu/bin/guile}.
- @cindex Docker, construire une image avec guix pack
- Autrement, vous pouvez produire un pack au format d'image Docker avec la
- commande suivante :
- @example
- guix pack -f docker guile emacs geiser
- @end example
- @noindent
- Le résultat est une archive tar qui peut être passée à la commande
- @command{docker load}. Voir la
- @uref{https://docs.docker.com/engine/reference/commandline/load/,
- documentation de Docker} pour plus d'informations.
- @cindex Singularity, construire une image avec guix pack
- @cindex SquashFS, construire une image avec guix pack
- Autrement, vous pouvez produire une image SquashFS avec la commande suivante
- :
- @example
- guix pack -f squashfs guile emacs geiser
- @end example
- @noindent
- Le résultat est une image de système de fichiers SquashFS qui peut soit être
- montée directement soit être utilisée comme image de conteneur de système de
- fichiers avec l'@uref{http://singularity.lbl.gov, environnement d'exécution
- conteneurisé Singularity}, avec des commandes comme @command{singularity
- shell} ou @command{singularity exec}.
- Diverses options en ligne de commande vous permettent de personnaliser votre
- pack :
- @table @code
- @item --format=@var{format}
- @itemx -f @var{format}
- Produire un pack dans le @var{format} donné.
- Les formats disponibles sont :
- @table @code
- @item tarball
- C'est le format par défaut. Il produit une archive tar contenant tous les
- binaires et les liens symboliques spécifiés.
- @item docker
- Cela produit une archive tar qui suit la
- @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
- spécification des images Docker}.
- @item squashfs
- Cela produit une image SquashFS contenant tous les binaires et liens
- symboliques spécifiés, ainsi que des points de montages vides pour les
- systèmes de fichiers virtuels comme procfs.
- @end table
- @item --relocatable
- @itemx -R
- Produit des @dfn{binaires repositionnables} — c.-à-d.@: des binaires que
- vous pouvez placer n'importe où dans l'arborescence du système de fichiers
- et les lancer à partir de là. Par exemple, si vous créez un pack contenant
- Bash avec :
- @example
- guix pack -R -S /mybin=bin bash
- @end example
- @noindent
- ...@: you can copy that pack to a machine that lacks Guix, and from your
- home directory as a normal user, run:
- @example
- tar xf pack.tar.gz
- ./mybin/sh
- @end example
- @noindent
- Dans ce shell, si vous tapez @code{ls /gnu/store}, vous remarquerez que
- @file{/gnu/store} apparaît et contient toutes les dépendances de
- @code{bash}, même si la machine n'a pas du tout de @file{/gnu/store} !
- C'est sans doute la manière la plus simple de déployer du logiciel construit
- avec Guix sur une machine sans Guix.
- Il y a un inconvénient cependant : cette technique repose sur les
- @dfn{espaces de noms} du noyau Linux qui permettent à des utilisateurs
- non-privilégiés de monter des systèmes de fichiers ou de changer de racine.
- Les anciennes versions de Linux ne le supportaient pas et certaines
- distributions GNU/Linux les désactivent ; sur ces système, les programme du
- pack @emph{ne fonctionneront pas} à moins qu'ils ne soient décompressés à la
- racine du système de fichiers.
- @item --expression=@var{expr}
- @itemx -e @var{expr}
- Considérer le paquet évalué par @var{expr}.
- Cela a le même but que l'option de même nom de @command{guix build}
- (@pxref{Options de construction supplémentaires, @code{--expression} dans @command{guix
- build}}).
- @item --manifest=@var{fichier}
- @itemx -m @var{fichier}
- Utiliser les paquets contenus dans l'objet manifeste renvoyé par le code
- Scheme dans @var{fichier}
- Elle a un but similaire à l'option de même nom dans @command{guix package}
- (@pxref{profile-manifest, @option{--manifest}}) et utilise les mêmes
- fichiers manifeste. Ils vous permettent de définir une collection de
- paquets une fois et de l'utiliser aussi bien pour créer des profils que pour
- créer des archives pour des machines qui n'ont pas Guix d'installé.
- Remarquez que vous pouvez spécifier @emph{soit} un fichier manifeste,
- @emph{soit} une liste de paquet, mais pas les deux.
- @item --system=@var{système}
- @itemx -s @var{système}
- Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
- plutôt que pour le type de système de l'hôte de construction.
- @item --target=@var{triplet}
- @cindex compilation croisée
- Effectuer une compilation croisée pour @var{triplet} qui doit être un
- triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
- target triplets, GNU configuration triplets,, autoconf, Autoconf}).
- @item --compression=@var{outil}
- @itemx -C @var{outil}
- Compresser l'archive résultante avec @var{outil} — l'un des outils parmi
- @code{bzip2}, @code{xz}, @code{lzip} ou @code{none} pour aucune compression.
- @item --symlink=@var{spec}
- @itemx -S @var{spec}
- Ajouter les liens symboliques spécifiés par @var{spec} dans le pack. Cette
- option peut apparaître plusieurs fois.
- @var{spec} a la forme @code{@var{source}=@var{cible}}, où @var{source} est
- le lien symbolique qui sera créé et @var{cible} est la cible du lien.
- Par exemple, @code{-S /opt/gnu/bin=bin} crée un lien symbolique
- @file{/opt/gnu/bin} qui pointe vers le sous-répertoire @file{bin} du profil.
- @item --localstatedir
- @itemx --profile-name=@var{nom}
- Inclus le « répertoire d'état local », @file{/var/guix}, dans le lot qui en
- résulte, et notamment le profil
- @file{/var/guix/profiles/per-user/root/@var{nom}} — par défaut @var{nom} est
- @code{guix-profile}, ce qui correspond à @file{~root/.guix-profile}.
- @file{/var/guix} contient la base de données du dépôt (@pxref{Le dépôt})
- ainsi que les racines du ramasse-miettes (@pxref{Invoquer guix gc}). Le
- fournir dans le pack signifie que le dépôt et « complet » et gérable par
- Guix ; ne pas le fournir dans le pack signifie que le dépôt est « mort » :
- aucun élément ne peut être ajouté ni enlevé après l'extraction du pack.
- Un cas d'utilisation est l'archive binaire indépendante de Guix
- (@pxref{Installation binaire}).
- @item --bootstrap
- Utiliser les programmes d'amorçage pour construire le pack. Cette option
- n'est utile que pour les développeurs de Guix.
- @end table
- En plus, @command{guix pack} supporte toutes les options de construction
- communes (@pxref{Options de construction communes}) et toutes les options de
- transformation de paquets (@pxref{Options de transformation de paquets}).
- @node Invoquer guix archive
- @section Invoquer @command{guix archive}
- @cindex @command{guix archive}
- @cindex archive
- La commande @command{guix archive} permet aux utilisateurs d'@dfn{exporter}
- des fichiers du dépôt dans une simple archive puis ensuite de les
- @dfn{importer} sur une machine qui fait tourner Guix. En particulier, elle
- permet de transférer des fichiers du dépôt d'une machine vers le dépôt d'une
- autre machine.
- @quotation Remarque
- Si vous chercher une manière de produire des archives dans un format adapté
- pour des outils autres que Guix, @pxref{Invoquer guix pack}.
- @end quotation
- @cindex exporter des éléments du dépôt
- Pour exporter des fichiers du dépôt comme une archive sur la sortie
- standard, lancez :
- @example
- guix archive --export @var{options} @var{spécifications}...
- @end example
- @var{spécifications} peut être soit des noms de fichiers soit des
- spécifications de paquets, comme pour @command{guix package}
- (@pxref{Invoquer guix package}). Par exemple, la commande suivante crée une
- archive contenant la sortie @code{gui} du paquet @code{git} et la sortie
- principale de @code{emacs} :
- @example
- guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
- @end example
- Si les paquets spécifiés ne sont pas déjà construits, @command{guix archive}
- les construit automatiquement. Le processus de construction peut être
- contrôlé avec les options de construction communes (@pxref{Options de construction communes}).
- Pour transférer le paquet @code{emacs} vers une machine connectée en SSH, on
- pourrait lancer :
- @example
- guix archive --export -r emacs | ssh la-machine guix archive --import
- @end example
- @noindent
- De même, on peut transférer un profil utilisateur complet d'une machine à
- une autre comme cela :
- @example
- guix archive --export -r $(readlink -f ~/.guix-profile) | \
- ssh la-machine guix-archive --import
- @end example
- @noindent
- Cependant, remarquez que, dans les deux exemples, le paquet @code{emacs}, le
- profil ainsi que toutes leurs dépendances sont transférées (à cause de
- @code{-r}), indépendamment du fait qu'ils soient disponibles dans le dépôt
- de la machine cible. L'option @code{--missing} peut vous aider à comprendre
- les éléments qui manquent dans le dépôt de la machine cible. La commande
- @command{guix copy} simplifie et optimise ce processus, c'est donc ce que
- vous devriez utiliser dans ce cas (@pxref{Invoquer guix copy}).
- @cindex nar, format d'archive
- @cindex archive normalisée (nar)
- Les archives sont stockées au format « archive normalisé » ou « nar », qui
- est comparable dans l'esprit à « tar » mais avec des différences qui le
- rendent utilisable pour ce qu'on veut faire. Tout d'abord, au lieu de
- stocker toutes les métadonnées Unix de chaque fichier, le format nar ne
- mentionne que le type de fichier (normal, répertoire ou lien symbolique) ;
- les permissions Unix, le groupe et l'utilisateur ne sont pas mentionnés.
- Ensuite, l'ordre dans lequel les entrées de répertoires sont stockés suit
- toujours l'ordre des noms de fichier dans l'environnement linguistique C.
- Cela rend la production des archives entièrement déterministe.
- @c FIXME: Add xref to daemon doc about signatures.
- Lors de l'export, le démon signe numériquement le contenu de l'archive et
- cette signature est ajoutée à la fin du fichier. Lors de l'import, le démon
- vérifie la signature et rejette l'import en cas de signature invalide ou si
- la clef de signature n'est pas autorisée.
- Les principales options sont :
- @table @code
- @item --export
- Exporter les fichiers ou les paquets du dépôt (voir plus bas). Écrire
- l'archive résultante sur la sortie standard.
- Les dépendances ne sont @emph{pas} incluses dans la sortie à moins que
- @code{--recursive} ne soit passé.
- @item -r
- @itemx --recursive
- En combinaison avec @code{--export}, cette option demande à @command{guix
- archive} d'inclure les dépendances des éléments donnés dans l'archive.
- Ainsi, l'archive résultante est autonome : elle contient la closure des
- éléments du dépôt exportés.
- @item --import
- Lire une archive depuis l'entrée standard et importer les fichiers inclus
- dans le dépôt. Annuler si l'archive a une signature invalide ou si elle est
- signée par une clef publique qui ne se trouve pas dans le clefs autorisées
- (voir @code{--authorize} plus bas.)
- @item --missing
- Liste une liste de noms de fichiers du dépôt sur l'entrée standard, un par
- ligne, et écrit sur l'entrée standard le sous-ensemble de ces fichiers qui
- manquent dans le dépôt.
- @item --generate-key[=@var{paramètres}]
- @cindex signature, archives
- Générer une nouvelle paire de clefs pour le démon. Cela est un prérequis
- avant que les archives ne puissent être exportées avec @code{--export}.
- Remarquez que cette opération prend généralement du temps parce qu'elle doit
- récupère suffisamment d'entropie pour générer la paire de clefs.
- La paire de clefs générée est typiquement stockée dans @file{/etc/guix},
- dans @file{signing-key.pub} (clef publique) et @file{signing-key.sec} (clef
- privée, qui doit rester secrète). Lorsque @var{paramètres} est omis, une
- clef ECDSA utilisant la courbe Ed25519 est générée ou pour les version de
- libgcrypt avant 1.6.0, une clef RSA de 4096 bits. Autrement,
- @var{paramètres} peut spécifier les paramètres @code{genkey} adaptés pour
- libgcrypt (@pxref{General public-key related Functions,
- @code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
- @item --authorize
- @cindex autorisation, archives
- Autoriser les imports signés par la clef publique passée sur l'entrée
- standard. La clef publique doit être au « format avancé s-expression » —
- c.-à-d.@: le même format que le fichier @file{signing-key.pub}.
- La liste des clefs autorisées est gardée dans un fichier modifiable par des
- humains dans @file{/etc/guix/acl}. Le fichier contient des
- @url{http://people.csail.mit.edu/rivest/Sexp.txt, « s-expressions au format
- avancé »} et est structuré comme une liste de contrôle d'accès dans
- l'@url{http://theworld.com/~cme/spki.txt, infrastructure à clefs publiques
- simple (SPKI)}.
- @item --extract=@var{répertoire}
- @itemx -x @var{répertoire}
- Lit une archive à un seul élément telle que servie par un serveur de
- substituts (@pxref{Substituts}) et l'extrait dans @var{répertoire}. C'est
- une opération de bas niveau requise seulement dans de rares cas d'usage ;
- voir plus loin.
- Par exemple, la commande suivante extrait le substitut pour Emacs servi par
- @code{hydra.gnu.org} dans @file{/tmp/emacs} :
- @example
- $ wget -O - \
- https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
- | bunzip2 | guix archive -x /tmp/emacs
- @end example
- Les archives à un seul élément sont différentes des archives à plusieurs
- éléments produites par @command{guix archive --export} ; elles contiennent
- un seul élément du dépôt et elles n'embarquent @emph{pas} de signature.
- Ainsi cette opération ne vérifie @emph{pas} de signature et sa sortie
- devrait être considérée comme non sûre.
- Le but principal de cette opération est de faciliter l'inspection du contenu
- des archives venant de serveurs auxquels on ne fait potentiellement pas
- confiance.
- @end table
- @c *********************************************************************
- @node Interface de programmation
- @chapter Interface de programmation
- GNU Guix fournit diverses interface de programmation Scheme (API) qui pour
- définir, construire et faire des requêtes sur des paquets. La première
- interface permet aux utilisateurs d'écrire des définitions de paquets de
- haut-niveau. Ces définitions se réfèrent à des concepts de création de
- paquets familiers, comme le nom et la version du paquet, son système de
- construction et ses dépendances. Ces définitions peuvent ensuite être
- transformées en actions concrètes lors de la construction.
- Les actions de construction sont effectuées par le démon Guix, pour le
- compte des utilisateurs. Dans un environnement standard, le démon possède
- les droits en écriture sur le dépôt — le répertoire @file{/gnu/store} — mais
- pas les utilisateurs. La configuration recommandée permet aussi au démon
- d'effectuer la construction dans des chroots, avec un utilisateur de
- construction spécifique pour minimiser les interférences avec le reste du
- système.
- @cindex dérivation
- Il y a des API de plus bas niveau pour interagir avec le démon et le dépôt.
- Pour demander au démon d'effectuer une action de construction, les
- utilisateurs lui donnent en fait une @dfn{dérivation}. Une dérivation est
- une représentation à bas-niveau des actions de construction à entreprendre
- et l'environnement dans lequel elles devraient avoir lieu — les dérivations
- sont aux définitions de paquets ce que l'assembleur est aux programmes C.
- Le terme de « dérivation » vient du fait que les résultats de la
- construction en @emph{dérivent}.
- Ce chapitre décrit toutes ces API tour à tour, à partir des définitions de
- paquets à haut-niveau.
- @menu
- * Définition des paquets:: Définir de nouveaux paquets.
- * Systèmes de construction:: Spécifier comment construire les paquets.
- * Le dépôt:: Manipuler le dépôt de paquets.
- * Dérivations:: Interface de bas-niveau avec les dérivations
- de paquets.
- * La monad du dépôt:: Interface purement fonctionnelle avec le
- dépôt.
- * G-Expressions:: Manipuler les expressions de construction.
- * Invoquer guix repl:: S'amuser avec Guix de manière interactive.
- @end menu
- @node Définition des paquets
- @section Définition des paquets
- L'interface de haut-niveau pour les définitions de paquets est implémentée
- dans les modules @code{(guix packages)} et @code{(guix build-system)}. Par
- exemple, la définition du paquet, ou la @dfn{recette}, du paquet GNU Hello
- ressemble à cela :
- @example
- (define-module (gnu packages hello)
- #:use-module (guix packages)
- #:use-module (guix download)
- #:use-module (guix build-system gnu)
- #:use-module (guix licenses)
- #:use-module (gnu packages gawk))
- (define-public hello
- (package
- (name "hello")
- (version "2.10")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/hello/hello-" version
- ".tar.gz"))
- (sha256
- (base32
- "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
- (build-system gnu-build-system)
- (arguments '(#:configure-flags '("--enable-silent-rules")))
- (inputs `(("gawk" ,gawk)))
- (synopsis "Hello, GNU world: An example GNU package")
- (description "Guess what GNU Hello prints!")
- (home-page "http://www.gnu.org/software/hello/")
- (license gpl3+)))
- @end example
- @noindent
- Sans être un expert Scheme, le lecteur peut comprendre la signification des
- différents champs présents. Cette expression lie la variable @code{hello} à
- un objet @code{<package>}, qui est essentiellement un enregistrement
- (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}). On
- peut inspecter cet objet de paquet avec les procédures qui se trouvent dans
- le module @code{(guix packages)} ; par exemple, @code{(package-name hello)}
- renvoie — oh surprise ! — @code{"hello"}.
- Avec un peu de chance, vous pourrez importer tout ou partie de la définition
- du paquet qui vous intéresse depuis un autre répertoire avec la commande
- @code{guix import} (@pxref{Invoquer guix import}).
- Dans l'exemple précédent, @var{hello} est défini dans un module à part,
- @code{(gnu packages hello)}. Techniquement, cela n'est pas strictement
- nécessaire, mais c'est pratique : tous les paquets définis dans des modules
- sous @code{(gnu packages @dots{})} sont automatiquement connus des outils en
- ligne de commande (@pxref{Modules de paquets}).
- Il y a quelques points à remarquer dans la définition de paquet précédente :
- @itemize
- @item
- 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
- @code{url-fetch} de @code{(guix download)}, ce qui signifie que la source
- est un fichier à télécharger par FTP ou HTTP.
- Le préfixe @code{mirror://gnu} demande à @code{url-fetch} d'utiliser l'un
- des miroirs GNU définis dans @code{(guix download)}.
- Le champ @code{sha256} spécifie le hash SHA256 attendu pour le fichier
- téléchargé. Il est requis et permet à Guix de vérifier l'intégrité du
- fichier. La forme @code{(base32 @dots{})} introduit a représentation en
- base32 du hash. Vous pouvez obtenir cette information avec @code{guix
- download} (@pxref{Invoquer guix download}) et @code{guix hash}
- (@pxref{Invoquer guix hash}).
- @cindex correctifs
- Lorsque cela est requis, la forme @code{origin} peut aussi avec un champ
- @code{patches} qui liste les correctifs à appliquer et un champ
- @code{snippet} qui donne une expression Scheme pour modifier le code source.
- @item
- @cindex Système de construction GNU
- Le champ @code{build-system} spécifie la procédure pour construire le paquet
- (@pxref{Systèmes de construction}). Ici, @var{gnu-build-system} représente le système
- de construction GNU familier, où les paquets peuvent être configurés,
- construits et installés avec la séquence @code{./configure && make && make
- check && make install} habituelle.
- @item
- Le champ @code{arguments} spécifie des options pour le système de
- construction (@pxref{Systèmes de construction}). Ici il est interprété par
- @var{gnu-build-system} comme une demande de lancer @file{configure} avec le
- drapeau @code{--enable-silent-rules}.
- @cindex quote
- @cindex quoting
- @findex '
- @findex quote
- Que sont ces apostrophes (@code{'}) ? C'est de la syntaxe Scheme pour
- introduire une liste ; @code{'} est synonyme de la fonction @code{quote}.
- @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual}, pour
- des détails. Ice la valeur du champ @code{arguments} est une liste
- d'arguments passés au système de construction plus tard, comme avec
- @code{apply} (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile
- Reference Manual}).
- La séquence dièse-deux-points (@code{#:}) définie un @dfn{mot-clef} Scheme
- (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), et
- @code{#:configure-flags} est un mot-clef utilisé pour passer un argument au
- système de construction (@pxref{Coding With Keywords,,, guile, GNU Guile
- Reference Manual}).
- @item
- Le champ @code{inputs} spécifie les entrées du processus de construction —
- c.-à-d.@: les dépendances à la construction ou à l'exécution du paquet. Ici
- on définie une entrée nommée @code{"gawk"} dont la valeur est la variable
- @var{gawk} ; @var{gawk} est elle-même liée à un objet @code{<package>}.
- @cindex accent grave (quasiquote)
- @findex `
- @findex quasiquote
- @cindex virgule (unquote)
- @findex ,
- @findex unquote
- @findex ,@@
- @findex unquote-splicing
- De nouveau, @code{`} (un accent grave, synonyme de la fonction
- @code{quasiquote}) nous permet d'introduire une liste litérale dans le champ
- @code{inputs}, tandis que @code{,} (une virgule, synonyme de la fonction
- @code{unquote}) nous permet d'insérer une valeur dans cette liste
- (@pxref{Expression Syntax, unquote,, guile, GNU Guile Reference Manual}).
- Remarquez que GCC, Coreutils, Bash et les autres outils essentiels n'ont pas
- besoin d'être spécifiés en tant qu'entrées ici. À la place, le
- @var{gnu-build-system} est en charge de s'assurer qu'ils sont présents
- (@pxref{Systèmes de construction}).
- Cependant, toutes les autres dépendances doivent être spécifiées dans le
- champ @code{inputs}. Toute dépendance qui ne serait pas spécifiée ici sera
- simplement indisponible pour le processus de construction, ce qui peut mener
- à un échec de la construction.
- @end itemize
- @xref{Référence de paquet}, pour une description complète des champs
- possibles.
- Lorsqu'une définition de paquet est en place, le paquet peut enfin être
- construit avec l'outil en ligne de commande @code{guix build}
- (@pxref{Invoquer guix build}), pour résoudre les échecs de construction que
- vous pourriez rencontrer (@pxref{Débogage des échecs de construction}). Vous pouvez
- aisément revenir à la définition du paquet avec la commande @command{guix
- edit} (@pxref{Invoquer guix edit}). @xref{Consignes d'empaquetage}, pour plus
- d'inforamtions sur la manière de tester des définitions de paquets et
- @ref{Invoquer guix lint}, pour des informations sur la manière de vérifier
- que la définition réspecte les conventions de style.
- @vindex GUIX_PACKAGE_PATH
- Enfin, @pxref{Canaux} pour des informations sur la manière d'étendre la
- distribution en ajoutant vos propres définitions de paquets dans un « canal
- ».
- Finalement, la mise à jour de la définition du paquet à une nouvelle version
- amont peut en partie s'automatiser avec la commande @command{guix refresh}
- (@pxref{Invoquer guix refresh}).
- Sous le capot, une dérivation qui correspond à un objet @code{<package>} est
- d'abord calculé par la procédure @code{package-derivation}. Cette
- dérivation est stockée dans un fichier @code{.drv} dans @file{/gnu/store}.
- Les actions de construction qu'il prescrit peuvent ensuite être réalisées
- par la procédure @code{build-derivation} (@pxref{Le dépôt}).
- @deffn {Procédure Scheme} package-derivation @var{store} @var{package} [@var{system}]
- Renvoie l'objet @code{<derivation>} du @var{paquet} pour le @var{système}
- (@pxref{Dérivations}).
- @var{paquet} doit être un objet @code{<package>} valide et @var{système} une
- chaîne indiquant le type de système cible — p.ex.@: @code{"x86_64-linux"}
- pour un système GNU x86_64 basé sur Linux. @var{dépôt} doit être une
- connexion au démon, qui opère sur les dépôt (@pxref{Le dépôt}).
- @end deffn
- @noindent
- @cindex compilation croisée
- De manière identique, il est possible de calculer une dérivation qui
- effectue une compilation croisée d'un paquet pour un autre système :
- @deffn {Procédure Scheme} package-cross-derivation @var{store} @
- @var{paquet} @var{cible} [@var{système}] renvoie l'objet @code{<derivation>}
- duof @var{paquet} construit depuis @var{système} pour @var{cible}.
- @var{cible} doit être un triplet GNU valide indiquant le matériel cible et
- le système d'exploitation, comme @code{"mips64el-linux-gnu"}
- (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
- Configure and Build System}).
- @end deffn
- @cindex transformations de paquets
- @cindex réécriture d'entrées
- @cindex réécriture de l'arbre des dépendances
- On peut manipuler les paquets de manière arbitraire. Une transformation
- utile est par exemple la @dfn{réécriture d'entrées} où l'arbre des
- dépendances d'un paquet est réécrit en replaçant des entrées spécifiques par
- d'autres :
- @deffn {Procédure Scheme} package-input-rewriting @var{replacements} @
- [@var{nom-réécrit}] Renvoie une procédure qui, lorsqu'on lui donne un
- paquet, remplace des dépendances directes et indirectes (mais pas ses
- entrées implicites) en fonction de @var{remplacements}. @var{remplacements}
- est une liste de paires de paquets ; le premier élément de chaque pair est
- le paquet à remplacer, le second son remplaçant.
- De manière facultative, @var{nom-réécrit} est une procédure à un argument
- qui prend le nom d'un paquet et renvoie son nouveau nom après l'avoir
- réécrit.
- @end deffn
- @noindent
- Regardez cet exemple :
- @example
- (define libressl-instead-of-openssl
- ;; Cette procédure remplace OPENSSL par LIBRESSL,
- ;; récursivement.
- (package-input-rewriting `((,openssl . ,libressl))))
- (define git-with-libressl
- (libressl-instead-of-openssl git))
- @end example
- @noindent
- Ici nous définissons d'abord une procédure de réécriture qui remplace
- @var{openssl} par @var{libressl}. Ensuite nous l'utilisons pour définir une
- @dfn{variante} du paquet @var{git} qui utilise @var{libressl} plutôt que
- @var{openssl}. cela est exactement ce que l'option en ligne de commande
- @option{--with-input} fait (@pxref{Options de transformation de paquets,
- @option{--with-input}}).
- Une procédure plus générique pour réécrire un graphe de dépendance d'un
- paquet est @code{package-mapping} : elle supporte n'importe quel changement
- dans les nœuds du graphe.
- @deffn {Procédure Scheme} package-mapping @var{proc} [@var{cut?}]
- Renvoie une procédure qui, avec un paquet, applique @var{proc} sur tous les
- paquets dont il dépend et renvoie le paquet qui en résulte. La procédure
- arrête la récursion là où @var{cut?} renvoie vrai pour un paquet donné.
- @end deffn
- @menu
- * Référence de paquet:: Le type de donnée des paquets.
- * Référence d'origine:: Le type de données d'origine.
- @end menu
- @node Référence de paquet
- @subsection Référence de @code{package}
- Cette section résume toutes les options disponibles dans les déclarations
- @code{package} (@pxref{Définition des paquets}).
- @deftp {Type de données} package
- C'est le type de donnée représentant une recette de paquets
- @table @asis
- @item @code{name}
- Le nom du paquet, comme une chaîne de caractères.
- @item @code{version}
- La version du paquet, comme une chaîne de caractères.
- @item @code{source}
- Un objet qui indique comment le code source du paquet devrait être
- récupéré. La plupart du temps, c'est un objet @code{origin} qui indique un
- fichier récupéré depuis internet (@pxref{Référence d'origine}). Il peut aussi
- s'agir de tout autre objet ``simili-fichier'' comme un @code{local-file} qui
- indique un fichier du système de fichier local (@pxref{G-Expressions,
- @code{local-file}}).
- @item @code{build-system}
- Le système de construction qui devrait être utilisé pour construire le
- paquet (@pxref{Systèmes de construction}).
- @item @code{arguments} (par défaut : @code{'()})
- Les arguments à passer au système de construction. C'est une liste qui
- contient typiquement une séquence de paires de clefs-valeurs.
- @item @code{inputs} (par défaut : @code{'()})
- @itemx @code{native-inputs} (par défaut : @code{'()})
- @itemx @code{propagated-inputs} (par défaut : @code{'()})
- @cindex entrées, des paquets
- Ces champs listent les dépendances du paquet. Chacune est une liste de
- tuples, où chaque tuple a une étiquette pour une entrée (une chaîne de
- caractères) comme premier élément, un paquet, une origine ou une dérivation
- comme deuxième élément et éventuellement le nom d'une sortie à utiliser qui
- est @code{"out"} par défaut (@pxref{Des paquets avec plusieurs résultats}, pour
- plus d'informations sur les sorties des paquets). Par exemple, la liste
- suivante spécifie trois entrées :
- @example
- `(("libffi" ,libffi)
- ("libunistring" ,libunistring)
- ("glib:bin" ,glib "bin")) ;la sortie "bin" de Glib
- @end example
- @cindex compilation croisée, dépendances des paquets
- La distinction entre @code{native-inputs} et @code{inputs} est nécessaire
- lorsqu'on considère la compilation croisée. Lors d'une compilation croisée,
- les dépendances listées dans @code{inputs} sont construites pour
- l'architecture @emph{cible} ; inversement, les dépendances listées dans
- @code{native-inputs} sont construites pour l'architecture de la machine de
- @emph{construction}.
- @code{native-inputs} est typiquement utilisé pour lister les outils requis à
- la construction mais pas à l'exécution, comme Autoconf, Automake,
- pkg-config, Gettext ou Bison. @command{guix lint} peut rapporter des
- erreurs de ce type (@pxref{Invoquer guix lint}).
- @anchor{package-propagated-inputs}
- Enfin, @code{propagated-inputs} est similaire à @code{inputs}, mais les
- paquets spécifiés seront automatiquement installés avec le paquet auquel ils
- appartiennent (@pxref{package-cmd-propagated-inputs, @command{guix
- package}}, pour des informations sur la manière dont @command{guix package}
- traite les entrées propagées).
- Par exemple cela est nécessaire lorsque des bibliothèques C/C++ ont besoin
- d'en-têtes d'une autre bibliothèque pour être compilé ou lorsqu'un fichier
- pkg-config se rapporte à un autre @i{via} son champ @code{Requires}.
- Un autre exemple où @code{propagated-inputs} est utile est pour les langages
- auxquels il manque un moyen de retenir le chemin de recherche comme c'est le
- cas du @code{RUNPATH} des fichiers ELF ; cela comprend Guile, Python, Perl
- et plus. Pour s'assurer que les bibliothèques écrites dans ces langages
- peuvent trouver le code des bibliothèques dont elles dépendent à
- l'exécution, les dépendances à l'exécution doivent être listées dans
- @code{propagated-inputs} plutôt que @code{inputs}.
- @item @code{self-native-input?} (par défaut : @code{#f})
- C'est un champ booléen qui indique si le paquet devrait s'utiliser lui-même
- comme entrée native lors de la compilation croisée.
- @item @code{outputs} (par défaut : @code{'("out")})
- La liste des noms de sorties du paquet. @xref{Des paquets avec plusieurs résultats}, pour des exemples typiques d'utilisation de sorties
- supplémentaires.
- @item @code{native-search-paths} (par défaut : @code{'()})
- @itemx @code{search-paths} (par défaut : @code{'()})
- Une liste d'objets @code{search-path-specification} décrivant les variables
- d'environnement de recherche de chemins que ce paquet utilise.
- @item @code{replacement} (par défaut : @code{#f})
- Ce champ doit être soit @code{#f} soit un objet de paquet qui sera utilisé
- comme @dfn{remplaçant} de ce paquet. @xref{Mises à jour de sécurité, grafts}, pour
- plus de détails.
- @item @code{synopsis}
- Une description sur une ligne du paquet.
- @item @code{description}
- Une description plus détaillée du paquet.
- @item @code{license}
- @cindex licence, des paquets
- La licence du paquet ; une valeur tirée de @code{(guix licenses)} ou une
- liste de ces valeurs.
- @item @code{home-page}
- L'URL de la page d'accueil du paquet, en tant que chaîne de caractères.
- @item @code{supported-systems} (par défaut : @var{%supported-systems})
- La liste des systèmes supportés par le paquet, comme des chaînes de
- caractères de la forme @code{architecture-noyau}, par exemple
- @code{"x86_64-linux"}.
- @item @code{maintainers} (par défaut : @code{'()})
- La liste des mainteneurs du paquet, comme des objets @code{maintainer}.
- @item @code{location} (par défaut : emplacement de la source de la forme @code{package})
- L'emplacement de la source du paquet. C'est utile de le remplacer lorsqu'on
- hérite d'un autre paquet, auquel cas ce champ n'est pas automatiquement
- corrigé.
- @end table
- @end deftp
- @node Référence d'origine
- @subsection Référence de @code{origin}
- Cette section résume toutes les options disponibles dans le déclarations
- @code{origin} (@pxref{Définition des paquets}).
- @deftp {Type de données} origin
- C'est le type de donnée qui représente l'origine d'un code source.
- @table @asis
- @item @code{uri}
- Un objet contenant l'URI de la source. Le type d'objet dépend de la
- @code{method} (voir plus bas). Par exemple, avec la méthode @var{url-fetch}
- de @code{(guix download)}, les valeurs valide d'@code{uri} sont : une URL
- représentée par une chaîne de caractères, ou une liste de chaînes de
- caractères.
- @item @code{method}
- Un procédure qui gère l'URI.
- Quelques exemples :
- @table @asis
- @item @var{url-fetch} de @code{(guix download)}
- télécharge un fichier depuis l'URL HTTP, HTTPS ou FTP spécifiée dans le
- champ @code{uri} ;
- @vindex git-fetch
- @item @var{git-fetch} de @code{(guix git-download)}
- clone le dépôt sous contrôle de version Git et récupère la révision
- spécifiée dans le champ @code{uri} en tant qu'objet @code{git-reference} ;
- un objet @code{git-reference} ressemble à cela :
- @example
- (git-reference
- (url "git://git.debian.org/git/pkg-shadow/shadow")
- (commit "v4.1.5.1"))
- @end example
- @end table
- @item @code{sha256}
- Un bytevector contenant le hash SHA-256 de la source. Typiquement la forme
- @code{base32} est utilisée ici pour générer le bytevector depuis une chaîne
- de caractères en base-32.
- Vous pouvez obtenir cette information avec @code{guix download}
- (@pxref{Invoquer guix download}) ou @code{guix hash} (@pxref{Invoquer guix hash}).
- @item @code{file-name} (par défaut : @code{#f})
- Le nom de fichier à utiliser pour sauvegarder le fichier. Lorsqu'elle est à
- @code{#f}, une valeur par défaut raisonnable est utilisée dans la plupart
- des cas. Dans le cas où la source est récupérée depuis une URL, le nom de
- fichier est celui de l'URL. Pour les sources récupérées depuis un outil de
- contrôle de version, il est recommandé de fournir un nom de fichier
- explicitement parce que le nom par défaut n'est pas très descriptif.
- @item @code{patches} (par défaut : @code{'()})
- Une liste de noms de fichiers, d'origines ou d'objets simili-fichiers
- (@pxref{G-Expressions, file-like objects}) qui pointent vers des correctifs
- à appliquer sur la source.
- Cette liste de correctifs doit être inconditionnelle. En particulier, elle
- ne peut pas dépendre des valeurs de @code{%current-system} ou
- @code{%current-target-system}.
- @item @code{snippet} (par défaut : @code{#f})
- Une G-expression (@pxref{G-Expressions}) ou une S-expression qui sera lancée
- dans le répertoire des sources. C'est une manière pratique de modifier la
- source, parfois plus qu'un correctif.
- @item @code{patch-flags} (par défaut : @code{'("-p1")})
- Une liste de drapeaux à passer à la commande @code{patch}.
- @item @code{patch-inputs} (par défaut : @code{#f})
- Paquets d'entrées ou dérivations pour le processus de correction.
- Lorsqu'elle est à @code{#f}, l'ensemble d'entrées habituellement nécessaire
- pour appliquer des correctifs est fournit, comme GNU@tie{}Patch.
- @item @code{modules} (par défaut : @code{'()})
- Une liste de modules Guile qui devraient être chargés pendant le processus
- de correction et pendant que le lancement du code du champ @code{snippet}.
- @item @code{patch-guile} (par défaut : @code{#f})
- Le paquet Guile à utiliser dans le processus de correction. Lorsqu'elle est
- à @code{#f}, une valeur par défaut raisonnable est utilisée.
- @end table
- @end deftp
- @node Systèmes de construction
- @section Systèmes de construction
- @cindex système de construction
- Chaque définition de paquet définie un @dfn{système de construction} et des
- arguments pour ce système de construction (@pxref{Définition des paquets}). Ce
- champ @code{build-system} représente la procédure de construction du paquet,
- ainsi que des dépendances implicites pour cette procédure de construction.
- Les systèmes de construction sont des objets
- @code{<build-system>}. L'interface pour les créer et les manipuler est
- fournie par le module @code{(guix build-system)} et les systèmes de
- construction eux-mêmes sont exportés par des modules spécifiques.
- @cindex sac (représentation à bas-niveau des paquets)
- Sous le capot, les systèmes de construction compilent d'abord des objets
- paquets en @dfn{sacs}. Un @dfn{sac} est comme un paquet, mais avec moins de
- décoration — en d'autres mots, un sac est une représentation à bas-niveau
- d'un paquet, qui inclus toutes les entrées de ce paquet, dont certaines ont
- été implicitement ajoutées par le système de construction. Cette
- représentation intermédiaire est ensuite compilée en une dérivation
- (@pxref{Dérivations}).
- Les systèmes de construction acceptent une liste d'@dfn{arguments}
- facultatifs. Dans les définitions de paquets, ils sont passés @i{via} le
- champ @code{arguments} (@pxref{Définition des paquets}). Ce sont typiquement des
- arguments par mot-clef (@pxref{Optional Arguments, keyword arguments in
- Guile,, guile, GNU Guile Reference Manual}). La valeur de ces arguments est
- habituellement évaluée dans la @dfn{strate de construction} — c.-à-d.@: par
- un processus Guile lancé par le démon (@pxref{Dérivations}).
- Le système de construction principal est le @var{gnu-build-system} qui
- implémente les procédures de construction standard pour les paquets GNU et
- de nombreux autres. Il est fournit par le module @code{(guix build-system
- gnu)}.
- @defvr {Variable Scheme} gnu-build-system
- @var{gnu-build-system} représente le système de construction GNU et ses
- variantes (@pxref{Configuration, configuration and makefile conventions,,
- standards, GNU Coding Standards}).
- @cindex phases de construction
- En résumé, les paquets qui l'utilisent sont configurés, construits et
- installés avec la séquence @code{./configure && make && make check && make
- install} habituelle. En pratique, des étapes supplémentaires sont souvent
- requises. Toutes ces étapes sont séparées dans des @dfn{phases}
- différentes, notamment@footnote{Regardez les modules @code{(guix build
- gnu-build-system)} pour plus de détails sur les phases de construction.}:
- @table @code
- @item unpack
- Décompresse l'archive des sources et se déplace dans l'arborescence des
- sources fraîchement extraites. Si la source est en fait un répertoire, le
- copie dans l'arborescence de construction et entre dans ce répertoire.
- @item patch-source-shebangs
- Corrige les shebangs (@code{#!}) rencontrés dans les fichiers pour qu'ils se
- réfèrent aux bons noms de fichiers. Par exemple, elle change
- @code{#!/bin/sh} en @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
- @item configure
- Lance le script @code{configure} avec un certain nombre d'options par
- défaut, comme @code{--prefix=/gnu/store/@dots{}}, ainsi que les options
- spécifiées par l'argument @code{#:configure-flags}.
- @item build
- Lance @code{make} avec la liste des drapeaux spécifiés avec
- @code{#:make-flags}. Si l'argument @code{#:parallel-build?} est vrai (par
- défaut), construit avec @code{make -j}.
- @item check
- Lance @code{make check}, ou une autre cible spécifiée par
- @code{#:test-target}, à moins que @code{#:tests? #f} ne soit passé. Si
- l'argument @code{#:parallel-tests?} est vrai (par défaut), lance @code{make
- check -j}.
- @item install
- Lance @code{make install} avec les drapeaux listés dans @code{#:make-flags}.
- @item patch-shebangs
- Corrige les shebangs des fichiers exécutables installés.
- @item strip
- Nettoie les symboles de débogage dans les fichiers ELF (à moins que
- @code{#:strip-binaries?} ne soit faux), les copie dans la sortie
- @code{debug} lorsqu'elle est disponible (@pxref{Installer les fichiers de débogage}).
- @end table
- @vindex %standard-phases
- Le module du côté du constructeur @code{(guix build gnu-build-system)}
- définie @var{%standard-phases} comme la liste par défaut des phases de
- construction. @var{%standard-phases} est une liste de paires de symboles
- et de procédures, où la procédure implémente la phase en question.
- La liste des phases utilisées par un paquet particulier peut être modifiée
- avec le paramètre @code{#:phases}. Par exemple, en passant :
- @example
- #:phases (modify-phases %standard-phases (delete 'configure))
- @end example
- signifie que toutes les procédures décrites plus haut seront utilisées, sauf
- la phase @code{configure}.
- En plus, ce système de construction s'assure que l'environnement « standard
- » pour les paquets GNU est disponible. Cela inclus des outils comme GCC,
- libc, Coreutils, Bash, Make, Diffutils, grep et sed (voir le module
- @code{(guix build-system gnu)} pour une liste complète). Nous les appelons
- les @dfn{entrées implicites} d'un paquet parce que la définition du paquet
- ne les mentionne pas.
- @end defvr
- D'autres objets @code{<build-system>} sont définis pour supporter d'autres
- conventions et outils utilisés par les paquets de logiciels libres. Ils
- héritent de la plupart de @var{gnu-build-system} et diffèrent surtout dans
- l'ensemble des entrées implicites ajoutées au processus de construction et
- dans la liste des phases exécutées. Certains de ces systèmes de
- construction sont listés ci-dessous.
- @defvr {Variable Scheme} ant-build-system
- Cette variable est exportée par @code{(guix build-system ant)}. Elle
- implémente la procédure de construction pour les paquets Java qui peuvent
- être construits avec @url{http://ant.apache.org/, l'outil de construction
- Ant}.
- Elle ajoute à la fois @code{ant} et the @dfn{kit de développement Java}
- (JDK) fournit par le paquet @code{icedtea} à l'ensemble des entrées. Des
- paquets différents peuvent être spécifiés avec les paramètres @code{#:ant}
- et @code{#:jdk} respectivement.
- Lorsque le paquet d'origine ne fournit pas de fichier de construction Ant
- acceptable, le paramètre @code{#:jar-name} peut être utilisé pour générer un
- fichier de construction Ant @file{build.xml} minimal, avec des tâches pour
- construire l'archive jar spécifiée. Dans ce cas, le paramètre
- @code{#:source-dir} peut être utilisé pour spécifier le sous-répertoire des
- sources, par défaut « src ».
- Le paramètre @code{#:main-class} peut être utilisé avec le fichier de
- construction minimal pour spécifier la classe principale du jar. Cela rend
- le fichier jar exécutable. Le paramètre @code{#:test-include} peut être
- utilisé pour spécifier la liste des tests junit à lancer. Il vaut par
- défaut @code{(list "**/*Test.java")}. Le paramètre @code{#:test-exclude}
- peut être utilisé pour désactiver certains tests. Sa valeur par défaut est
- @code{(list "**/Abstract*.java")}, parce que les classes abstraites ne
- peuvent pas être utilisées comme des tests.
- Le paramètre @code{#:build-target} peut être utilisé pour spécifier la tâche
- Ant qui devrait être lancée pendant la phase @code{build}. Par défaut la
- tâche « jar » sera lancée.
- @end defvr
- @defvr {Variable Scheme} android-ndk-build-system
- @cindex Distribution android
- @cindex système de construction Android NDK
- Cette variable est exportée par @code{(guix build-system android-ndk)}.
- Elle implémente une procédure de construction pour les paquets du NDK
- Android (@i{native development kit}) avec des processus de construction
- spécifiques à Guix.
- Le système de construction suppose que les paquets installent leur interface
- publique (les en-têtes) dans un sous-répertoire de « include » de la sortie
- « out » et leurs bibliothèques dans le sous-répertoire « lib » de la sortie
- « out ».
- Il est aussi supposé que l'union de toutes les dépendances d'un paquet n'a
- pas de fichiers en conflit.
- Pour l'instant, la compilation croisée n'est pas supportées — donc pour
- l'instant les bibliothèques et les fichiers d'en-têtes sont supposés être
- des outils de l'hôte.
- @end defvr
- @defvr {Variable Scheme} asdf-build-system/source
- @defvrx {Variable Scheme} asdf-build-system/sbcl
- @defvrx {Variable Scheme} asdf-build-system/ecl
- Ces variables, exportées par @code{(guix build-system asdf)}, implémentent
- les procédures de constructions pour les paquets en Common Lisp qui
- utilisent @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF est
- un dispositif de définition de systèmes pour les programmes et les
- bibliothèques en Common Lisp.
- Le système @code{asdf-build-system/source} installe les paquets au format
- source qui peuvent être chargés avec n'importe quelle implémentation de
- common lisp, via ASDF. Les autres, comme @code{asdf-build-system/sbcl},
- installent des binaires au format qu'un implémentation particulière
- comprend. Ces systèmes de constructions peuvent aussi être utilisés pour
- produire des programmes exécutables ou des images lisp qui contiennent un
- ensemble de paquets pré-chargés.
- Le système de construction utilise des conventions de nommage. Pour les
- paquets binaires, le nom du paquet devrait être préfixé par l'implémentation
- lisp, comme @code{sbcl-} pour @code{asdf-build-system/sbcl}.
- En plus, le paquet source correspondant devrait étiquetté avec la même
- convention que les paquets python (voir @ref{Modules python}), avec le
- préfixe @code{cl-}.
- Pour les paquets binaires, chaque système devrait être défini comme un
- paquet Guix. Si un paquet @code{origine} contient plusieurs systèmes, on
- peut créer des variantes du paquet pour construire tous les systèmes. Les
- paquets sources, qui utilisent @code{asdf-build-system/source}, peuvent
- contenir plusieurs systèmes.
- Pour créer des programmes exécutables et des images, les procédures côté
- construction @code{build-program} et @code{build-image} peuvent être
- utilisées. Elles devraient être appelées dans une phase de construction
- après la phase @code{create-symlinks} pour que le système qui vient d'être
- construit puisse être utilisé dans l'image créée. @code{build-program}
- requiert une liste d'expressions Common Lisp dans l'argument
- @code{#:entry-program}.
- Si le système n'est pas défini dans son propre fichier @code{.asd} du même
- nom, alors le paramètre @code{#:asd-file} devrait être utilisé pour
- spécifier dans quel fichier le système est défini. De plus, si le paquet
- défini un système pour ses tests dans un fichier séparé, il sera chargé
- avant que les tests ne soient lancés s'il est spécifié par le paramètre
- @code{#:test-asd-file}. S'il n'est pas spécifié, les fichiers
- @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd} et
- @code{test.asd} seront testés.
- Si pour quelque raison que ce soit le paquet doit être nommé d'une manière
- différente de ce que la convention de nommage suggère, le paramètre
- @code{#:asd-system-name} peut être utilisé pour spécifier le nom du système.
- @end defvr
- @defvr {Variable Scheme} cargo-build-system
- @cindex Langage de programmation Rust
- @cindex Cargo (système de construction Rust)
- Cette variable est exportée par @code{(guix build-system cargo)}. Elle
- supporte les construction de paquets avec Cargo, le système de construction
- du @uref{https://www.rust-lang.org, langage de programmation Rust}.
- Dans sa phase @code{configure}, ce système de construction remplace les
- dépendances spécifiées dans le fichier @file{Cargo.toml} par des paquets
- Guix. La phase @code{install} installe les binaires et installe aussi le
- code source et le fichier @file{Cargo.toml}.
- @end defvr
- @cindex Clojure (langage de programmation)
- @cindex système de construction Clojure simple
- @defvr {Variable Scheme} clojure-build-system
- Cette variable est exportée par @code{(guix build-system clojure)}. Elle
- implémente une procédure de construction des paquets simple qui utilise le
- bon vieux @code{compile} de Clojure. La compilation croisée n'est pas
- encore supportée.
- Elle ajoute @code{clojure}, @code{icedtea} et @code{zip} à l'ensemble des
- entrées. Des paquets différents peuvent être spécifiés avec les paramètres
- @code{#:clojure}, @code{#:jdk} et @code{#:zip}.
- Une liste de répertoires sources, de répertoires de tests et de noms de jar
- peuvent être spécifiés avec les paramètres @code{#:source-dirs},
- @code{#:test-dirs} et @code{#:jar-names}. Le répertoire de construction est
- la classe principale peuvent être spécifiés avec les paramètres
- @code{#:compile-dir} et @code{#:main-class}. Les autres paramètres sont
- documentés plus bas.
- Ce système de construction est une extension de @var{ant-build-system}, mais
- avec les phases suivantes modifiées :
- @table @code
- @item build
- Cette phase appelle @code{compile} en Clojure pour compiler les fichiers
- sources et lance @command{jar} pour créer les fichiers jar à partir des
- fichiers sources et des fichiers compilés en suivant la liste d'inclusion et
- d'exclusion spécifiées dans @code{#:aot-include} et @code{#:aot-exclude}.
- La liste d'exclusion a la priorité sur la liste d'inclusion. Ces listes
- consistent en des symboles représentant des bibliothèque Clojure ou le mot
- clef spécial @code{#:all}, représentant toutes les bibliothèques Clojure
- trouvées dans les répertoires des sources. Le paramètre
- @code{#:omit-source?} décide si les sources devraient être incluses dans les
- fichiers jar.
- @item check
- Cette phase lance les tests en suivant les liste d'inclusion et d'exclusion
- spécifiées dans @code{#:test-include} et @code{#:test-exclude}. Leur
- signification est analogue à celle de @code{#:aot-include} et
- @code{#:aot-exclude}, sauf que le mot-clef spécial @code{#:all} signifie
- maintenant toutes les bibliothèques Clojure trouvées dans les répertoires de
- tests. Le paramètre @code{#:tests?} décide si les tests devraient être
- lancés.
- @item install
- Cette phase installe tous les fichiers jar précédemment construits.
- @end table
- En dehors de cela, le système de construction contient aussi la phase
- suivante :
- @table @code
- @item install-doc
- Cette phase installe tous les fichiers dans le répertoire de plus haut
- niveau dont le nom correspond à @var{%doc-regex}. On peut spécifier une
- regex différente avec le paramètre @code{#:doc-regex}. Tous les fichiers
- (récursivement) dans les répertoires de documentations spécifiés dans
- @code{#:doc-dirs} sont aussi installés.
- @end table
- @end defvr
- @defvr {Variable Scheme} cmake-build-system
- Cette variable est exportée par @code{(guix build-system cmake)}. Elle
- implémente la procédure de construction des paquets qui utilisent
- l'@url{http://www.cmake.org, outil de construction CMake}.
- Elle ajoute automatiquement le paquet @code{cmake} à l'ensemble des
- entrées. Le paquet utilisé peut être spécifié par le paramètre
- @code{#:cmake}.
- Le paramètre @code{#:configure-flags} est pris comme une liste de drapeaux à
- passer à la commande @command{cmake}. Le paramètre @code{#:build-type}
- spécifie en termes abstrait les drapeaux passés au compilateur ; sa valeur
- par défaut est @code{"RelWithDebInfo"} (ce qui veut dire « mode public avec
- les informations de débogage » en plus court), ce qui signifie en gros que
- le code sera compilé avec @code{-O2 -g} comme pour les paquets autoconf par
- défaut.
- @end defvr
- @defvr {Variable Scheme} go-build-system
- Cette variable est exportée par @code{(guix build-system go)}. Elle
- implémente la procédure pour les paquets Go utilisant les
- @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
- mécanismes de construction Go} standard.
- L'utilisateur doit fournir une valeur à la clef @code{#:import-path} et,
- dans certains cas, @code{#:unpack-path}. Le
- @url{https://golang.org/doc/code.html#ImportPaths, chemin d'import}
- correspond au chemin dans le système de fichiers attendu par le script de
- construction du paquet et les paquets qui s'y réfèrent et fournit une
- manière unique de se référer à un paquet Go. Il est typiquement basé sur
- une combinaison de l'URI du code source du paquet et d'une structure
- hiérarchique du système de fichier. Dans certains cas, vous devrez extraire
- le code source du paquet dans une structure de répertoires différente que
- celle indiquée par le chemin d'import et @code{#:unpack-path} devrait être
- utilisé dans ces cas-là.
- Les paquets qui fournissent des bibliothèques Go devraient être installées
- avec leur code source. La clef @code{#:install-soruce?}, qui vaut @code{#t}
- par défaut, contrôle l'installation du code source. Elle peut être mise à
- @code{#f} pour les paquets qui ne fournissent que des fichiers exécutables.
- @end defvr
- @defvr {Variable Scheme} glib-or-gtk-build-system
- Cette variable est exportée par @code{(guix build-system glib-or-gtk)}.
- Elle est conçue pour être utilisée par des paquets qui utilisent GLib ou
- GTK+.
- Ce système de construction ajoute les deux phases suivantes à celles
- définies par @var{gnu-build-system} :
- @table @code
- @item glib-or-gtk-wrap
- La phase @code{glib-or-gtk-wrap} s'assure que les programmes dans
- @file{bin/} sont capable de trouver les « schemas » GLib et les
- @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, modules
- GTK+}. Ceci est fait en enveloppant les programmes dans des scripts de
- lancement qui initialisent correctement les variables d'environnement
- @code{XDG_DATA_DIRS} et @code{GTK_PATH}.
- Il est possible d'exclure des sorties spécifiques de ce processus
- d'enveloppage en listant leur nom dans le paramètre
- @code{#:glib-or-gtk-wrap-excluded-outputs}. C'est utile lorsqu'une sortie
- est connue pour ne pas contenir de binaires GLib ou GTK+, et où l'enveloppe
- ajouterait une dépendance inutile vers GLib et GTK+.
- @item glib-or-gtk-compile-schemas
- La phase @code{glib-or-gtk-compile-schemas} s'assure que tous les
- @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
- schémas GSettings} de GLib sont compilés. La compilation est effectuée par
- le programme @command{glib-compile-schemas}. Il est fournit par le paquet
- @code{glib:bin} qui est automatiquement importé par le système de
- construction. Le paquet @code{glib} qui fournit
- @command{glib-compile-schemas} peut être spécifié avec le paramètre
- @code{#:glib}.
- @end table
- Ces deux phases sont exécutées après la phase @code{install}.
- @end defvr
- @defvr {Variable Scheme} guile-build-system
- Ce système de construction sert aux paquets Guile qui consistent
- exclusivement en code Scheme et qui sont si simple qu'ils n'ont même pas un
- makefile, sans parler d'un script @file{configure}. Il compile le code
- Scheme en utilisant @command{guild compile} (@pxref{Compilation,,, guile,
- GNU Guile Reference Manual}) et installe les fichiers @file{.scm} et
- @file{.go} aux bons emplacements. Il installe aussi la documentation.
- Ce système de construction supporte la compilation croisée en utilisant
- l'option @code{--target} de @command{guild compile}.
- Les paquets construits avec @code{guile-build-system} doivent fournir un
- paquet Guile dans leur champ @code{native-inputs}.
- @end defvr
- @defvr {Variable Scheme} minify-build-system
- Cette variable est exportée par @code{(guix build-system minify)}. Elle
- implémente une procédure de minification pour des paquets JavaScript
- simples.
- Elle ajoute @code{uglify-js} à l'ensemble des entrées et l'utilise pour
- compresser tous les fichiers JavaScript du répertoire @file{src}. Un
- minifieur différent peut être spécifié avec le paramètre @code{#:uglify-js}
- mais il est attendu que ce paquet écrive le code minifié sur la sortie
- standard.
- Lorsque les fichiers JavaScript d'entrée ne sont pas situés dans le
- répertoire @file{src}, le paramètre @code{#:javascript-files} peut être
- utilisé pour spécifier une liste de noms de fichiers à donner au minifieur.
- @end defvr
- @defvr {Variable Scheme} ocaml-build-system
- Cette variable est exportée par @code{(guix build-system ocaml)}. Elle
- implémente une procédure de construction pour les paquets
- @uref{https://ocaml.org, OCaml} qui consiste à choisir le bon ensemble de
- commande à lancer pour chaque paquet. Les paquets OCaml peuvent demander
- des commandes diverses pour être construit. Ce système de construction en
- essaye certaines.
- Lorsqu'un fichier @file{setup.ml} est présent dans le répertoire de plus
- haut niveau, elle lancera @code{ocaml setup.ml -configure}, @code{ocaml
- setup.ml -build} et @code{ocaml setup.ml -install}. Le système de
- construction supposera que ces fichiers ont été générés par
- @uref{http://oasis.forge.ocamlcore.org/, OASIS} et prendra soin
- d'initialiser le préfixe et d'activer les tests s'ils ne sont pas
- désactivés. Vous pouvez passer des drapeaux de configuration et de
- consturction avec @code{#:configure-flags} et @code{#:build-flags}. La clef
- @code{#:test-flags} peut être passée pour changer l'ensemble des drapeaux
- utilisés pour activer les tests. La clef @code{#:use-make?} peut être
- utilisée pour outrepasser ce système dans les phases de construction et
- d'installation.
- Lorsque le paquet a un fichier @file{configure}, il est supposé qu'il s'agit
- d'un script configure écrit à la main qui demande un format différent de
- celui de @code{gnu-build-system}. Vous pouvez ajouter plus de drapeaux avec
- la clef @code{#:configure-flags}.
- Lorsque le paquet a un fichier @file{Makefile} (ou @code{#:use-make?} vaut
- @code{#t}), il sera utilisé et plus de drapeaux peuvent être passés à la
- construction et l'installation avec la clef @code{#:make-flags}.
- Enfin, certains paquets n'ont pas ces fichiers mais utilisent un emplacement
- plus ou moins standard pour leur système de construction. Dans ce cas, le
- système de construction lancera @code{ocaml pkg/pkg.ml} ou
- @code{pkg/build.ml} et prendra soin de fournir le chemin du module findlib
- requis. Des drapeaux supplémentaires peuvent être passés via la clef
- @code{#:bulid-flags}. L'installation se fait avec
- @command{opam-installer}. Dans ce cas, le paquet @code{opam} doit être
- ajouté au champ @code{native-inputs} de la définition du paquet.
- Remarquez que la plupart des paquets OCaml supposent qu'ils seront installés
- dans le même répertoire qu'OCaml, ce qui n'est pas ce que nous voulons faire
- dans Guix. En particulier, ils installeront leurs fichiers @file{.so} dans
- leur propre répertoire de module, ce qui est normalement correct puisqu'il
- s'agit du répertoire du compilateur OCaml. Dans Guix en revanche, le
- bibliothèques ne peuvent pas y être trouvées et on utilise
- @code{CAML_LD_LIBRARY_PATH} à la place. Cette variable pointe vers
- @file{lib/ocaml/site-lib/stubslibs} et c'est là où les bibliothèques
- @file{.so} devraient être installées.
- @end defvr
- @defvr {Variable Scheme} python-build-system
- Cette variable est exportée par @code{(guix build-system python)}. Elle
- implémente la procédure de construction plus ou moins standarde utilisée
- pour les paquets Python, qui consiste à lancer @code{python setup.py build}
- puis @code{python setup.py install --prefix=/gnu/store/@dots{}}.
- Pour les paquets qui installent des programmes autonomes dans @code{bin/},
- elle prend soin d'envelopper ces binaires pour que leur variable
- d'environnement @code{PYTHONPATH} pointe vers toutes les bibliothèques
- Python dont ils dépendent.
- Le paquet Python utilisé pour effectuer la construction peut être spécifié
- avec le paramètre @code{#:python}. C'est une manière utile de forcer un
- paquet à être construit avec une version particulière de l'interpréteur
- python, ce qui peut être nécessaire si le paquet n'est compatible qu'avec
- une version de l'interpréteur.
- Par défaut Guix appelle @code{setup.py} sous le contrôle de
- @code{setuptools}, comme le fait @command{pip}. Certains paquets ne sont
- pas compatibles avec setuptools (et pip), ainsi vous pouvez désactiver cela
- en mettant le paramètre @code{#:use-setuptools} à @code{#f}.
- @end defvr
- @defvr {Variable Scheme} perl-build-system
- Cette variable est exportée par @code{(guix build-system perl)}. Elle
- implémente la procédure de construction standarde des paquets Perl, qui
- consiste soit à lancer @code{perl Build.PL --prefix=/gnu/store/@dots{}},
- suivi de @code{Build} et @code{Build install} ; ou à lancer @code{perl
- Makefile.PL PREFIX=/gnu/store/@dots{}}, suivi de @code{make} et @code{make
- install}, en fonction de la présence de @code{Build.PL} ou
- @code{Makefile.PL} dans la distribution du paquet. Le premier a la
- préférence si @code{Build.PL} et @code{Makefile.PL} existent tous deux dans
- la distribution du paquet. Cette préférence peut être inversée en
- spécifiant @code{#t} pour le paramètre @code{#:make-maker?}.
- L'invocation initiale de @code{perl Makefile.PL} ou @code{perl Build.PL}
- passe les drapeaux spécifiés par le paramètre @code{#:make-maker-flags} ou
- @code{#:module-build-flags}, respectivement.
- Le paquet Perl utilisé peut être spécifié avec @code{#:perl}.
- @end defvr
- @defvr {Variable Scheme} r-build-system
- Cette variable est exportée par @code{(guix build-system r)}. Elle
- implémente la procédure de construction utilisée par les paquets
- @uref{http://r-project.org, R} qui consiste à lancer à peine plus que
- @code{R CMD INSTALL --library=/gnu/store/@dots{}} dans un environnement où
- @code{R_LIBS_SITE} contient les chemins de toutes les entrées R. Les tests
- sont lancés après l'installation avec la fonction R
- @code{tools::testInstalledPackage}.
- @end defvr
- @defvr {Variable Scheme} texlive-build-system
- Cette variable est exportée par @code{(guix build-system texlive)}. Elle
- est utilisée pour construire des paquets TeX en mode batch avec le moteur
- spécifié. Le système de construction initialise la variable
- @code{TEXINPUTS} pour trouver tous les fichiers source TeX dans ses entrées.
- Par défaut, elle lance @code{luatex} sur tous les fichiers qui se terminent
- par @code{ins}. Un moteur et un format différent peuvent être spécifiés
- avec l'argument @code{#:tex-format}. Plusieurs cibles de constructions
- peuvent être indiquées avec l'argument @code{#:build-targets} qui attend une
- liste de noms de fichiers. Le système de construction ajoute uniquement
- @code{texlive-bin} et @code{texlive-latex-base} (de @code{(gnu packages
- tex)} à la liste des entrées. Les deux peuvent être remplacés avec les
- arguments @code{#:texlive-bin} et @code{#:texlive-latex-base},
- respectivement.
- Le paramètre @code{#:tex-directory} dit au système de construction où
- installer les fichiers construit dans l'arbre texmf.
- @end defvr
- @defvr {Variable Scheme} ruby-build-system
- Cette variable est exportée par @code{(guix build-system ruby)}. Elle
- implémenter la procédure de construction RubyGems utilisée par les paquets
- Ruby qui consiste à lancer @code{gem build} suivi de @code{gem install}.
- Le champ @code{source} d'un paquet qui utilise ce système de construction
- référence le plus souvent une archive gem, puisque c'est le format utilisé
- par les développeurs Ruby quand ils publient leur logiciel. Le système de
- construction décompresse l'archive gem, éventuellement en corrigeant les
- sources, lance la suite de tests, recompresse la gemme et l'installe. En
- plus, des répertoires et des archives peuvent être référencés pour permettre
- de construire des gemmes qui n'ont pas été publiées depuis Git ou une
- archive de sources traditionnelle.
- Le paquet Ruby utilisé peut être spécifié avec le paramètre @code{#:ruby}.
- Une liste de drapeaux supplémentaires à passer à la commande @command{gem}
- peut être spécifiée avec le paramètre @code{#:gem-flags}.
- @end defvr
- @defvr {Variable Scheme} waf-build-system
- Cette variable est exportée par @code{(guix build-system waf)}. Elle
- implémente une procédure de construction autour du script @code{waf}. Les
- phases usuelles — @code{configure}, @code{build} et @code{install} — sont
- implémentée en passant leur nom en argument au script @code{waf}.
- Le script @code{waf} est exécuté par l'interpréteur Python. Le paquet
- Python utilisé pour lancer le script peut être spécifié avec le paramètre
- @code{#:python}.
- @end defvr
- @defvr {Variable Scheme} scons-build-system
- Cette variable est exportée par @code{(guix build-system scons)}. Elle
- implémente la procédure de construction utilisée par l'outil de construction
- SCons. Ce système de construction lance @code{scons} pour construire le
- paquet, @code{scons test} pour lancer les tests puis @code{scons install}
- pour installer le paquet.
- On peut passer des drapeaux supplémentaires à @code{scons} en les spécifiant
- avec le paramètre @code{#:scons-flags}. La version de python utilisée pour
- lancer SCons peut être spécifiée en sélectionnant le paquet SCons approprié
- avec le paramètre @code{#:scons}.
- @end defvr
- @defvr {Variable Scheme} haskell-build-system
- Cette variable est exportée par @code{(guix build-system haskell)}. Elle
- implémente la procédure de construction Cabal utilisée par les paquets
- Haskell, qui consiste à lancer @code{runhaskell Setup.hs configure
- --prefix=/gnu/store/@dots{}} et @code{runhaskell Setup.hs build}. Plutôt
- que d'installer le paquets en lançant @code{runhaskell Setup.hs install},
- pour éviter d'essayer d'enregistrer les bibliothèques dans le répertoire du
- dépôt en lecture-seule du compilateur, le système de construction utilise
- @code{runhaskell Setup.hs copy}, suivi de @code{runhaskell Setup.hs
- register}. En plus, le système de construction génère la documentation du
- paquet en lançant @code{runhaskell Setup.hs haddock}, à moins que
- @code{#:haddock? #f} ne soit passé. Des paramètres facultatifs pour Haddock
- peuvent être passés à l'aide du paramètre @code{#:haddock-flags}. Si le
- fichier @code{Setup.hs} n'est pas trouvé, le système de construction
- cherchera @code{Setup.lhs} à la place.
- Le compilateur Haskell utilisé peut être spécifié avec le paramètre
- @code{#:haskell} qui a pour valeur par défaut @code{ghc}.
- @end defvr
- @defvr {Variable Scheme} dub-build-system
- Cette variable est exportée par @code{(guix build-system dub)}. Elle
- implémente la procédure de construction Dub utilisée par les paquets D qui
- consiste à lancer @code{dub build} et @code{dub run}. L'installation est
- effectuée en copiant les fichiers manuellement.
- Le compilateur D utilisé peut être spécifié avec le paramètre @code{#:ldc}
- qui vaut par défaut @code{ldc}.
- @end defvr
- @defvr {Variable Scheme} emacs-build-system
- Cette variable est exportée par @code{(guix build-system emacs)}. Elle
- implémente une procédure d'installation similaire au système de gestion de
- paquet d'Emacs lui-même (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
- Elle crée d'abord le fichier @code{@var{package}-autoloads.el}, puis compile
- tous les fichiers Emacs Lisp en bytecode. Contrairement au système de
- gestion de paquets d'Emacs, les fichiers de documentation info sont déplacés
- dans le répertoire standard et le fichier @file{dir} est supprimé. Chaque
- paquet est installé dans son propre répertoire dans
- @file{share/emacs/site-lisp/guix.d}.
- @end defvr
- @defvr {Variable Scheme} font-build-system
- This variable is exported by @code{(guix build-system font)}. It implements
- an installation procedure for font packages where upstream provides
- pre-compiled TrueType, OpenType, etc.@: font files that merely need to be
- copied into place. It copies font files to standard locations in the output
- directory.
- @end defvr
- @defvr {Variable Scheme} meson-build-system
- Cette variable est exportée par @code{(guix build-system meson)}. Elle
- implémente la procédure de construction des paquets qui utilisent
- @url{http://mesonbuild.com, Meson} comme système de construction.
- Elle ajoute à la fois Meson et @uref{https://ninja-build.org/, Ninja} à
- l'ensemble des entrées, et ils peuvent être modifiés avec les paramètres
- @code{#:meson} et @code{#:ninja} si requis. Le Meson par défaut est
- @code{meson-for-build}, qui est spécial parce qu'il ne nettoie pas le
- @code{RUNPATH} des binaires et les bibliothèques qu'il installe.
- Ce système de construction est une extension de @var{gnu-build-system}, mais
- avec les phases suivantes modifiées pour Meson :
- @table @code
- @item configure
- La phase lance @code{meson} avec les drapeaux spécifiés dans
- @code{#:configure-flags}. Le drapeau @code{--build-type} est toujours
- initialisé à @code{plain} à moins que quelque chose d'autre ne soit spécifié
- dans @code{#:build-type}.
- @item build
- La phase lance @code{ninja} pour construire le paquet en parallèle par
- défaut, mais cela peut être changé avec @code{#:parallel-build?}.
- @item check
- La phase lance @code{ninja} avec la cible spécifiée dans
- @code{#:test-target}, qui est @code{"test"} par défaut.
- @item install
- La phase lance @code{ninja install} et ne peut pas être changée.
- @end table
- En dehors de cela, le système de construction ajoute aussi la phase suivante
- :
- @table @code
- @item fix-runpath
- Cette phase s'assure que tous les binaire peuvent trouver les bibliothèques
- dont ils ont besoin. Elle cherche les bibliothèques requises dans les
- sous-répertoires du paquet en construction et les ajoute au @code{RUNPATH}
- là où c'est nécessaire. Elle supprime aussi les références aux
- bibliothèques laissées là par la phase de construction par
- @code{meson-for-build} comme les dépendances des tests, qui ne sont pas
- vraiment requises pour le programme.
- @item glib-or-gtk-wrap
- Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
- n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
- @item glib-or-gtk-compile-schemas
- Cette phase est la phase fournie par @code{glib-or-gtk-build-system} et
- n'est pas activée par défaut. Elle peut l'être avec @code{#:glib-or-gtk?}.
- @end table
- @end defvr
- Enfin, pour les paquets qui n'ont pas besoin de choses sophistiquées, un
- système de construction « trivial » est disponible. Il est trivial dans le
- sens où il ne fournit en gros aucun support : il n'apporte pas de dépendance
- implicite, et n'a pas de notion de phase de construction.
- @defvr {Variable Scheme} trivial-build-system
- Cette variable est exportée par @code{(guix build-system trivial)}.
- Ce système de construction requiert un argument @code{#:builder}. Cet
- argument doit être une expression Scheme qui construit la sortie du paquet —
- comme avec @code{build-expression->derivation} (@pxref{Dérivations,
- @code{build-expression->derivation}}).
- @end defvr
- @node Le dépôt
- @section Le dépôt
- @cindex dépôt
- @cindex éléments du dépôt
- @cindex chemins dans le dépôt
- Conceptuellement, le @dfn{dépôt} est l'endroit où les dérivations qui ont
- bien été construites sont stockées — par défaut, @file{/gnu/store}. Les
- sous-répertoires dans le dépôt s'appellent des @dfn{éléments du dépôt} ou
- parfois des @dfn{chemins du dépôt}. Le dépôt a une base de données associée
- qui contient des informations comme les chemins du dépôt auxquels se
- réfèrent chaque chemin du dépôt et la liste des éléments du dépôt
- @emph{valides} — les résultats d'une construction réussie. Cette base de
- données se trouve dans @file{@var{localstatedir}/guix/db} où
- @var{localstatedir} est le répertoire d'états spécifié @i{via} @option
- {--localstatedir} à la configuration, typiquement @file{/var}.
- C'est @emph{toujours} le démon qui accède au dépôt pour le compte de ses
- clients (@pxref{Invoquer guix-daemon}). Pour manipuler le dépôt, les
- clients se connectent au démon par un socket Unix-domain, envoient une
- requête dessus et lisent le résultat — ce sont des appels de procédures
- distantes, ou RPC.
- @quotation Remarque
- Les utilisateurs ne doivent @emph{jamais} modifier les fichiers dans
- @file{/gnu/store} directement. Cela entraînerait des incohérences et
- casserait l'hypothèse d'immutabilité du modèle fonctionnel de Guix
- (@pxref{Introduction}).
- @xref{Invoquer guix gc, @command{guix gc --verify}}, pour des informations
- sur la manière de vérifier l'intégrité du dépôt et d'essayer de réparer des
- modifications accidentelles.
- @end quotation
- Le module @code{(guix store)} fournit des procédures pour se connecter au
- démon et pour effectuer des RPC. Elles sont décrites plus bas. Par défaut,
- @code{open-connection}, et donc toutes les commandes @command{guix} se
- connectent au démon local ou à l'URI spécifiée par la variable
- d'environnement @code{GUIX_DAEMON_SOCKET}.
- @defvr {Variable d'environnement} GUIX_DAEMON_SOCKET
- Lorsqu'elle est initialisée, la valeur de cette variable devrait être un nom
- de fichier ou une URI qui désigne l'extrémité du démon. Lorsque c'est un
- nom de fichier, il dénote un socket Unix-domain où se connecter. En plus
- des noms de fichiers, les schémas d'URI supportés sont :
- @table @code
- @item file
- @itemx unix
- Pour les sockets Unix-domain. @code{file:///var/guix/daemon-socket/socket}
- est équivalent à @file{/var/guix/daemon-socket/socket}.
- @item guix
- @cindex démon, accès distant
- @cindex accès distant au démon
- @cindex démon, paramètres de grappes
- @cindex grappes, paramètres du démon
- Ces URI dénotent des connexions par TCP/IP, sans chiffrement ni
- authentification de l'hôte distant. L'URI doit spécifier le nom d'hôte et
- éventuellement un numéro de port (par défaut 44146) :
- @example
- guix://master.guix.example.org:1234
- @end example
- Ce paramétrage est adapté aux réseaux locaux, comme dans le cas de grappes
- de serveurs, où seuls des noms de confiance peuvent se connecter au démon de
- construction sur @code{master.guix.example.org}.
- L'option @code{--listen} de @command{guix-daemon} peut être utilisé pour lui
- dire d'écouter des connexions TCP (@pxref{Invoquer guix-daemon,
- @code{--listen}}).
- @item ssh
- @cindex accès SSH au démon de construction
- Ces URI vous permettent de vous connecter au démon à distance à travers
- SSH@footnote{Cette fonctionnalité requiert Guile-SSH
- (@pxref{Prérequis}).}.
- @example
- ssh://charlie@@guix.example.org:22
- @end example
- Comme pour @command{guix copy}, les fichiers de configuration du client
- OpenSSH sont respectés (@pxref{Invoquer guix copy}).
- @end table
- Des schémas d'URI supplémentaires pourraient être supportés dans le futur.
- @c XXX: Remove this note when the protocol incurs fewer round trips
- @c and when (guix derivations) no longer relies on file system access.
- @quotation Remarque
- La capacité de se connecter à un démon de construction distant est considéré
- comme expérimental à la version @value{VERSION}. Contactez-nous pour
- partager vos problèmes ou des suggestions que vous pourriez avoir
- (@pxref{Contribuer}).
- @end quotation
- @end defvr
- @deffn {Procédure Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
- Se connecte au démon à travers le socket Unix-domain à @var{uri} (une chaîne
- de caractères). Lorsque @var{reserve-space?} est vrai, cela demande de
- réserver un peu de place supplémentaire sur le système de fichiers pour que
- le ramasse-miette puisse opérer au cas où le disque serait plein. Renvoie
- un objet serveur.
- @var{file} a pour valeur par défaut @var{%default-socket-path}, qui est
- l'emplacement normal en fonction des options données à @command{configure}.
- @end deffn
- @deffn {Procédure Scheme} close-connection @var{server}
- Ferme la connexion au @var{serveur}.
- @end deffn
- @defvr {Variable Scheme} current-build-output-port
- Cette variable est liée à un paramètre SRFI-39, qui se réfère au port où les
- journaux de construction et d'erreur envoyés par le démon devraient être
- écrits.
- @end defvr
- Les procédures qui font des RPC prennent toutes un objet serveur comme
- premier argument.
- @deffn {Procédure Scheme} valid-path? @var{server} @var{path}
- @cindex éléments du dépôt invalides
- Renvoie @code{#t} lorsque @var{path} désigne un élément du dépôt valide et
- @code{#f} sinon (un élément invalide peut exister sur le disque mais rester
- invalide, par exemple parce que c'est le résultat d'une construction annulée
- ou échouée).
- Une condition @code{&nix-protocol-error} est levée si @var{path} n'est pas
- préfixée par le répertoire du dépôt (@file{/gnu/store}).
- @end deffn
- @deffn {Procédure Scheme} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
- Ajoute @var{text} dans le fichier @var{name} dans le dépôt et renvoie son
- chemin. @var{references} est la liste des chemins du dépôt référencés par
- le chemin du dépôt qui en résulte.
- @end deffn
- @deffn {Procédure Scheme} build-derivations @var{server} @var{derivations}
- Construit @var{derivaton} (ne liste d'objets @code{<derivation>} ou de
- chemins de dérivations) et retourne quand le travailleur a fini de les
- construire. Renvoie @code{#t} en cas de réussite.
- @end deffn
- Remarque que le module @code{(guix monads)} fournit une monad ainsi que des
- version monadiques des procédures précédentes, avec le but de rendre plus
- facile de travailler avec le code qui accède au dépôt (@pxref{La monad du dépôt}).
- @c FIXME
- @i{Cette section est actuellement incomplète.}
- @node Dérivations
- @section Dérivations
- @cindex dérivations
- Les actions de construction à bas-niveau et l'environnement dans lequel
- elles sont effectuées sont représentés par des @dfn{dérivations}. Une
- dérivation contient cet ensemble d'informations :
- @itemize
- @item
- Les sorties de la dérivation — les dérivations produisent au moins un
- fichier ou répertoire dans le dépôt, mais peuvent en produire plus.
- @item
- Les entrées de la dérivation, qui peuvent être d'autres dérivations ou des
- fichiers dans le dépôt (correctifs, scripts de construction, etc).
- @item
- Le type de système ciblé par la dérivation — p.ex.@: @code{x86_64-linux}.
- @item
- Le nom de fichier d'un script de construction dans le dépôt avec les
- arguments à lui passer.
- @item
- Une liste de variables d'environnement à définir.
- @end itemize
- @cindex chemin de dérivation
- Les dérivations permettent aux client du démon de communiquer des actions de
- construction dans le dépôt. Elles existent sous deux formes : en tant que
- représentation en mémoire, à la fois côté client et démon, et en tant que
- fichiers dans le dépôt dont le nom fini par @code{.drv} — on dit que ce sont
- des @dfn{chemins de dérivations}. Les chemins de dérivations peuvent être
- passés à la procédure @code{build-derivations} pour effectuer les actions de
- construction qu'ils prescrivent (@pxref{Le dépôt}).
- @cindex dérivations à sortie fixe
- Des opérations comme le téléchargement de fichiers et la récupération de
- sources gérés par un logiciel de contrôle de version pour lesquels le hash
- du contenu est connu à l'avance sont modélisés par des @dfn{dérivations à
- sortie fixe}. Contrairement aux dérivation habituelles, les sorties d'une
- dérivation à sortie fixe sont indépendantes de ses entrées — p.ex.@: un code
- source téléchargé produit le même résultat quelque soit la méthode de
- téléchargement utilisée.
- Le module @code{(guix derivations)} fournit une représentation des
- dérivations comme des objets Scheme, avec des procédures pour créer et
- manipuler des dérivations. La primitive de plus bas-niveau pour créer une
- dérivation est la procédure @code{derivation} :
- @deffn {Procédure Scheme} derivation @var{store} @var{name} @var{builder} @
- @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
- [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
- [#:system (%current-system)] [#:references-graphs #f] @
- [#:allowed-references #f] [#:disallowed-references #f] @
- [#:leaked-env-vars #f] [#:local-build? #f] @
- [#:substitutable? #t] [#:properties '()]
- Construit une dérivation avec les arguments donnés et renvoie l'objet
- @code{<derivation>} obtenu.
- Lorsque @var{hash} et @var{hash-algo} sont donnés, une @dfn{dérivation à
- sortie fixe} est créée — c.-à-d.@: une dérivation dont le résultat est connu
- à l'avance, comme dans le cas du téléchargement d'un fichier. Si, en plus,
- @var{recursive?} est vrai, alors la sortie fixe peut être un fichier
- exécutable ou un répertoire et @var{hash} doit être le hash d'une archive
- contenant la sortie.
- Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
- paires de noms de fichiers et de chemins du dépôt. Dans ce cas, le graphe
- des références de chaque chemin du dépôt est exporté dans l'environnement de
- construction dans le fichier correspondant, dans un simple format texte.
- Lorsque @var{allowed-references} est vrai, il doit s'agir d'une liste
- d'éléments du dépôt ou de sorties auxquelles la sortie de la dérivations
- peut faire référence. De même, @var{disallowed-references}, si vrai, doit
- être une liste de choses que la sortie ne doit @emph{pas} référencer.
- Lorsque @var{leaked-env-vars} est vrai, il doit s'agir d'une liste de
- chaînes de caractères qui désignent les variables d'environnements qui
- peuvent « fuiter » de l'environnement du démon dans l'environnement de
- construction. Ce n'est possible que pour les dérivations à sortie fixe —
- c.-à-d.@: lorsque @var{hash} est vrai. L'utilisation principale est de
- permettre à des variables comme @code{http_proxy} d'être passées aux
- dérivations qui téléchargent des fichiers.
- Lorsque @var{local-build?} est vrai, déclare que la dérivation n'est pas un
- bon candidat pour le déchargement et devrait plutôt être construit
- localement (@pxref{Réglages du délestage du démon}). C'est le cas des petites
- dérivations où le coût du transfert de données est plus important que les
- bénéfices.
- Lorsque que @var{substitutable?} est faux, déclare que les substituts de la
- sortie de la dérivation ne devraient pas être utilisés
- (@pxref{Substituts}). Cela est utile par exemple pour construire des paquets
- qui utilisent des détails du jeu d'instruction du CPU hôte.
- @var{properties} doit être une liste d'association décrivant les «
- propriétés » de la dérivation. Elle est gardée telle-quelle, sans être
- interprétée, dans la dérivation.
- @end deffn
- @noindent
- Voici un exemple avec un script shell comme constructeur, en supposant que
- @var{store} est une connexion ouverte au démon et @var{bash} pointe vers un
- exécutable Bash dans le dépôt :
- @lisp
- (use-modules (guix utils)
- (guix store)
- (guix derivations))
- (let ((builder ; ajoute le script Bash au dépôt
- (add-text-to-store store "my-builder.sh"
- "echo hello world > $out\n" '())))
- (derivation store "foo"
- bash `("-e" ,builder)
- #:inputs `((,bash) (,builder))
- #:env-vars '(("HOME" . "/homeless"))))
- @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
- @end lisp
- Comme on pourrait s'en douter, cette primitive est difficile à utiliser
- directement. Une meilleure approche est d'écrire les scripts de
- construction en Scheme, bien sur ! Le mieux à faire pour cela est d'écrire
- le code de construction comme une « G-expression » et de la passer à
- @code{gexp->derivation}. Pour plus d'informations, @pxref{G-Expressions}.
- Il fut un temps où @code{gexp->derivation} n'existait pas et où construire
- une dérivation donc le code de construction était écrit en Scheme se faisait
- avec @code{build-expression->derivation}, documenté plus bas. Cette
- procédure est maintenant obsolète, remplacée par @code{gexp->derivation} qui
- est meilleure.
- @deffn {Procédure Scheme} build-expression->derivation @var{store} @
- @var{name} @var{exp} @
- [#:system (%current-system)] [#:inputs '()] @
- [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
- [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
- [#:references-graphs #f] [#:allowed-references #f] @
- [#:disallowed-references #f] @
- [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
- Renvoie une dérivation qui exécute l'expression Scheme @var{exp} comme un
- constructeur pour la dérivation @var{name}. @var{inputs} doit être une
- liste de tuples @code{(name drv-path sub-drv)} ; lorsque @var{sub-drv} est
- omis, @code{"out"} est utilisé. @var{modules} est une liste de noms de
- modules Guile du chemin de recherche actuel qui seront copiés dans le dépôt,
- compilés et rendus disponibles dans le chemin de chargement pendant
- l'exécution de @var{exp} — p.@: ex.@: @code{((guix build utils) (guix build
- gnu-build-system))}.
- @var{exp} est évaluée dans une environnement où @code{%outputs} est lié à
- une liste de paires de sortie/chemin, et où @code{%build-inputs} est lié à
- une liste de paires de chaînes de caractères et de chemin de sortie
- construite à partir de @var{inputs}. Éventuellement, @var{env-vars} est une
- liste de paires de chaînes de caractères spécifiant le nom et la valeur de
- variables d'environnement visibles pour le constructeur. Le constructeur
- termine en passant le résultat de @var{exp} à @code{exit} ; ainsi, lorsque
- @var{exp} renvoie @code{#f}, la construction est considérée en échec.
- @var{exp} est construite avec @var{guile-for-build} (une dérivation).
- Lorsque @var{guile-for-build} est omis où est @code{#f}, la valeur du fluide
- @code{%guile-for-build} est utilisée à la place.
- Voir la procédure @code{derivation} pour la signification de
- @var{references-graph}, @var{allowed-references},
- @var{disallowed-references}, @var{local-build?} et @var{substitutable?}.
- @end deffn
- @noindent
- Voici un exemple de dérivation à sortie unique qui crée un répertoire avec
- un fichier :
- @lisp
- (let ((builder '(let ((out (assoc-ref %outputs "out")))
- (mkdir out) ; create /gnu/store/@dots{}-goo
- (call-with-output-file (string-append out "/test")
- (lambda (p)
- (display '(hello guix) p))))))
- (build-expression->derivation store "goo" builder))
- @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
- @end lisp
- @node La monad du dépôt
- @section La monad du dépôt
- @cindex monad
- Les procédures qui travaillent sur le dépôt décrites dans les sections
- précédentes prennent toutes une connexion ouverte au démon de construction
- comme premier argument. Bien que le modèle sous-jacent soit fonctionnel,
- elles ont soit des effets de bord, soit dépendent de l'état actuel du dépôt.
- Le premier point est embêtant : on doit se balader avec la connexion au
- démon dans toutes ces fonctions, ce qui rend impossible le fait de composer
- des fonctions qui ne prennent pas ce paramètre avec des fonctions qui le
- prennent. Le deuxième point est problématique : comme les opérations sur le
- dépôt ont des effets de bord ou dépendent d'états externes, elles doivent
- être enchaînés correctement.
- @cindex valeurs monadiques
- @cindex fonctions monadiques
- C'est là que le module @code{(guix monads)} arrive à la rescousse. Ce
- module fournit un cadre pour travailler avec des @dfn{monads}, en
- particulier une monad très utile pour notre usage, la @dfn{monad du dépôt}.
- Les monads sont des constructions qui permettent deux choses : associer un «
- contexte » avec une valeur (dans notre cas, le contexte est le dépôt) et
- construire une séquence de calculs (ici les calculs comprennent des accès au
- dépôt). Les valeurs dans une monad — les valeurs qui contiennent ce
- contexte supplémentaire — sont appelées des @dfn{valeurs monadiques} ; les
- procédures qui renvoient ce genre de valeur sont appelées des
- @dfn{procédures monadiques}.
- Considérez cette procédure « normale » :
- @example
- (define (sh-symlink store)
- ;; Renvoie une dérivation qui crée un lien symbolique vers l'exécutable « bash ».
- (let* ((drv (package-derivation store bash))
- (out (derivation->output-path drv))
- (sh (string-append out "/bin/bash")))
- (build-expression->derivation store "sh"
- `(symlink ,sh %output))))
- @end example
- En utilisant @code{(guix monads)} et @code{(guix gexp)}, on peut la réécrire
- en une fonction monadique :
- @example
- (define (sh-symlink)
- ;; Pareil, mais renvoie une valeur monadique.
- (mlet %store-monad ((drv (package->derivation bash)))
- (gexp->derivation "sh"
- #~(symlink (string-append #$drv "/bin/bash")
- #$output))))
- @end example
- Il y a plusieurs choses à remarquer avec cette deuxième version : le
- paramètre @code{store} est maintenant implicitement « enfilé » dans les
- appels aux procédures monadiques @code{package->derivation} et
- @code{gexp->derivation}, et la valeur monadique renvoyée par
- @code{package->derivation} est @dfn{liée} avec @code{mlet} plutôt qu'avec un
- simple @code{let}.
- Il se trouve que l'appel à @code{package->derivation} peut même être omis
- puisqu'il aura lieu implicitement, comme nous le verrons plus tard
- (@pxref{G-Expressions}) :
- @example
- (define (sh-symlink)
- (gexp->derivation "sh"
- #~(symlink (string-append #$bash "/bin/bash")
- #$output)))
- @end example
- @c See
- @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
- @c for the funny quote.
- L'appel à la procédure monadique @code{sh-symlink} n'a aucun effet. En
- anglais on pourrait dire « you exit a monad like you exit a building on
- fire: by running »@footnote{NdT : « on sort d'une monad comme d'un immeuble
- en flamme, en courant ». Le jeu de mot est perdu à la traduction : courrir
- et lancer utilisent le même verbe @i{run} en anglais.}. Donc, pour sortir de
- la monad et obtenir l'effet escompté, on doit utiliser
- @code{run-with-store}.
- @example
- (run-with-store (open-connection) (sh-symlink))
- @result{} /gnu/store/...-sh-symlink
- @end example
- Remarquez que le module @code{(guix monad-repl)} étend la console Guile avec
- de nouvelles « méta-commandes » pour rendre plus facile la manipulation de
- procédures monadiques : @code{run-in-store} et @code{enter-store-monad}. La
- première est utilisée pour « lancer » une seule valeur monadique à travers
- le dépôt :
- @example
- scheme@@(guile-user)> ,run-in-store (package->derivation hello)
- $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
- @end example
- La deuxième entre dans une console récursive, où toutes les valeurs de
- retour sont automatiquement lancées à travers le dépôt :
- @example
- scheme@@(guile-user)> ,enter-store-monad
- store-monad@@(guile-user) [1]> (package->derivation hello)
- $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
- store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
- $3 = "/gnu/store/@dots{}-foo"
- store-monad@@(guile-user) [1]> ,q
- scheme@@(guile-user)>
- @end example
- @noindent
- Remarquez qu'on ne peut pas renvoyer de valeur non monadique dans la console
- @code{store-monad}.
- Les formes syntaxiques principales pour utiliser des monads en général sont
- disponibles dans le module @code{(guix monads)} et sont décrites ci-dessous.
- @deffn {Syntaxe Scheme} with-monad @var{monad} @var{body} ...
- Évalue n'importe quelle forme @code{>>=} ou @code{return} dans @var{body}
- comme une @var{monad}.
- @end deffn
- @deffn {Syntaxe Scheme} return @var{val}
- Renvoie une valeur monadique qui encapsule @var{val}.
- @end deffn
- @deffn {Syntaxe Scheme} >>= @var{mval} @var{mproc} ...
- @dfn{Lie} une valeur monadique @var{mval}, en passant son « contenu » aux
- procédures monadiques @var{mproc}@dots{}@footnote{Cette opération est
- souvent appelée « bind », mais ce nom dénote une procédure qui n'a rien à
- voir en Guile. Ainsi, nous empruntons ce symbole quelque peu cryptique au
- langage Haskell}. Il peut y avoir une ou plusieurs @code{mproc}, comme dans
- cet exemple :
- @example
- (run-with-state
- (with-monad %state-monad
- (>>= (return 1)
- (lambda (x) (return (+ 1 x)))
- (lambda (x) (return (* 2 x)))))
- 'some-state)
- @result{} 4
- @result{} some-state
- @end example
- @end deffn
- @deffn {Syntaxe Scheme} mlet @var{monad} ((@var{var} @var{mval}) ...) @
- @var{body} ...
- @deffnx {Syntaxe Scheme} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
- @var{body} ...
- Lie les variables @var{var} aux valeurs monadiques @var{mval} dans
- @var{body}, une séquence d'expressions. Comme avec l'opérateur de liaison,
- on peut réfléchir comme si on « ouvrait » la valeur non-monadique « contenue
- » dans @var{mval} et comme si on faisait en sorte que @var{var} se réfère à
- cette valeur pure, non-monadique, dans la portée de @var{body}. La forme
- (@var{var} -> @var{val}) lie @var{var} à la valeur « normale » @var{val},
- comme @code{let}. L'opération de liaison a lieu en séquence de la gauche
- vers la droite. La dernière expression de @var{body} doit être une
- expression monadique et son résultat deviendra le résultat de @code{mlet} ou
- @code{mlet*} lorsque lancé dans la @var{monad}.
- @code{mlet*} est à @code{mlet} ce que @code{let*} est à @code{let}
- (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
- @end deffn
- @deffn {Système Scheme} mbegin @var{monad} @var{mexp} ...
- Lie @var{mexp} et les expressions monadiques suivantes en séquence, et
- renvoie le résultat de la dernière expression. Chaque expression dans la
- séquence doit être une expression monadique.
- Cette procédure est similaire à @code{mlet}, sauf que les valeurs de retour
- des expressions monadiques sont ignorées. Dans ce sens, elle est analogue à
- @code{begin}, mais appliqué à des expressions monadiques.
- @end deffn
- @deffn {Système Scheme} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
- Lorsque la @var{condition} est vraie, évalue la séquence des expressions
- monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
- @var{condition} est fausse, renvoie @code{*unspecified*} dans la monad
- actuelle. Cahque expression dans la séquence doit être une expression
- monadique.
- @end deffn
- @deffn {Système Scheme} munless @var{condition} @var{mexp0} @var{mexp*} ...
- Lorsque la @var{condition} est fausse, évalue la séquence des expressions
- monadiques @var{mexp0}..@var{mexp*} comme dans un @code{mbegin}. Lorsque la
- @var{condition} est vraie, renvoie @code{*unspecified*} dans la monad
- actuelle. Cahque expression dans la séquence doit être une expression
- monadique.
- @end deffn
- @cindex monad d'état
- Le module @code{(guix monads)} fournit la @dfn{monad d'état} qui permet à
- une valeur supplémentaire — l'état — d'être enfilée à travers les appels de
- procédures.
- @defvr {Variable Scheme} %state-monad
- La monad d'état. les procédure dans la monad d'état peuvent accéder et
- modifier l'état qui est enfilé.
- Considérez l'exemple ci-dessous. La procédure @code{square} renvoie une
- valeur dans la monad d'état. Elle renvoie le carré de son argument, mais
- incrémente aussi la valeur actuelle de l'état :
- @example
- (define (square x)
- (mlet %state-monad ((count (current-state)))
- (mbegin %state-monad
- (set-current-state (+ 1 count))
- (return (* x x)))))
- (run-with-state (sequence %state-monad (map square (iota 3))) 0)
- @result{} (0 1 4)
- @result{} 3
- @end example
- Lorsqu'on la lance à travers @var{%state-monad}, on obtient cet valeur
- d'état supplémentaire, qui est le nombre d'appels à @code{square}.
- @end defvr
- @deffn {Procédure monadique} current-state
- Renvoie l'état actuel dans une valeur monadique.
- @end deffn
- @deffn {Procédure monadique} set-current-state @var{value}
- Initialise l'état actuel à @var{value} et renvoie l'état précédent dans une
- valeur monadique.
- @end deffn
- @deffn {Procédure monadique} state-push @var{value}
- Pousse @var{value} sur l'état actuel, qui est supposé être une liste, et
- renvoie l'état précédent dans une valeur monadique.
- @end deffn
- @deffn {Procédure monadique} state-pop
- Récupère (pop) une valeur dans l'état actuel et la renvoie comme une valeur
- monadique. L'état est supposé être une liste.
- @end deffn
- @deffn {Procédure Scheme} run-with-state @var{mval} [@var{state}]
- Lance la valeur monadique @var{mval} avec @var{state} comme valeur
- initiale. Renvoie deux valeurs : la valeur du résultat et l'état du
- résultat.
- @end deffn
- L'interface principale avec la monad du dépôt, fournit par le module
- @code{(guix store)}, est la suivante.
- @defvr {Variable Scheme} %store-monad
- La monad du dépôt — un alias pour @var{%state-monad}.
- Les valeurs dans la monad du dépôt encapsulent des accès au dépôt. Lorsque
- son effet est requis, une valeur de la monad du dépôt doit être « évaluée »
- en la passant à la procédure @code{run-with-store} (voir plus bas).
- @end defvr
- @deffn {Procédure Scheme} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
- Lance @var{mval}, une valeur monadique dans la monad du dépôt, dans
- @var{store}, une connexion ouvert au dépôt.
- @end deffn
- @deffn {Procédure monadique} text-file @var{name} @var{text} [@var{references}]
- Renvoie une valeur monadique correspondant au nom de fichier dans le dépôt
- du fichier contenant @var{text}, une chaîne de caractères. @var{references}
- est une liste d'éléments du dépôt auxquels le fichier texte en résultat se
- réfère ; c'est la liste vide par défaut.
- @end deffn
- @deffn {Procédure monadique} binary-file @var{name} @var{data} [@var{references}]
- Renvoie une valeur monadique correspondant au nom de fichier absolu dans le
- dépôt du fichier contenant @var{data}, un vecteur d'octets.
- @var{references} est une liste d'éléments du dépôt auxquels le fichier
- binaire en résultat se réfère ; c'est la liste vide par défaut.
- @end deffn
- @deffn {Procédure monadique} interned-file @var{file} [@var{name}] @
- [#:recursive? #t] [#:select? (const #t)]
- Renvoie le nom de @var{file} une fois ajouté au dépôt. Utilise @var{name}
- comme nom dans le dépôt ou le nom de fichier de @var{file} si @var{name} est
- omis.
- Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
- récursivement ; si @var{file} désigne un fichier simple et que
- @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
- sont préservés.
- Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
- @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
- absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
- l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
- L'exemple ci-dessous ajoute un fichier au dépôt, sous deux noms différents :
- @example
- (run-with-store (open-connection)
- (mlet %store-monad ((a (interned-file "README"))
- (b (interned-file "README" "LEGU-MIN")))
- (return (list a b))))
- @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
- @end example
- @end deffn
- Le module @code{(guix packages)} exporte les procédures monadiques liées aux
- paquets suivantes :
- @deffn {Procédure monadique} package-file @var{package} [@var{file}] @
- [#:system (%current-system)] [#:target #f] @
- [#:output "out"]
- Renvoie une valeur monadique qui contient le nom de fichier absolu de
- @var{file} dans le répertoire @var{output} de @var{package}. Lorsque
- @var{file} est omis, renvoie le nom du répertoire @var{output} de
- @var{package}. Lorsque @var{target} est vrai, l'utilise comme un triplet de
- cible pour la compilation croisée.
- @end deffn
- @deffn {Procédure monadique} package->derivation @var{package} [@var{system}]
- @deffnx {Procédure monadique} package->cross-derivation @var{package} @
- @var{target} [@var{system}]
- Version monadique de @code{package-derivation} et
- @code{package-cross-derivation} (@pxref{Définition des paquets}).
- @end deffn
- @node G-Expressions
- @section G-Expressions
- @cindex G-expression
- @cindex quoting du code de construction
- On a donc des « dérivations » qui représentent une séquence d'actions de
- construction à effectuer pour produire un élément du dépôt
- (@pxref{Dérivations}). Ces actions de construction sont effectuées
- lorsqu'on demande au démon de construire effectivement les dérivations ;
- elles sont lancées par le démon dans un conteneur (@pxref{Invoquer guix-daemon}).
- @cindex strate de code
- Ça ne devrait pas vous surprendre, mais nous aimons écrire ces actions de
- construction en Scheme. Lorsqu'on fait ça, on fini avec deux @dfn{strates}
- de code Scheme@footnote{Le terme @dfn{strate} dans ce contexte a été inventé
- par Manuel Serrano et ses collaborateurs dans le contexte de leur travaux
- sur Hop. Oleg Kiselyov, qui a écrit des
- @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essais perspicaces
- et du code sur le sujet}, utilise le terme de « mise en scène » pour ce
- genre de génération de code.} : le « code hôte » — le code qui défini les
- paquets, parle au démon, etc — et le « code côté construction » — le code
- qui effectue effectivement les actions de construction, comme créer des
- répertoires, invoquer @code{make}, etc.
- Pour décrire une dérivation et ses actions de construction, on a typiquement
- besoin d'intégrer le code de construction dans le code hôte. Ça revient à
- manipuler le code de construction comme de la donnée, et l'homoiconicité de
- Scheme — le code a une représentation directe en tant que donnée — est très
- utile pour cela. Mais on a besoin de plus que le mécanisme de
- @code{quasiquote} en Scheme pour construire des expressions de construction.
- Le module @code{(guix gexp)} implémente les @dfn{G-expressions}, une forme
- de S-expression adaptée aux expressions de construction. Les G-expression,
- ou @dfn{gexps}, consistent en gros en trois formes syntaxiques :
- @code{gexp}, @code{ungexp} et @code{ungexp-splicing} (ou plus simplement :
- @code{#~}, @code{#$} et @code{#$@@}), qui sont comparable à
- @code{quasiquote}, @code{unquote} ett @code{unquote-splicing} respectivement
- (@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
- Manual}). Cependant il y a des différences majeures :
- @itemize
- @item
- Les Gexps sont conçues pour être écrites dans un fichier et être lancées ou
- manipulées par d'autres processus.
- @item
- Lorsqu'un objet de haut-niveau comme un paquet ou une dérivation est
- unquotée dans une gexp, le résultat est comme si le nom de fichier de son
- résultat avait été introduit.
- @item
- Les gexps transportent des informatinos sur les paquets ou les dérivations
- auxquels elles se réfèrent, et ces dépendances sont automatiquement ajoutées
- comme des entrées du processus de construction qui les utilise.
- @end itemize
- @cindex abaissement, des objets haut-niveau dans les gepxs
- Ce mécanisme n'est pas limité aux paquets et aux dérivations : on peut
- définir des @dfn{compilateurs} capable « d'abaisser » d'autres objets de
- haut-niveau ou des fichiers dans le dépôt, pour que ces objets puissent
- aussi être insérés dans des gexps. Par exemple, des objets haut-niveau
- utiles qui pourraient être insérées dans une gexp sont les « objets
- simili-fichiers », qui rendent facile l'ajout de fichiers dans le dépôt et
- les références vers eux dans les dérivations et autres (voir
- @code{local-file} et @code{plain-file} ci-dessous).
- Pour illustrer cette idée, voici un exemple de gexp :
- @example
- (define build-exp
- #~(begin
- (mkdir #$output)
- (chdir #$output)
- (symlink (string-append #$coreutils "/bin/ls")
- "list-files")))
- @end example
- Cette gexp peut être passée à @code{gexp->derivation} ; on obtient une
- dérivation qui construit une répertoire contenant exactement un lien
- symbolique à @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls} :
- @example
- (gexp->derivation "the-thing" build-exp)
- @end example
- Comme on pourrait s'y attendre, la chaîne
- @code{"/gnu/store/@dots{}-coreutils-8.22"} est substituée à la place de la
- référence au paquet @var{coreutils} dans le code de construction final, et
- @var{coreutils} est automatiquement devenu une entrée de la dérivation. De
- même, @code{#$output} (équivalent à @code{(ungexp output)}) est remplacé par
- une chaîne de caractères contenant le nom du répertoire de la sortie de la
- dérivation.
- @cindex compilation croisée
- Dans le contexte d'une compilation croisée, il est utile de distinguer entre
- des références à la construction @emph{native} d'un paquet — qui peut être
- lancé par l'hôte — et des références à la construction croisée d'un paquet.
- Pour cela, @code{#+} joue le même rôle que @code{#$}, mais référence une
- construction native d'un paquet :
- @example
- (gexp->derivation "vi"
- #~(begin
- (mkdir #$output)
- (system* (string-append #+coreutils "/bin/ln")
- "-s"
- (string-append #$emacs "/bin/emacs")
- (string-append #$output "/bin/vi")))
- #:target "mips64el-linux-gnu")
- @end example
- @noindent
- Dans l'exemple ci-dessus, la construction native de @var{coreutils} est
- utilisée, pour que @command{ln} puisse effectivement être lancé sur l'hôte ;
- mais ensuite la construction croisée d'@var{emacs} est utilisée.
- @cindex modules importés, pour les gexps
- @findex with-imported-modules
- Une autre fonctionnalité, ce sont les @dfn{modules importés} : parfois vous
- voudriez pouvoir utiliser certains modules Guile de « l'environnement hôte »
- dans la gexp, donc ces modules devraient être importés dans «
- l'environnement de construction ». La forme @code{with-imported-modules}
- vous permet d'exprimer ça :
- @example
- (let ((build (with-imported-modules '((guix build utils))
- #~(begin
- (use-modules (guix build utils))
- (mkdir-p (string-append #$output "/bin"))))))
- (gexp->derivation "empty-dir"
- #~(begin
- #$build
- (display "success!\n")
- #t)))
- @end example
- @noindent
- Dans cet exemple, le module @code{(guix build utils)} est automatiquement
- récupéré dans l'environnement de construction isolé de notre gexp, pour que
- @code{(use-modules (guix build utils))} fonctionne comme on s'y attendrait.
- @cindex closure de module
- @findex source-module-closure
- Typiquement, vous voudriez que la @emph{closure} complète du mondule soit
- importé — c.-à-d.@: le module lui-même et tous les modules dont il dépend —
- plutôt que seulement le module ; sinon, une tentative de chargement du
- module échouera à cause des modules dépendants manquants. La procédure
- @code{source-module-closure} calcule la closure d'un module en cherchant
- dans ses en-têtes sources, ce qui est pratique dans ce cas :
- @example
- (use-modules (guix modules)) ;pour 'source-module-closure'
- (with-imported-modules (source-module-closure
- '((guix build utils)
- (gnu build vm)))
- (gexp->derivation "something-with-vms"
- #~(begin
- (use-modules (guix build utils)
- (gnu build vm))
- @dots{})))
- @end example
- @cindex extensions, des gexps
- @findex with-extensions
- Dans la même idée, parfois vous pouvez souhaiter importer non seulement des
- modules en Scheme pur, mais aussi des « extensions » comme des liaisons
- Guile de bibliothèques C ou d'autres paquet « complets ». Disons que vous
- voulez utiliser le paquet @code{guile-json} du côté de la construction,
- voici comme procéder :
- @example
- (use-modules (gnu packages guile)) ;pour 'guile-json'
- (with-extensions (list guile-json)
- (gexp->derivation "something-with-json"
- #~(begin
- (use-modules (json))
- @dots{})))
- @end example
- La forme syntaxique pour construire des gexps est résumée ci-dessous.
- @deffn {Syntaxe Scheme} #~@var{exp}
- @deffnx {Syntaxe Scheme} (gexp @var{exp})
- Renvoie une G-expression contenant @var{exp}. @var{exp} peut contenir une
- ou plusieurs de ces formes :
- @table @code
- @item #$@var{obj}
- @itemx (ungexp @var{obj})
- Introduit une référence à @var{obj}. @var{obj} peut être d'un des types
- supportés, par exemple un paquet ou une dérivation, auquel cas la forme
- @code{ungexp} est remplacée par le nom de fichier de sa sortie — p.@: ex.@:
- @code{"/gnu/store/@dots{}-coreutils-8.22}.
- Si @var{boj} est une liste, elle est traversée et les références aux objets
- supportés sont substitués de manière similaire.
- Si @var{obj} est une autre gexp, son contenu est inséré et ses dépendances
- sont ajoutées à celle de la gexp qui l'entoure.
- Si @var{obj} est un autre type d'objet, il est inséré tel quel.
- @item #$@var{obj}:@var{output}
- @itemx (ungexp @var{obj} @var{output})
- Cette forme est similaire à la précédente, mais se réfère explicitement à la
- sortie @var{output} de l'objet @var{obj} — c'est utile lorsque @var{obj}
- produit plusieurs sorties (@pxref{Des paquets avec plusieurs résultats}).
- @item #+@var{obj}
- @itemx #+@var{obj}:output
- @itemx (ungexp-native @var{obj})
- @itemx (ungexp-native @var{obj} @var{output})
- Comme @code{ungexp}, mais produit une référence à la construction
- @emph{native} de @var{obj} lorsqu'elle est utilisée dans une compilation
- croisée.
- @item #$output[:@var{output}]
- @itemx (ungexp output [@var{output}])
- Insère une référence à la sortie @var{output} de la dérivation, ou à la
- sortie principale lorsque @var{output} est omis.
- Cela ne fait du sens que pour les gexps passées à @code{gexp->derivation}.
- @item #$@@@var{lst}
- @itemx (ungexp-splicing @var{lst})
- Comme au dessus, mais recolle (@i{splice}) le contenu de @var{lst} dans la
- liste qui la contient.
- @item #+@@@var{lst}
- @itemx (ungexp-native-splicing @var{lst})
- Comme au dessus, mais se réfère à la construction native des objets listés
- dans @var{lst}.
- @end table
- Les G-expressions crées par @code{gexp} ou @code{#~} sont des objets à
- l'exécution du type @code{gexp?} (voir plus bas).
- @end deffn
- @deffn {Syntaxe Scheme} with-imported-modules @var{modules} @var{body}@dots{}
- Marque les gexps définies dans @var{body}@dots{} comme requérant
- @var{modules} dans leur environnement d'exécution.
- Chaque élément dans @var{module} peut être le nom d'un module, comme
- @code{(guix build utils)} ou le nom d'un module suivi d'une flêche, suivie
- d'un objet simili-fichier :
- @example
- `((guix build utils)
- (guix gcrypt)
- ((guix config) => ,(scheme-file "config.scm"
- #~(define-module @dots{}))))
- @end example
- @noindent
- Dans l'exemple au dessus, les deux premiers modules sont récupérés dans le
- chemin de recherche, et le dernier est créé à partir d'un objet
- simili-fichier.
- Cette forme a une portée @emph{lexicale} : elle a un effet sur les gexp
- directement définies dans @var{body}@dots{}, mais pas sur celles définies
- dans des procédures appelées par @var{body}@dots{}.
- @end deffn
- @deffn {Syntaxe Scheme} with-extensions @var{extensions} @var{body}@dots{}
- Marque les gexps définies dans @var{body}@dots{} comme requérant
- @var{extensions} dans leur environnement de construction et d'exécution.
- @var{extensions} est typiquement une liste d'objets paquets comme définis
- dans le module @code{(gnu packages guile)}.
- Concrètement, les paquets listés dans @var{extensions} sont ajoutés au
- chemin de chargement lors de la compilation des modules importés dans
- @var{body}@dots{} ; ils sont aussi ajoutés au chemin de chargement de la
- gexp renvoyée par @var{body}@dots{}.
- @end deffn
- @deffn {Procédure Scheme} gexp? @var{obj}
- Renvoie @code{#t} si @var{obj} est une G-expression.
- @end deffn
- Les G-expressions sont conçues pour être écrites sur le disque, soit en tant
- que code pour construire une dérivation, soit en tant que fichier normal
- dans le dépôt. Les procédure monadiques suivantes vous permettent de faire
- cela (@pxref{La monad du dépôt}, pour plus d'information sur les monads).
- @deffn {Procédure monadique} gexp->derivation @var{name} @var{exp} @
- [#:system (%current-system)] [#:target #f] [#:graft? #t] @
- [#:hash #f] [#:hash-algo #f] @
- [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
- [#:module-path @var{%load-path}] @
- [#:effective-version "2.2"] @
- [#:references-graphs #f] [#:allowed-references #f] @
- [#:disallowed-references #f] @ [#:leaked-env-vars #f] @
- [#:script-name (string-append @var{name} "-builder")] @
- [#:deprecation-warnings #f] @
- [#:local-build? #f] [#:substitutable? #t] @
- [#:properties '()] [#:guile-for-build #f]
- Renvoie une dérivation @var{name} qui lance @var{exp} (une gexp) avec
- @var{guile-for-build} (une dérivation) sur @var{system} ; @var{exp} est
- stocké dans un fichier appelé @var{script-name}. Lorsque @var{target} est
- vraie, elle est utilisée comme triplet de cible de compilation croisée pour
- les paquets référencés par @var{exp}.
- @var{modules} est devenu obsolète en faveur de
- @code{with-imported-modules}. Sa signification est de rendre @var{modules}
- disponibles dans le contexte d'évaluation de @var{exp} ; @var{modules} est
- une liste de noms de modules Guile qui sont cherchés dans @var{module-path}
- pour les copier dans le dépôt, les compiler et les rendre disponibles dans
- le chemin de chargement pendant l'exécution de @var{exp} — p.@: ex.@:
- @code{((guix build utils) (guix build gnu-build-system))}.
- @var{effective-version} détermine la chaîne à utiliser lors d'ajout
- d'extensions de @var{exp} (voir @code{with-extensions}) au chemin de
- recherche — p.@: ex.@: @code{"2.2"}.
- @var{graft?} détermine si les paquets référencés par @var{exp} devraient
- être greffés si possible.
- Lorsque @var{references-graphs} est vrai, il doit s'agir d'une liste de
- tuples de la forme suivante :
- @example
- (@var{file-name} @var{package})
- (@var{file-name} @var{package} @var{output})
- (@var{file-name} @var{derivation})
- (@var{file-name} @var{derivation} @var{output})
- (@var{file-name} @var{store-item})
- @end example
- La partie droite des éléments de @var{references-graphs} est automatiquement
- transformée en une entrée du processus de construction @var{exp}. Dans
- l'environnement de construction, chaque @var{file-name} contient le graphe
- des références de l'élément correspondant, dans un format texte simple.
- @var{allowed-references} doit soit être @code{#f}, soit une liste de noms de
- sorties ou de paquets. Dans ce dernier cas, la liste dénote les éléments du
- dépôt auxquels le résultat a le droit de faire référence. Toute référence à
- un autre élément du dépôt conduira à une erreur à la construction. Comme
- pour @var{disallowed-references}, qui peut lister des éléments qui ne
- doivent pas être référencés par les sorties.
- @var{deprecation-warnings} détermine s'il faut afficher les avertissement
- d'obsolescence à la compilation de modules. Il peut valoir @code{#f},
- @code{t} ou @code{'detailed}.
- Les autres arguments sont les mêmes que pour @code{derivation}
- (@pxref{Dérivations}).
- @end deffn
- @cindex objets simili-fichiers
- Les procédures @code{local-file}, @code{plain-file}, @code{computed-file},
- @code{program-file} et @code{scheme-file} ci-dessous renvoient des
- @dfn{objets simili-fichiers}. C'est-à-dire, lorsqu'ils sont unquotés dans
- une G-expression, ces objets donnent un fichier dans le dépôt. Considérez
- cette G-expression :
- @example
- #~(system* #$(file-append glibc "/sbin/nscd") "-f"
- #$(local-file "/tmp/my-nscd.conf"))
- @end example
- Ici, l'effet est « d'internaliser » @file{/tmp/my-nscd.conf} en le copiant
- dans le dépôt. Une fois étendu, par exemple via @code{gexp->derivation}, la
- G-expression se réfère à cette copie dans @file{/gnu/store} ; ainsi,
- modifier ou supprimer le fichier dans @file{/tmp} n'a aucun effet sur ce que
- fait la G-expression. @code{plain-file} peut être utilisé de la même
- manière ; elle est seulement différente par le fait que le contenu du
- fichier est passé directement par une chaîne de caractères.
- @deffn {Procédure Scheme} local-file @var{file} [@var{name}] @
- [#:recursive? #f] [#:select? (const #t)]
- Renvoie un objet représentant un fichier local @var{file} à ajouter au dépôt
- ; cet objet peut être utilisé dans une gexp. Si @var{file} est un nom de
- fichier relatif, il est récupéré à partir de la position du fichier source
- dans lequel il apparaît. @var{file} sera ajouté au dépôt sous le nom
- @var{name} — par défaut le nom de base de @var{file}.
- Lorsque @var{recursive?} est vraie, le contenu de @var{file} est ajouté
- récursivement ; si @var{file} désigne un fichier simple et que
- @var{recursive?} est vrai, son contenu est ajouté et ses bits de permissions
- sont préservés.
- Lorsque @var{recursive?} est vraie, appelle @code{(@var{select?} @var{file}
- @var{stat})} pour chaque répertoire où @var{file} est le nom de fichier
- absolu de l'entrée et @var{stat} est le résultat de @code{lstat} ; à
- l'exception des entrées pour lesquelles @var{select?} ne renvoie pas vrai.
- C'est la version déclarative de la procédure monadique @code{interned-file}
- (@pxref{La monad du dépôt, @code{interned-file}}).
- @end deffn
- @deffn {Procédure Scheme} plain-file @var{name} @var{content}
- Renvoie un objet représentant un fichier texte nommé @var{name} avec pour
- contenu @var{content} (une chaîne de caractères ou un vecteur d'octets) à
- ajouter un dépôt.
- C'est la version déclarative de @code{text-file}.
- @end deffn
- @deffn {Procédure Scheme} computed-file @var{name} @var{gexp} @
- [#:options '(#:local-build? #t)]
- Renvoie un objet représentant un élément du dépôt @var{name}, un fichier ou
- un répertoire calculé par @var{gexp}. @var{options} est une liste
- d'arguments supplémentaires à passer à @code{gexp->derivation}.
- C'est la version déclarative de @code{gexp->derivation}.
- @end deffn
- @deffn {Procédure monadique} gexp->script @var{name} @var{exp} @
- [#:guile (default-guile)] [#:module-path %load-path]
- Renvoie un script exécutable @var{name} qui lance @var{exp} avec
- @var{guile}, avec les modules importés de @var{exp} dans son chemin de
- recherche. Cherche les modules de @var{exp} dans @var{module-path}.
- L'exemple ci-dessous construit un script qui invoque simplement la commande
- @command{ls} :
- @example
- (use-modules (guix gexp) (gnu packages base))
- (gexp->script "list-files"
- #~(execl #$(file-append coreutils "/bin/ls")
- "ls"))
- @end example
- Lorsqu'elle est « lancée » à travers le dépôt (@pxref{La monad du dépôt,
- @code{run-with-store}}), on obtient une dérivation qui produit une fichier
- exécutable @file{/gnu/store/@dots{}-list-files} qui ressemble à :
- @example
- #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
- !#
- (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
- @end example
- @end deffn
- @deffn {Procédure Scheme} program-file @var{name} @var{exp} @
- [#:guile #f] [#:module-path %load-path]
- Renvoie un objet représentant un élément du dépôt @var{name} qui lance
- @var{gexp}. @var{guile} est le paquet Guile à utiliser pour exécuter le
- script. Les modules importés par @var{gexp} sont recherchés dans
- @var{module-path}.
- C'est la version déclarative de @code{gexp->script}.
- @end deffn
- @deffn {Procédure monadique} gexp->file @var{name} @var{exp} @
- [#:set-load-path? #t] [#:module-path %load-path] @
- [#:splice? #f] @
- [#:guile (default-guile)]
- Renvoie une dérivation qui construit un fichier @var{name} contenant
- @var{exp}. Lorsque @var{splice?} est vrai, @var{exp} est considéré comme
- une liste d'expressions qui seront splicée dans le fichier qui en résulte.
- Lorsque @var{set-load-path?} est vrai, émet du code dans le fichier de
- résultat pour initialiser @code{%load-path} et @code{%load-compiled-path}
- pour honorer les modules importés de @var{exp}. Les modules de @var{exp}
- sont trouvés dans @var{module-path}.
- Le fichier qui en résulte retient les références à toutes les dépendances de
- @var{exp} ou un sous-ensemble.
- @end deffn
- @deffn {Procédure Scheme} scheme-file @var{name} @var{exp} [#:splice? #f]
- Renvoie un objet représentant le fichier Scheme @var{name} qui contient
- @var{exp}.
- C'est la version déclarative de @code{gexp->file}.
- @end deffn
- @deffn {Procédure monadique} text-file* @var{name} @var{text} @dots{}
- Renvoie une valeur monadique qui construit un ficher texte contenant
- @var{text}. @var{text} peut lister, en plus de chaînes de caractères, des
- objet de n'importe quel type qui peut être utilisé dans une gexp : des
- paquets, des dérivations, des fichiers objet locaux, etc. Le fichier du
- dépôt qui en résulte en retient toutes les références.
- Cette variante devrait être préférée à @code{text-file} lorsque vous
- souhaitez créer des fichiers qui référencent le dépôt. Cela est le cas
- typiquement lorsque vous construisez un fichier de configuration qui
- contient des noms de fichiers du dépôt, comme ceci :
- @example
- (define (profile.sh)
- ;; Renvoie le nom d'un script shell dans le dépôt qui initialise
- ;; la variable d'environnement « PATH ».
- (text-file* "profile.sh"
- "export PATH=" coreutils "/bin:"
- grep "/bin:" sed "/bin\n"))
- @end example
- Dans cet exemple, le fichier @file{/gnu/store/@dots{}-profile.sh} qui en
- résulte référence @var{coreutils}, @var{grep} et @var{sed}, ce qui les
- empêche d'être glanés tant que le script est accessible.
- @end deffn
- @deffn {Procédure Scheme} mixed-text-file @var{name} @var{text} @dots{}
- Renvoie un objet représentant le fichier du dépôt @var{name} contenant
- @var{text}. @var{text} est une séquence de chaînes de caractères et de
- fichiers simili-objets, comme dans :
- @example
- (mixed-text-file "profile"
- "export PATH=" coreutils "/bin:" grep "/bin")
- @end example
- C'est la version déclarative de @code{text-file*}.
- @end deffn
- @deffn {Procédure Scheme} file-union @var{name} @var{files}
- Renvoie un @code{<computed-file>} qui construit un répertoire qui contient
- tous les fichiers de @var{files}. Chaque élément de @var{files} doit être
- une paire où le premier élément est le nom de fichier à utiliser dans le
- nouveau répertoire et le second élément est une gexp dénotant le fichier
- cible. Voici un exemple :
- @example
- (file-union "etc"
- `(("hosts" ,(plain-file "hosts"
- "127.0.0.1 localhost"))
- ("bashrc" ,(plain-file "bashrc"
- "alias ls='ls --color=auto'"))))
- @end example
- Cela crée un répertoire @code{etc} contenant ces deux fichiers.
- @end deffn
- @deffn {Procédure Scheme} directory-union @var{name} @var{things}
- Renvoie un répertoire qui est l'union de @var{things}, où @var{things} est
- une liste d'objets simili-fichiers qui dénotent des répertoires. Par exemple
- :
- @example
- (directory-union "guile+emacs" (list guile emacs))
- @end example
- crée un répertoire qui est l'union des paquets @code{guile} et @code{emacs}.
- @end deffn
- @deffn {Procédure Scheme} file-append @var{obj} @var{suffix} @dots{}
- Renvoie un objet simili-fichier qui correspond à la concaténation de
- @var{obj} et @var{suffix} où @var{obj} est un objet abaissable et chaque
- @var{suffix} est une chaîne de caractères.
- Par exemple, considérez cette gexp :
- @example
- (gexp->script "run-uname"
- #~(system* #$(file-append coreutils
- "/bin/uname")))
- @end example
- On peut obtenir le même effet avec :
- @example
- (gexp->script "run-uname"
- #~(system* (string-append #$coreutils
- "/bin/uname")))
- @end example
- Il y a une différence cependant : dans le cas @code{file-append}, le script
- qui en résulte contient le nom de fichier absolu comme une chaîne de
- caractère alors que dans le deuxième cas, le script contient une expression
- @code{(string-append @dots{})} pour construire le nom de fichier @emph{à
- l'exécution}.
- @end deffn
- Bien sûr, en plus de gexps inclues dans le code « hôte », certains modules
- contiennent des outils de construction. Pour savoir facilement qu'ils sont
- à utiliser dans la strate de construction, ces modules sont gardés dans
- l'espace de nom @code{(guix build @dots{})}.
- @cindex abaissement, des objets haut-niveau dans les gepxs
- En interne, les objets de haut-niveau sont @dfn{abaissés}, avec leur
- compilateur, soit en des dérivations, soit en des objets du dépôt. Par
- exemple, abaisser un paquet crée une dérivation, et abaisser un
- @code{plain-file} crée un élément du dépôt. Cela est effectué par la
- procédure monadique @code{lower-object}.
- @deffn {Procédure monadique} lower-object @var{obj} [@var{system}] @
- [#:target #f]
- Renvoie la dérivation ou l'élément du dépôt comme une valeur de
- @var{%store-monad} qui correspond à @var{obj} pour @var{system}, en
- compilant de manière croisée pour @var{target} si @var{target} est vrai.
- @var{obj} doit être un objet qui a un compilateur de gexp associé, comme un
- @code{<package>}.
- @end deffn
- @node Invoquer guix repl
- @section Invoquer @command{guix repl}
- @cindex REPL, read-eval-print loop
- La commande @command{guix repl} démarre un @dfn{boucle
- lecture-évaluation-affichage} Guile pour la programmation interactive
- (@pxref{Using Guile Interactively,,, guile, GNU Guile Reference Manual}).
- Comparé au lancement de la commande @command{guile}, @command{guix repl}
- garanti que tous les modules Guix et toutes ses dépendances sont disponibles
- dans le chemin de recherche. Vous pouvez l'utiliser de cette manière :
- @example
- $ guix repl
- scheme@@(guile-user)> ,use (gnu packages base)
- scheme@@(guile-user)> coreutils
- $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
- @end example
- @cindex inférieurs
- En plus, @command{guix repl} implémente un protocole REPL simple lisible par
- une machine à utiliser avec @code{(guix inferior)}, un dispositif pour
- interagir avec des @dfn{inférieurs}, des processus séparés qui font tourner
- une version potentiellement différente de Guix.
- Les options disponibles sont les suivante :
- @table @code
- @item --type=@var{type}
- @itemx -t @var{type}
- Démarrer un REPL du @var{type} donné, qui peut être l'un de ces types :
- @table @code
- @item guile
- C'est la valeur par défaut. Elle démarre un REPL Guile standard
- fonctionnel.
- @item machine
- Démarre un REPL qui utilise le protocole lisible par machine. C'est le
- protocole que parle le module @code{(guix inferior)}.
- @end table
- @item --listen=@var{extrémité}
- Par défaut, @command{guix repl} lit depuis l'entrée standard et écrit sur la
- sortie standard. Lorsque cette option est passée, il écoutera plutôt les
- connexions sur @var{endpoint}. Voici un exemple d'options valides :
- @table @code
- @item --listen=tcp:37146
- Accepte les connexions sur localhost, sur le port 31.
- @item --listen=unix:/tmp/socket
- Accepte les connexions sur le socket Unix-domain @file{/tmp/socket}.
- @end table
- @end table
- @c *********************************************************************
- @node Utilitaires
- @chapter Utilitaires
- cette section décrit les utilitaires en ligne de commande de Guix. certains
- sont surtout faits pour les développeurs qui écrivent de nouvelles
- définitions de paquets tandis que d'autres sont plus utiles pour une
- utilisation générale. Ils complètent l'interface de programmation Scheme de
- Guix d'une manière pratique.
- @menu
- * Invoquer guix build:: Construire des paquets depuis la ligne de
- commande.
- * Invoquer guix edit:: Modifier les définitions de paquets.
- * Invoquer guix download:: Télécharger un fichier et afficher son hash.
- * Invoquer guix hash:: Calculer le hash cryptographique d'un fichier.
- * Invoquer guix import:: Importer des définitions de paquets.
- * Invoquer guix refresh:: Mettre à jour les définitions de paquets.
- * Invoquer guix lint:: Trouver des erreurs dans les définitions de
- paquets.
- * Invoquer guix size:: Profiler l'utilisation du disque.
- * Invoquer guix graph:: Visualiser le graphe des paquets.
- * Invoquer guix environment:: Mettre en place des environnements de
- développement.
- * Invoquer guix publish:: Partager des substituts.
- * Invoquer guix challenge:: Défier les serveurs de substituts.
- * Invoquer guix copy:: Copier vers et depuis un dépôt distant.
- * Invoquer guix container:: Isolation de processus.
- * Invoquer guix weather:: Mesurer la disponibilité des substituts.
- * Invoquer guix processes:: Lister les processus clients.
- @end menu
- @node Invoquer guix build
- @section Invoquer @command{guix build}
- @cindex construction de paquets
- @cindex @command{guix build}
- La commande @command{guix build} construit des paquets ou des dérivations et
- leurs dépendances et affiche les chemins du dépôt qui en résulte. Remarquez
- qu'elle ne modifie pas le profil de l'utilisateur — c'est le travail de la
- commande @command{guix package} (@pxref{Invoquer guix package}). Ainsi,
- elle est surtout utile pour les développeurs de la distribution.
- La syntaxe générale est :
- @example
- guix build @var{options} @var{package-or-derivation}@dots{}
- @end example
- Par exemple, la commande suivante construit la dernière version d'Emacs et
- de Guile, affiche leur journaux de construction et enfin affiche les
- répertoires des résultats :
- @example
- guix build emacs guile
- @end example
- De même, la commande suivante construit tous les paquets disponibles :
- @example
- guix build --quiet --keep-going \
- `guix package -A | cut -f1,2 --output-delimiter=@@`
- @end example
- @var{package-or-derivation} peut être soit le nom d'un paquet trouvé dans la
- distribution logicielle comme @code{coreutils}, soit @code{coreutils@@8.20},
- soit une dérivation comme @file{/gnu/store/@dots{}-coreutils-8.19.drv}.
- Dans le premier cas, la commande cherchera un paquet avec le nom
- correspondant (et éventuellement la version) dans les modules de la
- distribution GNU (@pxref{Modules de paquets}).
- Autrement, l'option @code{--expression} peut être utilisée pour spécifier
- une expression Scheme qui s'évalue en un paquet ; c'est utile pour
- différencier des paquets avec le même nom ou des variantes de paquets.
- Il peut y avoir aucune, une ou plusieurs @var{options}. Les options
- disponibles sont décrites dans les sous-sections ci-dessous.
- @menu
- * Options de construction communes:: Options de construction pour la
- plupart des commandes.
- * Options de transformation de paquets:: Créer des variantes de paquets.
- * Options de construction supplémentaires:: Options spécifiques à «
- guix build ».
- * Débogage des échecs de construction:: La vie d'un empaqueteur.
- @end menu
- @node Options de construction communes
- @subsection Options de construction communes
- Un certain nombre d'options qui contrôlent le processus de construction sont
- communes avec @command{guix build} et les autres commandes qui peuvent
- générer des constructions, comme @command{guix package} ou @command{guix
- archive}. Voici ces options :
- @table @code
- @item --load-path=@var{répertoire}
- @itemx -L @var{répertoire}
- Ajoute @var{répertoire} au début du chemin de recherche de module de paquets
- (@pxref{Modules de paquets}).
- Cela permet à des utilisateurs de définir leur propres paquets et les rendre
- disponibles aux outils en ligne de commande.
- @item --keep-failed
- @itemx -K
- Garde l'arborescence de construction des constructions en échec. Ainsi, si
- une construction échoue, son arborescence de construction est préservée dans
- @file{/tmp}, dans un répertoire dont le nom est affiché à la fin du journal
- de construction. Cela est utile pour déboguer des échecs de construction.
- @xref{Débogage des échecs de construction}, pour des astuces sur la manière de déboguer
- des problèmes de construction.
- Cette option n'a pas d'effet lors de la connexion à un démon distant avec
- l'URI @code{guix://} (@pxref{Le dépôt, la variable
- @code{GUIX_DAEMON_SOCKET}}).
- @item --keep-going
- @itemx -k
- Continue lorsque certaines dérivations échouent ; ne s'arrête que lorsque
- toutes les constructions ont soit réussies, soit échouées.
- Le comportement par défaut est de s'arrêter dès qu'une des dérivations
- spécifiées échoue.
- @item --dry-run
- @itemx -n
- Ne pas construire les dérivations.
- @anchor{option de repli}
- @item --fallback
- Lorsque la substitution d'un binaire pré-compilé échoue, construit les
- paquets localement à la place (@pxref{Échec de substitution}).
- @item --substitute-urls=@var{urls}
- @anchor{client-substitute-urls}
- Considère @var{urls} comme une liste d'URL de sources de substituts séparés
- par des espaces, et remplace la liste par défaut d'URL de
- @command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon}
- URLs}).
- Cela signifie que les substituts peuvent être téléchargés depuis @var{urls},
- tant qu'ils sont signés par une clef autorisée par l'administrateur système
- (@pxref{Substituts}).
- Lorsque @var{urls} est la chaîne vide, cela a pour effet de désactiver la
- substitution.
- @item --no-substitutes
- Ne pas utiliser de substitut pour les résultats de la construction.
- C'est-à-dire, toujours construire localement plutôt que de permettre le
- téléchargement de binaires pré-construits (@pxref{Substituts}).
- @item --no-grafts
- Ne par « greffer » les paquets. En pratique, cela signifie que les mises à
- jour des paquets disponibles comme des greffes ne sont pas appliquées.
- @xref{Mises à jour de sécurité}, pour plus d'information sur les greffes.
- @item --rounds=@var{n}
- Construit chaque dérivation @var{n} fois d'affilé, et renvoie une erreur si
- les constructions consécutives ne sont pas identiques bit-à-bit.
- Cela est une manière utile pour détecter des processus de construction non
- déterministes. Les processus de construction non déterministes sont
- problématiques car ils rendent pratiquement impossible la
- @emph{vérification} par les utilisateurs de l'authenticité de binaires
- tiers. @xref{Invoquer guix challenge}, pour plus d'informations.
- Remarquez que, les résultats qui diffèrent ne sont pas gardés, donc vous
- devrez inspecter manuellement chaque erreur — p.@: ex.@: en gardant l'un des
- résultats avec @code{guix archive --export} (@pxref{Invoquer guix archive}),
- puis en reconstruisant, et enfin en comparant les deux résultats.
- @item --no-build-hook
- N'essaye pas de décharger les constructions via le « crochet de construction
- » du démon (@pxref{Réglages du délestage du démon}). C'est-à-dire que tout sera
- construit localement plutôt que de décharger les constructions à une machine
- distante.
- @item --max-silent-time=@var{secondes}
- Lorsque le processus de construction ou de substitution restent silencieux
- pendant plus de @var{secondes}, le terminer et rapporter une erreur de
- construction.
- Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--max-silent-time}}).
- @item --timeout=@var{secondes}
- De même, lorsque le processus de construction ou de substitution dure plus
- de @var{secondes}, le terminer et rapporter une erreur de construction.
- Par défaut, les paramètres du démon sont pris en compte (@pxref{Invoquer guix-daemon, @code{--timeout}}).
- @item --verbosity=@var{level}
- Utilise le niveau de verbosité donné. @var{level} doit être un entier entre
- 0 et 5 ; les entiers les plus hauts signifient une sortie plus verbeuse. Le
- mettre à 4 ou plus peut être utile pour déboguer des problèmes de
- configuration du démon de construction.
- @item --cores=@var{n}
- @itemx -c @var{n}
- Permet d'utiliser jusqu'à @var{n} cœurs du CPU pour la construction. La
- valeur spéciale @code{0} signifie autant de cœurs que possible.
- @item --max-jobs=@var{n}
- @itemx -M @var{n}
- 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
- l'option équivalente pour @command{guix-daemon}.
- @end table
- Sous le capot, @command{guix build} est surtout un interface à la procédure
- @code{package-derivation} du module @code{(guix packages)}, et à la
- procédure @code{build-derivations} du module @code{(guix derivations)}.
- En plus des options passées explicitement par la ligne de commande,
- @command{guix build} et les autres commande @command{guix} qui peuvent
- effectuer des construction honorent la variable d'environnement
- @code{GUIX_BUILD_OPTIONS}.
- @defvr {Variable d'environnement} GUIX_BUILD_OPTIONS
- Les utilisateurs peuvent définir cette variable à une liste d'options de la
- ligne de commande qui seront automatiquement utilisées par @command{guix
- build} et les autres commandes @command{guix} qui peuvent effectuer des
- constructions, comme dans l'exemple suivant :
- @example
- $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
- @end example
- Ces options sont analysées indépendamment, et le résultat est ajouté aux
- options de la ligne de commande analysées.
- @end defvr
- @node Options de transformation de paquets
- @subsection Options de transformation de paquets
- @cindex variantes de paquets
- Un autre ensemble d'options de la ligne de commande supportés par
- @command{guix build} et aussi @command{guix package} sont les @dfn{options
- de transformation de paquets}. Ce sont des options qui rendent possible la
- définition de @dfn{variantes de paquets} — par exemple, des paquets
- construit à partir de sources différentes. C'est une manière simple de
- créer des paquets personnalisés à la volée sans avoir à taper les
- définitions de variantes de paquets (@pxref{Définition des paquets}).
- @table @code
- @item --with-source=@var{source}
- @itemx --with-source=@var{paquet}=@var{source}
- @itemx --with-source=@var{paquet}@@@var{version}=@var{source}
- Utiles @var{source} comme la source de @var{paquet}, et @var{version} comme
- son numéro de version. @var{source} doit être un nom de fichier ou une URL,
- comme pour @command{guix download} (@pxref{Invoquer guix download}).
- Lorsque @var{paquet} est omis, la commande utilisera le nom de paquet
- spécifié par la base de @var{source} — p.@: ex.@: si @var{source} est
- @code{/src/guix-2.0.10.tar.gz}, le paquet correspondant est @code{guile}.
- De même, lorsque @var{version} est omis, la chaîne de version est inférée à
- partir de @var{source} ; dans l'exemple précédent, il s'agit de
- @code{2.0.10}.
- Cette option permet aux utilisateurs d'essayer des version des paquets
- différentes de celles fournies par la distribution. L'exemple ci-dessous
- télécharge @file{ed-1.7.tar.g} depuis un mirroir GNU et l'utilise comme
- source pour le paquet @code{ed} :
- @example
- guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
- @end example
- En tant que développeur, @code{--with-source} permet de tester facilement
- des version bêta :
- @example
- guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
- @end example
- @dots{} ou pour construire un dépôt de gestion de version dans un
- environnement vierge :
- @example
- $ git clone git://git.sv.gnu.org/guix.git
- $ guix build guix --with-source=guix@@1.0=./guix
- @end example
- @item --with-input=@var{paquet}=@var{remplaçant}
- Remplace la dépendance sur @var{paquet} par une dépendance à
- @var{remplaçant}. @var{paquet} doit être un nom de paquet et
- @var{remplaçant} doit être une spécification de paquet comme @code{guile} ou
- @code{guile@@1.8}.
- Par exemple, la commande suivante construit Guix, mais remplace sa
- dépendance à la version stable actuelle de Guile par une dépendance à une
- ancienne version de Guile, @code{guile@@2.0} :
- @example
- guix build --with-input=guile=guile@@2.0 guix
- @end example
- C'est un remplacement récursif profond. Donc dans cet exemple, à la fois
- @code{guix} et ses dépendances @code{guile-json} (qui dépend aussi de
- @code{guile}) sont reconstruits avec @code{guile@@2.0}.
- Cette option est implémentée avec la procédure Scheme
- @code{package-input-rewriting} (@pxref{Définition des paquets,
- @code{package-input-rewriting}}).
- @item --with-graft=@var{paquet}=@var{remplaçant}
- Cette option est similaire à @code{--with-input} mais avec une différence
- importante : plutôt que de reconstruire la chaîne de dépendance complète,
- @var{remplaçant} est construit puis @dfn{greffé} sur les binaires qui
- référençaient initialement @var{paquet}. @xref{Mises à jour de sécurité}, pour plus
- d'information sur les greffes.
- Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur
- Wget et toutes ses dépendances, en remplaçant les références à la version
- actuelle de GnuTLS à laquelle ils se réfèrent actuellement :
- @example
- guix build --with-graft=gnutls=gnutls@@3.5.4 wget
- @end example
- Cela a l'avantage d'être bien plus rapide que de tout reconstruire. Mais il
- y a un piège : cela ne fonctionne que si @var{paquet} et @var{remplaçant}
- sont strictement compatibles — par exemple, s'ils fournissent une
- bibliothèque, l'interface binaire applicative (ABI) de ces bibliothèques
- doivent être compatibles. Si @var{remplaçant} est incompatible avec
- @var{paquet}, alors le paquet qui en résulte peut devenir inutilisable. À
- utilisez avec précaution !
- @item --with-branch=@var{package}=@var{branch}
- @cindex Git, using the latest commit
- @cindex latest commit, building
- Build @var{package} from the latest commit of @var{branch}. The
- @code{source} field of @var{package} must be an origin with the
- @code{git-fetch} method (@pxref{Référence d'origine}) or a @code{git-checkout}
- object; the repository URL is taken from that @code{source}.
- For instance, the following command builds @code{guile-sqlite3} from the
- latest commit of its @code{master} branch, and then builds @code{guix}
- (which depends on it) and @code{cuirass} (which depends on @code{guix})
- against this specific @code{guile-sqlite3} build:
- @example
- guix build --with-branch=guile-sqlite3=master cuirass
- @end example
- @cindex intégration continue
- Obviously, since it uses the latest commit of the given branch, the result
- of such a command varies over time. Nevertheless it is a convenient way to
- rebuild entire software stacks against the latest commit of one or more
- packages. This is particularly useful in the context of continuous
- integration (CI).
- Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed
- up consecutive accesses to the same repository. You may want to clean it up
- once in a while to save disk space.
- @item --with-commit=@var{package}=@var{commit}
- This is similar to @code{--with-branch}, except that it builds from
- @var{commit} rather than the tip of a branch. @var{commit} must be a valid
- Git commit SHA1 identifier.
- @end table
- @node Options de construction supplémentaires
- @subsection Options de construction supplémentaires
- Les options de la ligne de commande ci-dessous sont spécifiques à
- @command{guix build}.
- @table @code
- @item --quiet
- @itemx -q
- Construire en silence, sans afficher les journaux de construction. À la
- fin, le journal de construction est gardé dans @file{/var} (ou similaire) et
- on peut toujours l'y trouver avec l'option @option{--log-file}.
- @item --file=@var{fichier}
- @itemx -f @var{fichier}
- Construit le paquet, la dérivation ou l'objet simili-fichier en lequel le
- code dans @var{file} s'évalue (@pxref{G-Expressions, file-like objects}).
- Par exemple, @var{file} peut contenir une définition de paquet comme ceci
- (@pxref{Définition des paquets}) :
- @example
- @verbatiminclude package-hello.scm
- @end example
- @item --expression=@var{expr}
- @itemx -e @var{expr}
- Construit le paquet ou la dérivation en lequel @var{expr} s'évalue.
- Par exemple, @var{expr} peut être @code{(@@ (gnu packages guile)
- guile-1.8)}, qui désigne sans ambiguïté cette variante spécifique de la
- version 1.8 de Guile.
- Autrement, @var{exp} peut être une G-expression, auquel cas elle est
- utilisée comme un programme de construction passé à @code{gexp->derivation}
- (@pxref{G-Expressions}).
- Enfin, @var{expr} peut se référer à une procédure monadique à au moins un
- argument (@pxref{La monad du dépôt}). La procédure doit renvoyer une
- dérivation comme une valeur monadique, qui est ensuite lancée à travers
- @code{run-with-store}.
- @item --source
- @itemx -S
- Construit les dérivation source des paquets, plutôt que des paquets
- eux-même.
- Par exemple, @code{guix build -S gcc} renvoie quelque chose comme
- @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, qui est l'archive des sources
- de GCC.
- L'archive des sources renvoyée est le résultat de l'application des
- correctifs et des extraits de code éventuels spécifiés dans le champ
- @code{origin} du paquet (@pxref{Définition des paquets}).
- @item --sources
- Récupère et renvoie la source de @var{package-or-derivation} et toute ses
- dépendances, récursivement. C'est pratique pour obtenir une copie locale de
- tous les codes sources requis pour construire @var{packages}, ce qui vous
- permet de les construire plus tard même sans accès réseau. C'est une
- extension de l'option @code{--source} et peut accepter l'un des arguments
- facultatifs suivants :
- @table @code
- @item package
- Cette valeur fait que l'option @code{--sources} se comporte comme l'option
- @code{--source}.
- @item all
- Construit les dérivations des sources de tous les paquets, dont les sources
- qui pourraient être listées dans @code{inputs}. C'est la valeur par défaut.
- @example
- $ guix build --sources tzdata
- The following derivations will be built:
- /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
- /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
- @end example
- @item transitive
- Build the source derivations of all packages, as well of all transitive
- inputs to the packages. This can be used e.g.@: to prefetch package source
- for later offline building.
- @example
- $ guix build --sources=transitive tzdata
- The following derivations will be built:
- /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
- /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
- /gnu/store/@dots{}-grep-2.21.tar.xz.drv
- /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
- /gnu/store/@dots{}-make-4.1.tar.xz.drv
- /gnu/store/@dots{}-bash-4.3.tar.xz.drv
- @dots{}
- @end example
- @end table
- @item --system=@var{système}
- @itemx -s @var{système}
- Tenter de construire pour le @var{système} — p.@: ex.@: @code{i686-linux} —
- plutôt que pour le type de système de l'hôte de construction.
- @quotation Remarque
- Le drapeau @code{--system} est utilisé pour une compilation @emph{native} et
- ne doit pas être confondu avec une compilation croisée. Voir
- @code{--target} ci-dessous pour des informations sur la compilation croisée.
- @end quotation
- Par exemple, passer @code{--system=i686-linux} sur un système
- @code{x86_64-linux} ou @code{--system=armhf-linux} sur un système
- @code{aarch64-linux} vous permet de construire des paquets dans un
- environnement entièrement 32-bits. C'est une exemple d'utilisation de cette
- option sur les systèmes Linux, qui peuvent émuler plusieurs personnalités.
- @quotation Remarque
- La possibilité de construire pour un système @code{armhf-linux} est activé
- sans condition sur les machines @code{aarch64-linux}, bien que certaines
- puces aarch64 n'en soient pas capables, comme les ThunderX.
- @end quotation
- De même, lorsque l'émulation transparente avec QEMU et @code{binfnmt_misc}
- est activée (@pxref{Services de virtualisation,
- @code{qemu-binfmt-service-type}}), vous pouvez construire pour n'importe
- quel système pour lequel un gestionnaire QEMU @code{binfmt_misc} est
- installé.
- Les constructions pour un autre système que celui de la machine que vous
- utilisez peuvent aussi être déchargées à une machine distante de la bonne
- architecture. @xref{Réglages du délestage du démon}, pour plus d'information sur le
- déchargement.
- @item --target=@var{triplet}
- @cindex compilation croisée
- Effectuer une compilation croisée pour @var{triplet} qui doit être un
- triplet GNU valide, comme @code{"mips64el-linux-gnu"} (@pxref{Specifying
- target triplets, GNU configuration triplets,, autoconf, Autoconf}).
- @anchor{vérification de la construction}
- @item --check
- @cindex déterminisme, vérification
- @cindex reproductibilité, vérification
- Reconstruit les @var{package-or-derivation}, qui sont déjà disponibles dans
- le dépôt et lève une erreur si les résultats des constructions ne sont pas
- identiques bit-à-bit.
- Ce mécanisme vous permet de vérifier si les substituts précédemment
- installés sont authentiques (@pxref{Substituts}) ou si le résultat de la
- construction d'un paquet est déterministe. @xref{Invoquer guix challenge}
- pour plus d'informations et pour les outils.
- Lorsqu'utilisé avec @option{--keep-failed}, la sourtie différente est gardée
- dans le dépôt sous @file{/gnu/store/@dots{}-check}. Cela rend plus facile
- l'étude des différences entre les deux résultats.
- @item --repair
- @cindex réparer les éléments du dépôt
- @cindex corruption, récupérer de
- Essaye de réparer les éléments du dépôt spécifiés, s'ils sont corrompus, en
- les téléchargeant ou en les construisant à nouveau.
- Cette opération n'est pas atomique et donc restreinte à l'utilisateur
- @code{root}
- @item --derivations
- @itemx -d
- Renvoie les chemins de dérivation, et non les chemins de sortie, des paquets
- donnés.
- @item --root=@var{fichier}
- @itemx -r @var{fichier}
- @cindex racines du GC, ajout
- @cindex ajout de racines au ramasse-miettes
- Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
- en tant que racine du ramasse-miettes.
- En conséquence, les résultats de cette invocation de @command{guix build}
- sont protégés du ramasse-miettes jusqu'à ce que @var{fichier} soit
- supprimé. Lorsque cette option est omise, les constructions sont
- susceptibles d'être glanées.
- @item --log-file
- @cindex journaux de construction, accès
- Renvoie les noms des journaux de construction ou les URL des
- @var{package-or-derivation} donnés ou lève une erreur si les journaux de
- construction sont absents.
- Cela fonctionne indépendamment de la manière dont les paquets ou les
- dérivations sont spécifiées. Par exemple, les invocations suivantes sont
- équivalentes :
- @example
- guix build --log-file `guix build -d guile`
- guix build --log-file `guix build guile`
- guix build --log-file guile
- guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
- @end example
- Si un journal n'est pas disponible localement, à moins que
- @code{--no-substitutes} ne soit passé, la commande cherche un journal
- correspondant sur l'un des serveurs de substituts (tels que spécifiés avec
- @code{--substitute-urls}.)
- Donc par exemple, imaginons que vous souhaitiez voir le journal de
- construction de GDB sur MIPS, mais que vous n'avez qu'une machine
- @code{x86_64} :
- @example
- $ guix build --log-file gdb -s mips64el-linux
- https://hydra.gnu.org/log/@dots{}-gdb-7.10
- @end example
- Vous pouvez accéder librement à un vaste bibliothèque de journaux de
- construction !
- @end table
- @node Débogage des échecs de construction
- @subsection Débogage des échecs de construction
- @cindex échecs de construction, débogage
- Lors de la définition d'un nouveau paquet (@pxref{Définition des paquets}), vous
- passerez probablement du temps à déboguer et modifier la construction
- jusqu'à ce que ça marche. Pour cela, vous devez effectuer les commandes de
- construction vous-même dans un environnement le plus proche possible de
- celui qu'utilise le démon de construction.
- Pour cela, la première chose à faire est d'utiliser l'option
- @option{--keep-failed} ou @option{-K} de @command{guix build}, qui gardera
- l'arborescence de construction dans @file{/tmp} ou le répertoire spécifié
- par @code{TMPDIR} (@pxref{Invoquer guix build, @code{--keep-failed}}).
- À partir de là, vous pouvez vous déplacer dans l'arborescence de
- construction et sourcer le fichier @file{environment-variables}, qui
- contient toutes les variables d'environnement qui étaient définies lorsque
- la construction a échoué. Disons que vous déboguez un échec de construction
- dans le paquet @code{foo} ; une session typique ressemblerait à cela :
- @example
- $ guix build foo -K
- @dots{} @i{build fails}
- $ cd /tmp/guix-build-foo.drv-0
- $ source ./environment-variables
- $ cd foo-1.2
- @end example
- Maintenant, vous pouvez invoquer les commandes comme si vous étiez le démon
- (presque) et corriger le processus de construction.
- Parfois il arrive que, par exemple, les tests d'un paquet réussissent
- lorsque vous les lancez manuellement mais échouent quand ils sont lancés par
- le démon. Cela peut arriver parce que le démon tourne dans un conteneur où,
- contrairement à notre environnement au-dessus, l'accès réseau est
- indisponible, @file{/bin/sh} n'existe pas, etc (@pxref{Réglages de l'environnement de construction}).
- Dans ce cas, vous pourriez avoir besoin de lancer le processus de
- construction dans un conteneur similaire à celui que le démon crée :
- @example
- $ guix build -K foo
- @dots{}
- $ cd /tmp/guix-build-foo.drv-0
- $ guix environment --no-grafts -C foo --ad-hoc strace gdb
- [env]# source ./environment-variables
- [env]# cd foo-1.2
- @end example
- Ici, @command{guix environment -C} crée un conteneur et démarre un nouveau
- shell dedans (@pxref{Invoquer guix environment}). La partie
- @command{--ad-hoc strace gdb} ajoute les commandes @command{strace} et
- @command{gdb} dans le conteneur, ce qui pourrait s'avérer utile pour le
- débogage. L'option @option{--no-grafts} s'assure qu'on obtient le même
- environnement, avec des paquets non greffés (@pxref{Mises à jour de sécurité}, pour
- plus d'informations sur les greffes).
- Pour obtenir un conteneur plus proche de ce qui serait utilisé par le démon
- de construction, on peut enlever @file{/bin/sh} :
- @example
- [env]# rm /bin/sh
- @end example
- Ne vous inquiétez pas, c'est sans danger : tout cela se passe dans un
- conteneur jetable créé par @command{guix environment}.
- La commande @command{strace} n'est probablement pas dans le chemin de
- recherche, mais on peut lancer :
- @example
- [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
- @end example
- De cette manière, non seulement vous aurez reproduit les variables
- d'environnement utilisées par le démon, mais vous lancerez aussi le
- processus de construction dans un conteneur similaire à celui utilisé par le
- démon.
- @node Invoquer guix edit
- @section Invoquer @command{guix edit}
- @cindex @command{guix edit}
- @cindex définition de paquets, modification
- Tant de paquets, tant de fichiers source ! La commande @command{guix edit}
- facilite la vie des utilisateurs et des packagers en plaçant leur éditeur
- sur le fichier source qui contient la définition des paquets spécifiés. Par
- exemple :
- @example
- guix edit gcc@@4.9 vim
- @end example
- @noindent
- lance le programme spécifié dans la variable d'environnement @code{VISUAL}
- ou @code{EDITOR} pour visionner la recette de GCC@tie{}4.9.3 et cele de Vim.
- Si vous utilisez une copie du dépôt Git de Guix (@pxref{Construire depuis Git}),
- ou que vous avez créé vos propres paquets dans @code{GUIX_PACKAGE_PATH}
- (@pxref{Modules de paquets}), vous pourrez modifier les recettes des paquets.
- Sinon, vous pourrez examiner les recettes en lecture-seule des paquets
- actuellement dans le dépôt.
- @node Invoquer guix download
- @section Invoquer @command{guix download}
- @cindex @command{guix download}
- @cindex télécharger les sources des paquets
- En écrivant des définitions de paquets, les développeurs ont généralement
- besoin de télécharger une archive des sources, calculer son hash SHA256 et
- écrire ce hash dans la définition du paquet (@pxref{Définition des paquets}).
- L'outil @command{guix download} aide à cette tâche : il télécharge un
- fichier à l'URL donné, l'ajoute au dépôt et affiche à la fois son nom dans
- le dépôt et son hash SHA56.
- Le fait que le fichier téléchargé soit ajouté au dépôt préserve la bande
- passante : losque les développeurs finissent par construire le paquet
- nouvellement défini avec @command{guix build}, l'archive des sources n'aura
- pas besoin d'être téléchargée de nouveau puisqu'elle se trouvera déjà dans
- le dépôt. C'est aussi une manière pratique de garder des fichiers
- temporairement, qui pourront ensuite être supprimés (@pxref{Invoquer guix gc}).
- La commande @command{guix download} supporte les mêmes URI que celles
- utilisées dans les définitions de paquets. En particulier, elle supporte
- les URI @code {mirror://}. Les URI @code{http} (HTTP sur TLS) sont
- supportées @emph{si} les liaisons Guile de GnuTLS sont disponibles dans
- l'environnement de l'utilisateur ; si elle ne sont pas disponibles, une
- erreur est renvoyée. @xref{Guile Preparations, how to install the GnuTLS
- bindings for Guile,, gnutls-guile, GnuTLS-Guile}, pour plus d'informations.
- @command{guix download} vérifie les certificats du serveur HTTPS en
- chargeant les autorités de certification X.509 depuis le répertoire vers
- lequel pointe la variable d'environnement @code{SSL_CERT_DIR} (@pxref{Certificats X.509}), à moins que @option{--no-check-certificate} ne soit utilisé.
- Les options suivantes sont disponibles :
- @table @code
- @item --format=@var{fmt}
- @itemx -f @var{fmt}
- Écrit le hash dans le format spécifié par @var{fmt}. Pour plus
- d'informations sur les valeurs valides pour @var{fmt}, @pxref{Invoquer guix hash}.
- @item --no-check-certificate
- Ne pas valider les certificats HTTPS des serveurs.
- Lorsque vous utilisez cette option, vous n'avez @emph{absolument aucune
- garanti} que vous communiquez avec le serveur authentique responsable de
- l'URL donnée, ce qui vous rend vulnérable à des attaques de « l'homme du
- milieu ».
- @item --output=@var{fichier}
- @itemx -o @var{fichier}
- Enregistre le fichier téléchargé dans @var{fichier} plutôt que de l'ajouter
- au dépôt.
- @end table
- @node Invoquer guix hash
- @section Invoquer @command{guix hash}
- @cindex @command{guix hash}
- La commande @command{guix hash} calcul le hash SHA256 d'un fichier. C'est
- surtout un outil pour simplifier la vie des contributeurs de la distribution
- : il calcul le hash cryptographique d'un fichier, qui peut être utilisé dans
- la définition d'un paquet (@pxref{Définition des paquets}).
- La syntaxe générale est :
- @example
- guix hash @var{option} @var{fichier}
- @end example
- Lorsque @var{fichier} est @code{-} (un tiret), @command{guix hash} calcul le
- hash des données lues depuis l'entrée standard. @command{guix hash} a les
- options suivantes :
- @table @code
- @item --format=@var{fmt}
- @itemx -f @var{fmt}
- Écrit le hash dans le format spécifié par @var{fmt}.
- Les formats supportés sont : @code{nix-base32}, @code{base32}, @code{base16}
- (@code{hex} et @code{hexadecimal} peuvent aussi être utilisés).
- Si l'option @option {--format} n'est pas spécifiée, @command{guix hash}
- affichera le hash en @code{nix-base32}. Cette représentation est utilisée
- dans les définitions des paquets.
- @item --recursive
- @itemx -r
- Calcule le hash sur @var{fichier} récursivement.
- @c FIXME: Replace xref above with xref to an ``Archive'' section when
- @c it exists.
- Dans ce cas, le hash est calculé sur une archive contenant @var{fichier},
- dont ses enfants si c'est un répertoire. Certaines métadonnées de
- @var{fichier} fait partie de l'archive ; par exemple lorsque @var{fichier}
- est un fichier normal, le hash est différent que le @var{fichier} soit
- exécutable ou non. Les métadonnées comme un horodatage n'ont aucun impact
- sur le hash (@pxref{Invoquer guix archive}).
- @item --exclude-vcs
- @itemx -x
- Lorsqu'elle est combinée à @option{--recursive}, exclut les répertoires de
- système de contrôle de version (@file{.bzr}, @file{.git}, @file{.hg}, etc).
- @vindex git-fetch
- Par exemple, voici comment calculer le hash d'un dépôt Git, ce qui est utile
- avec la méthode @code{git-fetch} (@pxref{Référence d'origine}) :
- @example
- $ git clone http://example.org/foo.git
- $ cd foo
- $ guix hash -rx .
- @end example
- @end table
- @node Invoquer guix import
- @section Invoquer @command{guix import}
- @cindex importer des paquets
- @cindex paquets importés
- @cindex conversion de paquets
- @cindex Invoquer @command{guix import}
- La commande @command{guix import} est utile pour les gens qui voudraient
- ajouter un paquet à la distribution avec aussi peu de travail que possible —
- une demande légitime. La commande connaît quelques dépôts logiciels d'où
- elle peut « importer » des métadonnées de paquets. Le résultat est une
- définition de paquet, ou un modèle de définition, dans le format reconnu par
- Guix (@pxref{Définition des paquets}).
- La syntaxe générale est :
- @example
- guix import @var{importer} @var{options}@dots{}
- @end example
- @var{importer} spécifie la source depuis laquelle importer des métadonnées
- de paquets, et @var{options} spécifie un identifiant de paquet et d'autres
- options spécifiques à @var{importer}. Actuellement les « importateurs »
- disponibles sont :
- @table @code
- @item gnu
- Importe des métadonnées d'un paquet GNU donné. Cela fournit un modèle pour
- la dernière version de ce paquet GNU, avec le hash de son archive, le
- synopsis et la description canonique.
- Les informations supplémentaires comme les dépendances du paquet et sa
- licence doivent être renseignées manuellement.
- Par exemple, la commande suivante renvoie une définition de paquets pour
- GNU@tie{}Hello :
- @example
- guix import gnu hello
- @end example
- Les options spécifiques sont :
- @table @code
- @item --key-download=@var{politique}
- Comme pour @code{guix refresh}, spécifie la politique de gestion des clefs
- OpenPGP manquantes lors de la vérification de la signature d'un paquet.
- @xref{Invoquer guix refresh, @code{--key-download}}.
- @end table
- @item pypi
- @cindex pypi
- Importe des métadonnées depuis @uref{https://pypi.python.org/, l'index des
- paquets Python}@footnote{Cette fonctionnalité requiert l'installation de
- Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées à
- partir de la description en JSON disponible sur @code{pypi.python.org} et
- inclus généralement toutes les informations utiles, dont les dépendances des
- paquets. Pour une efficacité maximale, il est recommandé d'installer
- l'utilitaire @command{unzip}, pour que l'importateur puisse dézipper les
- wheels Python et récupérer les informations contenues à l'intérieur.
- La commande ci-dessous importe les métadonnées du paquet Python
- @code{itsdangerous} :
- @example
- guix import pypi itsdangerous
- @end example
- @table @code
- @item --recursive
- @itemx -r
- Traverse le graphe des dépendances du paquet amont donné et génère les
- expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
- @end table
- @item gem
- @cindex gem
- Importe des métadonnées de @uref{https://rubygems.org/,
- RubyGems}@footnote{Cette fonctionnalité requiert l'installation de
- Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
- format JSON disponible sur @code{rubygems.org} et inclut les informations
- les plus utiles, comme les dépendances à l'exécution. Il y a des pièges
- cependant. Les métadonnées ne distinguent pas synopsis et description, donc
- la même chaîne est utilisée pour les deux champs. En plus, les détails des
- dépendances non Ruby requises pour construire des extensions natives sont
- indisponibles et laissé en exercice au packager.
- La commande ci-dessous importe les métadonnées pour le paquet Ruby
- @code{rails} :
- @example
- guix import gem rails
- @end example
- @table @code
- @item --recursive
- @itemx -r
- Traverse le graphe des dépendances du paquet amont donné et génère les
- expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
- @end table
- @item cpan
- @cindex CPAN
- Importe des métadonnées de @uref{https://www.metacpan.org/,
- MetaCPAN}@footnote{Cette fonctionnalité requiert l'installation de
- Guile-JSON. @xref{Prérequis}.}. Les informations sont récupérées au
- format JSON disponible à travers @uref{https://fastapi.metacpan.org/, l'API
- de MetaCPAN} et inclus les informations les plus utiles, comme les
- dépendances des modules. L'information sur les licences doit être vérifiée
- avec attention. Si Perl est disponible dans le dépôt, alors l'utilitaire
- @code{corelist} sera utiliser pour exclure les modules du cœur de la
- distribution Perl de la liste des dépendances.
- La commande ci-dessous importe les métadonnées du module Perl
- @code{Acme::Boolean} :
- @example
- guix import cpan Acme::Boolean
- @end example
- @item cran
- @cindex CRAN
- @cindex Bioconductor
- Importe des métadonnées de @uref{https://cran.r-project.org/, CRAN}, le
- dépôt central de @uref{http://r-project.org, l'environnement statistique et
- graphique GUN@tie{}R}.
- Les informations sont extraites du fichier @file{DESCRIPTION} du paquet.
- La commande ci-dessous importe les métadonnées du paquet R @code{Cairo} :
- @example
- guix import cran Cairo
- @end example
- Lorsque l'option @code{--recursive} est utilisée, l'importateur traversera
- le graphe des dépendances du paquet amont récursivement et générera des
- expressions de paquets pour tous ceux qui ne sont pas déjà dans Guix.
- Lorsque l'option @code{--archive=bioconductor} est utilisée, les métadonnées
- sont importées de @uref{https://www.bioconductor.org/, Bioconductor}, un
- répertoire de paquets R pour l'analyse et la compréhension de données
- génomiques volumineuses en bioinformatique.
- Les informations sont extraites du fichier @file{DESCRIPTION} d'un paquet
- publié sur l'interface web du dépôt SVN de Bioconductor.
- La commande ci-dessous importe les métadonnées du paquet R
- @code{GenomicRanges} :
- @example
- guix import cran --archive=bioconductor GenomicRanges
- @end example
- @item texlive
- @cindex TeX Live
- @cindex CTAN
- Importe les métadonnées de @uref{http://www.ctan.org/, CTAN}, l'archive TeX
- réseau complète pour les paquets TeX qui font partie de la
- @uref{https://www.tug.org/texlive/, distribution TeX Live}.
- Les informations sur les paquets sont obtenues à travers l'API XML fournie
- par CTAN, tandis que le code source est téléchargé depuis le dépôt SVN du
- projet Tex Live. Cette méthode est utilisée parce que CTAN ne garde pas
- d'archives versionnées.
- La commande ci-dessous importe les métadonnées du paquet TeX @code{fontspec}
- :
- @example
- guix import texlive fontspec
- @end example
- Lorsque l'option @code{--archive=DIRECTORY} est utilisée, le code source
- n'est pas téléchargé depuis le sous-répertoire @file{latex} du
- l'arborescence @file{texmf-dist/source} dans le dépôt SVN de TeX Live, mais
- depuis le répertoire voisin spécifié sous la même racine.
- La commande ci-dessous importe les métadonnées du paquet @code{ifxetex}
- depuis CTAN en récupérant les sources depuis le répertoire
- @file{texmf/source/generic} :
- @example
- guix import texlive --archive=generic ifxetex
- @end example
- @item json
- @cindex JSON, import
- Importe des métadonnées d'un fichier JSON local@footnote{Cette
- fonctionnalité requiert l'installation de Guile-JSON.
- @xref{Prérequis}.}. Considérez l'exemple suivant d'une définition de
- paquet au format JSON :
- @example
- @{
- "name": "hello",
- "version": "2.10",
- "source": "mirror://gnu/hello/hello-2.10.tar.gz",
- "build-system": "gnu",
- "home-page": "https://www.gnu.org/software/hello/",
- "synopsis": "Hello, GNU world: An example GNU package",
- "description": "GNU Hello prints a greeting.",
- "license": "GPL-3.0+",
- "native-inputs": ["gcc@@6"]
- @}
- @end example
- Les noms des champs sont les mêmes que pour les enregistrements de
- @code{<package>} (@xref{Définition des paquets}). Les référence à d'autres
- paquets sont fournies comme des listes JSON de chaînes de spécifications de
- paquets comme @code{guile} ou @code{guile@@2.0}.
- L'importateur supporte aussi une définition plus explicite des sources avec
- les champs habituels pour les enregistrements @code{<origin>} :
- @example
- @{
- @dots{}
- "source": @{
- "method": "url-fetch",
- "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
- "sha256": @{
- "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
- @}
- @}
- @dots{}
- @}
- @end example
- La commande ci-dessous lit les métadonnées du fichier JSON @code{hello.json}
- et renvoie une expression de paquet :
- @example
- guix import json hello.json
- @end example
- @item nix
- Importe les métadonnées d'une copie locale des source de
- @uref{http://nixos.org/nixpkgs/, la distribution Nixpkgs}@footnote{Cela
- repose sur la commande @command{nix-instantiate} de
- @uref{http://nixos.org/nix/, Nix}.}. Les définitions de paquets dans
- Nixpkgs sont habituellement écrites en un mélange entre le langage Nix et
- Bash. Cette commande n'importe que la structure de haut-niveau du paquet
- qui est écrite dans le langage Nix. Elle inclut normalement tous les champs
- de base de la définition d'un paquet.
- Lorsque vous importez un paquet GNU, le synopsis et la description sont
- replacés par la version canonique en amont.
- Normalement, vous devrez d'abord faire :
- @example
- export NIX_REMOTE=daemon
- @end example
- @noindent
- pour que @command{nix-instantiate} n'essaye pas d'ouvrir la base de données
- de Nix.
- Par exemple, la commande ci-dessous importe la définition du paquet de
- LibreOffice (plus précisément, elle importe la définition du paquet lié à
- l'attribut de plus haut-niveau @code{libreoffice}) :
- @example
- guix import nix ~/path/to/nixpkgs libreoffice
- @end example
- @item hackage
- @cindex hackage
- Importe les métadonnées de l'archive de paquets centrale de la communauté
- Haskell, @uref{https://hackage.haskell.org/, Hackage}. Les informations
- sont récupérées depuis les fichiers Cabal et incluent toutes les
- informations utiles, dont les dépendances des paquets.
- Les options spécifiques sont :
- @table @code
- @item --stdin
- @itemx -s
- Lit un fichier Cabal depuis l'entrée standard.
- @item --no-test-dependencies
- @itemx -t
- N'inclut pas les dépendances requises uniquement par les suites de tests.
- @item --cabal-environment=@var{alist}
- @itemx -e @var{alist}
- @var{alist} est une alist Scheme qui définie l'environnement dans lequel les
- conditions de Cabal sont évaluées. Les clefs acceptées sont : @code{os},
- @code{arch}, @code{impl} et une représentation sous forme de chaîne de
- caractères du nom d'un drapeau. La valeur associée à un drapeau doit être
- le symbole @code{true} ou @code{false}. La valeur associée aux autres clefs
- doivent se conformer avec la définition du format de fichiers Cabal. La
- valeur par défaut associée avec les clefs @code{os}, @code{arch} et
- @code{impl} sont respectivement @samp{linux}, @samp{x86_64} et @samp{ghc}.
- @item --recursive
- @itemx -r
- Traverse le graphe des dépendances du paquet amont donné et génère les
- expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
- @end table
- La commande ci-dessous importe les métadonnées de la dernière version du
- paquet Haskell @code{HTTP} sans inclure les dépendances des tests et en
- spécifiant la valeur du drapeau @samp{network-uri} comme étant @code{false}
- :
- @example
- guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
- @end example
- Une version spécifique du paquet peut éventuellement être spécifiée en
- faisant suivre le nom du paquet par un arobase et un numéro de version comme
- dans l'exemple suivant :
- @example
- guix import hackage mtl@@2.1.3.1
- @end example
- @item stackage
- @cindex stackage
- L'importateur @code{stackage} est une enveloppe autour de l'importateur
- @code{hackage}. Il prend un nom de paquet, recherche la version incluse
- dans une version au support étendu (LTS) de @uref{https://www.stackage.org,
- Stackage} et utilise l'importateur @code{hackage} pour récupérer les
- métadonnées. Remarquez que c'est à vous de choisir une version LTS
- compatible avec le compilateur GHC utilisé par Guix.
- Les options spécifiques sont :
- @table @code
- @item --no-test-dependencies
- @itemx -t
- N'inclut pas les dépendances requises uniquement par les suites de tests.
- @item --lts-version=@var{version}
- @itemx -l @var{version}
- @var{version} est la version LTS désirée. Si elle est omise, la dernière
- version est utilisée.
- @item --recursive
- @itemx -r
- Traverse le graphe des dépendances du paquet amont donné et génère les
- expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
- @end table
- La commande ci-dessous importe les métadonnées du paquet Haskell @code{HTTP}
- inclus dans la version LTS 7.18 de Stackage :
- @example
- guix import stackage --lts-version=7.18 HTTP
- @end example
- @item elpa
- @cindex elpa
- Importe les métadonnées du dépôt de paquets ELPA (Emacs Lisp Package
- Archive) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
- Les options spécifiques sont :
- @table @code
- @item --archive=@var{repo}
- @itemx -a @var{repo}
- @var{repo} identifie le dépôt d'archive depuis lequel récupérer les
- informations. Actuellement les dépôts supportés et leurs identifiants sont
- :
- @itemize -
- @item
- @uref{http://elpa.gnu.org/packages, GNU}, qu'on peut choisir avec
- l'identifiant @code{gnu}. C'est la valeur par défaut.
- Les paquets de @code{elpa.gnu.org} avec l'une des clefs contenues dans le
- porte-clef GnuPG @file{share/emacs/25.1/etc/package-keyring.gpg} (ou
- similaire) dans le paquet @code{emacs} (@pxref{Package Installation, ELPA
- package signatures,, emacs, The GNU Emacs Manual}).
- @item
- @uref{http://stable.melpa.org/packages, MELPA-Stable}, qu'on peut
- sélectionner avec l'identifiant @code{melpa-stable}.
- @item
- @uref{http://melpa.org/packages, MELPA}, qu'on peut sélectionner avec
- l'identifiant @code{melpa}.
- @end itemize
- @item --recursive
- @itemx -r
- Traverse le graphe des dépendances du paquet amont donné et génère les
- expressions de paquets de tous ceux qui ne sont pas déjà dans Guix.
- @end table
- @item crate
- @cindex crate
- Importe les métadonnées du répertoire des paquets Rust
- @uref{https://crates.io, crates.io}.
- @item opam
- @cindex OPAM
- @cindex OCaml
- Importe les métadonnées du répertoire de paquets
- @uref{https://opam.ocaml.org/, OPAM} utilisé par la communauté OCaml
- @end table
- La structure du code de @command{guix import} est modulaire. Il serait
- utile d'avoir plus d'importateurs pour d'autres formats de paquets et votre
- aide est la bienvenue sur ce sujet (@pxref{Contribuer}).
- @node Invoquer guix refresh
- @section Invoquer @command{guix refresh}
- @cindex @command{guix refresh}
- L'audience première de la commande @command{guix refresh} est l'ensemble des
- développeurs de la distribution logicielle GNU. Par défaut, elle rapporte
- les paquets fournis par la distribution qui sont en retard par rapport aux
- dernières versions disponibles en amont, comme ceci :
- @example
- $ guix refresh
- gnu/packages/gettext.scm:29:13: gettext serait mis à jour de 0.18.1.1 à 0.18.2.1
- gnu/packages/glib.scm:77:12: glib serait mis à jour de 2.34.3 à 2.37.0
- @end example
- Autrement, on peut spécifier les paquets à considérer, auquel cas un
- avertissement est émis pour les paquets qui n'ont pas de gestionnaire de
- mise à jour associé :
- @example
- $ guix refresh coreutils guile guile-ssh
- gnu/packages/ssh.scm:205:2 : avertissement : aucun gestionnaire de mise à jour pour guile-ssh
- gnu/packages/guile.scm:136:12 : guile serait mis à jour de 2.0.12 à 2.0.13
- @end example
- @command{guix refresh} navigue le dépôt amont de chaque paquet et détermine
- le numéro de version le plus élevé parmi les versions publiées. La commande
- sait comment mettre à jour certains types de paquets : les paquets GNU, les
- paquets ELPA, etc. — voir la documentation pour @option{--type} ci-dessous.
- Il y a beaucoup de paquet cependant pour lesquels il manque une méthode pour
- déterminer si une nouvelle version est disponible en amont. Cependant, le
- mécanisme est extensible, alors n'hésitez pas à nous contacter pour ajouter
- une nouvelle méthode !
- Parfois les noms en amont diffèrent du nom de paquet utilisé par Guix et
- @command{guix refresh} a besoin d'un peu d'aide. La plupart des
- gestionnaires de mise à jour honorent la propriété @code{upstream-name} dans
- les définitions de paquets, ce qui peut être utilisé à cette fin :
- @example
- (define-public network-manager
- (package
- (name "network-manager")
- ;; @dots{}
- (properties '((upstream-name . "NetworkManager")))))
- @end example
- Lorsque l'option @code{--update} est utilisée, elle modifie les fichiers
- source de la distribution pour mettre à jour le numéro de version et le hash
- de l'archive source de ces recettes de paquets (@pxref{Définition des paquets}).
- Cela est effectué en téléchargeant la dernière version de l'archive des
- sources de chaque paquet et des signatures associées, en authentifiant
- l'archive téléchargée avec sa signature en utilisant @command{gpg} puis en
- calculant son hash. Lorsque la clef publique utilisée pour signer l'archive
- manque du porte-clefs de l'utilisateur, le gestionnaire tente de la
- récupérer automatiquement d'un serveur de clef public ; si cela réussi, la
- clef est ajoutée au porte-clefs de l'utilisateur, sinon @command{guix
- refresh} rapporte une erreur.
- Les options suivantes sont supportées :
- @table @code
- @item --expression=@var{expr}
- @itemx -e @var{expr}
- Considérer le paquet évalué par @var{expr}.
- C'est utile pour précisément se référer à un paquet, comme dans cet exemple
- :
- @example
- guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
- @end example
- Cette commande liste les paquets qui dépendent de la libc « finale » (en
- gros tous les paquets).
- @item --update
- @itemx -u
- Met à jour les fichiers source de la distribution (les recettes de paquets)
- en place. Cette option est généralement utilisée depuis une copie du dépôt
- git de Guix (@pxref{Lancer Guix avant qu'il ne soit installé}) :
- @example
- $ ./pre-inst-env guix refresh -s non-core -u
- @end example
- @xref{Définition des paquets}, pour plus d'information sur les définitions des
- paquets.
- @item --select=[@var{subset}]
- @itemx -s @var{subset}
- Choisi tous les paquets dans @var{subset}, entre @code{core} et
- @code{non-core}.
- Le sous-ensemble @code{core} se réfère à tous les paquets du cœur de la
- distribution — c.-à-d.@: les paquets qui sont utilisés pour construire «
- tout le rest ». Cela comprend GCC, libc, Binutils, Bash, etc.
- Habituellement, changer l'un de ces paquets dans la distribution implique de
- reconstruire tous les autres. Ainsi, ces mises à jour sont une nuisance
- pour les utilisateurs, en terme de temps de compilation et de bande passante
- utilisés pour effectuer la mise à jour.
- Le sous-ensemble @code{non-core} se réfère au reste des paquets. C'est
- habituellement utile dans les cas où une mise à jour des paquets du cœur
- serait dérangeante.
- @item --manifest=@var{fichier}
- @itemx -m @var{fichier}
- Choisi tous les paquets du manifeste dans @var{file}. C'est utile pour
- vérifier qu'aucun des paquets du manifeste utilisateur ne peut être mis à
- jour.
- @item --type=@var{updater}
- @itemx -t @var{updater}
- Chois uniquement les paquets pris en charge par @var{updater}
- (éventuellement une liste de gestionnaires de mise à jour séparés par des
- virgules). Actuellement, @var{updater} peut être l'une des valeurs suivantes
- :
- @table @code
- @item gnu
- le gestionnaire de mise à jour pour les paquets GNU ;
- @item gnome
- le gestionnaire de mise à jour pour les paquets GNOME ;
- @item kde
- le gestionnaire de mise à jour pour les paquets KDE ;
- @item xorg
- le gestionnaire de mise à jour pour les paquets X.org ;
- @item kernel.org
- le gestionnaire de mise à jour pour les paquets hébergés sur kernel.org ;
- @item elpa
- le gestionnaire de mise à jour pour les paquets @uref{http://elpa.gnu.org/,
- ELPA} ;
- @item cran
- le gestionnaire de mise à jour pour les paquets
- @uref{https://cran.r-project.org/, CRAN} ;
- @item bioconductor
- le gestionnaire de mise à jour pour les paquets
- @uref{https://www.bioconductor.org/, Bioconductor} ;
- @item cpan
- le gestionnaire de mise à jour pour les paquets @uref{http://www.cpan.org/,
- CPAN} ;
- @item pypi
- le gestionnaire de mise à jour pour les paquets
- @uref{https://pypi.python.org, PyPI} ;
- @item gem
- le gestionnaire de mise à jour pour les paquets @uref{https://rubygems.org,
- RubyGems} ;
- @item github
- le gestionnaire de mise à jour pour les paquets @uref{https://github.com,
- GitHub} ;
- @item hackage
- le gestionnaire de mise à jour pour les paquets
- @uref{https://hackage.haskell.org, Hackage} ;
- @item stackage
- le gestionnaire de mise à jour pour les paquets
- @uref{https://www.stackage.org, Stackage} ;
- @item crate
- le gestionnaire de mise à jour pour les paquets @uref{https://crates.io,
- Crates} ;
- @end table
- Par exemple, la commande suivante ne vérifie que les mises à jour des
- paquets Emacs hébergés sur @code{elpa.gnu.org} et les paquets CRAN :
- @example
- $ guix refresh --type=elpa,cran
- gnu/packages/statistics.scm:819:13 : r-testthat serait mis à jour de 0.10.0 à 0.11.0
- gnu/packages/emacs.scm:856:13 : emacs-auctex serait mis à jour de 11.88.6 à 11.88.9
- @end example
- @end table
- En plus, on peut passer à @command{guix refresh} un ou plusieurs noms de
- paquets, comme dans cet exemple :
- @example
- $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
- @end example
- @noindent
- La commande au-dessus met à jour spécifiquement les paquets @code{emacs} et
- @code{idutils}. L'option @code{--select} n'aurait aucun effet dans ce cas.
- Pour déterminer s'il faut mettre à jour un paquet, il est parfois pratique
- de savoir quels paquets seraient affectés par la mise à jour pour pouvoir
- vérifier la compatibilité. Pour cela l'option suivante peut être utilisée
- avec un ou plusieurs noms de paquets passés à @command{guix refresh} :
- @table @code
- @item --list-updaters
- @itemx -L
- Liste les gestionnaires de mise à jour et quitte (voir l'option
- @option{--type} plus haut).
- Pour chaque gestionnaire, affiche le pourcentage de paquets qu'il couvre ; à
- la fin, affiche le pourcentage de paquets couverts par tous les
- gestionnaires.
- @item --list-dependent
- @itemx -l
- Liste les paquets de plus haut-niveau qui devraient être reconstruits après
- la mise à jour d'un ou plusieurs paquets.
- @xref{Invoquer guix graph, le type @code{reverse-package} de @command{guix
- graph}}, pour des informations sur la manière de visualiser la liste des
- paquets dépendant d'un autre.
- @end table
- Soyez conscients que l'option @code{--list-dependent} ne fait
- @emph{qu'approximer} les reconstructions qui seraient requises par une mise
- à jour. Plus de reconstructions pourraient être requises dans certaines
- circonstances.
- @example
- $ guix refresh --list-dependent flex
- Building the following 120 packages would ensure 213 dependent packages are rebuilt:
- hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
- @end example
- La commande ci-dessus liste un ensemble de paquets qui peuvent être
- construits pour vérifier la compatibilité d'une mise à jour de @code{flex}.
- Les options suivante peuvent être utilisées pour personnaliser les
- opérations avec GnuPG :
- @table @code
- @item --gpg=@var{commande}
- Utilise @var{commande} comme la commande de GnuPG 2.x. @var{commande} est
- recherchée dans @code{PATH}.
- @item --keyring=@var{fichier}
- Utilise @var{fichier} comme porte-clefs pour les clefs amont. @var{fichier}
- doit être dans le @dfn{format keybox}. Les fichiers Keybox ont d'habitude
- un nom qui fini par @file{.kbx} et GNU@tie{}Privacy Guard (GPG) peut
- manipuler ces fichiers (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the
- Privacy Guard}, pour plus d'informations sur un outil pour manipuler des
- fichiers keybox).
- Lorsque cette option est omise, @command{guix refresh} utilise
- @file{~/.config/guix/upstream/trustedkeys.kbx} comme porte-clefs pour les
- clefs de signature amont. Les signatures OpenPGP sont vérifiées avec ces
- clefs ; les clefs manquantes sont aussi téléchargées dans ce porte-clefs
- (voir @option{--key-download} plus bas).
- Vous pouvez exporter les clefs de votre porte-clefs GPG par défaut dans un
- fichier keybox avec une commande telle que :
- @example
- gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
- @end example
- De même, vous pouvez récupérer des clefs dans un fichier keybox spécifique
- comme ceci :
- @example
- gpg --no-default-keyring --keyring mykeyring.kbx \
- --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
- @end example
- @ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
- Privacy Guard} pour plus d'informations sur l'option @option{--keyring} de
- GPG.
- @item --key-download=@var{politique}
- Gère les clefs OpenPGP manquantes d'après la @var{politique}, qui peut être
- l'une des suivantes :
- @table @code
- @item always
- Toujours télécharger les clefs manquantes depuis un serveur de clefs et les
- ajouter au porte-clefs de l'utilisateur.
- @item never
- Ne jamais essayer de télécharger les clefs OpenPGP manquante. Quitter à la
- place.
- @item interactive
- Lorsqu'on rencontre un paquet signé par une clef OpenPGP inconnue, demander
- à l'utilisateur s'il souhaite la télécharger ou non. C'est le comportement
- par défaut.
- @end table
- @item --key-server=@var{host}
- Utiliser @var{host} comme serveur de clefs OpenPGP lors de l'importe d'une
- clef publique.
- @end table
- The @code{github} updater uses the @uref{https://developer.github.com/v3/,
- GitHub API} to query for new releases. When used repeatedly e.g.@: when
- refreshing all packages, GitHub will eventually refuse to answer any further
- API requests. By default 60 API requests per hour are allowed, and a full
- refresh on all GitHub packages in Guix requires more than this.
- Authentication with GitHub through the use of an API token alleviates these
- limits. To use an API token, set the environment variable
- @code{GUIX_GITHUB_TOKEN} to a token procured from
- @uref{https://github.com/settings/tokens} or otherwise.
- @node Invoquer guix lint
- @section Invoquer @command{guix lint}
- @cindex @command{guix lint}
- @cindex paquets, chercher des erreurs
- La commande @command{guix lint} est conçue pour aider les développeurs à
- éviter des erreurs commune et à utiliser un style cohérent lors de
- l'écriture de recettes de paquets. Elle lance des vérifications sur un
- ensemble de paquets donnés pour trouver des erreurs communes dans leur
- définition. Les @dfn{vérifieurs} disponibles comprennent (voir
- @code{--list-checkers} pour une liste complète) :
- @table @code
- @item synopsis
- @itemx description
- Vérifie certaines règles typographiques et stylistiques dans les
- descriptions et les synopsis.
- @item inputs-should-be-native
- Identifie les entrées qui devraient sans doute plutôt être des entrées
- natives.
- @item source
- @itemx home-page
- @itemx mirror-url
- @itemx source-file-name
- Probe @code{home-page} and @code{source} URLs and report those that are
- invalid. Suggest a @code{mirror://} URL when applicable. Check that the
- source file name is meaningful, e.g.@: is not just a version number or
- ``git-checkout'', without a declared @code{file-name} (@pxref{Référence d'origine}).
- @item cve
- @cindex vulnérabilités
- @cindex CVE, Common Vulnerabilities and Exposures
- Rapporte les vulnérabilités connues trouvées dans les bases de données CVE
- (Common Vulnerabilities and Exposures) de l'année en cours et des années
- précédentes @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publié par le
- NIST américain}.
- Pour voir les informations sur une vulnérabilité en particulier, visitez les
- pages :
- @itemize
- @item
- @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-ANNÉE-ABCD}
- @item
- @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-ANNÉE-ABCD}
- @end itemize
- @noindent
- où @code{CVE-ANNÉE-ABCD} est l'identifiant CVE — p.@: ex.@:
- @code{CVE-2015-7554}.
- Les développeurs de paquets peuvent spécifier dans les recettes des paquets
- le nom @uref{https://nvd.nist.gov/cpe.cfm,CPE (Common Platform Enumeration)}
- et la version du paquet s'ils diffèrent du nom et de la version que Guix
- utilise, comme dans cet exemple :
- @example
- (package
- (name "grub")
- ;; @dots{}
- ;; CPE calls this package "grub2".
- (properties '((cpe-name . "grub2")
- (cpe-version . "2.3")))
- @end example
- @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
- Certaines entrées dans la base de données CVE ne spécifient pas la version
- du paquet auquel elles s'appliquent et lui restera donc attachée pour
- toujours. Les développeurs qui trouvent des alertes CVE et ont vérifiés
- qu'elles peuvent être ignorées peuvent les déclarer comme dans cet exemple :
- @example
- (package
- (name "t1lib")
- ;; @dots{}
- ;; Ces CVE ne s'appliquent plus et peuvent être ignorée sans problème.
- (properties `((lint-hidden-cve . ("CVE-2011-0433"
- "CVE-2011-1553"
- "CVE-2011-1554"
- "CVE-2011-5244")))))
- @end example
- @item formatting
- Avertit le développeurs lorsqu'il y a des problèmes de formatage du code
- source évident : des espaces en fin de ligne, des tabulations, etc.
- @end table
- La syntaxe générale est :
- @example
- guix lint @var{options} @var{package}@dots{}
- @end example
- Si aucun paquet n'est donné par la ligne de commande, tous les paquets
- seront vérifiés. Les @var{options} peuvent contenir aucune ou plus des
- options suivantes :
- @table @code
- @item --list-checkers
- @itemx -l
- Liste et décrit tous les vérificateurs disponibles qui seront lancés sur les
- paquets puis quitte.
- @item --checkers
- @itemx -c
- N'active que les vérificateurs spécifiés dans une liste de noms séparés par
- des virgules parmi la liste renvoyée par @code{--list-checkers}.
- @end table
- @node Invoquer guix size
- @section Invoquer @command{guix size}
- @cindex taille
- @cindex paquet, taille
- @cindex closure
- @cindex @command{guix size}
- La commande @command{guix size} aide les développeurs à dresser un profil de
- l'utilisation du disque que font les paquets. C'est facile de négliger
- l'impact d'une dépendance supplémentaire ajoutée à un paquet, ou l'impact de
- l'utilisation d'une sortie unique pour un paquet qui pourrait être
- facilement séparé (@pxref{Des paquets avec plusieurs résultats}). Ce sont les
- problèmes que @command{guix size} peut typiquement mettre en valeur.
- On peut passer un ou plusieurs spécifications de paquets à la commande,
- comme @code{gcc@@4.8} ou @code{guile:debug}, ou un nom de fichier dans le
- dépôt. Regardez cet exemple :
- @example
- $ guix size coreutils
- store item total self
- /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
- /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
- /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
- /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
- /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
- /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
- /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
- /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
- total: 78.9 MiB
- @end example
- @cindex closure
- Les éléments du dépôt listés ici constituent la @dfn{cloture transitive} de
- Coreutils — c.-à-d.@: Coreutils et toutes ses dépendances, récursivement —
- comme ce qui serait renvoyé par :
- @example
- $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
- @end example
- Ici, la sortie possède trois colonnes à côté de chaque élément du dépôt. La
- première colonne, nommée « total », montre la taille en mébioctet (Mio) de
- la cloture de l'élément du dépôt — c'est-à-dire sa propre taille plus la
- taille de ses dépendances. La colonne suivante, nommée « lui-même », montre
- la taille de l'élément lui-même. La dernière colonne montre le ration de la
- taille de l'élément lui-même par rapport à celle de tous les éléments
- montrés.
- Dans cet exemple, on voit que la cloture de Coreutils pèse 79@tie{}Mio, dont
- la plupart est dû à la libc et aux bibliothèques à l'exécution de GCC (ce
- n'est pas un problème en soit que la libc et les bibliothèques de GCC
- représentent une grande part de la cloture parce qu'elles sont toujours
- disponibles sur le système de toute façon).
- Lorsque les paquets passés à @command{guix size} sont disponibles dans le
- dépôt@footnote{Plus précisément, @command{guix size} cherche les variantes
- @emph{non greffées} des paquets donnés, tels qu'ils sont renvoyés par
- @code{guix build @var{paquet} --no-graft}. @xref{Mises à jour de sécurité} pour des
- informations sur les greffes}, @command{guix size} demande au démon de
- déterminer ses dépendances, et mesure sa taille dans le dépôt, comme avec
- @command{du -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
- Coreutils}).
- Lorsque les paquets donnés ne sont @emph{pas} dans le dépôt, @command{guix
- size} rapporte les informations en se basant sur les substituts disponibles
- (@pxref{Substituts}). Cela permet de profiler l'utilisation du disque des
- éléments du dépôt même s'ils ne sont pas sur le disque, mais disponibles à
- distance.
- Vous pouvez aussi spécifier plusieurs noms de paquets :
- @example
- $ guix size coreutils grep sed bash
- store item total self
- /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
- /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
- /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
- /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
- @dots{}
- total: 102.3 MiB
- @end example
- @noindent
- Dans cet exemple on voit que la combinaison des quatre paquets prent
- 102.3@tie{}Mio en tout, ce qui est bien moins que la somme des clotures
- puisqu'ils ont beaucoup de dépendances en commun.
- Les options disponibles sont :
- @table @option
- @item --substitute-urls=@var{urls}
- Utilise les informations de substituts de @var{urls}.
- @xref{client-substitute-urls, the same option for @code{guix build}}.
- @item --sort=@var{clef}
- Trie les lignes en fonction de la @var{clef}, l'une des optinos suivantes :
- @table @code
- @item self
- la taille de chaque élément (par défaut) ;
- @item closure
- la taille totale de la cloture de l'élémente.
- @end table
- @item --map-file=@var{fichier}
- Écrit un schéma de l'utilisation du disque au format PNG dans @var{fichier}.
- Pour l'exemple au-dessus, le schéma ressemble à ceci :
- @image{images/coreutils-size-map,5in,, schéma de l'utilisation du disque de
- Coreutils produit par @command{guix size}}
- Cette option requiert l'installation de
- @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} et qu'il
- soit visible dans le chemin de recherche des modules Guile. Lorsque ce
- n'est pas le cas, @command{guix size} plante en essayant de le charger.
- @item --system=@var{système}
- @itemx -s @var{système}
- Considère les paquets pour @var{système} — p.@: ex.@: @code{x86_64-linux}.
- @end table
- @node Invoquer guix graph
- @section Invoque @command{guix graph}
- @cindex DAG
- @cindex @command{guix graph}
- @cindex dépendances des paquets
- Les paquets et leurs dépendances forment un @dfn{graphe}, plus précisément
- un graphe orienté acyclique (DAG). Il peut vite devenir difficile d'avoir
- une représentation mentale du DAG d'un paquet, donc la commande
- @command{guix graph} fournit une représentation visuelle du DAG. Par
- défaut, @command{guix graph} émet un représentation du DAG dans le format
- d'entrée de @uref{http://www.graphviz.org/, Graphviz}, pour que sa sortie
- puisse être passée directement à la commande @command{dot} de Graphviz.
- Elle peut aussi émettre une page HTML avec du code Javascript pour afficher
- un « digramme d'accords » dans un navigateur Web, grâce à la bibliothèque
- @uref{https://d3js.org/, d3.js}, ou émettre des requêtes Cypher pour
- construire un graphe dans une base de donnée de graphes supportant le
- langage de requêtes @uref{http://www.opencypher.org/, openCypher}. La
- syntaxe générale est :
- @example
- guix graph @var{options} @var{paquet}@dots{}
- @end example
- Par exemple, la commande suivante génère un fichier PDF représentant le DAG
- du paquet pour GNU@tie{}Core Utilities, qui montre ses dépendances à la
- compilation :
- @example
- guix graph coreutils | dot -Tpdf > dag.pdf
- @end example
- La sortie ressemble à ceci :
- @image{images/coreutils-graph,2in,,Graphe de dépendance de GNU Coreutils}
- Joli petit graphe, non ?
- Mais il y a plus qu'un seul graphe ! Celui au-dessus est concis : c'est le
- graphe des objets paquets, en omettant les entrées implicites comme GCC,
- libc, grep, etc. Il est souvent utile d'avoir ces graphes concis, mais
- parfois on veut voir plus de détails. @command{guix graph} supporte
- plusieurs types de graphes, qui vous permettent de choisir le niveau de
- détails :
- @table @code
- @item package
- C'est le type par défaut utilisé dans l'exemple plus haut. Il montre le DAG
- des objets paquets, sans les dépendances implicites. C'est concis, mais
- omet pas mal de détails.
- @item reverse-package
- Cela montre le DAG @emph{inversé} des paquets. Par exemple :
- @example
- guix graph --type=reverse-package ocaml
- @end example
- ...@: yields the graph of packages that depend on OCaml.
- Remarquez que pour les paquets du cœur de la distribution, cela crée des
- graphes énormes. Si vous voulez seulement voir le nombre de paquets qui
- dépendent d'un paquet donnés, utilisez @command{guix refresh
- --list-dependent} (@pxref{Invoquer guix refresh,
- @option{--list-dependent}}).
- @item bag-emerged
- C'est le DAG du paquet, @emph{avec} les entrées implicites.
- Par exemple, la commande suivante :
- @example
- guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
- @end example
- ...@: yields this bigger graph:
- @image{images/coreutils-bag-graph,,5in,Graphe des dépendances détaillé de
- GNU Coreutils}
- En bas du graphe, on voit toutes les entrées implicites de
- @var{gnu-build-system} (@pxref{Systèmes de construction, @code{gnu-build-system}}).
- Maintenant, remarquez que les dépendances de ces entrées implicites —
- c'est-à-dire les @dfn{dépendances de bootstrap} (@pxref{Bootstrapping}) — ne
- sont pas affichées, pour rester concis.
- @item bag
- Comme @code{bag-emerged} mais cette fois inclus toutes les dépendances de
- bootstrap.
- @item bag-with-origins
- Comme @code{bag}, mais montre aussi les origines et leurs dépendances.
- @item dérivation
- C'est la représentation lu plus détaillée : elle montre le DAG des
- dérivations (@pxref{Dérivations}) et des éléments du dépôt. Comparé à la
- représentation ci-dessus, beaucoup plus de nœuds sont visibles, dont les
- scripts de construction, les correctifs, les modules Guile, etc.
- Pour ce type de graphe, il est aussi possible de passer un nom de fichier
- @file{.drv} à la place d'un nom de paquet, comme dans :
- @example
- guix graph -t derivation `guix system build -d my-config.scm`
- @end example
- @item module
- C'est le graphe des @dfn{modules de paquets} (@pxref{Modules de paquets}). Par
- exemple, la commande suivante montre le graphe des modules de paquets qui
- définissent le paquet @code{guile} :
- @example
- guix graph -t module guile | dot -Tpdf > module-graph.pdf
- @end example
- @end table
- Tous les types ci-dessus correspondent aux @emph{dépendances à la
- construction}. Le type de graphe suivant représente les @emph{dépendances à
- l'exécution} :
- @table @code
- @item references
- C'est le graphe des @dfn{references} d'une sortie d'un paquet, telles que
- renvoyées par @command{guix gc --references} (@pxref{Invoquer guix gc}).
- Si la sortie du paquet donnée n'est pas disponible dans le dépôt,
- @command{guix graph} essayera d'obtenir les informations sur les dépendances
- à travers les substituts.
- Vous pouvez aussi passer un nom de fichier du dépôt plutôt qu'un nom de
- paquet. Par exemple, la commande ci-dessous produit le graphe des
- références de votre profile (qui peut être gros !) :
- @example
- guix graph -t references `readlink -f ~/.guix-profile`
- @end example
- @item referrers
- C'est le graphe des @dfn{référents} d'un élément du dépôt, tels que renvoyés
- par @command{guix gc --referrers} (@pxref{Invoquer guix gc}).
- Cela repose exclusivement sur les informations de votre dépôt. Par exemple,
- supposons que Inkscape est actuellement disponible dans 10 profils sur votre
- machine ; @command{guix graph -t referrers inkscape} montrera le graphe dont
- la racine est Inkscape avec 10 profils qui y sont liés.
- Cela peut aider à déterminer ce qui empêche un élément du dépôt d'être
- glané.
- @end table
- Les options disponibles sont les suivante :
- @table @option
- @item --type=@var{type}
- @itemx -t @var{type}
- Produit un graphe en sortie de type @var{type} où @var{type} doit être l'un
- des types au-dessus.
- @item --list-types
- Liste les types de graphes supportés.
- @item --backend=@var{moteur}
- @itemx -b @var{moteur}
- Produit un graphe avec le @var{moteur} choisi.
- @item --list-backends
- Liste les moteurs de graphes supportés.
- Actuellement les moteurs disponibles sont Graphviz et d3.js.
- @item --expression=@var{expr}
- @itemx -e @var{expr}
- Considérer le paquet évalué par @var{expr}.
- C'est utile pour précisément se référer à un paquet, comme dans cet exemple
- :
- @example
- guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
- @end example
- @item --system=@var{système}
- @itemx -s @var{système}
- Affiche le graphe pour @var{système} — p.@: ex.@: @code{i686-linux}.
- Le graphe de dépendance des paquets est la plupart du temps indépendant de
- l'architecture, mais il y a quelques parties qui dépendent de l'architecture
- que cette option vous permet de visualiser.
- @end table
- @node Invoquer guix environment
- @section Invoquer @command{guix environment}
- @cindex environnements de construction reproductibles
- @cindex environnement de développement
- @cindex @command{guix environment}
- @cindex environnement de construction de paquets
- Le but de @command{guix environment} est d'assister les hackers dans la
- création d'environnements de développement reproductibles sans polluer leur
- profil de paquets. L'outil @command{guix environment} prend un ou plusieurs
- paquets, construit leurs entrées et crée un environnement shell pour pouvoir
- les utiliser.
- La syntaxe générale est :
- @example
- guix environment @var{options} @var{paquet}@dots{}
- @end example
- L'exemple suivant crée un nouveau shell préparé pour le développement de
- GNU@tie{}Guile :
- @example
- guix environment guile
- @end example
- Si les dépendances requises ne sont pas déjà construites, @command{guix
- environment} les construit automatiquement. L'environnement du nouveau
- shell est une version améliorée de l'environnement dans lequel @command{guix
- environment} a été lancé. Il contient les chemins de recherche nécessaires
- à la construction du paquet donné en plus des variables d'environnement
- existantes. Pour créer un environnement « pur », dans lequel les variables
- d'environnement de départ ont été nettoyées, utilisez l'option
- @code{--pure}@footnote{Les utilisateurs ajoutent parfois à tord des valeurs
- supplémentaires dans les variables comme @code{PATH} dans leur
- @file{~/.bashrc}. En conséquence, lorsque @code{guix environment} le lance,
- Bash peut lire @file{~/.bashrc}, ce qui produit des « impuretés » dans ces
- variables d'environnement. C'est une erreur de définir ces variables
- d'environnement dans @file{.bashrc} ; à la place, elles devraient être
- définie dans @file{.bash_profile}, qui est sourcé uniquement par les shells
- de connexion. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
- Manual}, pour des détails sur les fichiers de démarrage de Bash.}.
- @vindex GUIX_ENVIRONMENT
- @command{guix environment} définie la variable @code{GUIX_ENVIRONMENT} dans
- le shell qu'il crée ; sa valeur est le nom de fichier du profil de cet
- environnement. Cela permet aux utilisateur, disons, de définir un prompt
- spécifique pour les environnement de développement dans leur @file{.bashrc}
- (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}) :
- @example
- if [ -n "$GUIX_ENVIRONMENT" ]
- then
- export PS1="\u@@\h \w [dev]\$ "
- fi
- @end example
- @noindent
- ...@: or to browse the profile:
- @example
- $ ls "$GUIX_ENVIRONMENT/bin"
- @end example
- En plus, plus d'un paquet peut être spécifié, auquel cas l'union des entrées
- des paquets données est utilisée. Par exemple, la commande ci-dessous crée
- un shell où toutes les dépendances de Guile et Emacs sont disponibles :
- @example
- guix environment guile emacs
- @end example
- Parfois, une session shell interactive est inutile. On peut invoquer une
- commande arbitraire en plaçant le jeton @code{--} pour séparer la commande
- du reste des arguments :
- @example
- guix environment guile -- make -j4
- @end example
- Dans d'autres situations, il est plus pratique de spécifier la liste des
- paquets requis dans l'environnement. Par exemple, la commande suivante
- lance @command{python} dans un environnement contenant Python@tie{}2.7 et
- NumPy :
- @example
- guix environment --ad-hoc python2-numpy python-2.7 -- python
- @end example
- En plus, on peut vouloir les dépendance d'un paquet et aussi des paquets
- supplémentaires qui ne sont pas des dépendances à l'exécution ou à la
- construction, mais qui sont utiles au développement tout de même. À cause
- de cela, le drapeau @code{--ad-hoc} est positionnel. Les paquets qui
- apparaissent avant @code{--ad-hoc} sont interprétés comme les paquets dont
- les dépendances seront ajoutées à l'environnement. Les paquets qui
- apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
- ajouter à l'environnement directement. Par exemple, la commande suivante
- crée un environnement de développement pour Guix avec les paquets Git et
- strace en plus :
- @example
- guix environment guix --ad-hoc git strace
- @end example
- Parfois il est souhaitable d'isoler l'environnement le plus possible, pour
- une pureté et une reproductibilité maximale. En particulier, lorsque vous
- utilisez Guix sur une distribution hôte qui n'est pas GuixSD, il est
- souhaitable d'éviter l'accès à @file{/usr/bin} et d'autres ressources du
- système depuis les environnements de développement. Par exemple, la
- commande suivante crée un REPL Guile dans un « conteneur » où seuls le dépôt
- et le répertoire de travail actuel sont montés :
- @example
- guix environment --ad-hoc --container guile -- guile
- @end example
- @quotation Remarque
- L'option @code{--container} requiert Linux-libre 3.19 ou supérieur.
- @end quotation
- Les options disponibles sont résumées ci-dessous.
- @table @code
- @item --root=@var{fichier}
- @itemx -r @var{fichier}
- @cindex environnement persistent
- @cindex racine du ramasse-miettes, pour les environnements
- Fait de @var{fichier} un lien symbolique vers le profil de cet
- environnement, et l'enregistre comme une racine du ramasse-miettes.
- C'est utile si vous souhaitez protéger votre environnement du
- ramasse-miettes, pour le rendre « persistent ».
- Lorsque cette option est omise, l'environnement n'est protégé du
- ramasse-miettes que le temps de la session @command{guix environment}. Cela
- signifie que la prochaine fois que vous créerez le même environnement, vous
- pourriez avoir à reconstruire ou télécharger des paquets. @xref{Invoquer guix gc}, pour plus d'informations sur les racines du GC.
- @item --expression=@var{expr}
- @itemx -e @var{expr}
- Crée un environnement pour le paquet ou la liste de paquets en lesquels
- s'évalue @var{expr}.
- Par exemple, lancer :
- @example
- guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
- @end example
- démarre un shell avec l'environnement pour cette variante spécifique du
- paquet PETSc.
- Lancer :
- @example
- guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
- @end example
- démarre un shell où tous les paquets de base de GuixSD sont disponibles.
- Les commande au-dessus n'utilisent que les sorties par défaut des paquets
- donnés. Pour choisir d'autres sorties, on peut spécifier des pairs :
- @example
- guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
- @end example
- @item --load=@var{fichier}
- @itemx -l @var{fichier}
- Crée un environnement pour le paquet ou la liste de paquets en lesquels
- @var{fichier} s'évalue.
- Par exemple, @var{fichier} peut contenir une définition comme celle-ci
- (@pxref{Définition des paquets}) :
- @example
- @verbatiminclude environment-gdb.scm
- @end example
- @item --manifest=@var{fichier}
- @itemx -m @var{fichier}
- Crée un environnement pour les paquets contenus dans l'objet manifeste
- renvoyé par le code Scheme dans @var{fichier}.
- C'est similaire à l'option de même nom de @command{guix package}
- (@pxref{profile-manifest, @option{--manifest}}) et utilise les même fichiers
- manifestes.
- @item --ad-hoc
- Inclut tous les paquets spécifiés dans l'environnement qui en résulte, comme
- si un paquet @i{ad hoc} était spécifié, avec ces paquets comme entrées.
- Cette option est utile pour créer un environnement rapidement sans avoir à
- écrire une expression de paquet contenant les entrées désirées.
- Par exemple la commande :
- @example
- guix environment --ad-hoc guile guile-sdl -- guile
- @end example
- lance @command{guile} dans un environnement où Guile et Guile-SDDL sont
- disponibles.
- Remarquez que cet exemple demande implicitement la sortie par défaut de
- @code{guile} et @code{guile-sdl}, mais il est possible de demander une
- sortie spécifique — p.@: ex.@: @code{glib:bin} demande la sortie @code{bin}
- de @code{glib} (@pxref{Des paquets avec plusieurs résultats}).
- Cette option peut être composée avec le comportement par défaut de
- @command{guix environment}. Les paquets qui apparaissent avant
- @code{--ad-hoc} sont interprétés comme les paquets dont les dépendances
- seront ajoutées à l'environnement, le comportement par défaut. Les paquets
- qui apparaissent après @code{--ad-hoc} sont interprétés comme les paquets à
- ajouter à l'environnement directement.
- @item --pure
- Nettoie les variables d'environnement existantes lors de la construction du
- nouvel environnement. Cela a pour effet de créer un environnement dans
- lequel les chemins de recherche ne contiennent que des entrées de paquets.
- @item --search-paths
- Affiche les définitions des variables d'environnement qui composent
- l'environnement.
- @item --system=@var{système}
- @itemx -s @var{système}
- Essaye de construire pour @var{système} — p.@: ex.@: @code{i686-linux}.
- @item --container
- @itemx -C
- @cindex conteneur
- Lance @var{commande} dans un conteneur isolé. Le répertoire de travail
- actuel en dehors du conteneur est monté dans le conteneur. En plus, à moins
- de le changer avec @code{--user}, un répertoire personnel fictif est créé
- pour correspondre à celui de l'utilisateur actuel et @file{/etc/passwod} est
- configuré en conséquence. Le processus est lancé en tant que l'utilisateur
- actuel en dehors du conteneur, mais a les privilèges root dans le contexte
- du conteneur.
- @item --network
- @itemx -N
- Pour les conteneurs, partage l'espace de nom du réseau avec le système
- hôte. Les conteneurs créés sans cette option n'ont accès qu'à l'interface
- de boucle locale.
- @item --link-profile
- @itemx -P
- Pour les conteneurs, lie le profil de l'environnement à
- @file{~/.guix-profile} dans le conteneur. C'est équivalent à lance la
- commande @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile} dans le
- conteneur. La liaison échouera et annulera l'environnement si le répertoire
- existe déjà, ce qui sera sans doute le cas si @command{guix environment} est
- invoqué dans le répertoire personnel de l'utilisateur.
- Certains paquets sont configurés pour chercher des fichiers de configuration
- et des données dans @code{~/.guix-profile}@footnote{Par exemple, le paquet
- @code{fontconfig} inspecte @file{~/.guix-profile/share/fonts} pour trouver
- des polices supplémentaires.} ; @code{--link-profile} permet à ces
- programmes de se comporter comme attendu dans l'environnement.
- @item --user=@var{utilisateur}
- @itemx -u @var{utilisateur}
- Pour les conteneurs, utilise le nom d'utilisateur @var{utilisateur} à la
- place de l'utilisateur actuel. L'entrée générée dans @file{/etc/passwod}
- dans le conteneur contiendra le nom @var{utilisateur} ; le répertoire
- personnel sera @file{/home/UTILISATEUR} ; et aucune donnée GECOS ne sera
- copiée. @var{utilisateur} n'a pas besoin d'exister sur le système.
- En plus, tous les chemins partagés ou exposés (voir @code{--share} et
- @code{--expose} respectivement) dont la cible est dans le répertoire
- personnel de l'utilisateur seront remontés relativement à
- @file{/home/UTILISATEUR} ; cela comprend le montage automatique du
- répertoire de travail actuel.
- @example
- # exposera les chemins comme /home/foo/wd, /home/foo/test et /home/foo/target
- cd $HOME/wd
- guix environment --container --user=foo \
- --expose=$HOME/test \
- --expose=/tmp/target=$HOME/target
- @end example
- Bien que cela limite la fuite de l'identité de l'utilisateur à travers le
- chemin du répertoire personnel et des champs de l'utilisateur, ce n'est
- qu'un composant utile pour une solution d'anonymisation ou de préservation
- de la vie privée — pas une solution en elle-même.
- @item --expose=@var{source}[=@var{cible}]
- Pour les conteneurs, expose le système de fichiers @var{source} du système
- hôte comme un système de fichiers en lecture seule @var{cible} dans le
- conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisé
- comme point de montage dans le conteneur.
- L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
- répertoire personnel de l'utilisateur est accessible en lecture-seule via le
- répertoire @file{/exchange} :
- @example
- guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
- @end example
- @item --share=@var{source}[=@var{cible}]
- Pour les conteneurs, partage le système de fichiers @var{soruce} du système
- hôte comme un système de fichiers en lecture-écriture @var{cible} dans le
- conteneur. Si @var{cible} n'est pas spécifiée, @var{source} est utilisée
- comme point de montage dans le conteneur.
- L'exemple ci-dessous crée un REPL Guile dans un conteneur dans lequel le
- répertoire personnel de l'utilisateur est accessible en lecture-écriture via
- le répertoire @file{/exchange} :
- @example
- guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
- @end example
- @end table
- @command{guix environment} supporte aussi toutes les options de construction
- que @command{guix build} supporte (@pxref{Options de construction communes}).
- @node Invoquer guix publish
- @section Invoquer @command{guix publish}
- @cindex @command{guix publish}
- Le but de @command{guix publish} est de vous permettre de partager
- facilement votre dépôt avec d'autres personnes qui peuvent ensuite
- l'utiliser comme serveur de substituts (@pxref{Substituts}).
- Lorsque @command{guix publish} est lancé, il crée un serveur HTTP qui permet
- à n'importe qui avec un accès réseau d'y récupérer des substituts. Cela
- signifie que toutes les machines qui font tourner Guix peuvent aussi agir
- comme une ferme de construction, puisque l'interface HTTP est compatible
- avec Hydra, le logiciel derrière la ferme de construction
- @code{hydra.gnu.org}.
- Pour des raisons de sécurité, chaque substitut est signé, ce qui permet aux
- destinataires de vérifier leur authenticité et leur intégrité
- (@pxref{Substituts}). Comme @command{guix publish} utilise la clef de
- signature du système, qui n'est lisible que par l'administrateur système, il
- doit être lancé en root ; l'option @code{--user} lui fait baisser ses
- privilèges le plus tôt possible.
- La pair de clefs pour les signatures doit être générée avant de lancer
- @command{guix publish}, avec @command{guix archive --generate-key}
- (@pxref{Invoquer guix archive}).
- La syntaxe générale est :
- @example
- guix publish @var{options}@dots{}
- @end example
- Lancer @command{guix publish} sans arguments supplémentaires lancera un
- serveur HTTP sur le port 8080 :
- @example
- guix publish
- @end example
- 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 :
- @example
- guix-daemon --substitute-urls=http://example.org:8080
- @end example
- Par défaut, @command{guix publish} compresse les archives à la volée quand
- il les sert. Ce mode « à la volée » est pratique puisqu'il ne demande
- aucune configuration et est disponible immédiatement. Cependant, lorsqu'il
- s'agit de servir beaucoup de clients, nous recommandons d'utiliser l'option
- @option{--cache}, qui active le cache des archives avant de les envoyer aux
- clients — voir les détails plus bas. La commande @command{guix weather}
- fournit un manière pratique de vérifier ce qu'un serveur fournit
- (@pxref{Invoquer guix weather}).
- En bonus, @command{guix publish} sert aussi un miroir adressé par le contenu
- des fichiers source référencées dans les enregistrements @code{origin}
- (@pxref{Référence d'origine}). Par exemple, en supposant que @command{guix
- publish} tourne sur @code{example.org}, l'URL suivante renverra le fichie
- brut @file{hello-2.10.tar.gz} avec le hash SHA256 donné (représenté sous le
- format @code{nix-base32}, @pxref{Invoquer guix hash}) :
- @example
- http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
- @end example
- Évidemment, ces URL ne fonctionnent que pour des fichiers dans le dépôt ;
- dans les autres cas, elles renvoie une erreur 404 (« Introuvable »).
- @cindex journaux de construction, publication
- Les journaux de construction sont disponibles à partir des URL @code{/log}
- comme ceci :
- @example
- http://example.org/log/gwspk@dots{}-guile-2.2.3
- @end example
- @noindent
- Lorsque @command{guix-daemon} est configuré pour sauvegarder les journaux de
- 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,
- avec un en-tête @code{Content-Type} ou @code{Content-Encoding} approprié.
- Nous recommandons de lancer @command{guix-daemon} avec
- @code{--log-compression=gzip} pace que les navigateurs web les décompressent
- automatiquement, ce qui n'est pas le cas avec la compression bzip2.
- Les options suivantes sont disponibles :
- @table @code
- @item --port=@var{port}
- @itemx -p @var{port}
- Écoute les requêtes HTTP sur le @var{port}
- @item --listen=@var{hôte}
- Écoute sur l'interface réseau de @var{hôte}. Par défaut, la commande
- accepte les connexions de n'importe quelle interface.
- @item --user=@var{utilisateur}
- @itemx -u @var{utilisateur}
- Charge les privilèges de @var{utilisateur} le plus vite possible —
- c.-à-d. une fois que la socket du serveur est ouverte et que la clef de
- signature a été lue.
- @item --compression[=@var{niveau}]
- @itemx -C [@var{niveau}]
- Compresse les données au @var{niveau} donné. Lorsque le @var{niveau} est
- zéro, désactive la compression. L'intervalle 1 à 9 correspond aux
- différents niveaux de compression gzip : 1 est le plus rapide et 9 est la
- meilleure (mais gourmande en CPU). Le niveau par défaut est 3.
- À moins que @option{--cache} ne soit utilisé, la compression se fait à la
- volée et les flux compressés ne sont pas cachés. Ainsi, pour réduire la
- charge sur la machine qui fait tourner @command{guix publish}, c'est une
- bonne idée de choisir un niveau de compression faible, de lancer
- @command{guix publish} derrière un serveur de cache ou d'utiliser
- @option{--cache}. Utilise @option{--cache} a l'avantage qu'il permet à
- @command{guix publish} d'ajouter l'en-tête HTTP @code{Content-Length} à sa
- réponse.
- @item --cache=@var{répertoire}
- @itemx -c @var{répertoire}
- Cache les archives et les métadonnées (les URL @code{.narinfo}) dans
- @var{répertoire} et ne sert que les archives dans ce cache.
- Lorsque cette option est omise, les archives et les métadonnées sont crées à
- la volée. Cela réduit la bande passante disponible, surtout quand la
- compression est activée puisqu'elle pourrait être limitée par le CPU. Un
- autre inconvénient au mode par défaut est que la taille des archives n'est
- pas connue à l'avance, donc @command{guix publish} n'ajoute pas l'en-tête
- @code{Content-Length} à ses résponses, ce qui empêche les clients de savoir
- la quantité de données à télécharger.
- À l'inverse, lorsque @option{--cache} est utilisée, la première requête pour
- un élément du dépôt (via une URL @code{.narinfo}) renvoie une erreur 404 et
- déclenche la création de l'archive — en calculant son @code{.narinfo} et en
- compressant l'archive au besoin. Une fois l'archive cachée dans
- @var{répertoire}, les requêtes suivantes réussissent et sont servies
- directement depuis le cache, ce qui garanti que les clients ont la meilleure
- bande passante possible.
- Le processus de création est effectué par des threads de travail. Par
- défaut, un thread par cœur du CPU est créé, mais cela peut être
- personnalisé. Voir @option{--workers} plus bas.
- Lorsque l'option @option{--ttl} est utilisée, les entrées cachées sont
- automatiquement supprimées lorsqu'elles expirent.
- @item --workers=@var{N}
- Lorsque @option{--cache} est utilisée, demande l'allocation de @var{N}
- thread de travail pour créer les archives.
- @item --ttl=@var{ttl}
- Produit des en-têtes HTTP @code{Cache-Control} qui expriment une durée de
- vie (TTL) de @var{ttl}. @var{ttl} peut dénoter une durée : @code{5d}
- signifie 5 jours, @code{1m} signifie un mois, etc.
- Cela permet au Guix de l'utilisateur de garder les informations en cache
- pendant @var{ttl}. Cependant, remarquez que @code{guix publish} ne garanti
- pas lui-même que les éléments du dépôt qu'il fournit seront toujours
- disponible pendant la durée @var{ttl}.
- En plus, lorsque @option{--cache} est utilisée, les entrées cachées qui
- n'ont pas été demandé depuis @var{ttl} et n'ont pas d'élément correspondant
- dans le dépôt peuvent être supprimées.
- @item --nar-path=@var{chemin}
- Utilise @var{chemin} comme préfixe des URL de fichier « nar »
- (@pxref{Invoquer guix archive, normalized archives}).
- Par défaut, les nars sont présents à l'URL comme
- @code{/nar/gzip/@dots{}-coreutils-8.25}. Cette option vous permet de
- changer la partie @code{/nar} en @var{chemin}.
- @item --public-key=@var{fichier}
- @itemx --private-key=@var{fichier}
- Utilise les @var{fichier}s spécifiques comme pair de clefs utilisées pour
- signer les éléments avant de les publier.
- Les fichiers doivent correspondre à la même pair de clefs (la clef privée
- est utilisée pour signer et la clef publique est seulement ajouté aux
- métadonnées de la signature). Ils doivent contenir les clefs dans le format
- s-expression canonique produit par @command{guix archive --generate-key}
- (@pxref{Invoquer guix archive}). Par défaut,
- @file{/etc/guix/signing-key.pub} et @file{/etc/guix/signing-key.sec} sont
- utilisés.
- @item --repl[=@var{port}]
- @itemx -r [@var{port}]
- Crée un serveur REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
- Reference Manual}) sur @var{pport} (37146 par défaut). C'est surtout utile
- pour déboguer un serveur @command{guix publish} qui tourne.
- @end table
- Activer @command{guix publish} sur un système GuixSD est vraiment une seule
- ligne : instantiez simplement un service @code{guix-publish-service-type}
- dans le champs @code{services} de votre déclaration @code{operating-system}
- (@pxref{guix-publish-service-type, @code{guix-publish-service-type}}).
- Si vous avez installé Guix sur une « distro extérieure », suivez ces
- instructions :
- @itemize
- @item
- Si votre distro hôte utilise le système d'init systemd :
- @example
- # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
- /etc/systemd/system/
- # systemctl start guix-publish && systemctl enable guix-publish
- @end example
- @item
- Si votre distribution hôte utilise le système d'initialisation Upstart :
- @example
- # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
- # start guix-publish
- @end example
- @item
- Sinon, procédez de manière similaire avec votre système d'init de votre
- distro.
- @end itemize
- @node Invoquer guix challenge
- @section Invoquer @command{guix challenge}
- @cindex constructions reproductibles
- @cindex constructions vérifiables
- @cindex @command{guix challenge}
- @cindex défi
- Est-ce que les binaires fournis par ce serveur correspondent réellement au
- code source qu'il dit avoir construit ? Est-ce que le processus de
- construction d'un paquet est déterministe ? Ce sont les question auxquelles
- la commande @command{guix challenge} essaye de répondre.
- La première question est évidemment importante : avant d'utiliser un serveur
- de substituts (@pxref{Substituts}), il vaut mieux @emph{vérifier} qu'il
- fournit les bons binaires et donc le @emph{défier}. La deuxième est ce qui
- permet la première : si les constructions des paquets sont déterministes
- alors des constructions indépendantes du paquet devraient donner le même
- résultat, bit à bit ; si un serveur fournit un binaire différent de celui
- obtenu localement, il peut être soit corrompu, soit malveillant.
- On sait que le hash qui apparaît dans @file{/gnu/store} est le hash de
- toutes les entrées du processus qui construit le fichier ou le répertoire —
- les compilateurs, les bibliothèques, les scripts de construction,
- etc. (@pxref{Introduction}). En supposant que les processus de construction
- sont déterministes, un nom de fichier dans le dépôt devrait correspondre
- exactement à une sortie de construction. @command{guix challenge} vérifie
- si il y a bien effectivement une seule correspondance en comparant les
- sorties de plusieurs constructions indépendantes d'un élément du dépôt
- donné.
- La sortie de la commande ressemble à :
- @smallexample
- $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
- mise à jour de la liste des substituts depuis 'https://hydra.gnu.org'... 100.0%
- mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
- le contenu de /gnu/store/@dots{}-openssl-1.0.2d diffère :
- empreinte locale : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
- https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d : 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
- https://guix.example.org/nar/@dots{}-openssl-1.0.2d : 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
- le contenu de /gnu/store/@dots{}-git-2.5.0 diffère :
- empreinte locale : 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
- https://hydra.gnu.org/nar/@dots{}-git-2.5.0 : 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
- https://guix.example.org/nar/@dots{}-git-2.5.0 : 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
- le contenu de /gnu/store/@dots{}-pius-2.1.1 diffère :
- empreinte locale : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
- https://hydra.gnu.org/nar/@dots{}-pius-2.1.1 : 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
- https://guix.example.org/nar/@dots{}-pius-2.1.1 : 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
- @dots{}
- 6,406 éléments du dépôt ont été analysés :
- - 4,749 (74.1%) étaient identiques
- - 525 (8.2%) étaient différents
- - 1,132 (17.7%) étaient impossibles à évaluer
- @end smallexample
- @noindent
- Dans cet exemple, @command{guix challenge} scanne d'abord le dépôt pour
- déterminer l'ensemble des dérivations construites localement — en opposition
- aux éléments qui ont été téléchargées depuis un serveur de substituts — puis
- demande leur avis à tous les serveurs de substituts. Il rapporte ensuite
- les éléments du dépôt pour lesquels les serveurs ont obtenu un résultat
- différent de la construction locale.
- @cindex non-déterminisme, dans les constructions des paquets
- Dans l'exemple, @code{guix.example.org} obtient toujours une réponse
- différente. Inversement, @code{hydra.gnu.org} est d'accord avec les
- constructions locale, sauf dans le cas de Git. Cela peut indiquer que le
- processus de construction de Git est non-déterministe, ce qui signifie que
- sa sortie diffère en fonction de divers choses que Guix ne contrôle pas
- parfaitement, malgré l'isolation des constructions (@pxref{Fonctionnalités}). Les
- sources les plus communes de non-déterminisme comprennent l'ajout
- d'horodatage dans les résultats des constructions, l'inclusion de nombres
- aléatoires et des listes de fichiers ordonnés par numéro d'inœud. Voir
- @uref{https://reproducible-builds.org/docs/}, pour plus d'informations.
- Pour trouver ce qui ne va pas avec le binaire de Git, on peut faire quelque
- chose comme cela (@pxref{Invoquer guix archive}) :
- @example
- $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
- | guix archive -x /tmp/git
- $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
- @end example
- Cette commande montre les différences entre les fichiers qui résultent de la
- construction locale et des fichiers qui résultent de la construction sur
- @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
- diffutils, Comparing and Merging Files}). La commande @command{diff}
- fonctionne bien avec des fichiers texte. Lorsque des fichiers binaires
- diffèrent cependant, @uref{https://diffoscope.org/, Diffoscope} est une
- meilleure option. C'est un outil qui aide à visualiser les différences
- entre toute sorte de fichiers.
- Une fois que vous avez fait ce travail, vous pourrez dire si les différences
- sont dues au non-déterminisme du processus de construction ou à la
- malhonnêteté du serveur. Nous avons fait beaucoup d'effort pour éliminer
- les sources de non-déterminisme dans les paquets pour rendre plus facile la
- vérification des substituts, mais bien sûr, c'est un processus qui
- n'implique pas que Guix, mais une grande partie de la communauté des
- logiciels libres. Pendant ce temps, @command{guix challenge} est un outil
- pour aider à corriger le problème.
- Si vous écrivez un paquet pour Guix, nous vous encourageons à vérifier si
- @code{hydra.gnu.org} et d'autres serveurs de substituts obtiennent le même
- résultat que vous avec :
- @example
- $ guix challenge @var{paquet}
- @end example
- @noindent
- où @var{paquet} est une spécification de paquet comme @code{guile@@2.0} ou
- @code{glibc:debug}.
- La syntaxe générale est :
- @example
- guix challenge @var{options} [@var{paquets}@dots{}]
- @end example
- Lorsqu'une différence est trouvée entre l'empreinte d'un élément construit
- localement et celle d'un substitut fournit par un serveur, ou parmi les
- substituts fournis par différents serveurs, la commande l'affiche comme dans
- l'exemple ci-dessus et sa valeur de sortie est 2 (les autres valeurs
- différentes de 0 indiquent d'autres sortes d'erreurs).
- L'option qui compte est :
- @table @code
- @item --substitute-urls=@var{urls}
- Considère @var{urls} comme la liste des URL des sources de substituts
- séparés par des espaces avec lesquels comparer les paquets locaux.
- @item --verbose
- @itemx -v
- Montre des détails sur les correspondances (contenu identique) en plus des
- informations sur différences.
- @end table
- @node Invoquer guix copy
- @section Invoquer @command{guix copy}
- @cindex copier des éléments du dépôt par SSH
- @cindex SSH, copie d'éléments du dépôt
- @cindex partager des éléments du dépôt entre plusieurs machines
- @cindex transférer des éléments du dépôt entre plusieurs machines
- La commande @command{guix copy} copie des éléments du dépôt d'une machine
- vers le dépôt d'une autre machine à travers une connexion SSH@footnote{Cette
- commande n'est disponible que si Guile-SSH est trouvé. @xref{Prérequis},
- pour des détails}. Par exemple, la commande suivante copie le paquet
- @code{coreutils}, le profil utilisateur et toutes leurs dépendances sur
- @var{hôte}, en tant qu'utilisateur @var{utilisateur} :
- @example
- guix copy --to=@var{utilisateur}@@@var{hôte} \
- coreutils `readlink -f ~/.guix-profile`
- @end example
- Si certains éléments à copier sont déjà présents sur @var{hôte}, ils ne sont
- pas envoyés.
- La commande ci-dessous récupère @code{libreoffice} et @code{gimp} depuis
- @var{hôte}, en supposant qu'ils y sont présents :
- @example
- guix copy --from=@var{hôte} libreoffice gimp
- @end example
- La connexion SSH est établie avec le client Guile-SSH, qui set compatible
- avec OpenSSH : il honore @file{~/.ssh/known_hosts} et @file{~/.ssh/config}
- et utilise l'agent SSH pour l'authentification.
- La clef utilisée pour signer les éléments qui sont envoyés doit être
- acceptée par la machine distante. De même, la clef utilisée pour la machine
- distante depuis laquelle vous récupérez des éléments doit être dans
- @file{/etc/guix/acl} pour qu'ils soient acceptés par votre propre démon.
- @xref{Invoquer guix archive}, pour plus d'informations sur
- l'authentification des éléments du dépôt.
- La syntaxe générale est :
- @example
- guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
- @end example
- Vous devez toujours spécifier l'une des options suivantes :
- @table @code
- @item --to=@var{spec}
- @itemx --from=@var{spec}
- Spécifie l'hôte où envoyer ou d'où recevoir les éléments. @var{spec} doit
- être une spécification SSH comme @code{example.org},
- @code{charlie@@example.org} ou @code{charlie@@example.org:2222}.
- @end table
- L'option @var{items} peut être des noms de paquets, comme @code{gimp} ou des
- éléments du dépôt comme @file{/gnu/store/@dots{}-idutils-4.6}.
- Lorsque vous spécifiez le nom d'un paquet à envoyer, il est d'abord
- construit au besoin, sauf si l'option @option{--dry-run} est spécifiée. Les
- options de construction communes sont supportées (@pxref{Options de construction communes}).
- @node Invoquer guix container
- @section Invoquer @command{guix container}
- @cindex conteneur
- @cindex @command{guix container}
- @quotation Remarque
- À la version @value{VERSION}, cet outil est toujours expérimental.
- L'interface est sujette à changement radicaux dans le futur.
- @end quotation
- Le but de @command{guix container} est de manipuler des processus qui
- tournent dans un environnement séparé, connus sous le nom de « conteneur »,
- typiquement créés par les commandes @command{guix environment}
- (@pxref{Invoquer guix environment}) et @command{guix system container}
- (@pxref{Invoquer guix system}).
- La syntaxe générale est :
- @example
- guix container @var{action} @var{options}@dots{}
- @end example
- @var{action} spécifie les opérations à effectuer avec un conteneur, et
- @var{options} spécifie les arguments spécifiques au contexte pour l'action.
- Les actions suivantes sont disponibles :
- @table @code
- @item exec
- Exécute une commande dans le contexte d'un conteneur lancé.
- La syntaxe est :
- @example
- guix container exec @var{pid} @var{programme} @var{arguments}@dots{}
- @end example
- @var{pid} spécifie le PID du conteneur lancé. @var{programme} spécifie le
- nom du fichier exécutable dans le système de fichiers racine du conteneur.
- @var{arguments} sont les options supplémentairesà passer à @var{programme}.
- La commande suivante lance un shell de connexion interactif dans un
- conteneur GuixSD, démarré par @command{guix system container} et dont le PID
- est 9001 :
- @example
- guix container exec 9001 /run/current-system/profile/bin/bash --login
- @end example
- Remarquez que @var{pid} ne peut pas être le processus parent d'un
- conteneur. Ce doit être le PID 1 du conteneur ou l'un de ses processus
- fils.
- @end table
- @node Invoquer guix weather
- @section Invoquer @command{guix weather}
- Vous pouvez parfois grogner lorsque les substituts ne sont pas disponibles
- et que vous devez construire les paquets vous-même (@pxref{Substituts}). La
- commande @command{guix weather} rapporte la disponibilité des substituts sur
- les serveurs spécifiés pour que vous sachiez si vous allez raller
- aujourd'hui. Cela peut parfois être une information utile pour les
- utilisateurs, mais elle est surtout utile pour les personnes qui font
- tourner @command{guix publish} (@pxref{Invoquer guix publish}).
- @cindex statistiques sur les substituts
- @cindex disponibilité des substituts
- @cindex substuts, disponibilité
- @cindex weather, disponibilité des substituts
- Voici un exemple :
- @example
- $ guix weather --substitute-urls=https://guix.example.org
- calcul de 5,872 dérivations de paquets pour x86_64-linux…
- recherche de 6,128 éléments du dépôt sur https://guix.example.org…
- mise à jour de la liste des substituts depuis 'https://guix.example.org'... 100.0%
- https://guix.example.org
- 43.4% substituts disponibles (2,658 sur 6,128)
- 7,032.5 Mo de fichiers nar (compressés)
- 19,824.2 Mo sur le disque (décompressés)
- 0.030 secondes par requêtes (182.9 secondes au total)
- 33.5 requêtes par seconde
- 9.8% (342 sur 3,470) des éléments manquants sont dans la queue
- 867 constructions dans la queue
- x86_64-linux : 518 (59.7%)
- i686-linux : 221 (25.5%)
- aarch64-linux : 128 (14.8%)
- vitesse de construction : 23.41 constructions par heure
- x86_64-linux : 11.16 constructions par heure
- i686-linux : 6.03 constructions par heure
- aarch64-linux : 6.41 constructions par heure
- @end example
- @cindex intégration continue, statistiques
- Comme vous pouvez le voir, elle rapporte le pourcentage des paquets pour
- lesquels des substituts sont disponibles sur le serveur — indépendamment du
- fait que les substituts soient activés, et indépendamment du fait que la
- clef de signature du serveur soit autorisée. Elle rapporte aussi la taille
- des archives compressées fournies par le serveur, la taille des éléments du
- dépôt correspondant dans le dépôt (en supposant que la déduplication soit
- désactivée) et la vitesse du serveur. La deuxième partie donne des
- statistiques sur l'intégration continue (CI), si le serveur le supporte.
- Pour cela, @command{guix weather} récupère par HTTP(S) les métadonnées
- (@dfn{narinfos}@ de tous les éléments du dépôts pertinents. Comme
- @command{guix challenge}, il ignore les signatures de ces substituts, ce qui
- n'est pas dangereux puisque la commande ne fait que récupérer des
- statistiques et n'installe pas ces substituts.
- Entre autres choses, il est possible de demander des types de système
- particuliers et des ensembles de paquets particuliers. Les options
- disponibles sont listées plus bas.
- @table @code
- @item --substitute-urls=@var{urls}
- @var{urls} est la liste des URL des serveurs de substituts séparés par des
- espaces. Lorsque cette option n'est pas renseignée, l'ensemble des serveurs
- de substituts par défaut est utilisé.
- @item --system=@var{système}
- @itemx -s @var{système}
- Effectue des requêtes pour les substituts @var{système} — p.@: ex.@:
- @code{aarch64-linux}. Cette option peut être répétée, auquel cas
- @command{guix weather} demandera les substituts de plusieurs types de
- systèmes.
- @item --manifest=@var{fichier}
- Plutôt que de demander des substituts pour tous les paquets, demande
- uniquement les paquets spécifiés dans @var{fichier}. @var{fichier} doit
- contenir un @dfn{manifeste} comme avec l'option @code{-m} de @command{guix
- package} (@pxref{Invoquer guix package}).
- @end table
- @node Invoquer guix processes
- @section Invoquer @command{guix processes}
- La commande @command{guix processes} peut être utile pour les développeurs
- et les administrateurs systèmes, surtout sur des machines multi-utilisateurs
- et sur les fermes de construction : elle liste les sessions actuelles (les
- connexions au démon), ainsi que des informations sur les processus en
- question@footnote{Les sessions distantes, lorsque @command{guix-daemon} est
- démarré avec @option{--listen} en spécifiant un point d'entrée TCP, ne sont
- @emph{pas} listées.}. Voici un exemple des informations qu'elle renvoie :
- @example
- $ sudo guix processes
- SessionPID: 19002
- ClientPID: 19090
- ClientCommand: guix environment --ad-hoc python
- SessionPID: 19402
- ClientPID: 19367
- ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
- SessionPID: 19444
- ClientPID: 19419
- ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
- LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
- LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
- LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
- ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
- ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
- ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
- @end example
- Dans cet exemple, on voit que @command{guix-daemon} a trois clients directs
- : @command{guix environment}, @command{guix publish} et l'outil
- d'intégration continue Cuirass ; leur identifiant de processus (PID) est
- donné par le champ @code{ClientPID}. Le champ @code{SessionPID} fournit le
- PID du sous-processus @command{guix-daemon} de cette session particulière.
- Les champs @code{LockHeld} montrent quels éléments du dépôt sont
- actuellement verrouillés par cette session, ce qui correspond aux éléments
- du dépôt qui sont en train d'être construits ou d'être substitués (le champ
- @code{LockHeld} n'est pas montré si @command{guix processes} n'est pas lancé
- en root). Enfin, en regardant le champ @code{ChildProcess}, on comprend que
- ces trois constructions sont déchargées (@pxref{Réglages du délestage du démon}).
- La sortie est dans le format Recutils pour qu'on puisse utiliser la commande
- @command{recsel} pour sélectionner les sessions qui nous intéressent
- (@pxref{Selection Expressions,,, recutils, GNU recutils manual}). Par
- exemple, la commande montre la ligne de commande et le PID du client qui
- effectue la construction d'un paquet Perl :
- @example
- $ sudo guix processes | \
- recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
- ClientPID: 19419
- ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
- @end example
- @c *********************************************************************
- @node Distribution GNU
- @chapter Distribution GNU
- @cindex Distribution Système Guix
- @cindex GuixSD
- Guix fournit aussi une distribution du système GNU contenant uniquement des
- logiciels libres@footnote{Le terme « libre » se réfère ici bien sûr à
- @url{http://www.gnu.org/philosophy/free-sw.fr.html,la liberté offerte à
- l'utilisateur de ces logiciels}.}. On peut installer la distribution
- elle-même (@pxref{Installation du système}), mais on peut aussi installer Guix
- comme gestionnaire de paquets par dessus un système GNU/Linux déjà installé
- (@pxref{Installation}). Pour distinguer ces deux cas, on appelle la
- distribution autonome « Distribution Système Guix » ou GuixSD.
- la distribution fournit les paquets cœur de GNU comme la GNU libc, GCC et
- Binutils, ainsi que de nombreuses applications GNU et non-GNU. La liste
- complète des paquets disponibles se trouve
- @url{http://www.gnu.org/software/guix/packages,en ligne} ou en lançant
- @command{guix package} (@pxref{Invoquer guix package}) :
- @example
- guix package --list-available
- @end example
- Notre but est de fournir une distribution logicielle entièrement libre de
- GNU/Linux et d'autres variantes de GNU, en se concentrant sur la promotion
- et l'intégration étroite des composants GNU en insistant sur les programmes
- et les outils qui aident l'utilisateur à exercer ses libertés.
- Les paquets sont actuellement disponibles pour les plateformes suivantes :
- @table @code
- @item x86_64-linux
- l'architecture Intel et AMD @code{x86_64} avec le noyau Linux-libre ;
- @item i686-linux
- l'architecture Intel 32-bits (IA32) avec le noyau Linux-libre ;
- @item armhf-linux
- l'architecture ARMv7-A avec gestion des flottants matérielle, Thumb-2 et
- NEON, avec l'interface binaire applicative (ABI) EABI hard-float et le noyau
- Linux-libre ;
- @item aarch64-linux
- les processeurs ARMv8-A 64-bits en little-endian avec le noyau Linux-libre.
- Le support est actuellement expérimental et limité. @xref{Contribuer},
- pour savoir comment aider !
- @item mips64el-linux
- les processeurs MIPS 64-bits little-endian, spécifiquement la série
- Loongson, ABI n32, avec le noyau Linux-libre.
- @end table
- GuixSD lui-même est actuellement disponible sur @code{i686} et
- @code{x86_64}.
- @noindent
- Pour des informations sur comment porter vers d'autres architectures et
- d'autres noyau, @pxref{Porter}.
- @menu
- * Installation du système:: Installer le système d'exploitation complet.
- * Configuration système:: Configurer le système d'exploitation.
- * Documentation:: Visualiser les manuels d'utilisateur des
- logiciels.
- * Installer les fichiers de débogage:: Nourrir le débogueur.
- * Mises à jour de sécurité:: Déployer des correctifs de sécurité
- rapidement.
- * Modules de paquets:: Les paquets du point de vu du programmeur.
- * Consignes d'empaquetage:: Faire grandir la distribution.
- * Bootstrapping:: GNU/Linux depuis zéro.
- * Porter:: Cibler une autre plateforme ou un autre noyau.
- @end menu
- La construction de cette distribution est un effort collaboratif et nous
- vous invitons à nous rejoindre ! @xref{Contribuer}, pour des informations
- sur la manière de nous aider.
- @node Installation du système
- @section Installation du système
- @cindex installer GuixSD
- @cindex Distribution Système Guix
- Cette section explique comment installer la distribution système Guix
- (GuixSD) sur votre machine. Le gestionnaire de paquets Guix peut aussi être
- installé sur un système GNU/Linux déjà installé, @pxref{Installation}.
- @ifinfo
- @quotation Remarque
- @c This paragraph is for people reading this from tty2 of the
- @c installation image.
- Vous lisez cette documentation avec un lecteur Info. Pour des détails sur
- son utilisation, appuyez sur la touche @key{ENTRÉE} (« Entrée » ou « à la
- ligne ») sur le lien suivant : @pxref{Top, Info reader,, info-stnd,
- Stand-alone GNU Info}. Appuyez ensuite sur @kbd{l} pour revenir ici.
- Autrement, lancez @command{info info} dans un autre tty pour garder ce
- manuel ouvert.
- @end quotation
- @end ifinfo
- @menu
- * Limitations:: Ce à quoi vous attendre.
- * Considérations matérielles:: Matériel supporté.
- * Installation depuis une clef USB ou un DVD:: Préparer le média
- d'installation.
- * Préparer l'installation:: Réseau, partitionnement, etc.
- * Effectuer l'installation:: Pour de vrai.
- * Installer GuixSD dans une VM:: Jouer avec GuixSD@.
- * Construire l'image d'installation:: D'où vient tout cela.
- @end menu
- @node Limitations
- @subsection Limitations
- À la version @value{VERSION}, la distribution système Guix (GuixSD) n'est
- pas prête pour la production. Elle peut contenir des bogues et ne pas avoir
- certaines fonctionnalités importantes. Ainsi, si vous cherche un système de
- production stable qui respecte votre liberté en tant qu'utilisateur, une
- bonne solution consiste à utiliser
- @url{http://www.gnu.org/distros/free-distros.html, une des distributions
- GNU/Linux mieux établie}. Nous espérons que vous pourrez bientôt passer à
- GuixSD sans peur, bien sûr. Pendant ce temps, vous pouvez aussi utiliser
- votre distribution actuelle et essayer le gestionnaire de paquet par dessus
- celle-ci (@pxref{Installation}).
- Avant de procéder à l'installation, soyez conscient de ces limitations les
- plus importantes qui s'appliquent à la version @value{VERSION} :
- @itemize
- @item
- Le procédé d'installation n'a pas d'interface utilisateur graphique et
- requiert une certaine familiarité avec GNU/Linux (voir les sous-sections
- suivantes pour avoir un aperçu de ce que cela signifie).
- @item
- LVM (gestionnaire de volumes logiques) n'est pas supporté.
- @item
- De plus en plus de services systèmes sont fournis (@pxref{Services}) mais
- certains manquent toujours cruellement.
- @item
- Plus de 7@tie{}500 paquets sont disponibles, mais vous pourrez parfois
- trouver qu'un paquet utile est absent.
- @item
- GNOME, Xfce, LXDE et Enlightenment sont disponibles (@pxref{Services de bureaux}), ainsi qu'un certain nombre de gestionnaires de fenêtres X11.
- cependant, certaines applications graphiques peuvent manquer, ainsi que KDE.
- @end itemize
- Vous êtes avertis ! Mais plus qu'un avertissement, c'est une invitation à
- rapporter les problèmes (et vos succès !) et à nous rejoindre pour améliorer
- la distribution. @xref{Contribuer}, pour plus d'info.
- @node Considérations matérielles
- @subsection Considérations matérielles
- @cindex support matériel sur GuixSD
- GNU@tie{}GuixSD se concentre sur le respect des libertés de ses
- utilisateurs. Il est construit autour du noyau Linux-libre, ce qui signifie
- que seuls les matériels pour lesquels des pilotes logiciels et des
- microgiciels libres sont disponibles sont supportés. De nos jours, une
- grande gamme de matériel qu'on peut acheter est supporté par GNU/Linux-libre
- — des claviers aux cartes graphiques en passant par les scanners et les
- contrôleurs Ethernet. Malheureusement, il reste des produit dont les
- fabriquants refusent de laisser le contrôle aux utilisateurs sur leur propre
- utilisation de l'ordinateur, et ces matériels ne sont pas supportés par
- GuixSD.
- @cindex WiFi, support matériel
- L'un des types de matériels où les pilotes ou les microgiciels sont le moins
- disponibles sont les appareils WiFi. Les appareils WiFi connus pour
- fonctionner sont ceux qui utilisent des puces Atheros (AR9271 et AR7010) qui
- correspondent au pilote @code{ath9k} de Linux-libre, et ceux qui utilisent
- des puces Broadcom/AirForce (BCM43xx avec la révision Wireless-Core 5), qui
- correspondent au pilote @code{b43-open} de Linux-libre. Des microgiciels
- libres existent pour les deux et sont disponibles directement sur GuixSD,
- dans @var{%base-firmware} (@pxref{Référence de système d'exploitation,
- @code{firmware}}).
- @cindex RYF, Respects Your Freedom
- La @uref{https://www.fsf.org/, Free Software Foundation} a un programme de
- certification nommé @uref{https://www.fsf.org/ryf, @dfn{Respects Your
- Freedom}} (RYF), pour les produits matériels qui respectent votre liberté et
- votre vie privée en s'assurant que vous avez le contrôle sur l'appareil.
- Nous vous encourageons à vérifier la liste des appareils certifiés par RYF.
- Une autre ressource utile est le site web @uref{https://www.h-node.org/,
- H-Node}. Il contient un catalogue d'appareils avec des informations sur
- leur support dans GNU/Linux.
- @node Installation depuis une clef USB ou un DVD
- @subsection Installation depuis une clef USB ou un DVD
- Une image d'installation ISO-9660 téléchargeable depuis
- @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{système}.iso.xz}
- peut être écrite sur une clef USB ou gravée sur un DVD, où @var{système} est
- l'une de ces valeurs :
- @table @code
- @item x86_64-linux
- pour un système GNU/Linux sur un CPU compatible Intel/AMD 64-bits ;
- @item i686-linux
- pour un système GNU/Linux sur un CPU compatible Intel 32-bits ;
- @end table
- @c start duplication of authentication part from ``Binary Installation''
- Assurez-vous de télécharger les fichiers @file{.sig} associés et de vérifier
- l'authenticité de l'image avec, de cette manière :
- @example
- $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
- $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
- @end example
- Si cette commande échoue parce que vous n'avez pas la clef publique requise,
- lancez cette commande pour l'importer :
- @example
- $ gpg --keyserver @value{KEY-SERVER} \
- --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
- @end example
- @noindent
- @c end duplication
- et relancez la commande @code{gpg --verify}.
- Cette image contient les outils nécessaires à l'installation. Elle est
- faite pour être copiée @emph{telle quelle} sur une clef USB assez grosse ou
- un DVD.
- @unnumberedsubsubsec Copie sur une clef USB
- Pour copier l'image sur une clef USB, suivez ces étapes :
- @enumerate
- @item
- Décompressez l'image avec la commande @command{xz} :
- @example
- xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
- @end example
- @item
- Insérez la clef USB de 1@tie{}Gio ou plus dans votre machine et déterminez
- son nom d'appareil. En supposant que la clef usb est connue sous le nom de
- @file{/dev/sdX}, copiez l'image avec :
- @example
- dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
- sync
- @end example
- Accéder à @file{/dev/sdX} requiert généralement les privilèges
- super-utilisateur.
- @end enumerate
- @unnumberedsubsubsec Graver sur un DVD
- Pour copier l'image sur un DVD, suivez ces étapes :
- @enumerate
- @item
- Décompressez l'image avec la commande @command{xz} :
- @example
- xz -d guixsd-install-@value{VERSION}.@var{système}.iso.xz
- @end example
- @item
- Insérez un DVD vierge dans votre machine et déterminez son nom d'appareil.
- En supposant que le DVD soit connu sont le nom de @file{/dev/srX}, copiez
- l'image avec :
- @example
- growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
- @end example
- Accéder à @file{/dev/srX} requiert généralement les privilèges
- super-utilisateur.
- @end enumerate
- @unnumberedsubsubsec Démarrage
- Une fois que c'est fait, vous devriez pouvoir redémarrer le système et
- démarrer depuis la clef USB ou le DVD. Pour cela, vous devrez généralement
- entrer dans le menu de démarrage BIOS ou UEFI, où vous pourrez choisir de
- démarrer sur la clef USB.
- @xref{Installer GuixSD dans une VM}, si, à la place, vous souhaitez installer
- GuixSD dans une machine virtuelle (VM).
- @node Préparer l'installation
- @subsection Préparer l'installation
- Une fois que vous avez démarré votre ordinateur sur le média d'installation,
- vous devriez vous retrouver sur un prompt en root. Plusieurs TTY sont
- configurées et peuvent être utilisés pour lancer des commandes en root. Le
- TTY2 affiche cette documentation, dans la quelle vous pouvez naviguer avec
- les commandes du lecteur Info (@pxref{Top,,, info-stnd, Stand-alone GNU
- Info}). Le démon de souris GPM tourne sur le système d'installation, ce qui
- vous permet de sélectionner du texte avec le bouton gauche de la souris et
- de le coller en appuyant sur la molette.
- @quotation Remarque
- L'installation nécessite un accès au réseau pour que les dépendances
- manquantes de votre configuration système puissent être téléchargées. Voyez
- la section « réseau » plus bas.
- @end quotation
- Le système d'installation inclus plusieurs outils usuels pour requis pour
- cette tâche. Mais c'est aussi un système GuixSD complet, ce qui signifie
- que vous pouvez installer des paquets supplémentaires si vous en avez
- besoin, avec @command{guix package} (@pxref{Invoquer guix package}).
- @subsubsection Disposition du clavier
- @cindex disposition du clavier
- L'image d'installation utilise la disposition clavier qwerty (US). Si vous
- voulez la changer, vous pouvez utiliser la commande @command{loadkeys}. Par
- exemple, la commande suivante sélectionne la disposition Dvorak :
- @example
- loadkeys dvorak
- @end example
- Consultez les fichiers dans @file{/run/current-system/profile/share/keymaps}
- pour trouver une liste des dispositions disponibles. Lancez @command{man
- loadkey} pour plus d'informations.
- @subsubsection Réseau
- Lancez la commande suivante pour voir comment vos interfaces réseau sont
- appelées :
- @example
- ifconfig -a
- @end example
- @noindent
- @dots{} ou, avec la commande spécifique à GNU/Linux @command{ip} :
- @example
- ip a
- @end example
- @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
- Les interfaces filaires ont un nom qui commence par @samp{e} ; par exemple,
- l'interface qui correspond au premier contrôleur Ethernet sur la carte mère
- est appelé @samp{eno1}. Les interfaces sans-fil ont un nom qui commence par
- @samp{w}, comme @samp{w1p2s0}.
- @table @asis
- @item Connexion filaire
- Pour configure une connexion filaire, lancez la commande suivante, en
- remplaçant @var{interface} par le nom de l'interface filaire que vous voulez
- utiliser.
- @example
- ifconfig @var{interface} up
- @end example
- @item Connexion sans-fil
- @cindex sans-fil
- @cindex WiFi
- Pour configurer le réseau sans-fil, vous pouvez créer un fichier de
- configuration pour l'outil de configuration @command{wpa_supplicant} (son
- emplacement importe peu) avec l'un des éditeurs de texte disponibles comme
- @command{nano} :
- @example
- nano wpa_supplicant.conf
- @end example
- Par exemple, la déclaration qui suit peut aller dans ce fichier et
- fonctionnera pour plusieurs réseaux sans-fil, si vous donnez le vrai SSID et
- la phrase de passe pour le réseau auquel vous vous connectez :
- @example
- network=@{
- ssid="@var{mon-ssid}"
- key_mgmt=WPA-PSK
- psk="la phrase de passe secrète du réseau"
- @}
- @end example
- Démarrez le service sans-file et lancez-le en tache de fond avec la commande
- suivante (en remplaçant @var{interface} par le nom de l'interface réseau que
- vous voulez utiliser) :
- @example
- wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
- @end example
- Lancez @command{man wpa_supplicant} pour plus d'informations.
- @end table
- @cindex DHCP
- À partir de ce moment, vous avez besoin d'une adresse IP. Sur les réseaux
- où les IP sont automatiquement attribuée par DHCP, vous pouvez lancer :
- @example
- dhclient -v @var{interface}
- @end example
- Essayez de pinger un serveur pour voir si le réseau fonctionne :
- @example
- ping -c 3 gnu.org
- @end example
- Mettre en place un accès réseau est presque toujours une nécessité parce que
- l'image ne contient pas tous les logiciels et les outils dont vous pourriez
- avoir besoin.
- @cindex installer par SSH
- Si vous le souhaitez, vous pouvez continuer l'installation à distance en
- démarrant un serveur SSH :
- @example
- herd start ssh-daemon
- @end example
- Assurez-vous soit de définir un mot de passe avec @command{passwd}, soit de
- configurer l'authentification par clef OpenSSH avant de vous connecter.
- @subsubsection Partitionnement
- À moins que vous ne l'ayez déjà fait, l'étape suivante consiste à
- partitionner le disque puis à formater les partitions cibles.
- L'image d'installation inclus plusieurs outils de partitionnement, dont
- Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
- @command{fdisk}, et @command{cfdisk}. Lancez-en un et paramétrez votre
- disque avec le partitionnement qui vous convient :
- @example
- cfdisk
- @end example
- Si votre disque utilise le format des tables de partitions GUID (GPT) et que
- vous souhaitez installer un GRUB pour système BIOS (c'est le cas par
- défaut), assurez-vous de créer qu'une partition de démarrage BIOS soit bien
- disponible (@pxref{BIOS installation,,, grub, GNU GRUB manual}).
- @cindex EFI, installation
- @cindex UEFI, installation
- @cindex ESP, partition système EFI
- Si vous souhaitez à la place utilise GRUB pour système EFI, vous devrez
- avoir une @dfn{partition système EFI} (ESP) en FAT32. Cette partition
- devrait être montée dans @file{/boot/efi} et doit avoir le drapeau
- @code{esp}. P.@: ex.@: pour @command{parted} :
- @example
- parted /dev/sda set 1 esp on
- @end example
- @quotation Remarque
- @vindex grub-bootloader
- @vindex grub-efi-bootloader
- Vous n'êtes pas sûr de savoir si vous devez utiliser un GRUB EFI ou BIOS ?
- Si le répertoire @file{/sys/firmware/efi} existe sur l'image d'installation,
- vous devriez probablement effectuer une installation EFI, avec
- @code{grub-efi-bootloader}. Sinon, vous devriez utiliser le GRUB en BIOS,
- @code{grub-bootloader}. @xref{Configuration du chargeur d'amorçage} pour plus
- d'information sur le chargeur d'amorçage.
- @end quotation
- Une fois que vous avez fini le partitionnement du disque dur cible, vous
- devez créer un système de fichier sur les partitions@footnote{Actuellement
- GuixSD ne supporte que les systèmes de fichiers ext4 et btrfs. En
- particulier, le code qui lit les UUID des systèmes de fichiers et les
- étiquettes ne fonctionne que pour ces types de systèmes de fichiers.}. Pour
- l'ESP, si vous en avez une et en supposant que ce soit @file{/dev/sda1},
- lancez :
- @example
- mkfs.fat -F32 /dev/sda1
- @end example
- Préférez assigner une étiquette au système de fichier pour que vous puissiez
- vous y référer de manière fiable dans la déclaration @code{file-system}
- (@pxref{Systèmes de fichiers}). On le fait habituellement avec l'option @code{-L}
- de @command{mkfs.ext4} et des commandes liées. Donc, en supposant que la
- partition racine soit sur @file{/dev/sda2}, on peut créer un système de
- fichier avec pour étiquette @code{my-root} avec :
- @example
- mkfs.ext4 -L my-root /dev/sda2
- @end example
- @cindex chiffrement du disque
- Si vous voulez plutôt chiffrer la partition racine, vous pouvez utiliser les
- utilitaires Cryptsetup et LUKS pour cela (voir @inlinefmtifelse{html,
- @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
- @code{man cryptsetup}} pour plus d'informations). En supposant que vous
- voulez stocker la partition racine sur @file{/dev/sda2}, la séquence de
- commandes suivante vous mènerait à ce résultat :
- @example
- cryptsetup luksFormat /dev/sda2
- cryptsetup open --type luks /dev/sda2 my-partition
- mkfs.ext4 -L my-root /dev/mapper/my-partition
- @end example
- Une fois cela effectué, montez le système de fichier cible dans @file{/mnt}
- avec une commande comme (de nouveau, en supposant que @code{my-root} est
- l'étiquette du système de fichiers racine) :
- @example
- mount LABEL=my-root /mnt
- @end example
- Montez aussi tous les systèmes de fichiers que vous voudriez utiliser sur le
- système cible relativement à ce chemin. Si vous avez un @file{/boot} sur
- une partition séparé par exemple, montez-le sur @file{/mnt/boot} maintenant
- pour qu'il puisse être trouvé par @code{guix system init} ensuite.
- Enfin, si vous souhaitez utiliser une ou plusieurs partitions de swap
- (@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
- Manual}), assurez-vous de les initialiser avec @command{mkswap}. En
- supposant que vous avez une partition de swap sur @file{/dev/sda3}, vous
- pouvez lancer :
- @example
- mkswap /dev/sda3
- swapon /dev/sda3
- @end example
- Autrement, vous pouvez utiliser un fichier de swap. Par exemple, en
- supposant que dans le nouveau système vous voulez utiliser le fichier
- @file{/swapfile} comme fichier de swap, vous lanceriez@footnote{Cet exemple
- fonctionnera sur plusieurs types de systèmes de fichiers (p.@: ex.@: ext4).
- Cependant, pour les systèmes de fichiers qui utilisent la copie sur écriture
- (COW) comme btrfs, les étapes requises peuvent varier. Pour plus de
- détails, regardez les pages de manuel de @command{mkswap} et
- @command{swapon}.} :
- @example
- # Cela représente 10 Gio d'espace d'échange. Ajustez « count » pour changer la taille.
- dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
- # Par sécurité, laissez le fichier en lecture et en écriture uniquement pour root.
- chmod 600 /mnt/swapfile
- mkswap /mnt/swapfile
- swapon /mnt/swapfile
- @end example
- Remarquez que si vous avez chiffré la partition racine et créé un fichier
- d'échange dans son système de fichier comme décrit ci-dessus, alors le
- chiffrement protégera aussi le fichier d'échange, comme n'importe quel
- fichier de ce système de fichiers.
- @node Effectuer l'installation
- @subsection Effectuer l'installation
- Lorsque la partition cible est prête et que les autres partitions sont
- montées, on est prêt à commencer l'installation. Commencez par :
- @example
- herd start cow-store /mnt
- @end example
- Cela rend @file{/gnu/store} capable de faire de la copie sur écriture, de
- sorte que les paquets ajoutés pendant l'installation sont écrits sur le
- disque cible sur @file{/mnt} plutôt que gardés en mémoire. Cela est
- nécessaire parce que la première phase de la commande @command{guix system
- init} (voir plus bas) implique de télécharger ou de construire des éléments
- de @file{/gnu/store} qui est initialement un système de fichiers en mémoire.
- Ensuite, vous devrez modifier un fichier et fournir la déclaration du
- système à installer. Pour cela, le système d'installation propose trois
- éditeurs de texte. Nous recommandons GNU nano (@pxref{Top,,, nano, GNU nano
- Manual}), qui supporte la coloration syntaxique la correspondance de
- parenthèses ; les autres éditeurs sont GNU Zile (un clone d'Emacs) et nvi
- (un clone de l'éditeur @command{vi} original de BSD). Nous recommandons
- vivement de stocker ce fichier sur le système de fichier racine cible,
- disons en tant que @file{/mnt/etc/config.scm}. Sinon, vous perdrez votre
- fichier de configuration une fois que vous aurez redémarré sur votre nouveau
- système.
- @xref{Utiliser le système de configuration}, pour un aperçu de comment créer votre
- fichier de configuration. Les exemples de configuration dont on parle dans
- cette section sont disponibles dans @file{/etc/configuration} sur l'image
- d'installation. Ainsi, pour commencer avec une configuration du système qui
- fournit un serveur d'affichage graphique (un système de « bureau »), vous
- pouvez lancer ce qui suit :
- @example
- # mkdir /mnt/etc
- # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
- # nano /mnt/etc/config.scm
- @end example
- Vous devriez faire attention à ce que contient votre fichier de
- configuration, en particulier :
- @itemize
- @item
- Assurez-vous que la forme @code{bootloader-configuration} se réfère à la
- cible où vous voulez installer GRUB. Elle devrait aussi mentionner
- @code{grub-bootloader} si vous installer GRUB en mode BIOS (ou « legacy »)
- ou @code{grub-efi-bootloader} pour les système UEFI plus récents. Pour les
- anciens systèmes, le champs @code{target} contient un périphérique comme
- @code{/dev/sda} ; pour les systèmes UEFI il contient un chemin vers une
- partition EFI montée, comme @code{/boot/efi}, et assurez-vous que ce chemin
- est bien monté.
- @item
- Assurez-vous que les étiquettes de vos systèmes de fichiers correspondent
- aux valeurs de leur champs @code{device} dans votre configuration
- @code{file-system}, en supposant que la configuration @code{file-system}
- utilise la procédure @code{file-system-label} dans son champ @code{device}.
- @item
- Si vous avez des partitions RAID ou chiffrées, assurez-vous d'ajouter un
- champ @code{mapped-device} pour les décrire (@pxref{Périphériques mappés}).
- @end itemize
- Une fois que vous avez fini les préparatifs sur le fichier de configuration,
- le nouveau système peut être initialisé (rappelez-vous que le système de
- fichiers racine cible est dans @file{/mnt}) :
- @example
- guix system init /mnt/etc/config.scm /mnt
- @end example
- @noindent
- Cela copie tous les fichiers nécessaires et installe GRUB sur
- @file{/dev/sdX} à moins que vous ne passiez l'option
- @option{--no-bootloader}. Pour plus d'informations, @pxref{Invoquer guix system}. Cette commande peut engendrer des téléchargements ou des
- constructions pour les paquets manquants, ce qui peut prendre du temps.
- Une fois que cette commande a terminée — et on l'espère réussi ! — vous
- pouvez lancer @command{reboot} et démarrer sur votre nouveau système. Le
- mot de passe @code{root} est d'abord vide ; les mots de passe des autres
- utilisateurs doivent être initialisés avec la commande @command{passwd} en
- tant que @code{root}, à mois que votre configuration ne spécifie autre chose
- (@pxref{user-account-password, mot de passe des comptes utilisateurs}).
- @cindex mettre à jour GuixSD
- À partir de maintenant, vous pouvez mettre à jour GuixSD lorsque vous le
- souhaitez en lançant @command{guix pull} en tant que @code{root}
- (@pxref{Invoquer guix pull}), puis en lançant @command{guix system
- reconfigure} pour construire une nouvelle génération du système avec les
- derniers paquets et les derniers services (@pxref{Invoquer guix system}).
- Nous vous recommandons de le faire régulièrement pour que votre système
- inclus les dernières mises à jour de sécurité (@pxref{Mises à jour de sécurité}).
- Rejoignez-nous sur @code{#guix} sur le réseau IRC Freenode ou sur
- @file{guix-devel@@gnu.org} pour partager votre expérience — bonne ou
- mauvaise.
- @node Installer GuixSD dans une VM
- @subsection Installer GuixSD sur une machine virtuelle
- @cindex machine virtuelle, installation de GuixSD
- @cindex serveur privé virtuel (VPS)
- @cindex VPS (serveur privé virtuel)
- Si vous souhaitez installer GuixSD sur une machine virtuelle (VM) ou un
- serveur privé virtuel (VPS) plutôt que sur votre machine chérie, cette
- section est faite pour vous.
- Pour démarrer une VM @uref{http://qemu.org/,QEMU} pour installer GuixSD sur
- une image disque, suivez ces étapes :
- @enumerate
- @item
- Tout d'abord récupérez et décompressez l'image d'installation de GuixSD
- comme décrit précédemment (@pxref{Installation depuis une clef USB ou un DVD}).
- @item
- Créez une image disque qui contiendra le système installé. Pour créer une
- image qcow2, utilise la commande @command{qemu-img} :
- @example
- qemu-img create -f qcow2 guixsd.img 50G
- @end example
- Le fichier qui en résulte sera bien plus petit que les 50 Go (habituellement
- moins de 1 Mo) mais il grossira au fur et à mesure que le stockage virtuel
- grossira.
- @item
- Démarrez l'image d'installation USB dans une VM :
- @example
- qemu-system-x86_64 -m 1024 -smp 1 \
- -net user -net nic,model=virtio -boot menu=on \
- -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
- -drive file=guixsd.img
- @end example
- L'ordre des périphérique est important
- Dans la console de la VM, appuyez rapidement sur @kbd{F12} pour entrer dans
- le menu de démarrage. Ensuite appuyez sur @kbd{2} et la touche @kbd{Entrée}
- pour valider votre choix.
- @item
- Vous êtes maintenant root dans la VM, continuez en suivant la procédure
- d'installation. @xref{Préparer l'installation}, et suivez les
- instructions.
- @end enumerate
- Une fois l'installation terminée, vous pouvez démarrer le système dans votre
- image @file{guixsd.img}. @xref{Lancer GuixSD dans une VM}, pour une manière de
- faire.
- @node Construire l'image d'installation
- @subsection Construire l'image d'installation
- @cindex image d'installation
- L'image d'installation décrite plus haut a été construite avec la commande
- @command{guix system}, plus précisément :
- @example
- guix system disk-image gnu/system/install.scm
- @end example
- Regardez le fichier @file{gnu/system/install.scm} dans l'arborescence des
- sources et regardez aussi @ref{Invoquer guix system} pour plus
- d'informations sur l'image d'installation.
- @subsection Construire l'image d'installation pour les cartes ARM
- De nombreuses cartes ARM requièrent une variante spécifique du chargeur
- d'amorçage @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
- Si vous construisez une image disque et que le chargeur d'amorçage n'est pas
- disponible autrement (sur un autre périphérique d'amorçage etc), il est
- recommandé de construire une image qui inclus le chargeur d'amorçage, plus
- précisément :
- @example
- guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
- @end example
- @code{A20-OLinuXino-Lime2} est le nom de la carte. Si vous spécifiez une
- carte invalide, une liste de cartes possibles sera affichée.
- @node Configuration système
- @section Configuration système
- @cindex configuration du système
- La distribution système Guix utilise un mécanisme de configuration du
- système cohérent. On veut dire par là que tous les aspects de la
- configuration globale du système — comme la disponibilité des services
- système, des fuseaux horaires, des paramètres linguistiques, des comptes
- utilisateurs — sont déclarés à un seul endroit. Une telle
- @dfn{configuration système} peut être @dfn{instanciée}, c'est-à-dire entrer
- en vigueur.
- @c Yes, we're talking of Puppet, Chef, & co. here. ↑
- L'un des avantages de placer toute la configuration du système sous le
- contrôle de Guix est de permettre les mises à jour transactionnelles du
- système ce qui rend possible le fait de revenir en arrière à une
- instanciation précédent du système, si quelque chose se passait mal avec le
- nouveau (@pxref{Fonctionnalités}). Un autre avantage est de rendre facile la
- réplication de la même configuration sur plusieurs machines différentes ou à
- différents moments dans le temps, sans avoir à recourir à des outils
- d'administrations supplémentaires au-dessus des outils du système.
- Cette section décrit ce mécanisme. Tout d'abord nous nous concentrons sur
- le point de vue de l'administrateur système en expliquant comment le système
- est configuré et instancié. Ensuite nous montrons comment ce mécanisme peut
- être étendu, par exemple pour supporter de nouveaux services systèmes.
- @menu
- * Utiliser le système de configuration:: Personnaliser votre système
- GNU@.
- * Référence de système d'exploitation:: Détail sur la déclaration de
- système d'exploitation.
- * Systèmes de fichiers:: Configurer les montages de systèmes de
- fichiers.
- * Périphériques mappés:: Gestion des périphériques de bloc.
- * Comptes utilisateurs:: Spécifier des comptes utilisateurs.
- * Régionalisation:: Paramétrer la langue et les conventions
- culturelles.
- * Services:: Spécifier les services du système.
- * Programmes setuid:: Programmes tournant avec les privilèges root.
- * Certificats X.509:: Authentifier les serveurs HTTPS@.
- * Name Service Switch:: Configurer le « name service switch » de la
- libc.
- * Disque de RAM initial:: Démarrage de Linux-Libre.
- * Configuration du chargeur d'amorçage:: Configurer le chargeur
- d'amorçage.
- * Invoquer guix system:: Instantier une configuration du système.
- * Lancer GuixSD dans une VM:: Comment lancer GuixSD dans une machine
- virtuelle.
- * Définir des services:: Ajouter de nouvelles définitions de services.
- @end menu
- @node Utiliser le système de configuration
- @subsection Utiliser le système de configuration
- Le système d'exploitation est configuré en fournissant une déclaration
- @code{operating-system} dans un fichier qui peut être passé à la command
- @command{guix system} (@pxref{Invoquer guix system}). Une configuration
- simple, avec les services systèmes par défaut, le noyau Linux-Libre par
- défaut, un disque de RAM initial et un chargeur d'amorçage ressemble à ceci
- :
- @findex operating-system
- @lisp
- @include os-config-bare-bones.texi
- @end lisp
- Cet exemple devrait se comprendre de lui-même. Certains champs définis
- ci-dessus, comme @code{host-name} et @code{bootloader} sont obligatoires.
- D'autres comme @code{packages} et @code{services} peuvent être omis auquel
- cas ils ont une valeur par défaut.
- Ci-dessous nous discutons des effets de certains des champs les plus
- importants (@pxref{Référence de système d'exploitation}, pour des détails sur tous
- les champs disponibles) et comment @dfn{instancier} le système
- d'exploitation avec @command{guix system}.
- @unnumberedsubsubsec Bootloader
- @cindex ancien système de démarrage, sur les machines Intel
- @cindex démarrage BIOS, sur les machines Intel
- @cindex démarrage UEFI
- @cindex démarrage EFI
- Le champ @code{bootloader} décrit la méthode qui sera utilisée pour démarrer
- votre système. Les machines basées sur les processeurs Intel peuvent
- démarrer dans l'ancien mode BIOS, comme dans l'exemple au-dessus.
- Cependant, les machines plus récentes s'appuient sur l'UEFI (@dfn{Unified
- Extensible Firmware Interface}) pour démarrer. Dans ce cas, le champ
- @code{bootloader} devrait contenir quelque chose comme cela :
- @example
- (bootloader-configuration
- (bootloader grub-efi-bootloader)
- (target "/boot/efi"))
- @end example
- @xref{Configuration du chargeur d'amorçage}, pour plus d'informations sur les options de
- configuration disponibles.
- @unnumberedsubsubsec Paquets visibles sur tout le système
- @vindex %base-packages
- Le champ @code{packages} liste les paquets qui seront visibles sur tout le
- système, pour tous les comptes utilisateurs — c.-à-d.@: dans la variable
- d'environnement @code{PATH} de tous les utilisateurs — en plus des profils
- utilisateurs (@pxref{Invoquer guix package}). La variable
- @var{%base-packages} fournit tous les outils qu'on pourrait attendre pour
- les taches de base de l'administrateur et de l'utilisateur — dont les GNU
- Core Utilities, les GNU Networking Utilities, l'éditeur de texte léger GNU
- Zile, @command{find}, @command{grep}, etc. L'exemple au-dessus ajoute
- GNU@tie{}Screen à ces paquets, récupéré depuis le module @code{(gnu packages
- screen)} (@pxref{Modules de paquets}). Vous pouvez utiliser la syntaxe
- @code{(list paquet sortie)} pour ajouter une sortie spécifique d'un paquet :
- @lisp
- (use-modules (gnu packages))
- (use-modules (gnu packages dns))
- (operating-system
- ;; ...
- (packages (cons (list bind "utils")
- %base-packages)))
- @end lisp
- @findex specification->package
- Se référer aux paquets par le nom de leur variable, comme @code{bind}
- ci-dessus, a l'avantage d'être sans ambiguïté ; cela permet aussi de se
- rendre rapidement compte de coquilles quand on a des « variables non liées
- ». L'inconvénient est qu'on a besoin de savoir dans quel module est défini
- le paquet, et de modifier la ligne @code{use-package-modules} en
- conséquence. Pour éviter cela, on peut utiliser la procédure
- @code{specification->package} du module @code{(gnu packages)}, qui renvoie
- le meilleur paquet pour un nom donné ou un nom et une version :
- @lisp
- (use-modules (gnu packages))
- (operating-system
- ;; ...
- (packages (append (map specification->package
- '("tcpdump" "htop" "gnupg@@2.0"))
- %base-packages)))
- @end lisp
- @unnumberedsubsubsec Services systèmes
- @cindex services
- @vindex %base-services
- Le champ @code{services} liste les @dfn{services système} à rendre
- disponible lorsque le système démarre (@pxref{Services}). La déclaration
- @code{operating-system} au-dessus spécifie que, en plus des services de
- base, on veut que le démon ssh @command{lshd} écoute sur le port 2222
- (@pxref{Services réseau, @code{lsh-service}}). Sous le capot,
- @code{lsh-service} s'arrange pour que @code{lshd} soit lancé avec les bonnes
- options de la ligne de commande, éventuellement en générant des fichiers de
- configuration (@pxref{Définir des services}).
- @cindex personnalisation des services
- @findex modify-services
- Parfois, plutôt que d'utiliser les services de base tels-quels, on peut
- vouloir les personnaliser. Pour cela, utilisez @code{modify-services}
- (@pxref{Référence de service, @code{modify-services}}) pour modifier la liste.
- Par exemple, supposons que vous souhaitiez modifier @code{guix-daemon} et
- Mingetty (l'écran de connexion en console) dans la liste
- @var{%base-services} (@pxref{Services de base, @code{%base-services}}). Pour
- cela, vous pouvez écrire ce qui suit dans votre déclaration de système
- d'exploitation :
- @lisp
- (define %my-services
- ;; Ma propre liste de services.
- (modify-services %base-services
- (guix-service-type config =>
- (guix-configuration
- (inherit config)
- (use-substitutes? #f)
- (extra-options '("--gc-keep-derivations"))))
- (mingetty-service-type config =>
- (mingetty-configuration
- (inherit config)))))
- (operating-system
- ;; @dots{}
- (services %my-services))
- @end lisp
- Cela modifie la configuration — c.-à-d.@: les paramètres du service — de
- l'instance de @code{guix-service-type}, et de toutes les instances de
- @code{mingetty-service-type} dans la liste @var{%base-services}. Remarquez
- comment on fait cela : d'abord, on s'arrange pour que la configuration de
- départ soit liée à l'identifiant @code{config} dans @var{body} puis on écrit
- @var{body} pour qu'il s'évalue en la configuration désirée. En particulier,
- remarquez comment on utilise @code{inherit} pour créer une nouvelle
- configuration qui a les même valeurs que l'ancienne configuration, avec
- seulement quelques modifications.
- @cindex chiffrement du disque
- La configuration pour une utilisation de « bureau » typique, avec une
- partition racine chiffrée, le serveur d'affichage X11, GNOME et Xfce (les
- utilisateurs peuvent choisir l'environnement de bureau sur l'écran de
- connexion en appuyant sur @kbd{F1}), la gestion du réseau, la gestion de
- l'énergie, et bien plus, ressemblerait à ceci :
- @lisp
- @include os-config-desktop.texi
- @end lisp
- Un système graphique avec un choix de gestionnaires de fenêtres légers
- plutôt que des environnement de bureaux complets ressemblerait à cela :
- @lisp
- @include os-config-lightweight-desktop.texi
- @end lisp
- Cet exemple se réfère au système de fichier @file{/boot/efi} par son UUID,
- @code{1234-ABCD}. Remplacez cet UUID par le bon UUID de votre système,
- renvoyé par la commande @command{blkid}.
- @xref{Services de bureaux}, pour la liste exacte des services fournis par
- @var{%desktop-services}. @xref{Certificats X.509}, pour des informations
- sur le paquet @code{nss-certs} utilisé ici.
- Encore une fois, @var{%desktop-services} n'est qu'une liste d'objets
- service. Si vous voulez en supprimer des services, vous pouvez le faire
- avec des procédures pour les listes (@pxref{SRFI-1 Filtering and
- Partitioning,,, guile, GNU Guile Reference Manual}). Par exemple,
- l'expression suivante renvoie une liste qui contient tous les services dans
- @var{%desktop-services} sauf le service Avahi :
- @example
- (remove (lambda (service)
- (eq? (service-kind service) avahi-service-type))
- %desktop-services)
- @end example
- @unnumberedsubsubsec Instancier le système
- En supposant que la déclaration @code{operating-system} est stockée dans le
- fichier @file{my-system-config.scm}, la commande @command{guix system
- reconfigure my-system-config.scm} instancie cette configuration et en fait
- l'entrée par défaut dans GRUB (@pxref{Invoquer guix system}).
- Pour changer la configuration du système, on met normalement à jour ce
- fichier et on relance @command{guix system reconfigure}. On ne devrait
- jamais avoir à modifier de fichiers dans @file{/etc} ou à lancer des
- commandes qui modifient l'état du système comme @command{useradd} ou
- @command{grub-install}. En fait, vous devez les éviter parce que non
- seulement ça annulerait vos garanties, mais ça empêcherait aussi de revenir
- à des versions précédents du système, si vous en avez besoin.
- @cindex revenir en arrière dans la configuration du système
- En parlant de revenir en arrière, à chaque fois que vous lancez
- @command{guix system reconfigure}, une nouvelle @dfn{génération} du système
- est crée — sans modifier ou supprimer les générations précédentes. Les
- anciennes générations du système ont une entrée dans le menu du chargeur
- d'amorçage, ce qui vous permet de démarrer dessus au cas où quelque chose se
- serait mal passé avec la dernière génération. C'est rassurant, non ? La
- commande @command{guix system list-generations} liste les générations du
- système disponibles sur le disque. Il est possible de revenir à une
- ancienne génération via les commandes @command{guix system roll-back} et
- @command{guix system switch-generation}.
- Bien que la commande @command{guix system reconfigure} ne modifiera pas les
- générations précédentes, vous devez faire attention lorsque votre génération
- actuelle n'est pas la dernière (p.@: ex.@: après avoir invoqué @command{guix
- system roll-back}), puisque l'opération pourrait remplacer une génération
- suivante (@pxref{Invoquer guix system}).
- @unnumberedsubsubsec L'interface de programmation
- Au niveau Scheme, la grosse déclaration @code{operating-system} est
- instanciée avec la procédure monadique suivante (@pxref{La monad du dépôt}) :
- @deffn {Procédure monadique} operating-system-derivation os
- Renvoie une dérivation qui construit @var{os}, un objet
- @code{operating-system} (@pxref{Dérivations}).
- La sortie de la dérivation est un répertoire qui se réfère à tous les
- paquets et d'autres fichiers supports requis pour instancier @var{os}.
- @end deffn
- Cette procédure est fournie par le module @code{(gnu system)}. Avec
- @code{(gnu srevices)} (@pxref{Services}), ce module contient les entrailles
- de GuixSD. Ouvrez-le un jour !
- @node Référence de système d'exploitation
- @subsection Référence de @code{operating-system}
- Cette section résume toutes les options disponibles dans les déclarations
- @code{operating-system} (@pxref{Utiliser le système de configuration}).
- @deftp {Type de données} operating-system
- C'est le type de données représentant une configuration d'un système
- d'exploitation. On veut dire par là toute la configuration globale du
- système, mais pas la configuration par utilisateur (@pxref{Utiliser le système de configuration}).
- @table @asis
- @item @code{kernel} (par défaut : @var{linux-libre})
- L'objet paquet d'un noyau de système d'exploitation à
- utiliser@footnote{Actuellement seul le noyau Linux-libre est supporté. Dans
- le futur, il sera possible d'utiliser GNU@tie{}Hurd.}.
- @item @code{kernel-arguments} (par défaut : @code{'()})
- Liste de chaînes ou de gexps représentant des arguments supplémentaires à
- passer sur la ligne de commande du noyau — p.@: ex.@:
- @code{("console=ttyS0")}.
- @item @code{bootloader}
- L'objet de configuration du chargeur d'amorçage. @xref{Configuration du chargeur d'amorçage}.
- @item @code{initrd-modules} (par défaut : @code{%base-initrd-modules})
- @cindex initrd
- @cindex disque de RAM initial
- La liste des modules du noyau linux requis dans l'image disque de RAM
- initiale. @xref{Disque de RAM initial}.
- @item @code{initrd} (par défaut : @code{base-initrd})
- Une procédure qui renvoie un disque de RAM initial pour le noyau Linux. Ce
- champ est fournit pour pouvoir personnaliser son système à bas-niveau et
- n'est que rarement utile dans le cas général. @xref{Disque de RAM initial}.
- @item @code{firmware} (par défaut : @var{%base-firmware})
- @cindex firmware
- Liste les paquets de microgiciels chargeables pour le noyau de système
- d'exploitation.
- La valeur par défaut contient les microgiciels requis pour les périphériques
- WiFi Atheros et Broadcom (modules @code{ath9k} et @code{b43-open} de
- Linux-libre, respectivement). @xref{Considérations matérielles}, pour plus
- d'info sur les périphériques supportés.
- @item @code{host-name}
- Le nom d'hôte.
- @item @code{hosts-file}
- @cindex fichier hosts
- Un objet simili-fichier (@pxref{G-Expressions, file-like objects}) à
- utiliser comme @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
- Library Reference Manual}). La valeur par défaut est un fichier avec des
- entrées pour @code{localhost} et @var{host-name}.
- @item @code{mapped-devices} (par défaut : @code{'()})
- Une liste de périphériques mappés. @xref{Périphériques mappés}.
- @item @code{file-systems}
- Une liste de systèmes de fichiers. @xref{Systèmes de fichiers}.
- @item @code{swap-devices} (par défaut : @code{'()})
- @cindex espaces d'échange
- Une liste de chaînes identifiant les périphériques ou les fichiers utilisé
- pour « l'espace d'échange » (@pxref{Memory Concepts,,, libc, The GNU C
- Library Reference Manual}). Par exemple, @code{'("/dev/sda3")} ou
- @code{'("/swapfile")}. Il est possible de spécifier un fichier d'échange
- sur un périphérique mappé, tant que le périphérique nécessaire et le système
- de fichiers sont aussi spécifiés. @xref{Périphériques mappés} et @ref{Systèmes de fichiers}.
- @item @code{users} (par défaut : @code{%base-user-accounts})
- @itemx @code{groups} (par défaut : @var{%base-groups})
- Liste les comptes utilisateurs et les groupes. @xref{Comptes utilisateurs}.
- Si la liste @code{users} n'a pas de compte lié à l'UID@tie{}0, un compte «
- root » avec l'UID@tie{}0 est automatiquement ajouté.
- @item @code{skeletons} (par défaut : @code{(default-skeletons)})
- Une liste de couples composés d'un nom de fichier cible et d'un objet
- simili-fichier (@pxref{G-Expressions, file-like objects}). Ce sont les
- fichiers squelettes qui seront ajoutés au répertoire personnel des comptes
- utilisateurs nouvellement créés.
- Par exemple, un valeur valide ressemblerait à cela :
- @example
- `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
- (".guile" ,(plain-file "guile"
- "(use-modules (ice-9 readline))
- (activate-readline)")))
- @end example
- @item @code{issue} (par défaut : @var{%default-issue})
- Une chaîne qui dénote le contenu du fichier @file{/etc/issue} qui est
- affiché lorsqu'un utilisateur se connecte sur la console.
- @item @code{packages} (par défaut : @var{%base-packages})
- L'ensemble des paquets installés dans le profil global, qui est accessible à
- partir de @file{/run/current-system/profile}.
- L'ensemble par défaut contient les utilitaires de base et c'est une bonne
- pratique d'installer les utilitaires non essentiels dans les profils
- utilisateurs (@pxref{Invoquer guix package}).
- @item @code{timezone}
- Une chaîne identifiant un fuseau horaire — p.@: ex.@: @code{"Europe/Paris"}.
- Vous pouvez lancer la commande @command{tzselect} pour trouver le fuseau
- horaire correspondant à votre région. Si vous choisissez un nom de fuseau
- horaire invalide, @command{guix system} échouera.
- @item @code{locale} (par défaut : @code{"en_US.utf8"})
- Le nom du paramètre régional par défaut (@pxref{Locale Names,,, libc, The
- GNU C Library Reference Manual}). @xref{Régionalisation}, pour plus d'informations.
- @item @code{locale-definitions} (par défaut : @var{%default-locale-definitions})
- La liste des définitions de locales à compiler et qui devraient être
- utilisées à l'exécution. @xref{Régionalisation}.
- @item @code{locale-libcs} (par défaut : @code{(list @var{glibc})})
- La liste des paquets GNU@tie{}libc dont les données des paramètres
- linguistiques sont utilisées pour construire les définitions des paramètres
- linguistiques. @xref{Régionalisation}, pour des considérations sur la compatibilité
- qui justifient cette option.
- @item @code{name-service-switch} (par défaut : @var{%default-nss})
- La configuration de NSS de la libc (name service switch) — un objet
- @code{<name-service-switch>}. @xref{Name Service Switch}, pour des détails.
- @item @code{services} (par défaut : @var{%base-services})
- Une liste d'objets services qui dénotent les services du système.
- @xref{Services}.
- @item @code{pam-services} (par défaut : @code{(base-pam-services)})
- @cindex PAM
- @cindex pluggable authentication modules
- @c FIXME: Add xref to PAM services section.
- Services PAM (@dfn{pluggable authentication module}) Linux.
- @item @code{setuid-programs} (par défaut : @var{%setuid-programs})
- Liste de G-expressions qui s'évaluent en chaînes de caractères qui dénotent
- les programmes setuid. @xref{Programmes setuid}.
- @item @code{sudoers-file} (par défaut : @var{%sudoers-specification})
- @cindex fichier sudoers
- Le contenu du fichier @file{/etc/sudoers} comme un objet simili-fichier
- (@pxref{G-Expressions, @code{local-file} et @code{plain-file}}).
- Ce fichier spécifier quels utilisateurs peuvent utiliser la commande
- @command{sudo}, ce qu'ils ont le droit de faire, et quels privilèges ils
- peuvent gagner. La valeur par défaut est que seul @code{root} et les
- membres du groupe @code{wheel} peuvent utiliser @code{sudo}.
- @end table
- @end deftp
- @node Systèmes de fichiers
- @subsection Systèmes de fichiers
- La liste des systèmes de fichiers à monter est spécifiée dans le champ
- @code{file-systems} de la déclaration de système d'exploitation
- (@pxref{Utiliser le système de configuration}). Chaque système de fichier est
- déclaré avec la forme @code{file-system}, comme ceci :
- @example
- (file-system
- (mount-point "/home")
- (device "/dev/sda3")
- (type "ext4"))
- @end example
- Comme d'habitude, certains de ces champs sont obligatoire — comme le montre
- l'exemple au-dessus — alors que d'autres peuvent être omis. Ils sont
- décrits plus bas.
- @deftp {Type de données} file-system
- Les objets de ce type représentent des systèmes de fichiers à monter. Ils
- contiennent les membres suivants :
- @table @asis
- @item @code{type}
- C'est une chaîne de caractères spécifiant le type du système de fichier —
- p.@: ex.@: @code{"ext4"}.
- @item @code{mount-point}
- Désigne l'emplacement où le système de fichier sera monté.
- @item @code{device}
- Ce champ nomme le système de fichier « source ». il peut être l'une de ces
- trois choses : une étiquette de système de fichiers, un UUID de système de
- fichier ou le nom d'un nœud dans @file{/dev}. Les étiquettes et les UUID
- offrent une manière de se référer à des systèmes de fichiers sans avoir à
- coder en dur le nom de périphérique@footnote{Remarquez que, s'il est tentant
- d'utiliser @file{/dev/disk/by-uuid} et autres chemins similaires pour
- obtenir le même résultat, ce n'est pas recommandé : ces nœuds de
- périphériques spéciaux sont créés par le démon udev et peuvent ne pas être
- disponibles au moment de monter le périphérique.}.
- @findex file-system-label
- Les étiquettes de systèmes de fichiers sont crées avec la procédure
- @code{file-system-label}, les UUID avec @code{uuid} et les nœuds de
- @file{/dev} sont de simples chaînes de caractères. Voici un exemple d'un
- système de fichiers référencé par son étiquette, donnée par la commande
- @command{e2label} :
- @example
- (file-system
- (mount-point "/home")
- (type "ext4")
- (device (file-system-label "my-home")))
- @end example
- @findex uuid
- Les UUID sont convertis à partir de leur représentation en chaîne de
- caractères (montrée par la command @command{tune2fs -l}) en utilisant la
- forme @code{uuid}@footnote{La forme @code{uuid} s'attend à des UUID sur 16
- octets définis dans la @uref{https://tools.ietf.org/html/rfc4122,
- RFC@tie{}4122}. C'est la forme des UUID utilisées par la famille de
- systèmes de fichiers ext2 et d'autres, mais ce n'est pas le même type d'UUID
- que ceux qui se trouvent sur les systèmes de fichiers FAT par exemple},
- comme ceci :
- @example
- (file-system
- (mount-point "/home")
- (type "ext4")
- (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
- @end example
- Lorsque la source d'un système de fichiers est un périphérique mappé
- (@pxref{Périphériques mappés}), sont champ @code{device} @emph{doit} se référer au
- nom du périphérique mappé — p.@: ex.@: @file{"/dev/mapper/root-partition"}.
- Cela est requis pour que le système sache que monter ce système de fichier
- dépend de la présence du périphérique mappé correspondant.
- @item @code{flags} (par défaut : @code{'()})
- C'est une liste de symboles qui dénotent des drapeaux de montage. Les
- drapeaux reconnus sont @code{read-only}, @code{bind-mount}, @code{no-dev}
- (interdit l'accès aux fichiers spéciaux), @code{no-suid} (ignore les bits
- setuid et setgid) et @code{no-exec} (interdit l'exécution de programmes).
- @item @code{options} (par défaut : @code{#f})
- C'est soit @code{#f} soit une chaîne de caractères dénotant des options de
- montage.
- @item @code{mount?} (par défaut : @code{#t})
- Cette valeur indique s'il faut monter automatiquement le système de fichier
- au démarrage du système. Lorsque la valeur est @code{#f}, le système de
- fichier reçoit une entrée dans @file{/etc/fstab} (lue par la commande
- @command{mount}) mais n'est pas monté automatiquement.
- @item @code{needed-for-boot?} (par défaut : @code{#f})
- Cette valeur booléenne indique si le système de fichier est nécessaire au
- démarrage. Si c'est vrai alors le système de fichier est monté au
- chargement du disque de RAM initial. C'est toujours le cas par exemple du
- système de fichiers racine.
- @item @code{check?} (par défaut : @code{#t})
- Cette valeur booléenne indique si le système de fichier doit être vérifié
- avant de le monter.
- @item @code{create-mount-point?} (par défaut : @code{#f})
- Lorsque cette valeur est vraie, le point de montage est créé s'il n'existe
- pas déjà.
- @item @code{dependencies} (par défaut : @code{'()})
- C'est une liste d'objets @code{<file-system>} ou @code{<mapped-device>} qui
- représentent les systèmes de fichiers qui doivent être montés ou les
- périphériques mappés qui doivent être ouverts avant (et monté ou fermés
- après) celui-ci.
- Par exemple, considérons une hiérarchie de montage : @file{/sys/fs/cgroup}
- est une dépendance de @file{/sys/fs/cgroup/cpu} et
- @file{/sys/fs/cgroup/memory}.
- Un autre exemple est un système de fichier qui dépend d'un périphérique
- mappé, par exemple pour une partition chiffrée (@pxref{Périphériques mappés}).
- @end table
- @end deftp
- Le module @code{(gnu system file-systems)} exporte les variables utiles
- suivantes.
- @defvr {Variable Scheme} %base-file-systems
- Ce sont les systèmes de fichiers essentiels qui sont requis sur les systèmes
- normaux, comme @var{%pseudo-terminal-file-system} et @var{%immutable-store}
- (voir plus bas). Les déclarations de systèmes d'exploitation devraient au
- moins les contenir.
- @end defvr
- @defvr {Variable Scheme} %pseudo-terminal-file-system
- C'est le système de fichier monté sur @file{/dev/pts}. Il supporte les
- @dfn{pseudo-terminaux} créés via @code{openpty} et les fonctions similaires
- (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference Manual}). Les
- pseudo-terminaux sont utilisés par les émulateurs de terminaux comme
- @command{xterm}.
- @end defvr
- @defvr {Variable Scheme} %shared-memory-file-system
- Ce système de fichier est monté dans @file{/dev/shm} et est utilisé pour le
- partage de mémoire entre processus (@pxref{Memory-mapped I/O,
- @code{shm_open},, libc, The GNU C Library Reference Manual}).
- @end defvr
- @defvr {Variable Scheme} %immutable-store
- Ce système de fichiers effectue un « montage lié » en lecture-seule de
- @file{/gnu/store}, ce qui en fait un répertoire en lecture-seule pour tous
- les utilisateurs dont @code{root}. Cela évite que des logiciels qui
- tournent en @code{root} ou des administrateurs systèmes ne modifient
- accidentellement le dépôt.
- Le démon lui-même est toujours capable d'écrire dans le dépôt : il est
- remonté en lecture-écriture dans son propre « espace de nom ».
- @end defvr
- @defvr {Variable Scheme} %binary-format-file-system
- Le système de fichiers @code{binfmt_misc}, qui permet de gérer n'importe
- quel type de fichiers exécutables à déléguer en espace utilisateur. Cela
- demande que le module du noyau @code{binfmt.ko} soit chargé.
- @end defvr
- @defvr {Variable Scheme} %fuse-control-file-system
- Le système de fichiers @code{fusectl}, qui permet à des utilisateurs non
- privilégiés de monter et de démonter des systèmes de fichiers FUSE en espace
- utilisateur. Cela requiert que le module du noyau @code{fuse.ko} soit
- chargé.
- @end defvr
- @node Périphériques mappés
- @subsection Périphériques mappés
- @cindex mappage de périphériques
- @cindex périphériques mappés
- Le noyau Linux a une notion de @dfn{mappage de périphériques} : un
- périphérique bloc, comme une partition sur un disque dur, peut être
- @dfn{mappé} sur un autre périphérique, typiquement dans @code{/dev/mapper},
- avec des calculs supplémentaires sur les données qui naviguent entre les
- deux@footnote{Remarquez que le Hurd ne fait pas de différence entre le
- concept de « périphérique mappé » et celle d'un système de fichiers : les
- deux correspondent à la @emph{traduction} des opérations d'entrée-sortie
- faites sur un fichier en des opérations sur ce qui le contient. Ainsi, le
- Hurd implémente les périphériques mappés, comme les systèmes de fichiers,
- avec le mécanisme des @dfn{traducteurs} générique (@pxref{Translators,,,
- hurd, The GNU Hurd Reference Manual}).}. Un exemple typique est le mappage
- de périphériques chiffrés : toutes les écritures sont sur le périphérique
- mappé sont chiffrées, toutes les lectures déchiffrées, de manière
- transparente. Guix étend cette notion en considérant que tout périphérique
- ou ensemble de périphériques qui sont @dfn{transformés} d'une certaine
- manière créent un nouveau périphérique ; par exemple, les périphériques RAID
- sont obtenus en @dfn{assemblant} plusieurs autres périphériques, comme des
- disque ou des partitions, en un nouveau périphérique en tant qu'unique
- partition. Un autre exemple, qui n'est pas encore disponible, sont les
- volumes logiques LVM.
- Les périphériques mappés sont déclarés avec la forme @code{mapped-device},
- définie comme suit ; par exemple, voir ci-dessous.
- @deftp {Type de données} mapped-device
- Les objets de ce type représentent des mappages de périphériques qui seront
- effectués au démarrage du système.
- @table @code
- @item source
- C'est soit une chaîne qui spécifie le nom d'un périphérique bloc à mapper,
- comme @code{"/dev/sda3"}, soit une liste de plusieurs périphériques à
- assembler pour en créer un nouveau.
- @item target
- Cette chaîne spécifie le nom du périphérique mappé qui en résulte. Pour les
- mappeurs noyaux comme les périphériques chiffrés de type
- @code{luks-device-mapping}, spécifier @code{"ma-partition"} crée le
- périphérique @code{"/dev/mapper/ma-partition"}. Pour les périphériques RAID
- de type @code{raid-device-mapping}, il faut donner le nom complet comme
- @code{"/dev/md0"}.
- @item type
- Ce doit être un objets @code{mapped-device-kind}, qui spécifie comment
- @var{source} est mappés sur @var{target}.
- @end table
- @end deftp
- @defvr {Variable Scheme} luks-device-mapping
- Cela définie les périphériques blocs chiffrés en LUKS avec
- @command{cryptsetup} du paquet du même nom. Elle s'appuie sur le module du
- noyau Linux @code{dm-crypt}.
- @end defvr
- @defvr {Variable Scheme} raid-device-mapping
- Cela définie un périphérique RAID qui est assemblé avec la commande
- @code{mdadm} du paquet du même nom. Elle nécessite un module noyau Linux
- approprié pour le niveau RAID chargé, comme @code{raid456} pour RAID-4,
- RAID-5 et RAID-6 ou @code{raid10} pour RAID-10.
- @end defvr
- @cindex chiffrement du disque
- @cindex LUKS
- L'exemple suivant spécifie un mappage de @file{/dev/sda3} vers
- @file{/dev/mapper/home} avec LUKS —
- @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, un
- mécanisme standard pour chiffrer les disques. Le périphérique
- @file{/dev/mapper/home} peut ensuite être utilisé comme @code{device} d'une
- déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
- @example
- (mapped-device
- (source "/dev/sda3")
- (target "home")
- (type luks-device-mapping))
- @end example
- Autrement, pour devenir indépendant du numéro de périphérique, on peut
- obtenir l'UUID LUKS (@dfn{l'identifiant unique}) du périphérique source avec
- une commande comme :
- @example
- cryptsetup luksUUID /dev/sda3
- @end example
- et l'utiliser ainsi :
- @example
- (mapped-device
- (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
- (target "home")
- (type luks-device-mapping))
- @end example
- @cindex chiffrement de l'espace d'échange
- Il est aussi désirable de chiffrer l'espace d'échange, puisque l'espace
- d'échange peut contenir des données sensibles. Une manière de faire cela
- est d'utiliser un fichier d'échange dans un système de fichiers sur un
- périphérique mappé avec un chiffrement LUKS. De cette manière, le fichier
- d'échange est chiffré parce que tout le périphérique est chiffré.
- @xref{Préparer l'installation,,Disk Partitioning}, pour un exemple.
- Un périphérique RAID formé des partitions @file{/dev/sda1} et
- @file{/dev/sdb1} peut être déclaré ainsi :
- @example
- (mapped-device
- (source (list "/dev/sda1" "/dev/sdb1"))
- (target "/dev/md0")
- (type raid-device-mapping))
- @end example
- Le périphérique @file{/dev/md0} peut ensuite être utilisé comme
- @code{device} d'une déclaration @code{file-system} (@pxref{Systèmes de fichiers}).
- Remarquez que le niveau de RAID n'a pas besoin d'être donné ; il est choisi
- pendant la création initiale du périphérique RAID et est ensuite déterminé
- automatiquement.
- @node Comptes utilisateurs
- @subsection Comptes utilisateurs
- @cindex utilisateurs
- @cindex comptes
- @cindex comptes utilisateurs
- Les comptes utilisateurs et les groupes sont gérés entièrement par la
- déclaration @code{operating-system}. Ils sont spécifiés avec les formes
- @code{user-account} et @code{user-group} :
- @example
- (user-account
- (name "alice")
- (group "users")
- (supplementary-groups '("wheel" ;permet d'utiliser sudo, etc.
- "audio" ;carte son
- "video" ;périphériques réseaux comme les webcams
- "cdrom")) ;le bon vieux CD-ROM
- (comment "Bob's sister")
- (home-directory "/home/alice"))
- @end example
- Lors du démarrage ou à la fin de @command{guix system reconfigure}, le
- système s'assure que seuls les comptes utilisateurs et les groupes spécifiés
- dans la déclaration @code{operating-system} existent, et avec les propriétés
- spécifiées. Ainsi, les modifications ou les créations de comptes ou de
- groupes effectuées directement en invoquant des commandes comme
- @command{useradd} sont perdue à la reconfiguration ou au redémarrage. Cela
- permet de s'assurer que le système reste exactement tel que déclaré.
- @deftp {Type de données} user-account
- Les objets de se type représentent les comptes utilisateurs. Les membres
- suivants peuvent être spécifiés :
- @table @asis
- @item @code{name}
- Le nom du compte utilisateur.
- @item @code{group}
- @cindex groupes
- C'est le nom (une chaîne) ou un identifiant (un nombre) du groupe
- utilisateur auquel ce compte appartient.
- @item @code{supplementary-groups} (par défaut : @code{'()})
- Éventuellement, cela peut être définie comme une liste de noms de groupes
- auxquels ce compte appartient.
- @item @code{uid} (par défaut : @code{#f})
- C'est l'ID utilisateur de ce compte (un nombre) ou @code{#f}. Dans ce
- dernier cas, le nombre est choisi automatiquement par le système à la
- création du compte.
- @item @code{comment} (par défaut : @code{""})
- Un commentaire à propos du compte, comme le nom complet de l'utilisateur.
- @item @code{home-directory}
- C'est le nom du répertoire personnel du compte.
- @item @code{create-home-directory?} (par défaut : @code{#t})
- Indique si le répertoire personnel du compte devrait être créé s'il n'existe
- pas déjà.
- @item @code{shell} (par défaut : Bash)
- C'est une G-expression qui dénote un nom de fichier d'un programme utilisé
- comme shell (@pxref{G-Expressions}).
- @item @code{system?} (par défaut : @code{#f})
- C'est une valeur booléenne qui indique si le compte est un compte « système
- ». Les comptes systèmes sont parfois traités à part ; par exemple, les
- gestionnaires de connexion graphiques ne les liste pas.
- @anchor{user-account-password}
- @item @code{password} (par défaut : @code{#f})
- Vous laisseriez normalement ce champ à @code{#f} et initialiseriez les mots
- de passe utilisateurs en tant que @code{root} avec la commande
- @command{passwd}, puis laisseriez l'utilisateur le changer avec
- @command{passwd}. Les mots de passes définis avec @command{passwd} sont
- bien sûr préservés après redémarrage et reconfiguration.
- Si vous voulez @emph{vraiment} définir un mot de passe pour un compte, alors
- ce champ doit contenir le mot de passe chiffré, comme une chaîne de
- caractère. @xref{crypt,,, libc, The GNU C Library Reference Manual}, pour
- plus d'information sur le chiffrement des mots de passe et
- @ref{Encryption,,, guile, GNU Guile Reference Manual}, pour des informations
- sur la procédure @code{crypt} de Guile.
- @end table
- @end deftp
- @cindex groupes
- Les déclarations de groupes sont encore plus simple :
- @example
- (user-group (name "students"))
- @end example
- @deftp {Type de données} user-group
- C'est le type pour, hé bien, les comptes utilisateurs. Il n'y a que
- quelques champs :
- @table @asis
- @item @code{name}
- Le nom du groupe.
- @item @code{id} (par défaut : @code{#f})
- L'identifiant du groupe (un nombre). S'il est @code{#f}, un nouveau nombre
- est alloué automatiquement lorsque le groupe est créé.
- @item @code{system?} (par défaut : @code{#f})
- Cette valeur booléenne indique si le groupe est un groupe « système ». les
- groupes systèmes ont un numéro d'ID bas.
- @item @code{password} (par défaut : @code{#f})
- Quoi, les groupes utilisateurs peuvent avoir des mots de passe ? On dirait
- bien. À moins que la valeur ne soit @code{#f}, ce champ spécifie le mot de
- passe du groupe.
- @end table
- @end deftp
- Par simplicité, une variable liste les groupes utilisateurs de base auxquels
- on pourrait s'attendre :
- @defvr {Variable Scheme} %base-groups
- C'est la liste des groupes utilisateur de base que les utilisateurs et les
- paquets s'attendent à trouver sur le système. Cela comprend des groupes
- comme « root », « wheel » et « users », ainsi que des groupes utilisés pour
- contrôler l'accès à certains périphériques, comme « audio », « disk » et «
- cdrom ».
- @end defvr
- @defvr {Variable Scheme} %base-user-accounts
- C'est la liste des compte du système de base que les programmes peuvent
- s'attendre à trouver sur un système GNU/Linux, comme le compte « nobody ».
- Remarquez que le compte « root » n'est pas défini ici. C'est un cas
- particulier et il est automatiquement ajouté qu'il soit spécifié ou non.
- @end defvr
- @node Régionalisation
- @subsection Régionalisation
- @cindex paramètres linguistiques
- Un @dfn{paramètre linguistique} définie les conventions culturelles d'une
- langue et d'une région particulières (@pxref{Régionalisation,,, libc, The GNU C
- Library Reference Manual}). Chaque paramètre linguistique a un nom de la
- forme @code{@var{langue}_@var{territoire}.@var{jeudecaractères}} — p.@:
- ex.@: @code{fr_LU.utf8} désigne le paramètre linguistique pour le français,
- avec les conventions culturelles du Luxembourg, en utilisant l'encodage
- UTF-8.
- @cindex définition des paramètres linguistiques
- Normalement, vous voudrez spécifier les paramètres linguistiques par défaut
- pour la machine en utilisant le champ @code{locale} de la déclaration
- @code{operating-system} (@pxref{Référence de système d'exploitation, @code{locale}}).
- Les paramètres régionaux choisis sont automatiquement ajoutés aux
- définitions des @dfn{paramètres régionaux} connues par le système au besoin,
- avec le jeu de caractères inféré à partir de son nom, p.@: ex.@:
- @code{bo_CN.utf8} supposera qu'il faut utiliser le jeu de caractères
- @code{UTF-8}. Des définitions supplémentaires peuvent être spécifiées dans
- le champ @code{locale-definitions} de @code{operating-system} — c'est utile
- par exemple si le jeu de caractères n'a pas été inféré à partir du nom.
- L'ensemble par défaut de définitions comprend certains paramètres
- linguistiques parmi les plus utilisés, mais pas toutes les variantes
- disponibles, pour gagner de la place.
- Par exemple, pour ajouter les paramètres pour le frison septentrional en
- Allemagne, la valeur de ce champ serait :
- @example
- (cons (locale-definition
- (name "fy_DE.utf8") (source "fy_DE"))
- %default-locale-definitions)
- @end example
- De me, pour gagner de la place, on peut vouloir lister dans
- @code{locale-definitions} seulement les paramètres qui sont vraiment
- utilisés, comme dans :
- @example
- (list (locale-definition
- (name "ja_JP.eucjp") (source "ja_JP")
- (charset "EUC-JP")))
- @end example
- @vindex LOCPATH
- Les définitions des paramètres linguistiques compilées sont disponibles dans
- @file{/run/current-system/locale/X.Y}, où @code{X.Y} est la version de la
- libc, ce qui est l'emplacement par défaut où la GNU@tie{}libc fournie par
- Guix cherche les données de régionalisation. Cet emplacement peut être
- modifié avec la variable d'environnement @code{LOCPATH}
- (@pxref{locales-and-locpath, @code{LOCPATH} and locale packages}).
- La forme @code{locale-definition} est fournie par le module @code{(gnu
- system locale)}. Des détails sont disponibles plus bas.
- @deftp {Type de données} locale-definition
- C'est le type de données d'une définition de paramètres linguistiques.
- @table @asis
- @item @code{name}
- Le nom du paramètre linguistique. @xref{Locale Names,,, libc, The GNU C
- Library Reference Manual}, pour en savoir plus sur les noms de paramètres
- linguistiques.
- @item @code{source}
- Le nom de la source pour ce paramètre linguistique. C'est typiquement la
- partie @code{@var{langue}_@var{territoire}} du nom du paramètre.
- @item @code{charset} (par défaut : @code{"UTF-8"})
- Le « jeu de caractères » d'un paramètre linguistique,
- @uref{http://www.iana.org/assignments/character-sets, défini par l'IANA}.
- @end table
- @end deftp
- @defvr {Variable Scheme} %default-locale-definitions
- Une liste des paramètres linguistiques UTF-8 couramment utilisés, utilisée
- comme valeur par défaut pour le champ @code{locale-definitions} des
- déclarations @code{operating-system}.
- @cindex nom de paramètre linguistique
- @cindex jeu de caractère normalisé dans les noms de paramètres linguistiques
- Ces définitions de paramètres linguistiques utilisent le @dfn{jeu de
- caractère normalisé} pour la partie qui suit le point dans le nom
- (@pxref{Using gettextized software, normalized codeset,, libc, The GNU C
- Library Reference Manual}). Donc par exemple il y a @code{uk_UA.utf8} mais
- @emph{pas}, disons, @code{uk_UA.UTF-8}.
- @end defvr
- @subsubsection Considérations sur la compatibilité des données linguistiques
- @cindex incompatibilité, des données linguistiques
- Les déclaration @code{operating-system} fournissent un champ
- @code{locale-libcs} pour spécifier les paquets GNU@tie{}libc à utiliser pour
- compiler les déclarations de paramètres linguistiques
- (@pxref{Référence de système d'exploitation}). « Pourquoi je devrais m'en soucier ?
- », vous demandez-vous sûrement. Hé bien il se trouve que le format binaire
- des données linguistique est parfois incompatible d'une version de la libc à
- une autre.
- @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
- @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
- Par exemple, un programme lié à la libc version 2.21 est incapable de lire
- les données linguistiques produites par la libc 2.22 ; pire, ce programme
- @emph{plante} plutôt que d'ignorer les données linguistiques
- incompatibles@footnote{Les version 2.23 et supérieures de la GNU@tie{}libc
- sauteront simplement les données linguistiques incompatibles, ce qui est
- déjà mieux.}. De même, un programme lié à la libc 2.22 peut lire la plupart
- mais pas toutes les données linguistiques de la libc 2.21 (spécifiquement
- les données @code{LC_COLLATE} sont incompatibles) ; donc les appels à
- @code{setlocale} peuvent échouer, mais les programmes ne plantent pas.
- Le « problème » avec GuixSD c'est que les utilisateurs ont beaucoup de
- liberté : ils peuvent choisir s'ils veulent et quand ils veulent mettre à
- jour les logiciels de leur profil, et peuvent utiliser une version
- différente de la libc de celle que l'administrateur système utilise pour
- construire les données linguistiques du système global.
- Heureusement, les utilisateurs non privilégiés peuvent aussi installer leur
- propres données linguistiques et définir @var{GUIX_LOCPATH} comme il le faut
- (@pxref{locales-and-locpath, @code{GUIX_LOCPATH} and locale packages}).
- Cependant, c'est encore mieux si les données linguistiques du système dans
- @file{/run/current-system/locale} étaient construites avec les versions de
- la libc utilisées sur le système, pour que tous les programmes puissent y
- accéder — c'est surtout crucial sur un système multi-utilisateurs. Pour
- cela, l'administrateur peut spécifier plusieurs paquets de la libc dans le
- champ @code{locale-libcs} de @code{operating-system} :
- @example
- (use-package-modules base)
- (operating-system
- ;; @dots{}
- (locale-libcs (list glibc-2.21 (canonical-package glibc))))
- @end example
- cet exemple créera un système contenant les définitions des paramètres
- linguistiques pour la libc 2.21 et pour la version actuelle de la libc dans
- @file{/run/current-system/locale}.
- @node Services
- @subsection Services
- @cindex services systèmes
- Une part importante de la préparation d'une déclaration
- @code{operating-system} est la liste des @dfn{services systèmes} et de leur
- configuration (@pxref{Utiliser le système de configuration}). Les services
- systèmes sont typiquement des démons lancés au démarrage ou d'autres actions
- requises à ce moment-là — p.@: ex.@: configurer les accès réseaux.
- GuixSD a une définition large de « service » (@pxref{Composition de services}),
- mais beaucoup de services sont gérés par le GNU@tie{}Shepherd
- (@pxref{Services Shepherd}). Sur un système lancé, la commande
- @command{herd} vous permet de lister les services disponibles, montrer leur
- statut, les démarrer et les arrêter, ou faire d'autres opérations
- spécifiques (@pxref{Jump Start,,, shepherd, The GNU Shepherd Manual}). Par
- exemple :
- @example
- # herd status
- @end example
- La commande ci-dessus, lancée en @code{root}, liste les services
- actuellement définis. La commande @command{herd doc} montre un synopsis du
- service donné et ses actions associées :
- @example
- # herd doc nscd
- Run libc's name service cache daemon (nscd).
- # herd doc nscd action invalidate
- invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
- @end example
- Les sous-commandes @command{start}, @command{stop} et @command{restart} ont
- l'effet auquel on s'attend. Par exemple, les commande suivantes stoppent le
- service nscd et redémarrent le serveur d'affichage Xorg :
- @example
- # herd stop nscd
- Service nscd has been stopped.
- # herd restart xorg-server
- Service xorg-server has been stopped.
- Service xorg-server has been started.
- @end example
- Les sections suivantes documentent les services disponibles, en commençant
- par les services de base qui peuvent être utilisés avec une déclaration
- @code{operating-system}.
- @menu
- * Services de base:: Services systèmes essentiels.
- * Exécution de tâches planifiées:: Le service mcron.
- * Rotation des journaux:: Le service rottlog.
- * Services réseau:: Paramétres réseau, démon SSH, etc.
- * Système de fenêtrage X:: Affichage graphique.
- * Services d'impression:: Support pour les imprimantes locales et
- distantes.
- * Services de bureaux:: D-Bus et les services de bureaux.
- * Services de son:: Services ALSA et Pulseaudio.
- * Services de bases de données:: Bases SQL, clefs-valeurs, etc.
- * Services de courriels:: IMAP, POP3, SMTP, et tout ça.
- * Services de messagerie:: Services de messagerie.
- * Services de téléphonie:: Services de téléphonie.
- * Services de surveillance:: Services de surveillance.
- * Services Kerberos:: Services Kerberos.
- * Services web:: Services web.
- * Services de certificats:: Certificats TLS via Let's Encrypt.
- * Services DNS:: Démons DNS@.
- * Services VPN:: Démons VPN
- * Système de fichiers en réseau:: Services liés à NFS@.
- * Intégration continue:: Le service Cuirass.
- * Services de gestion de l'énergie:: Augmenter la durée de vie de la
- batterie.
- * Services audio:: MPD@.
- * Services de virtualisation:: Services de virtualisation.
- * Services de contrôle de version:: Fournit des accès distants à des
- dépôts Git.
- * Services de jeu:: Serveurs de jeu.
- * Services divers:: D'autres services.
- @end menu
- @node Services de base
- @subsubsection Services de base
- Le module @code{(gnu services base)} fournit des définitions de services
- poru les services de base qu'on peut attendre du système. Les services
- exportés par ce module sort listés ci-dessous.
- @defvr {Variable Scheme} %base-services
- 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
- attendre du système : un service de connexion (mingetty) sur chaque tty,
- syslogd, le démon de cache de noms de la libc (nscd), le gestionnaire de
- périphériques udev, et plus.
- C'est la valeur par défaut du champ @code{services} des déclarations
- @code{operating-system}. Habituellement, lors de la personnalisation d'un
- système, vous voudrez ajouter des services à ceux de @var{%base-services},
- comme ceci :
- @example
- (cons* (avahi-service) (lsh-service) %base-services)
- @end example
- @end defvr
- @defvr {Variable Scheme} special-files-service-type
- C'est le service qui met en place des « fichiers spéciaux » comme
- @file{/bin/sh} ; une instance de ce service fait partie de
- @code{%base-services}.
- La valeur associée avec les services @code{special-files-service-type} doit
- être une liste de couples dont le premier élément est le « fichier spécial »
- et le deuxième sa cible. Par défaut il s'agit de :
- @cindex @file{/bin/sh}
- @cindex @file{sh}, dans @file{/bin}
- @example
- `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
- @end example
- @cindex @file{/usr/bin/env}
- @cindex @file{env}, dans @file{/usr/bin}
- Si vous voulez ajouter, disons, @code{/usr/bin/env} à votre système, vous
- pouvez changer cela en :
- @example
- `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
- ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
- @end example
- Comme il fait parti de @code{%base-services}, vous pouvez utiliser
- @code{modify-services} pour personnaliser l'ensemble des fichiers spéciaux
- (@pxref{Référence de service, @code{modify-services}}). Mais une manière plus
- simple d'ajouter un fichier spécial est d'utiliser la procédure
- @code{extra-special-file} (voir plus bas).
- @end defvr
- @deffn {Procédure Scheme} extra-special-file @var{file} @var{target}
- Utilise @var{target} comme « fichier spécial » @var{file}.
- Par exemple, ajouter l'une des lignes suivantes au champ @code{services} de
- votre déclaration de système d'exploitation crée un lien symbolique
- @file{/usr/bin/env} :
- @example
- (extra-special-file "/usr/bin/env"
- (file-append coreutils "/bin/env"))
- @end example
- @end deffn
- @deffn {Procédure Scheme} host-name-service @var{name}
- Renvoie un service qui paramètre le nom d'hôte à @var{name}.
- @end deffn
- @deffn {Procédure Scheme} login-service @var{config}
- Renvoie un service pour lancer login en suivant @var{config}, un objet
- @code{<login-configuration>} qui spécifie le message du jour, entre autres
- choses.
- @end deffn
- @deftp {Type de données} login-configuration
- Le type de données qui représente la configuration de login.
- @table @asis
- @item @code{motd}
- @cindex message du jour
- Un objet simili-fichier contenant le « message du jour ».
- @item @code{allow-empty-passwords?} (par défaut : @code{#t})
- Permet les mots de passes vides par défaut pour que les utilisateurs
- puissent se connecter au compte « root » la première fois après sa création.
- @end table
- @end deftp
- @deffn {Procédure Scheme} mingetty-service @var{config}
- Renvoie un service qui lance mingetty en suivant @var{config}, un objet
- @code{<mingetty-configuration>}, qui spécifie le tty à lancer entre autres
- choses.
- @end deffn
- @deftp {Type de données} mingetty-configuration
- C'est le type de données représentant la configuration de Mingetty, qui
- fournit l'implémentation par défaut de l'écran de connexion des consoles
- virtuelles.
- @table @asis
- @item @code{tty}
- Le nom de la console sur laquelle tourne ce Mingetty, p.@: ex.@:
- @code{"tty1"}.
- @item @code{auto-login} (par défaut : @code{#f})
- Lorsque la valeur est vraie, ce champ doit être une chaîne de caractère
- dénotant le nom d'utilisateur pour lequel le système se connecte
- automatiquement. Lorsque la valeur est @code{#f}, il faut entrer un nom
- d'utilisateur et un mot de passe pour se connecter.
- @item @code{login-program} (par défaut : @code{#f})
- Ce doit être soit @code{#f}, auquel cas le programme de connexion par défaut
- est utilisé (@command{login} de la suite d'outils Shadow), soit une gexp
- dénotant le nom d'un programme de connexion.
- @item @code{login-pause?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t} en plus de @var{auto-login}, l'utilisateur
- devrai appuyer sur une touche avant que le shell de connexion ne soit lancé.
- @item @code{mingetty} (par défaut : @var{mingetty})
- Le paquet Mingetty à utiliser.
- @end table
- @end deftp
- @deffn {Procédure Scheme} agetty-service @var{config}
- Renvoie un service pour lancer agetty en suivant @var{config}, un objet
- @code{<agetty-configuration>}, qui spécifie le tty à lancer, entre autres
- choses.
- @end deffn
- @deftp {Type de données} agetty-configuration
- Ce type de données représente la configuration de agetty, qui implémente
- l'écran de connexion des consoles virtuelles et series. Voir la page de
- manuel de @code{agetty(8)} pour plus d'informations.
- @table @asis
- @item @code{tty}
- Le nom de la console sur laquelle agetty est lancé p.@: ex.@:
- @code{"ttyS0"}. Cet argument est facultatif, il aura par défaut une valeur
- raisonnable d'un port série utilisé par le noyau Linux.
- Pour cela, s'il y a une valeur pour une option @code{agetty.tty} sur la
- ligne de commande du noyau, agetty extraira le nom du périphérique du port
- série à partir de cette option.
- Sinon et s'il y a une valeur pour une option @code{console} avec un tty sur
- la ligne de commande du noyau Linux, agetty extraira le nom du périphérique
- du port série et l'utilisera.
- In both cases, agetty will leave the other serial device settings (baud rate
- etc.)@: alone---in the hope that Linux pinned them to the correct values.
- @item @code{baud-rate} (par défaut : @code{#f})
- Une chaîne qui contient une liste d'un ou plusieurs taux de baud séparés par
- des virgules, en ordre décroissant.
- @item @code{term} (par défaut : @code{#f})
- Une chaîne contenant la valeur utilisée pour la variable d'environnement
- @code{TERM}.
- @item @code{eight-bits?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, le tty est supposé être propre pour les
- caractères 8-bit et la détection de parité est désactivée.
- @item @code{auto-login} (par défaut : @code{#f})
- Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
- l'utilisateur spécifié sera automatiquement connecté sans demande du nom
- d'utilisateur ni du mot de passe.
- @item @code{no-reset?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, ne vide pas les cflags du terminal (modes
- de contrôle).
- @item @code{host} (par défaut : @code{#f})
- Cette option accepte une chaîne contenant le « login_host », qui sera écrit
- dans le fichier @file{/var/run/utmpx}.
- @item @code{remote?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t} en plus de @var{host}, cette option ajoutera
- une option fakehost @code{-r} à la ligne de commande du programme de
- connexion spécifié dans @var{login-program}.
- @item @code{flow-control?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, active le contrôle de flux matériel
- (RTS/CTS).
- @item @code{no-issue?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, le contenu du fichier @file{/etc/issue} ne
- sera pas affiché avant de présenter l'écran de connexion.
- @item @code{init-string} (par défaut : @code{#f})
- Cette option accepte une chaîne de caractères qui sera envoyée au tty ou au
- modem avant toute autre chose. Elle peut être utilisée pour initialiser un
- modem.
- @item @code{no-clear?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, agetty ne nettoiera pas l'écran avant de
- montrer l'écran de connexion.
- @item @code{login-program} (par défaut : (file-append shadow "/bin/login"))
- Cette option doit être soit une gexp dénotant le nom d'un programme de
- connexion, soit non définie, auquel cas la valeur par défaut est la commande
- @command{login} de la suite d'outils Shadow.
- @item @code{local-line} (par défaut : @code{#f})
- Contrôle le drapeau CLOCAL. Cette option accepte l'un des trois symboles
- comme argument, @code{'auto}, @code{'always} ou @code{'never}. Si la valeur
- est @code{#f}, la valeur par défaut choisie par agetty est @code{'auto}…
- @item @code{extract-baud?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, dit à agetty d'essayer d'extraire la taux
- de baud depuis les messages de statut produits par certains modems.
- @item @code{skip-login?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, ne demande par de nom d'utilisateur. Elle
- peut être utilisée avec le champ @var{login-program} pour utiliser des
- systèmes de connexion non standards.
- @item @code{no-newline?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, n'affiche pas de retour à la ligne avant
- d'afficher le fichier @file{/etc/issue}.
- @c Is this dangerous only when used with login-program, or always?
- @item @code{login-options} (par défaut : @code{#f})
- Cette option accepte une chaîne de caractères contenant des options passées
- au programme login. Lorsqu'utilisé avec @var{login-program}, soyez
- conscient qu'un utilisateur malicieux pourrait essayer de rentrer un nom
- d'utilisateur contenant des options incluses qui pourraient être analysées
- par le programme de connexion.
- @item @code{login-pause} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, attend qu'une touche soit appuyée avant de
- montrer l'écran de connexion. Cela peut être utilisé avec @var{auto-login}
- pour sauvegarder de la mémoire en lançant les shells de manière fainéante.
- @item @code{chroot} (par défaut : @code{#f})
- Change de racine dans le répertoire donné. Cette option accepte un chemin
- en tant que chaîne de caractères.
- @item @code{hangup?} (par défaut : @code{#f})
- Utilise l'appel système Linux @code{vhangup} pour raccrocher virtuellement
- le terminal spécifié.
- @item @code{keep-baud?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, essaye de garder le taux de baud existant.
- Les taux de baud de @var{baud-rate} sont utilisés lorsque agetty reçoit un
- caractères @key{BREAK}.
- @item @code{timeout} (par défaut : @code{#f})
- Lorsque la valeur est un nombre entier, termine la session si aucun nom
- d'utilisateur n'a pu être lu après @var{timeout} secondes.
- @item @code{detect-case?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, active le support pour la détection des
- terminaux en majuscule uniquement. Ce paramètre détectera qu'un nom
- d'utilisateur qui ne contient que des majuscules indique un terminal en
- majuscule et effectuera des conversion de majuscule en minuscule. Remarquez
- que cela ne fonctionne pas avec les caractères unicode.
- @item @code{wait-cr?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, attend que l'utilisateur ou le modem envoie
- un retour chariot ou un saut de ligne avant d'afficher @file{/etc/issue} ou
- l'écran de connexion. Cela est typiquement utilisé avec l'option
- @var{init-string}.
- @item @code{no-hints?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, n'affiche par les astuces à propos des
- verrouillages numériques, majuscule et défilement.
- @item @code{no-hostname?} (par défaut : @code{#f})
- Par défaut, le nom d'hôte est affiché. Lorsque la valeur est @code{#t},
- aucun nom d'hôte ne sera affiché.
- @item @code{long-hostname?} (par défaut : @code{#f})
- Par défaut, le nom d'hôte n'est affiché qu'après le premier point. Lorsque
- la valeur est @code{#t}, le nom d'hôte pleinement qualifié renvoyé par
- @code{gethostname} ou @code{getaddrinfo} sera affiché.
- @item @code{erase-characters} (par défaut : @code{#f})
- Cette option accepte une chaîne de caractères de caractères supplémentaires
- qui devraient être interprétés comme des effacements lorsque l'utilisateur
- les tape dans leur nom d'utilisateur.
- @item @code{kill-characters} (par défaut : @code{#f})
- Cette option accepte une chaîne de caractères qui devrait être interprété
- comme signifiant « ignore tous les caractères précédent » (aussi appelé un
- caractère « kill ») lorsque l'utilisateur tape son nom d'utilisateur.
- @item @code{chdir} (par défaut : @code{#f})
- Cette option accepte, en tant que chaîne de caractères, un chemin vers un
- répertoire dans lequel se trouvera la commande avant la connexion.
- @item @code{delay} (par défaut : @code{#f})
- Cette option accepte, en tant qu'entier, le nombre de secondes à attendre
- avant d'ouvrir le tty et afficher l'écran de connexion.
- @item @code{nice} (par défaut : @code{#f})
- Cette option accepte, en tant qu'entier, la valeur « nice » avec laquelle le
- programme @command{login} tourne.
- @item @code{extra-options} (par défaut : @code{'()})
- Cette option fournie un « mécanisme de secours » pour que l'utilisateur
- puisse ajouter des arguments de la ligne de commande arbitraires à
- @command{agetty} comme une liste de chaînes de caractères.
- @end table
- @end deftp
- @deffn {Procédure Scheme} kmscon-service-type @var{config}
- Renvoie un service qui lance
- @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} d'après
- @var{config}, un objet @code{<kmscon-configuration>}, qui spécifie le tty
- sur lequel tourner, entre autres choses.
- @end deffn
- @deftp {Type de données} kmscon-configuration
- C'est le type de données représentant la configuration de Kscon, qui
- implémente l'écran de chargement de la console virtuelle.
- @table @asis
- @item @code{virtual-terminal}
- Le nom de la console sur laquelle Kmscon tourne, p.@: ex.@: @code{"tty1"}.
- @item @code{login-program} (par défaut : @code{#~(string-append #$shadow "/bin/login")})
- Une gexp qui dénote le nom d'un programme de connexion. le programme de
- connexion par défaut est @command{login} de la suite d'outils Shadow.
- @item @code{login-arguments} (par défaut : @code{'("-p")})
- Une liste d'arguments à passer à @command{login}.
- @item @code{auto-login} (par défaut : @code{#f})
- Lorsqu'un nom de connexion est passé comme une chaîne de caractères,
- l'utilisateur spécifié sera automatiquement connecté sans demande du nom
- d'utilisateur ni du mot de passe.
- @item @code{hardware-acceleration?} (par défaut : #f)
- S'il faut utiliser l'accélération matérielle.
- @item @code{kmscon} (par défaut : @var{kmscon})
- Le paquet Kmscon à utiliser.
- @end table
- @end deftp
- @cindex name service cache daemon
- @cindex nscd
- @deffn {Procédure Scheme} nscd-service [@var{config}] [#:glibc glibc] @
- [#:name-services '()]
- Renvoie un service qui lance le démon de cache de services de noms de la
- libc (nscd) avec la @var{config} donnée — un objet
- @code{<nscd-configuration>}. @xref{Name Service Switch}, pour un exemple.
- Parce que c'est pratique, le service du Shepherd pour nscd fournit les
- actions suivantes :
- @table @code
- @item invalidate
- @cindex invalidation du cache, nscd
- @cindex nscd, invalidation du cache
- Cela invalide le cache dnné. Par exemple, en laçant :
- @example
- herd invalidate nscd hosts
- @end example
- @noindent
- on invalide le cache de noms d'hôtes de nscd.
- @item statistiques
- Lancer @command{herd statistics nscd} affiche des informations sur
- l'utilisation de nscd et des caches.
- @end table
- @end deffn
- @defvr {Variable Scheme} %nscd-default-configuration
- C'est la valeur par défaut de @code{<nscd-configuration>} (voir plus bas)
- utilisée par @code{nscd-service}. Elle utilise les caches définis par
- @var{%nscd-default-caches} ; voir plus bas.
- @end defvr
- @deftp {Type de données} nscd-configuration
- C'est le type de données qui représente la configuration du démon de cache
- de services de noms (nscd).
- @table @asis
- @item @code{name-services} (par défaut : @code{'()})
- Liste des paquets dénotant des @dfn{services de noms} qui doivent être
- visible pour nscd, p.@: ex.@: @code{(list @var{nss-mdns})}.
- @item @code{glibc} (par défaut : @var{glibc})
- Objet de paquet qui dénote la Biblothèque C de GNU qui fournit la commande
- @command{nscd}.
- @item @code{log-file} (par défaut : @code{"/var/log/nscd.log"})
- Nom du fichier journal de nscd. C'est là que les sorties de débogage sont
- envoyée lorsque @code{debug-level} est strictement positif.
- @item @code{debug-level} (par défaut : @code{0})
- Entier qui dénote le niveau de débogage. Les entiers les plus grands
- signifient plus de sortie de débogage.
- @item @code{caches} (par défaut : @var{%nscd-default-caches})
- Liste d'objets @code{<nscd-cache>} qui dénotent des choses à mettre en cache
- ; voir plus bas.
- @end table
- @end deftp
- @deftp {Type de données} nscd-cache
- Type de données représentant une base de données de cache de nscd et ses
- paramètres.
- @table @asis
- @item @code{database}
- C'est un symbole qui représente le nom de la base de donnée à mettre en
- cache. Les valeurs valide sont @code{passwd}, @code{group}, @code{hosts} et
- @code{services} qui désignent les bases de données NSS correspondantes
- (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
- @item @code{positive-time-to-live}
- @itemx @code{negative-time-to-live} (par défaut : @code{20})
- Un entier qui représente le nombre de secondes pendant lesquelles un
- résultat positif ou négatif reste en cache.
- @item @code{check-files?} (par défaut : @code{#t})
- Indique s'il faut vérifier des mises à jours dans les fichiers correspondant
- à @var{database}.
- Par exemple, lorsque @var{database} est @code{hosts}, ce drapeau indique à
- nscd de vérifier s'il y a des mises à jour de @file{/etc/hosts} et de les
- prendre en compte.
- @item @code{persistent?} (par défaut : @code{#t})
- Indique si le cache devrait être stocké de manière persistante sur le
- disque.
- @item @code{shared?} (par défaut : @code{#t})
- Indique si le cache devrait être partagé entre les utilisateurs.
- @item @code{max-database-size} (par défaut : 32@tie{}MiB)
- Taille maximale en octets de la base de données en cache.
- @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
- @c settings, so leave them out.
- @end table
- @end deftp
- @defvr {Variable Scheme} %nscd-default-caches
- Liste d'objets @code{<nscd-cache>} utilisés par défaut par
- @code{nscd-configuration} (voir plus haut).
- Elle active la mise en cache persistante et agressive des recherches de
- services et de noms d'hôtes. Ces derniers fournissent une recherche de noms
- d'hôtes plus performante, résiliente face à des serveurs de noms peu fiables
- et une protection de votre vie privée plus efficace — souvent le résultat
- des recherches de noms d'hôtes sont dans le cache local, donc les serveurs
- de nom externes n'ont même pas besoin d'être questionnés.
- @end defvr
- @anchor{syslog-configuration-type}
- @cindex syslog
- @cindex logging
- @deftp {Type de données} syslog-configuration
- Ce type de données représente la configuration du démon syslog.
- @table @asis
- @item @code{syslogd} (par défaut : @code{#~(string-append #$inetutils "/libexec/syslogd")})
- Le démon syslog à utiliser.
- @item @code{config-file} (par défaut : @code{%default-syslog.conf})
- Le fichier de configuration de syslog à utiliser.
- @end table
- @end deftp
- @anchor{syslog-service}
- @cindex syslog
- @deffn {Procédure Scheme} syslog-service @var{config}
- Renvoie un service qui lance un démon syslog en suivant @var{config}.
- @xref{syslogd invocation,,, inetutils, GNU Inetutils}, pour plus
- d'informations sur la syntaxe du fichier de configuration.
- @end deffn
- @defvr {Variable Scheme} guix-service-type
- C'est le type de service qui lance le démon de construction,
- @command{guix-daemon} (@pxref{Invoquer guix-daemon}). Sa valeur doit être
- un enregistrement @code{guix-configuration} décrit plus bas.
- @end defvr
- @anchor{guix-configuration-type}
- @deftp {Type de données} guix-configuration
- Ce type de données représente la configuration du démon de construction de
- Guix. @xref{Invoquer guix-daemon} pour plus d'informations.
- @table @asis
- @item @code{guix} (par défaut : @var{guix})
- Le paquet Guix à utiliser.
- @item @code{build-group} (par défaut : @code{"guixbuild"})
- Nom du groupe des comptes utilisateurs de construction.
- @item @code{build-accounts} (par défaut : @code{10})
- Nombre de comptes utilisateurs de construction à créer.
- @item @code{authorize-key?} (par défaut : @code{#t})
- @cindex substituts, autorisations
- Autoriser ou non les clefs de substituts listées dans @code{authorize-keys}
- — par défaut celle de @code{hydra.gny.org} (@pxref{Substituts}).
- @vindex %default-authorized-guix-keys
- @item @code{authorized-keys} (par défaut : @var{%default-authorized-guix-keys})
- La liste des fichiers de clefs autorisées pour les imports d'archives, en
- 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}
- (@pxref{Substituts}).
- @item @code{use-substitutes?} (par défaut : @code{#t})
- S'il faut utiliser les substituts.
- @item @code{substitute-urls} (par défaut : @var{%default-substitute-urls})
- La liste des URL où trouver des substituts par défaut.
- @item @code{max-silent-time} (par défaut : @code{0})
- @itemx @code{timeout} (par défaut : @code{0})
- Le nombre de secondes de silence et le nombre de secondes d'inactivité,
- respectivement, après lesquelles un processus de construction son délai
- d'attente. Une valeur de zéro désactive le délai d'attente.
- @item @code{log-compression} (par défaut : @code{'bzip2})
- Le type de compression utilisé par les journaux de construction — parmi
- @code{gzip}, @code{bzip2} et @code{none}.
- @item @code{extra-options} (par défaut : @code{'()})
- Liste d'options supplémentaires de la ligne de commande pour
- @command{guix-daemon}.
- @item @code{log-file} (par défaut : @code{"/var/log/guix-daemon.log"})
- Le fichier où les sorties standard et d'erreur de @command{guix-daemon} sont
- écrites.
- @item @code{http-proxy} (par défaut : @code{#f})
- Le serveur mandataire HTTP à utiliser pour télécharger les dérivations à
- sortie fixe et les substituts.
- @item @code{tmpdir} (par défaut : @code{#f})
- Un répertoire où @command{guix-daemon} effectuera ses constructions.
- @end table
- @end deftp
- @deffn {Procédure Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
- Lance @var{udev}, qui rempli le répertoire @file{/dev} dynamiquement. Les
- règles udev peuvent être fournies comme une liste de fichier via la variable
- @var{rules}. Les procédures @var{udev-rule} et @var{file->udev-rule} de
- @code{(gnu services base)} simplifient la création de ces fichiers de règle.
- @deffn {Procédure Scheme} udev-rule [@var{file-name} @var{contents}]
- Renvoie un fichier de règle udev nommé @var{file-name} contenant les règles
- définie par le litéral @var{contents}.
- Dans l'exemple suivant, on définie une règle pour un périphérique USB qui
- sera stockée dans le fichier @file{90-usb-thing.rules}. La règle lance un
- script à la détection du périphérique USB avec l'identifiant de produit
- donné.
- @example
- (define %example-udev-rule
- (udev-rule
- "90-usb-thing.rules"
- (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
- "ATTR@{product@}==\"Example\", "
- "RUN+=\"/path/to/script\"")))
- @end example
- @end deffn
- Ici on montre comment le service @var{udev-service} par défaut peut être
- étendu avec cette règle.
- @example
- (operating-system
- ;; @dots{}
- (services
- (modify-services %desktop-services
- (udev-service-type config =>
- (udev-configuration (inherit config)
- (rules (append (udev-configuration-rules config)
- (list %example-udev-rule))))))))
- @end example
- @deffn {Procédure Scheme} file->udev-rule [@var{file-name} @var{file}]
- Renvoie un fichier udev nommé @var{file-name} contenant les règles définies
- dans @var{file}, un objet simili-fichier.
- L'exemple suivant montre comment utiliser un fichier de règles existant.
- @example
- (use-modules (guix download) ;pour url-fetch
- (guix packages) ;pour origin
- ;; @dots{})
- (define %android-udev-rules
- (file->udev-rule
- "51-android-udev.rules"
- (let ((version "20170910"))
- (origin
- (method url-fetch)
- (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
- "android-udev-rules/" version "/51-android.rules"))
- (sha256
- (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
- @end example
- @end deffn
- En plus, les définitions des paquets de Guix peuvent être inclus dans
- @var{rules} pour étendre les règles avec les définitions trouvées dans leur
- sous-répertoire @file{lib/udev/rules.d}. Au lieu de l'exemple
- @var{file->udev-rule} précédent, on aurait pu utiliser le paquet
- @var{android-udev-rules} qui existe dans le module @code{(gnu packages
- android)}.
- L'exemple suivant montre comment utiliser le paquet @var{android-udev-rules}
- pour que l'outil Android @command{adb} puisse détecter les appareils sans
- privilège root. Il détaille aussi comment créer le grope @code{adbusers},
- requis pour le bon fonctionnement des règles définies dans le paquet
- @var{android-udev-rules}. Pour créer ce groupe, on doit le définir dans les
- @var{supplementary-groups} de la déclaration @var{user-account} ainsi que
- dans le champ @var{groups} de l'enregistrement @var{operating-system}.
- @example
- (use-modules (gnu packages android) ;for android-udev-rules
- (gnu system shadow) ;for user-group
- ;; @dots{})
- (operating-system
- ;; @dots{}
- (users (cons (user-acount
- ;; @dots{}
- (supplementary-groups
- '("adbusers" ;for adb
- "wheel" "netdev" "audio" "video"))
- ;; @dots{})))
- (groups (cons (user-group (system? #t) (name "adbusers"))
- %base-groups))
- ;; @dots{}
- (services
- (modify-services %desktop-services
- (udev-service-type config =>
- (udev-configuration (inherit config)
- (rules (cons* android-udev-rules
- (udev-configuration-rules config))))))))
- @end example
- @end deffn
- @defvr {Variable Scheme} urandom-seed-service-type
- Garde de l'entropie dans @var{%random-seed-file} pour démarrer
- @file{/dev/urandom} au redémarrage. Ce service essaye aussi de démarrer
- @file{/dev/urandom} à partir de @file{/dev/hwrng} au démarrage si
- @file{/dev/hwrng} existe et peut être lu.
- @end defvr
- @defvr {Variable Scheme} %random-seed-file
- C'est le nom du fichier où des octets aléatoires sont sauvegardés par
- @var{urandom-seed-service} pour démarrer @file{/dev/urandom} au
- redémarrage. Sa valeur par défaut est @file{/var/lib/random-seed}.
- @end defvr
- @cindex disposition clavier
- @cindex clavier
- @deffn {Procédure Scheme} console-keymap-service @var{files} ...
- @cindex disposition du clavier
- Renvoie un service qui charge les dispositions claviers de @var{files} avec
- la commande @command{loadkeys}. Vraisemblablement, vous voudrez charger une
- disposition par défaut, ce qui se fait ainsi :
- @example
- (console-keymap-service "dvorak")
- @end example
- Ou par exemple pour un clavier suédois, vous pourriez avoir besoin de
- combiner les dispositions suivantes :
- @example
- (console-keymap-service "se-lat6" "se-fi-lat6")
- @end example
- Vous pouvez aussi spécifier le nom de fichier (ou les noms de fichiers)
- complets de vos dispositions. Voir @code{man loadkeys} pour des détails.
- @end deffn
- @cindex souris
- @cindex gpm
- @defvr {Variable Scheme} gpm-service-type
- C'est le type du service qui lance GPM, le @dfn{démon de souris à but
- général}, qui fournit le support de la souris sur la console Linux. GPM
- permet aux utilisateurs d'utiliser la souris dans la console, entre autres
- pour sélectionner, copier et coller du texte.
- La valeur pour les services de ce type doit être un @code{gpm-configuration}
- (voir plus bas). Ce service ne fait pas partie de @var{%base-services}.
- @end defvr
- @deftp {Type de données} gpm-configuration
- Type de données représentant la configuration de GPM.
- @table @asis
- @item @code{options} (par défaut : @code{%default-gpm-options})
- Les options de la ligne de commande à passer à @command{gpm}. L'ensemble
- des options par défaut dit à @command{gpm} d'écouter les événements de la
- souris dans @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual},
- pour plus d'informations.
- @item @code{gpm} (par défaut : @code{gpm})
- Le paquet GPM à utiliser.
- @end table
- @end deftp
- @anchor{guix-publish-service-type}
- @deffn {Variable Scheme} guix-publish-service-type
- 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
- plus bas.
- Ce service suppose que @file{/etc/guix} contient déjà une paire de clefs
- 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.
- @end deffn
- @deftp {Type de données} guix-publish-configuration
- Le type de données représentant la configuration du service @code{guix
- publish}.
- @table @asis
- @item @code{guix} (par défaut : @code{guix})
- Le paquet Guix à utiliser.
- @item @code{port} (par défaut : @code{80})
- Le port TCP sur lequel écouter les connexions.
- @item @code{host} (par défaut : @code{"localhost"})
- L'hôte (et donc, l'interface réseau) sur lequel écouter. Utilisez
- @code{"0.0.0.0"} pour écouter sur toutes les interfaces réseaux.
- @item @code{compression-level} (par défaut : @code{3})
- Le niveau de compression gzip auquel les substituts sont compressés.
- Utilisez @code{0} pour désactiver complètement la compression, et @code{9}
- pour avoir le meilleur taux de compression contre une plus grande
- utilisation du CPU.
- @item @code{nar-path} (par défaut : @code{"nar"})
- Le chemin d'URL où les « nars » se trouvent. @xref{Invoquer guix publish,
- @code{--nar-path}}, pour des détails.
- @item @code{cache} (par défaut : @code{#f})
- Lorsque la valeur est @code{#f}, désactive le cache et génère les archives à
- la demande. Sinon, cela devrait être le nom d'un répertoire — p.@: ex.@:
- @code{"/var/cache/guix/publish"} — où @command{guix publish} gère le cache
- 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
- impliqués.
- @item @code{workers} (par défaut : @code{#f})
- Lorsque la valeur est un entier, c'est le nombre de threads de travail
- utilisés pour le cache ; lorsque la valeur est @code{#f}, le nombre de
- processeurs est utilisé. @xref{Invoquer guix publish, @option{--workers}},
- pour plus d'informations.
- @item @code{ttl} (par défaut : @code{#f})
- Lorsque la valeur est un entier, il dénote la @dfn{durée de vie} en secondes
- des archives publiées. @xref{Invoquer guix publish, @option{--ttl}}, pour
- plus d'informations.
- @end table
- @end deftp
- @anchor{rngd-service}
- @deffn {Procédure Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
- [#:device "/dev/hwrng"]
- Renvoie un service qui lance le programme @command{rngd} de @var{rng-tools}
- pour ajouter @var{device} à la réserve d'entropie du noyau. Le service
- échouera si @var{device} n'existe pas.
- @end deffn
- @anchor{pam-limits-service}
- @cindex limites de session
- @cindex ulimit
- @cindex priorités
- @cindex temps réel
- @cindex jackd
- @deffn {Procédure Scheme} pam-limits-service [#:limits @code{'()}]
- Renvoie un service qui installe un fichier de configuration pour le
- @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html, module
- @code{pam_limits}}. La procédure prend éventuellement une liste de valeurs
- @code{pam-limits-entry} qui peuvent être utilisées pour spécifier les
- limites @code{ulimit} et les priorités des sessions utilisateurs.
- La définition de limites suivante défini deux limites matérielles et
- logicielles pour toutes les sessions connectées des utilisateurs du groupe
- @code{realtime} :
- @example
- (pam-limits-service
- (list
- (pam-limits-entry "@@realtime" 'both 'rtprio 99)
- (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
- @end example
- La première entrée augment la priorité en temps réel maximale des processus
- non privilégiés ; la deuxième entrée abandonne les restrictions sur l'espace
- d'adressage maximal qui peut être verrouillé en mémoire. Ces paramètres
- sont souvent utilisés sur les systèmes audio temps-réel.
- @end deffn
- @node Exécution de tâches planifiées
- @subsubsection Exécution de tâches planifiées
- @cindex cron
- @cindex mcron
- @cindex tâches planifiées
- Le module @code{(gnu services mcron)} fournit une interface pour
- GNU@tie{}mcron, un démon qui lance des tâches planifiées (@pxref{Top,,,
- mcron, GNU@tie{}mcron}). GNU@tie{}mcron est similaire au démon Unix
- traditionel @command{cron} ; la principale différence est qu'il est
- implémenté en Guile Scheme, qui fournit beaucoup de flexibilité lors de la
- spécification de la planification des tâches et de leurs actions.
- L'exemple en dessous définit un système d'exploitation qu lance les
- commandes @command{updatebd} (@pxref{Invoking updatedb,,, find, Finding
- Files}) et @command{guix gc} (@pxref{Invoquer guix gc}) tous les jours,
- ainsi que la commande @command{mkid} en tant qu'utilisateur non privilégié
- (@pxref{mkid invocation,,, idutils, ID Database Utilities}). Il utilise des
- gexps pour introduire des définitions de tâches qui sont passées à mcron
- (@pxref{G-Expressions}).
- @lisp
- (use-modules (guix) (gnu) (gnu services mcron))
- (use-package-modules base idutils)
- (define updatedb-job
- ;; Lance « updatedb » à 3h du matin chaque jour. Ici nous spécifions
- ;; l'action de la tâche comme une procédure Scheme.
- #~(job '(next-hour '(3))
- (lambda ()
- (execl (string-append #$findutils "/bin/updatedb")
- "updatedb"
- "--prunepaths=/tmp /var/tmp /gnu/store"))))
- (define garbage-collector-job
- ;; Lance le ramasse-miettes tous les jours à minuit cinq.
- ;; L'action de la tâche est une commande shell.
- #~(job "5 0 * * *" ;Vixie cron syntax
- "guix gc -F 1G"))
- (define idutils-job
- ;; Met à jour la base de données d'index en tant que « charlie » à 12h15
- ;; et 19h15. La commande est lancée depuis le répertoire personnel de l'utilisateur.
- #~(job '(next-minute-from (next-hour '(12 19)) '(15))
- (string-append #$idutils "/bin/mkid src")
- #:user "charlie"))
- (operating-system
- ;; @dots{}
- (services (cons (mcron-service (list garbage-collector-job
- updatedb-job
- idutils-job))
- %base-services)))
- @end lisp
- @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, pour
- plus d'informations sur les spécifications des tâche de mcron. Ci-dessous
- est la référence du service mcron.
- Sur un système lancé, vous pouvez utiliser l'action @code{schedule} du
- service pour visualiser les travaux mcron qui seront exécutés ensuite :
- @example
- # herd schedule mcron
- @end example
- @noindent
- Cet exemple ci-dessus montre les cinq tâches qui seront exécutés, mais vous
- pouvez spécifier le nombre de tâches à afficher :
- @example
- # herd schedule mcron 10
- @end example
- @deffn {Procédure Scheme} mcron-service @var{jobs} [#:mcron @var{mcron}]
- Renvoie un service mcron qui lance @var{mcron} qui planifie les tâches
- @var{jobs}, une liste de gexps qui dénotent des spécifications de tâches de
- mcron.
- C'est un raccourci pour :
- @example
- (service mcron-service-type
- (mcron-configuration (mcron mcron) (jobs jobs)))
- @end example
- @end deffn
- @defvr {Variable Scheme} mcron-service-type
- C'est le type du service @code{mcron}, dont la valeur est un objet
- @code{mcron-configuration}
- Ce type de service peut être la cible d'une extension de service qui lui
- 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
- qui fournissent des tâches mcron à lancer.
- @end defvr
- @deftp {Type de données} mcron-configuration
- Type données qui représente la configuration de mcron.
- @table @asis
- @item @code{mcron} (par défaut : @var{mcron})
- Le paquet mcron à utiliser.
- @item @code{jobs}
- C'est la liste des gexps (@pxref{G-Expressions}), où chaque gexp correspond
- à une spécification de tâche de mcron (@pxref{Syntax, mcron job
- specifications,, mcron, GNU@tie{}mcron}).
- @end table
- @end deftp
- @node Rotation des journaux
- @subsubsection Rotation des journaux
- @cindex rottlog
- @cindex journaux, rotation
- @cindex logging
- Les fichiers journaux comme ceux qui se trouvent dans @file{/var/log} ont
- tendance à grandir sans fin, donc c'est une bonne idée de le @dfn{faire
- tourner} de temps à autres — c.-à-d.@: archiver leur contenu dans des
- fichiers séparés, potentiellement compressés. Le module @code{(gnu services
- admin)} fournit une interface pour GNU@tie{}Rot[t]log, un outil de rotation
- de journaux (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
- L'exemple ci-dessous définit un système d'exploitation qui fournit la
- rotation des journaux avec les paramètres par défaut, pour les journaux les
- plus courants.
- @lisp
- (use-modules (guix) (gnu))
- (use-service-modules admin mcron)
- (use-package-modules base idutils)
- (operating-system
- ;; @dots{}
- (services (cons (service rottlog-service-type)
- %base-services)))
- @end lisp
- @defvr {Variable Scheme} rottlog-service-type
- C'est le type du service Rotlog, dont la valeur est un objet
- @code{rottlog-configuration}.
- D'autres services peuvent étendre celui-ci avec de nouveaux objets
- @code{log-rotation} (voir plus bas), en augmentant ainsi l'ensemble des
- fichiers à faire tourner.
- Ce type de service peut définir des taches (@pxref{Exécution de tâches planifiées})
- pour lancer le service rottlog.
- @end defvr
- @deftp {Type de données} rottlog-configuration
- Type de données représentant la configuration de rottlog.
- @table @asis
- @item @code{rottlog} (par défaut : @code{rottlog})
- Le paquet Rottlog à utiliser.
- @item @code{rc-file} (par défaut : @code{(file-append rottlog "/etc/rc")})
- Le fichier de configuration Rottlog à utiliser (@pxref{Mandatory RC
- Variables,,, rottlog, GNU Rot[t]log Manual}).
- @item @code{rotations} (par défaut : @code{%default-rotations})
- Une liste d'objets @code{log-rotation} définis plus bas.
- @item @code{jobs}
- C'est une liste de gexps où chaque gexp correspond à une spécification de
- tache de mcron (@pxref{Exécution de tâches planifiées}).
- @end table
- @end deftp
- @deftp {Type de données} log-rotation
- Type de données représentant la rotation d'un groupe de fichiers journaux.
- En reprenant un exemple du manuel de Rottlog (@pxref{Period Related File
- Examples,,, rottlog, GNU Rot[t]log Manual}), on peut définir la rotation
- d'un journal de cette manière :
- @example
- (log-rotation
- (frequency 'daily)
- (files '("/var/log/apache/*"))
- (options '("storedir apache-archives"
- "rotate 6"
- "notifempty"
- "nocompress")))
- @end example
- La liste des champs est la suivante :
- @table @asis
- @item @code{frequency} (par défaut : @code{'weekly})
- La fréquence de rotation, un symbole.
- @item @code{files}
- La liste des fichiers ou des motifs de noms de fichiers à faire tourner.
- @item @code{options} (par défaut : @code{'()})
- La liste des options de rottlog pour cette rotation (@pxref{Configuration
- parameters,,, rottlog, GNU Rot[t]lg Manual}).
- @item @code{post-rotate} (par défaut : @code{#f})
- Soit @code{#f}, soit une gexp à exécuter une fois la rotation terminée.
- @end table
- @end deftp
- @defvr {Variable Scheme} %default-rotations
- Spécifie la rotation hebdomadaire de @var{%rotated-files} et de quelques
- autres fichiers.
- @end defvr
- @defvr {Variable Scheme} %rotated-files
- La liste des fichiers contrôlés par syslog à faire tourner. Par défaut il
- s'agit de : @code{'("/var/log/messages" "/var/log/secure")}
- @end defvr
- @node Services réseau
- @subsubsection Services réseau
- Le module @code{(gnu services networking)} fournit des services pour
- configurer les interfaces réseaux.
- @cindex DHCP, service réseau
- @defvr {Variable Scheme} dhcp-client-service-type
- C'est le type de services qui lance @var{dhcp}, un client DHC (protocole de
- configuration d'hôte dynamique) sur toutes les interfaces réseau
- non-loopback. Sa valeur est le paquet du client DHCP à utiliser,
- @code{isc-dhcp} par défaut.
- @end defvr
- @deffn {Procédure Scheme} dhcpd-service-type
- Ce type définie un service qui lance un démon DHCP. Pour créer un service
- de ce type, vous devez appliquer un objet @code{<dhcpd-configuration>}. Par
- exemple :
- @example
- (service dhcpd-service-type
- (dhcpd-configuration
- (config-file (local-file "my-dhcpd.conf"))
- (interfaces '("enp0s25"))))
- @end example
- @end deffn
- @deftp {Type de données} dhcpd-configuration
- @table @asis
- @item @code{package} (par défaut : @code{isc-dhcp})
- Le paquet qui fournit le démon DHCP. ce paquet doit fournir le démon
- @file{sbin/dhcpd} relativement à son répertoire de sortie. Le paquet par
- défaut est le @uref{http://www.isc.org/products/DHCP, serveur DHCP d'ISC}
- @item @code{config-file} (par défaut : @code{#f})
- Le fichier de configuration à utiliser. Il est requis. Il sera passé à
- @code{dhcpd} via son option @code{-cf}. La valeur peut être n'importe quel
- objet « simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir
- @code{man dhcpd.conf} pour des détails sur la syntaxe du fichier de
- configuration.
- @item @code{version} (par défaut : @code{"4"})
- La version de DHCP à utiliser. Le serveur DHCP d'ISC supporte les valeur «
- 4 », « 6 » et « 4o6 ». Elles correspondent aux options @code{-4}, @code{-6}
- et @code{-4o6} du programme @code{dhcpd}. Voir @code{man dhcpd} pour plus
- de détails.
- @item @code{run-directory} (par défaut : @code{"/run/dhcpd"})
- Le répertoire d'exécution à utiliser. Au moment de l'activation du service,
- ce répertoire sera créé s'il n'existe pas.
- @item @code{pid-file} (par défaut : @code{"/run/dhcpd/dhcpd.pid"})
- Le fichier de PID à utiliser. Cela correspond à l'option @code{-pf} de
- @code{dhcpd}. Voir @code{man dhcpd} pour plus de détails.
- @item @code{interfaces} (par défaut : @code{'()})
- Les noms des interfaces réseaux sur lesquelles dhcpd écoute. Si cette liste
- n'est pas vide, alors ses éléments (qui doivent être des chaînes de
- caractères) seront ajoutés à l'invocation de @code{dhcpd} lors du démarrage
- du démon. Il n'est pas forcément nécessaire de spécifier des interfaces ici
- ; voir @code{man dhcpd} pour plus de détails.
- @end table
- @end deftp
- @defvr {Variable Scheme} static-networking-service-type
- @c TODO Document <static-networking> data structures.
- C'est le type des interfaces réseaux configurés statiquement.
- @end defvr
- @deffn {Procédure Scheme} static-networking-service @var{interface} @var{ip} @
- [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
- [#:requirement @code{'(udev)}]
- Renvoie un service qui démarre @var{interface} avec l'adresse @var{ip}. Si
- @var{netmask} est vrai, il sera utilisé comme masque de sous-réseau. Si
- @var{gateway} est vrai, ce doit être une chaîne de caractères qui spécifie
- la passerelle par défaut du réseau. @var{requirement} peut être utilisé
- pour déclarer une dépendance sur un autre service avant de configurer
- l'interface.
- On peut appeler cette procédure plusieurs fois, une fois par interface
- réseau qui nous intéresse. Dans les coulisses, elle étend
- @code{static-networking-service-type} avec les interfaces réseaux
- supplémentaires à gérer.
- Par exemple :
- @example
- (static-networking-service "eno1" "192.168.1.82"
- #:gateway "192.168.1.2"
- #:name-servers '("192.168.1.2"))
- @end example
- @end deffn
- @cindex wicd
- @cindex sans-fil
- @cindex WiFi
- @cindex gestion du réseau
- @deffn {Procédure Scheme} wicd-service [#:wicd @var{wicd}]
- Renvoie un service qui lance @url{https://launchpad.net/wicd,Wicd}, un démon
- de gestion réseau qui cherche à simplifier la configuration des résaux
- filaires et sans fil.
- Ce service ajoute le paquet @var{wicd} au profil global, pour fournir des
- commandes pour interagir avec le démon et configurer le réseau :
- @command{wicd-client}, une interface graphique et les interfaces
- utilisateurs @command{wicd-cli} et @command{wicd-curses}.
- @end deffn
- @cindex ModemManager
- @defvr {Variable Scheme} modem-manager-service-type
- C'est le type de service pour le service
- @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}. La
- valeur de ce type de service est un enregistrement
- @code{modem-manager-configuration}.
- Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
- @end defvr
- @deftp {Type de données} modem-manager-configuration
- Type de donnée représentant la configuration de ModemManager.
- @table @asis
- @item @code{modem-manager} (par défaut : @code{modem-manager})
- Le paquet ModemManager à utiliser.
- @end table
- @end deftp
- @cindex NetworkManager
- @defvr {Variable Scheme} network-manager-service-type
- C'est le type de service pour le service
- @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}. La
- valeur pour ce type de service est un enregistrement
- @code{network-manager-configuration}.
- Ce service fait partie de @code{%desktop-services} (@pxref{Services de bureaux}).
- @end defvr
- @deftp {Type de données} network-manager-configuration
- Type de données représentant la configuration de NetworkManager.
- @table @asis
- @item @code{network-manager} (par défaut : @code{network-manager})
- Le paquet NetworkManager à utiliser.
- @item @code{dns} (par défaut : @code{"default"})
- Mode de gestion pour le DNS, qui affecte la manière dont NetworkManager
- utilise le fichier de configuration @code{resolv.conf}
- @table @samp
- @item default
- NetworkManager mettra à jour @code{resolv.conf} pour refléter les serveurs
- de noms fournis par les connexions actives.
- @item dnsmasq
- NetworkManager lancera @code{dnsmasq} en tant que serveur de cache local, en
- utilisant une configuration « DNS disjointe » si vous êtes connecté par un
- VPN puis mettra à jour @code{resolv.conf} pour pointer vers le serveur de
- nom local.
- @item none
- NetworkManager ne modifiera pas @code{resolv.conf}.
- @end table
- @item @code{vpn-plugins} (par défaut : @code{'()})
- C'est la liste des greffons disponibles pour les VPN (réseaux privés
- virtuels). Un exemple est le paquet @code{network-manager-openvpn}, qui
- permet à NetworkManager de gérer des VPN via OpenVPN.
- @end table
- @end deftp
- @cindex Connman
- @deffn {Variable Scheme} connman-service-type
- C'est le type de service pour lancer @url{https://01.org/connman,Connman},
- un gestionnaire de connexions réseaux.
- Sa valeur doit être un enregistrement @code{connman-configuration} comme
- dans cet exemple :
- @example
- (service connman-service-type
- (connman-configuration
- (disable-vpn? #t)))
- @end example
- Voir plus bas pour des détails sur @code{connman-configuration}.
- @end deffn
- @deftp {Type de données} connman-configuration
- Type de données représentant la configuration de connman.
- @table @asis
- @item @code{connman} (par défaut : @var{connman})
- Le paquet connman à utiliser.
- @item @code{disable-vpn?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, désactive le greffon vpn de connman.
- @end table
- @end deftp
- @cindex WPA Supplicant
- @defvr {Variable Scheme} wpa-supplicant-service-type
- C'est le type du service qui lance@url{https://w1.fi/wpa_supplicant/,WPA
- supplicant}, un démon d'authentification requis pour s'authentifier sur des
- WiFi chiffrés ou des réseaux ethernet.
- @end defvr
- @deftp {Type de données} wpa-supplicant-configuration
- Type données qui représente la configuration de WPA Supplicant.
- Il prend les paramètres suivants :
- @table @asis
- @item @code{wpa-supplicant} (par défaut : @code{wpa-supplicant})
- Le paquet WPA Supplicant à utiliser.
- @item @code{dbus?} (par défaut : @code{#t})
- Indique s'il faut écouter les requêtes sur D-Bus.
- @item @code{pid-file} (par défaut : @code{"/var/run/wpa_supplicant.pid"})
- Où stocker votre fichier de PID.
- @item @code{interface} (par défaut : @code{#f})
- Si une valeur est indiquée, elle doit spécifier le nom d'une interface
- réseau que WPA supplicant contrôlera.
- @item @code{config-file} (par défaut : @code{#f})
- Fichier de configuration facultatif à utiliser.
- @item @code{extra-options} (par défaut : @code{'()})
- Liste d'arguments de la ligne de commande supplémentaires à passer au démon.
- @end table
- @end deftp
- @cindex iptables
- @defvr {Variable Scheme} iptables-service-type
- This is the service type to set up an iptables configuration. iptables is a
- packet filtering framework supported by the Linux kernel. This service
- supports configuring iptables for both IPv4 and IPv6. A simple example
- configuration rejecting all incoming connections except those to the ssh
- port 22 is shown below.
- @lisp
- (service iptables-service-type
- (iptables-configuration
- (ipv4-rules (plain-file "iptables.rules" "*filter
- :INPUT ACCEPT
- :FORWARD ACCEPT
- :OUTPUT ACCEPT
- -A INPUT -p tcp --dport 22 -j ACCEPT
- -A INPUT -j REJECT --reject-with icmp-port-unreachable
- COMMIT
- "))
- (ipv6-rules (plain-file "ip6tables.rules" "*filter
- :INPUT ACCEPT
- :FORWARD ACCEPT
- :OUTPUT ACCEPT
- -A INPUT -p tcp --dport 22 -j ACCEPT
- -A INPUT -j REJECT --reject-with icmp6-port-unreachable
- COMMIT
- "))))
- @end lisp
- @end defvr
- @deftp {Type de données} iptables-configuration
- Type de données représentant la configuration d'iptables.
- @table @asis
- @item @code{iptables} (par défaut : @code{iptables})
- Le paquet iptables qui fournit @code{iptables-restore} et
- @code{ip6tables-restore}.
- @item @code{ipv4-rules} (par défaut : @code{%iptables-accept-all-rules})
- Les règles iptables à utiliser. Elles seront passées à
- @code{iptables-restore}. Cela peut être un objet « simili-fichier »
- (@pxref{G-Expressions, file-like objects}).
- @item @code{ipv6-rules} (par défaut : @code{%iptables-accept-all-rules})
- Les règles iptables à utiliser. Elles seront passées à
- @code{ip6tables-restore}. Cela peut être un objet « simili-fichier »
- (@pxref{G-Expressions, file-like objects}).
- @end table
- @end deftp
- @cindex NTP (Network Time Protocol), service
- @cindex horloge
- @defvr {Variable Scheme} ntp-service-type
- This is the type of the service running the @uref{http://www.ntp.org,
- Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep
- the system clock synchronized with that of the specified NTP servers.
- La valeur de ce service est un objet @code{ntpd-configuration}, décrit
- ci-dessous.
- @end defvr
- @deftp {Type de données} ntp-configuration
- C'est le type de données représentant la configuration du service NTP.
- @table @asis
- @item @code{servers} (par défaut : @code{%ntp-servers})
- C'est la liste des serveurs (noms d'hôtes) avec lesquels @command{ntpd} sera
- synchronisé.
- @item @code{allow-large-adjustment?} (par défaut : @code{#f})
- Détermine si @code{ntpd} peut faire un ajustement initial de plus de
- 1@tie{}000 secondes.
- @item @code{ntp} (par défaut : @code{ntp})
- Le paquet NTP à utiliser.
- @end table
- @end deftp
- @defvr {Variable Scheme} %ntp-servers
- Liste de noms d'hôtes à utiliser comme serveurs NTP par défaut. Ce sont les
- serveurs du @uref{https://www.ntppool.org/fr/, projet NTP Pool}
- @end defvr
- @cindex OpenNTPD
- @deffn {Procédure Scheme} openntpd-service-type
- Lance le démon NTP @command{ntpd}, implémenté par
- @uref{http://www.openntpd.org, OpenNTPD}. Le démon gardera l'horloge
- système synchronisée avec celle des serveurs donnés.
- @example
- (service
- openntpd-service-type
- (openntpd-configuration
- (listen-on '("127.0.0.1" "::1"))
- (sensor '("udcf0 correction 70000"))
- (constraint-from '("www.gnu.org"))
- (constraints-from '("https://www.google.com/"))
- (allow-large-adjustment? #t)))
- @end example
- @end deffn
- @deftp {Type de données} openntpd-configuration
- @table @asis
- @item @code{openntpd} (par défaut : @code{(file-append openntpd "/sbin/ntpd")})
- L'exécutable openntpd à utiliser.
- @item @code{listen-on} (par défaut : @code{'("127.0.0.1" "::1")})
- Une liste d'adresses IP locales ou de noms d'hôtes que devrait écouter le
- démon ntpd.
- @item @code{query-from} (par défaut : @code{'()})
- Une liste d'adresses IP que le démon devrait utiliser pour les requêtes
- sortantes.
- @item @code{sensor} (par défaut : @code{'()})
- Spécifie une liste de senseurs de différences de temps que ntpd devrait
- utiliser. @code{ntpd} écoutera chaque senseur qui existe et ignorera ceux
- qui n'existent pas. Voir @uref{https://man.openbsd.org/ntpd.conf, la
- documentation en amont} pour plus d'informations.
- @item @code{server} (par défaut : @var{%ntp-servers})
- Spécifie une liste d'adresses IP ou de noms d'hôtes de serveurs NTP avec
- lesquels se synchroniser.
- @item @code{servers} (par défaut : @code{'()})
- Spécifie une liste d'adresses IP ou de noms d'hôtes de banques de serveurs
- NTP avec lesquelles se synchroniser.
- @item @code{constraint-from} (par défaut : @code{'()})
- @code{ntpd} peut être configuré pour demander la « Date » à des serveurs
- HTTPS de confiance via TLS. Cette information de temps n'est pas utilisée
- pour sa précision mais agit comme une contrainte authentifiée, ce qui réduit
- l'impact d'une attaque par l'homme du milieu sur le protocole NTP non
- authentifié. Spécifie une liste d'URL, d'adresses IP ou de noms d'hôtes de
- serveurs HTTPS qui fournissent cette contrainte.
- @item @code{constraints-from} (par défaut : @code{'()})
- Comme pour @code{constraint-from}, spécifie une liste d'URL, d'adresses IP
- ou de noms d'hôtes de serveurs HTTPS qui fournissent une contrainte. Si les
- noms d'hôtes sont résolus en plusieurs adresses IP, @code{ntpd} calculera la
- contrainte médiane.
- @item @code{allow-large-adjustment?} (par défaut : @code{#f})
- Détermine si @code{ntpd} peut faire un ajustement initial de plus de 180
- secondes.
- @end table
- @end deftp
- @cindex inetd
- @deffn {Variable Scheme} inetd-service-type
- Ce service lance le démon @command{inetd} (@pxref{inetd invocation,,,
- inetutils, GNU Inetutils}). @command{inetd} écoute des connexionssur des
- sockets internet et démarre le programme spécifié uniquement lorsqu'une
- connexion arrive sur l'un de ces sockets.
- La valeur de ce service est un objet @code{inetd-configuration}. L'exemple
- suivant configure le démon @command{inetd} pour qu'il fournisse le service
- @command{echo}, ainsi qu'in service smtp qui transfère le trafic smtp par
- ssh à un serveur @code{smtp-server} derrière une passerelle @code{hostname}
- :
- @example
- (service
- inetd-service-type
- (inetd-configuration
- (entries (list
- (inetd-entry
- (name "echo")
- (socket-type 'stream)
- (protocol "tcp")
- (wait? #f)
- (user "root"))
- (inetd-entry
- (node "127.0.0.1")
- (name "smtp")
- (socket-type 'stream)
- (protocol "tcp")
- (wait? #f)
- (user "root")
- (program (file-append openssh "/bin/ssh"))
- (arguments
- '("ssh" "-qT" "-i" "/path/to/ssh_key"
- "-W" "smtp-server:25" "user@@hostname")))))
- @end example
- Voir plus bas pour plus de détails sur @code{inetd-configuration}.
- @end deffn
- @deftp {Type de données} inetd-configuration
- Type de données représentant la configuration de @command{inetd}.
- @table @asis
- @item @code{program} (par défaut : @code{(file-append inetutils "/libexec/inetd")})
- L'exécutable @command{inetd} à utiliser.
- @item @code{entries} (par défaut : @code{'()})
- Une liste d'entrées de services @command{inetd}. Chaque entrée devrait être
- crée avec le constructeur @code{inetd-entry}.
- @end table
- @end deftp
- @deftp {Type de données} inetd-entry
- Type de données représentant une entrée dans la configuration
- d'@command{inetd}. Chaque entrée correspond à un socket sur lequel
- @command{inetd} écoutera les requêtes.
- @table @asis
- @item @code{node} (par défaut : @code{#f})
- Chaîne de caractères facultative, un liste d'adresses locales séparées par
- des virgules que @command{inetd} devrait utiliser pour écouter ce service.
- @xref{Configuration file,,, inetutils, GNU Inetutils} pour une description
- complète de toutes les options.
- @item @code{name}
- Une chaîne de caractères dont le nom doit correspondre à une entrée de
- @code{/etc/services}.
- @item @code{socket-type}
- Un symbole parmi @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} ou
- @code{'seqpacket}.
- @item @code{protocol}
- Une chaîne de caractères qui doit correspondre à une entrée dans
- @code{/etc/protocols}.
- @item @code{wait?} (par défaut : @code{#t})
- Indique si @command{inetd} devrait attendre que le serveur ait quitté avant
- d'écouter de nouvelles demandes de service.
- @item @code{user}
- A string containing the user (and, optionally, group) name of the user as
- whom the server should run. The group name can be specified in a suffix,
- separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or
- @code{"user.group"}.
- @item @code{program} (par défaut : @code{"internal"})
- Le programme du serveur qui servira les requêtes, ou @code{"internal"} si
- @command{inetd} devrait utiliser un service inclus.
- @item @code{arguments} (par défaut : @code{'()})
- A list strings or file-like objects, which are the server program's
- arguments, starting with the zeroth argument, i.e.@: the name of the program
- itself. For @command{inetd}'s internal services, this entry must be
- @code{'()} or @code{'("internal")}.
- @end table
- @xref{Configuration file,,, inetutils, GNU Inetutils} pour trouver une
- discussion plus détaillée de chaque champ de configuration.
- @end deftp
- @cindex Tor
- @defvr {Variable Scheme} tor-service-type
- C'est le type pour un service qui lance le démon de navigation anonyme
- @uref{https://torproject.org, Tor}. Le service est configuré avec un
- enregistrement @code{<tor-configuration>}. Par défaut, le démon Tor est
- lancé en tant qu'utilisateur non privilégié @code{tor}, membre du groupe
- @code{tor}.
- @end defvr
- @deffn {Procédure Scheme} tor-service [@var{config-file}] [#:tor @var{tor}]
- Cette procédure est obsolète et sera supprimée dans les futures versions.
- Renvoie un service de type @code{tor-service-type}. @var{config-file} et
- @var{tor} ont la même signification que dans @code{<tor-configuration>}.
- @end deffn
- @deftp {Type de données} tor-configuration
- @table @asis
- @item @code{tor} (par défaut : @code{tor})
- Le paquet qui fournit le démon Tor. Ce paquet doit fournir le démon
- @file{bin/tor} relativement à son répertoire de sortie. Le paquet par
- défaut est le l'implémentation du @uref{https://www.torproject.org, projet
- Tor}.
- @item @code{config-file} (par défaut : @code{(plain-file "empty" "")})
- Le fichier de configuration à utiliser. Il sera ajouté au fichier de
- configuration par défaut, et le fichier de configuration final sera passé à
- @code{tor} via son option @code{-f}. Cela peut être n'importe quel objet «
- simili-fichier » (@pxref{G-Expressions, file-like objects}). Voir @code{man
- tor} pour plus de détails sur la syntaxe du fichier de configuration.
- @item @code{hidden-services} (par défaut : @code{'()})
- La liste des enregistrements @code{<hidden-service>} à utiliser. Pour
- n'importe quel service cache que vous ajoutez à cette liste, la
- configuration appropriée pour activer le service caché sera automatiquement
- ajouté au fichier de configuration par défaut. Vous pouvez aussi créer des
- enregistrements @code{<hidden-service>} avec la procédure
- @code{tor-hidden-service} décrite plus bas.
- @item @code{socks-socket-type} (par défaut : @code{'tcp})
- Le type de socket par défaut que Tor devrait utiliser pour les socket
- SOCKS. Cela doit être soit @code{'tcp} soit @code{'unix}. S'il s'agit de
- @code{'tcp}, alors Tor écoutera pas défaut sur le port TCP 9050 sur
- l'interface de boucle locale (c.-à-d.@: localhost). S'il s'agit de
- @code{'unix}, Tor écoutera sur le socket UNIX domain
- @file{/var/run/tor/socks-sock}, qui sera inscriptible pour les membres du
- groupe @code{tor}.
- Si vous voulez personnaliser le socket SOCKS plus avant, laissez
- @code{socks-socket-type} à sa valeur par défaut de @code{'tcp} et utilisez
- @code{config-file} pour remplacer les valeurs par défaut avec votre propre
- option @code{SocksPort}.
- @end table
- @end deftp
- @cindex service caché
- @deffn {Procédure Scheme} tor-hidden-service @var{name} @var{mapping}
- Définie un @dfn{service caché} pour Tor nommé @var{name} qui implémente
- @var{mapping}. @var{mapping} est une liste de paires de port et d'hôte,
- comme dans :
- @example
- '((22 "127.0.0.1:22")
- (80 "127.0.0.1:8080"))
- @end example
- Dans cet exemple, le port 22 du service caché est relié au port local 22 et
- le port 80 est relié au port local 8080.
- Cela crée un répertoire @file{/var/lib/tor/hidden-services/@var{name}} où le
- fichier @file{hostname} contient le nom d'hôte @code{.onion} pour le service
- caché.
- Voir @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the
- Tor project's documentation} pour trouver plus d'information.
- @end deffn
- Le module @code{(gnu services rsync)} fournit les services suivant :
- Vous pourriez vouloir un démon rsync si vous voulez que des fichiers soient
- disponibles pour que n'importe qui (ou juste vous) puisse télécharger des
- fichiers existants ou en téléverser des nouveaux.
- @deffn {Variable Scheme} rsync-service-type
- C'est le type pour le démon @uref{https://rsync.samba.org, rsync}, qui prend
- un enregistrement @command{rsync-configuration} comme dans cet exemple :
- @example
- (service rsync-service-type)
- @end example
- Voir plus pas pour trouver des détails à propos de
- @code{rsync-configuration}.
- @end deffn
- @deftp {Type de données} rsync-configuration
- Type de données représentant la configuration de @code{rsync-service}.
- @table @asis
- @item @code{package} (par défaut : @var{rsync})
- Le paquet @code{rsync} à utiliser.
- @item @code{port-number} (par défaut : @code{873})
- Le port TCP sur lequel @command{rsync} écoute les connexions entrantes. Si
- le port est inférieur à @code{1024}, @command{rsync} doit être démarré en
- tant qu'utilisateur et groupe @code{root}.
- @item @code{pid-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.pid"})
- Nom du fichier où @command{rsync} écrit son PID.
- @item @code{lock-file} (par défaut : @code{"/var/run/rsyncd/rsyncd.lock"})
- Nom du fichier où @command{rsync} écrit son fichier de verrouillage.
- @item @code{log-file} (par défaut : @code{"/var/log/rsyncd.log"})
- Nom du fichier où @command{rsync} écrit son fichier de journal.
- @item @code{use-chroot?} (par défaut : @var{#t})
- S'il faut utiliser un chroot pour le répertoire partagé de @command{rsync}.
- @item @code{share-path} (par défaut : @file{/srv/rsync})
- Emplacement du répertoire partagé de @command{rsync}.
- @item @code{share-comment} (par défaut : @code{"Rsync share"})
- Commentaire du répertoire partagé de @command{rsync}.
- @item @code{read-only?} (par défaut : @var{#f})
- Permission en écriture sur le répertoire partagé.
- @item @code{timeout} (par défaut : @code{300})
- Délai d'attente d'entrée-sortie en secondes.
- @item @code{user} (par défaut : @var{"root"})
- Propriétaire du processus @code{rsync}.
- @item @code{group} (par défaut : @var{"root"})
- Groupe du processus @code{rsync}.
- @item @code{uid} (par défaut : @var{"rsyncd"})
- Nom d'utilisateur ou ID utilisateur en tant que lequel les transferts de
- fichiers ont lieu si le démon a été lancé en @code{root}.
- @item @code{gid} (par défaut : @var{"rsyncd"})
- Nom du groupe ou ID du groupe qui sera utilisé lors de l'accès au module.
- @end table
- @end deftp
- En plus, @code{(gnu services ssh)} fournit les services suivant.
- @cindex SSH
- @cindex serveur SSH
- @deffn {Procédure Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
- [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
- [#:allow-empty-passwords? #f] [#:root-login? #f] @
- [#:syslog-output? #t] [#:x11-forwarding? #t] @
- [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
- [#:public-key-authentication? #t] [#:initialize? #t]
- Lance le programme @command{lshd} de @var{lsh} pour écouter sur le port
- @var{port-number}. @var{host-key} doit désigner un fichier contenant la
- clef d'hôte et ne doit être lisible que par root.
- Lorsque @var{daemonic?} est vrai, @command{lshd} se détachera du terminal
- qui le contrôle et enregistrera ses journaux avec syslogd, à moins que
- @var{syslog-output?} ne soit faux. Évidemment, cela rend aussi lsh-service
- dépendant de l'existence d'un service syslogd. Lorsque @var{pid-file?} est
- vrai, @command{lshd} écrit son PID dans le fichier @var{pid-file}.
- Lorsque @var{initialize?} est vrai, la graine et la clef d'hôte seront créés
- lors de l'activation du service s'ils n'existent pas encore. Cela peut
- prendre du temps et demande une interaction.
- Lorsque @var{initialize?} est faux, c'est à l'utilisateur d'initialiser le
- générateur d'aléatoire (@pxref{lsh-make-seed,,, lsh, LSH Manual}) et de crée
- une paire de clefs dont la clef privée sera stockée dans le fichier
- @var{host-key} (@pxref{lshd basics,,, lsh, LSH Manual}).
- Lorsque @var{interfaces} est vide, lshd écoute les connexions sur toutes les
- interfaces réseau ; autrement, @var{interfaces} doit être une liste de noms
- d'hôtes et d'adresses.
- @var{allow-empty-passwords?} spécifie si les connexions avec des mots de
- passes vides sont acceptés et @var{root-login?} spécifie si la connexion en
- root est acceptée.
- Les autres options devraient être évidentes.
- @end deffn
- @cindex SSH
- @cindex serveur SSH
- @deffn {Variable Scheme} openssh-service-type
- C'est le type pour le démon ssh @uref{http://www.openssh.org, OpenSSH},
- @command{sshd}. Sa valeur doit être un enregistrement
- @code{openssh-configuration} comme dans cet exemple :
- @example
- (service openssh-service-type
- (openssh-configuration
- (x11-forwarding? #t)
- (permit-root-login 'without-password)
- (authorized-keys
- `(("alice" ,(local-file "alice.pub"))
- ("bob" ,(local-file "bob.pub"))))))
- @end example
- Voir plus bas pour trouver des détails sur @code{openssh-configuration}.
- Ce service peut être étendu avec des clefs autorisées supplémentaires, comme
- dans cet exemple :
- @example
- (service-extension openssh-service-type
- (const `(("charlie"
- ,(local-file "charlie.pub")))))
- @end example
- @end deffn
- @deftp {Type de données} openssh-configuration
- C'est l'enregistrement de la configuration de la commande @command{sshd}
- d'OpenSSH.
- @table @asis
- @item @code{pid-file} (par défaut : @code{"/var/run/sshd.pid"})
- Nom du fichier où @command{sshd} écrit son PID.
- @item @code{port-number} (par défaut : @code{22})
- Port TCP sur lequel @command{sshd} écoute les connexions entrantes.
- @item @code{permit-root-login} (par défaut : @code{#f})
- Ce champ détermine si et quand autoriser les connexions en root. Si la
- valeur est @code{#f}, les connexions en root sont désactivées ; si la valeur
- est @code{#t}, elles sont autorisées. S'il s'agit du symbole
- @code{'without-password}, alors les connexions root sont autorisées mais pas
- par une authentification par mot de passe.
- @item @code{allow-empty-passwords?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, les utilisateurs avec un mot de passe vide
- peuvent se connecter. Sinon, ils ne peuvent pas.
- @item @code{password-authentication?} (par défaut : @code{#t})
- Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
- mot de passe. Sinon, ils doivent utiliser une autre méthode
- d'authentification.
- @item @code{public-key-authentication?} (par défaut : @code{#t})
- Lorsque la valeur est vraie, les utilisateurs peuvent se connecter avec leur
- clef publique. Sinon, les utilisateurs doivent utiliser une autre méthode
- d'authentification.
- Les clefs publiques autorisées sont stockées dans
- @file{~/.ssh/authorized_keys}. Ce n'est utilisé que par le protocole
- version 2.
- @item @code{x11-forwarding?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, le transfert de connexion du client graphique
- X11 est activé — en d'autre termes, les options @option{-X} et @option{-Y}
- de @command{ssh} fonctionneront.
- @item @code{allow-agent-forwarding?} (par défaut : @code{#t})
- Indique s'il faut autoriser la redirection d'agent.
- @item @code{allow-tcp-forwarding?} (par défaut : @code{#t})
- Indique s'il faut autoriser la redirection TCP.
- @item @code{gateway-ports?} (par défaut : @code{#f})
- Indique s'il faut autoriser les ports de passerelle.
- @item @code{challenge-response-authentication?} (par défaut : @code{#f})
- Specifies whether challenge response authentication is allowed (e.g.@: via
- PAM).
- @item @code{use-pam?} (par défaut : @code{#t})
- Active l'interface avec le module d'authentification greffable, PAM. Si la
- valeur est @code{#t}, cela activera l'authentification PAM avec
- @code{challenge-response-authentication?} et
- @code{password-authentication?}, en plus des modules de compte et de session
- de PAM pour tous les types d'authentification.
- Comme l'authentification par défi de PAM sert généralement un rôle
- équivalent à l'authentification par mot de passe, vous devriez désactiver
- soit @code{challenge-response-authentication?}, soit
- @code{password-authentication?}.
- @item @code{print-last-log?} (par défaut : @code{#t})
- Spécifie si @command{sshd} devrait afficher la date et l'heure de dernière
- connexion des utilisateurs lorsqu'un utilisateur se connecte de manière
- interactive.
- @item @code{subsystems} (par défaut : @code{'(("sftp" "internal-sftp"))})
- Configures external subsystems (e.g.@: file transfer daemon).
- C'est une liste de paires, composées chacune du nom du sous-système et d'une
- commande (avec éventuellement des arguments) à exécuter à la demande du
- sous-système.
- La commande @command{internal-sftp} implémente un serveur SFTP dans le
- processus. Autrement, on peut spécifier la commande @command{sftp-server} :
- @example
- (service openssh-service-type
- (openssh-configuration
- (subsystems
- `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
- @end example
- @item @code{accepted-environment} (par défaut : @code{'()})
- Liste de chaînes de caractères qui décrivent les variables d'environnement
- qui peuvent être exportées.
- Chaque chaîne a sa propre ligne. Voir l'option @code{AcceptEnv} dans
- @code{man sshd_config}.
- Cet exemple permet aux clients ssh d'exporter la variable @code{COLORTERM}.
- Elle est initialisée par les émulateurs de terminaux qui supportent les
- couleurs. Vous pouvez l'utiliser dans votre fichier de ressource de votre
- shell pour activer les couleurs sur la ligne de commande si cette variable
- est initialisée.
- @example
- (service openssh-service-type
- (openssh-configuration
- (accepted-environment '("COLORTERM"))))
- @end example
- @item @code{authorized-keys} (par défaut : @code{'()})
- @cindex clefs autorisées, SSH
- @cindex SSH, clefs autorisées
- C'est la liste des clefs autorisées. Chaque élément de la liste est un nom
- d'utilisateur suivit d'un ou plusieurs objets simili-fichiers qui
- représentent les clefs publiques SSH. Par exemple :
- @example
- (openssh-configuration
- (authorized-keys
- `(("rekado" ,(local-file "rekado.pub"))
- ("chris" ,(local-file "chris.pub"))
- ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
- @end example
- @noindent
- enregistre les clefs publiques spécifiées pour les comptes @code{rekado},
- @code{chris} et @code{root}.
- Des clefs autorisées supplémentaires peuvent être spécifiées via
- @code{service-extension}.
- Remarquez que cela n'interfère @emph{pas} avec l'utilisation de
- @file{~/.ssh/authorized_keys}.
- @item @code{log-level} (par défaut : @code{'info})
- C'est le symbole qui spécifie le niveau de journalisation : @code{quiet},
- @code{fatal}, @code{error}, @code{info}, @code{verbose}, @code{debug}, etc.
- Voir la page de manuel de @file{sshd_config} pour trouver la liste complète
- des noms de niveaux.
- @end table
- @end deftp
- @deffn {Procédure Scheme} dropbear-service [@var{config}]
- Lance le @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,démon SSH
- Dropbear} avec la configuration @var{config} donnée, un objet
- @code{<dropbear-configuration>}.
- Par exemple, pour spécifier un service Dropbear qui écoute sur le port 1234,
- ajoutez cet appel au champ @code{services} d evotre système d'exploitation :
- @example
- (dropbear-service (dropbear-configuration
- (port-number 1234)))
- @end example
- @end deffn
- @deftp {Type de données} dropbear-configuration
- Ce type de données représente la configuration d'un démon SSH Dropbear.
- @table @asis
- @item @code{dropbear} (par défaut : @var{dropbear})
- Le paquet Dropbear à utiliser.
- @item @code{port-number} (par défaut : 22)
- Le port TCP sur lequel le démon attend des connexions entrantes.
- @item @code{syslog-output?} (par défaut : @code{#t})
- Indique s'il faut activer la sortie vers syslog.
- @item @code{pid-file} (par défaut : @code{"/var/run/dropbear.pid"})
- Nom du fichier de PID du démon.
- @item @code{root-login?} (par défaut : @code{#f})
- Indique s'il faut autoriser les connexions en @code{root}.
- @item @code{allow-empty-passwords?} (par défaut : @code{#f})
- Indique s'il faut autoriser les mots de passes vides.
- @item @code{password-authentication?} (par défaut : @code{#t})
- Indique s'il faut autoriser l'authentification par mot de passe.
- @end table
- @end deftp
- @defvr {Variable Scheme} %facebook-host-aliases
- Cette variable contient une chaîne de caractères à utiliser dans
- @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library Reference
- Manual}). Chaque ligne contient une entrée qui fait correspondre les noms
- des serveurs connus du service en ligne Facebook — p.@: ex.@:
- @code{www.facebook.com} — à l'hôte local — @code{127.0.0.1} ou son
- équivalent en IPv6, @code{::1}.
- Cette variable est typiquement utilisée dans le champ @code{hosts-file}
- d'une déclaration @code{operating-system} (@pxref{Référence de système d'exploitation, @file{/etc/hosts}}) :
- @example
- (use-modules (gnu) (guix))
- (operating-system
- (host-name "mamachine")
- ;; ...
- (hosts-file
- ;; Crée un fichier /etc/hosts avec des alias pour « localhost »
- ;; et « mamachine », ainsi que pour les serveurs de Facebook.
- (plain-file "hosts"
- (string-append (local-host-aliases host-name)
- %facebook-host-aliases))))
- @end example
- Ce mécanisme peut éviter que des programmes qui tournent localement, comme
- des navigateurs Web, ne se connectent à Facebook.
- @end defvr
- Le module @code{(gnu services avahi)} fourni la définition suivante.
- @deffn {Procédure Scheme} avahi-service [#:avahi @var{avahi}] @
- [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
- [#:ipv6? #t] [#:wide-area? #f] @
- [#:domains-to-browse '()] [#:debug? #f]
- Renvoie un service qui lance @command{avahi-daemon}, un serveur qui répond
- aux requêtes mDNS/DNS-SD qui permet de découvrir des services et de chercher
- des noms d'hôtes « sans configuration » (voir @uref{http://avahi.org/}) et
- qui étend le démon de cache de services de noms (nscd) pour qu'il puisse
- résoudre des noms en @code{.local} avec
- @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. En plus,
- ajoute le paquet @var{avahi} au profil du système pour que les commandes
- comme @command{avahi-browse} soient directement utilisables.
- Si @var{host-name} n'est pas @code{#f}, utilise cette valeur comme nom
- d'hôte à publier pour la machine ; sinon, utilise le vrai nom d'hôte de la
- machine.
- Lorsque la valeur de @var{publish?} est vraie, la publication des noms
- d'hôtes et des domaines sont autorisés ; en particulier, avahi-daemon
- publiera le nom d'hôte et l'adresse IP de la machine via mDNS sur le réseau
- local.
- Lorsque la valeur de @var{wide-area?} est vraie, DNS-SD sur DNS unicast est
- activé.
- Les valeurs booléennes @var{ipv4?} et @var{ipv6?} déterminent s'il faut
- utiliser un socket IPv4 ou IPv6 respectivement.
- @end deffn
- @deffn {Variable Scheme} openvswitch-service-type
- C'est le type du service @uref{http://www.openvswitch.org, Open vSwitch},
- dont la valeur devrait être un objet @code{openvswitch-configuration}.
- @end deffn
- @deftp {Type de données} openvswitch-configuration
- Type de données représentant la configuration de Open vSwitch, un
- commutateur virtuel multiniveaux conçu pour rendre possible l'automatisation
- massive des réseaux avec des extensions programmables.
- @table @asis
- @item @code{package} (par défaut : @var{openvswitch})
- Objet de paquet de Open vSwitch.
- @end table
- @end deftp
- @node Système de fenêtrage X
- @subsubsection Système de fenêtrage X
- @cindex X11
- @cindex Système de fenêtrage X
- @cindex gestionnaire de connexion
- Le support pour le système d'affichage graphique X Window — en particulier
- Xorg — est fournit par le module @code{(gnu services xorg)}. Remarquez
- qu'il n'y a pas de procédure @code{xorg-service}. À la place, le serveur X
- est démarré par le @dfn{gestionnaire de connexion}, par défaut SLiM.
- @cindex gestionnaire de fenêtre
- Pour utiliser X11, vous devez installer au moins un @dfn{gestionnaire de
- fenêtre} — par exemple les paquets @code{windowmaker} ou @code{openbox} — de
- préférence en l'ajoutant au champ @code{packages} de votre définition de
- système d'exploitation (@pxref{Référence de système d'exploitation, system-wide
- packages}).
- @defvr {Variable Scheme} slim-service-type
- C'est de type pour le gestionnaire de connexion graphique SLiM pour X11.
- @cindex types de sessions (X11)
- @cindex X11, types de sessions
- SLiM cherche des @dfn{types de sessions} définies par les fichiers
- @file{.desktop} dans @file{/run/current-system/profile/share/xsessions} et
- permet aux utilisateurs de choisir une session depuis l'écran de connexion
- avec @kbd{F1}. Les paquets comme @code{xfce}, @code{sawfish} et
- @code{ratpoison} fournissent des fichiers @file{.desktop} ; les ajouter à
- l'ensemble des paquets du système les rendra automatiquement disponibles sur
- l'écran de connexion.
- En plus, les fichiers @file{~/.xsession} sont honorées. Lorsqu'il est
- disponible, @file{~/.xsession} doit être un fichier exécutable qui démarre
- un gestionnaire de fenêtre au un autre client X.
- @end defvr
- @deftp {Type de données} slim-configuration
- Type de données représentant la configuration de @code{slim-service-type}.
- @table @asis
- @item @code{allow-empty-passwords?} (par défaut : @code{#t})
- S'il faut autoriser les connexions avec un mot de passe vide.
- @item @code{auto-login?} (par défaut : @code{#f})
- @itemx @code{default-user} (par défaut : @code{""})
- Lorsque @code{auto-login?} est faux, SLiM présent un écran de connexion.
- Lorsque @code{auto-login?} est vrai, SLiM se connecte directement en tant
- que @code{default-user}.
- @item @code{theme} (par défaut : @code{%default-slim-theme})
- @itemx @code{theme-name} (par défaut : @code{%default-slim-theme-name})
- Le thème graphique à utiliser et son nom.
- @item @code{auto-login-session} (par défaut : @code{#f})
- Si la valeur est vraie, elle doit être le nom d'un exécutable à démarrer
- comme session par défaut — p.@: ex.@: @code{(file-append windowmaker
- "/bin/windowmaker")}.
- Si la valeur est fausse, une session décrite par l'un des fichiers
- @file{.desktop} disponibles dans @code{/run/current-system/profile} et
- @code{~/.guix-profile} sera utilisée.
- @quotation Remarque
- Vous devez installer au moins un gestionnaire de fenêtres dans le profil du
- système ou dans votre profil utilisateur. Sinon, si
- @code{auto-login-session} est faux, vous ne serez jamais capable de vous
- connecter.
- @end quotation
- @item @code{startx} (par défaut : @code{(xorg-start-command)})
- La commande utilisée pour démarrer le serveur graphique X11.
- @item @code{xauth} (par défaut : @code{xauth})
- Le paquet XAuth à utiliser.
- @item @code{shepherd} (par défaut : @code{shepherd})
- Le paquet Shepherd à utiliser pour invoquer @command{halt} et
- @command{reboot}.
- @item @code{sessreg} (par défaut : @code{sessreg})
- Le paquet sessreg à utiliser pour enregistrer la session.
- @item @code{slim} (par défaut : @code{slim})
- Le paquet SLiM à utiliser.
- @end table
- @end deftp
- @defvr {Variable Scheme} %default-theme
- @defvrx {Variable Scheme} %default-theme-name
- Le thème SLiM par défaut et son nom.
- @end defvr
- @deftp {Type de données} sddm-configuration
- C'est le type de données représentant la configuration du service sddm.
- @table @asis
- @item @code{display-server} (par défaut : "x11")
- Choisit le serveur d'affichage à utiliser pour l'écran d'accueil. Les
- valeurs valides sont « x11 » et « wayland ».
- @item @code{numlock} (par défaut : "on")
- Les valeurs valides sont « on », « off » ou « none ».
- @item @code{halt-command} (par défaut : @code{#~(string-apppend #$shepherd "/sbin/halt")})
- La commande à lancer à l'arrêt du système.
- @item @code{reboot-command} (par défaut : @code{#~(string-append #$shepherd "/sbin/reboot")})
- La commande à lancer lors du redémarrage du système.
- @item @code{theme} (par défaut : "maldives")
- Le thème à utiliser. Les thèmes par défaut fournis par SDDM sont « elarun »
- et « maldives ».
- @item @code{themes-directory} (par défaut : "/run/current-system/profile/share/sddm/themes")
- Le répertoire où se trouvent les thèmes.
- @item @code{faces-directory} (par défaut : "/run/current-system/profile/share/sddm/faces")
- Répertoire où se trouvent les avatars.
- @item @code{default-path} (par défaut : "/run/current-system/profile/bin")
- Le PATH par défaut à utiliser.
- @item @code{minimum-uid} (par défaut : 1000)
- UID minimum pour être affiché dans SDDM.
- @item @code{maximum-uid} (par défaut : 2000)
- UID maximum pour être affiché dans SDDM.
- @item @code{remember-last-user?} (par défaut : #t)
- S'il faut se rappeler le dernier utilisateur connecté.
- @item @code{remember-last-session?} (par défaut : #t)
- S'il faut se rappeler la dernière session.
- @item @code{hide-users} (par défaut : "")
- Les noms d'utilisateurs à cacher sur l'écran d'accueil de SDDM.
- @item @code{hide-shells} (par défaut : @code{#~(string-append #$shadow "/sbin/nologin")})
- Les utilisateurs avec les shells listés seront cachés sur l'écran d'accueil
- de SDDM.
- @item @code{session-command} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
- Le script à lancer avant de démarrer une session wayland.
- @item @code{sessions-directory} (par défaut : "/run/current-system/profile/share/wayland-sessions")
- Le répertoire où trouver les fichiers .desktop qui démarrent des sessions
- wayland.
- @item @code{xorg-server-path} (par défaut : @code{xorg-start-command})
- Chemin vers xorg-server.
- @item @code{xauth-path} (par défaut : @code{#~(string-append #$xauth "/bin/xauth")})
- Chemin vers xauth.
- @item @code{xephyr-path} (par défaut : @code{#~(string-append #$xorg-server "/bin/Xephyr")})
- Chemin vers Xephyr.
- @item @code{xdisplay-start} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
- Le script à lancer après avoir démarré xorg-server.
- @item @code{xdisplay-stop} (par défaut : @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
- Le script à lancer avant d'arrêter xorg-server.
- @item @code{xsession-command} (par défaut : @code{xinitrc})
- Le script à lancer avant de démarrer une session X.
- @item @code{xsessions-directory} (par défaut : "/run/current-system/profile/share/xsessions")
- Répertoire où trouver les fichiers .desktop pour les sessions X.
- @item @code{minimum-vt} (par défaut : 7)
- VT minimal à utiliser.
- @item @code{xserver-arguments} (par défaut : "-nolisten tcp")
- Arguments à passer à xorg-server.
- @item @code{auto-login-user} (par défaut : "")
- Utilisateur à utiliser pour la connexion automatique.
- @item @code{auto-login-session} (par défaut : "")
- Le fichier desktop à utiliser pour la connexion automatique.
- @item @code{relogin?} (par défaut : #f)
- S'il faut se reconnecter après la déconnexion.
- @end table
- @end deftp
- @cindex gestionnaire de connexion
- @cindex connexion X11
- @deffn {Procédure Scheme} sddm-service config
- Renvoie un service qui démarre le gestionnaire de connexion graphique SDDM
- avec une configuration de type @code{<sddm-configuration>}.
- @example
- (sddm-service (sddm-configuration
- (auto-login-user "Alice")
- (auto-login-session "xfce.desktop")))
- @end example
- @end deffn
- @deffn {Procédure Scheme} xorg-start-command [#:guile] @
- [#:modules %default-xorg-modules] @
- [#:fonts %default-xorg-fonts] @
- [#:configuration-file (xorg-configuration-file @dots{})] @
- [#:xorg-server @var{xorg-server}]
- Renvoie un script @code{startx} dans lequel @var{modules}, une liste de
- paquets de modules X et @var{fonts}, une liste de répertoires de polices X,
- sont disponibles. Voir @code{xorg-wrapper} pour plus de détails sur les
- arguments. Le résultat devrait être utilisé à la place de @code{startx}.
- Habituellement le serveur X est démarré par un gestionnaire de connexion.
- @end deffn
- @deffn {Procédure Scheme} xorg-configuration-file @
- [#:modules %default-xorg-modules] @
- [#:fonts %default-xorg-fonts] @
- [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
- Renvoie un fichier de configuration pour le serveur Xorg qui contient des
- chemins de recherche pour tous les pilotes communs.
- @var{modules} doit être une liste de @dfn{paquets de modules} chargés par le
- serveur Xorg — p.@: ex.@: @code{xf86-video-vesa}, @code{xf86-input-keyboard}
- etc. @var{fonts} doit être une liste de répertoires de polices à ajouter au
- @dfn{chemin de polices} du serveur.
- @var{drivers} doit être soit la liste vide, auquel cas Xorg choisis un
- pilote graphique automatiquement, soit une liste de noms de pilotes qui
- seront essayés dans cet ordre — p.@: ex.@: @code{("modesetting" "vesa")}.
- De même, lorsque @var{resolutions} est la liste vide, Xorg choisis une
- résolution d'écran appropriée ; autrement, ce doit être une liste de
- résolutions — p.@: ex.@: @code{((1024 768) (640 480))}.
- Enfin, @var{extra-config} est une liste de chaînes de caractères ou d'objets
- ajoutés au fichier de configuration. Elle est utilisée pour passer du texte
- supplémentaire à être ajouté directement au fichier de configuration.
- @cindex disposition clavier
- @cindex disposition du clavier
- Cette procédure est particulièrement utile pour configurer une disposition
- de clavier différente de la disposition US par défaut. Par exemple, pour
- utiliser la disposition « bépo » par défaut sur le gestionnaire d'affichage
- :
- @example
- (define bepo-evdev
- "Section \"InputClass\"
- Identifier \"evdev keyboard catchall\"
- Driver \"evdev\"
- MatchIsKeyboard \"on\"
- Option \"xkb_layout\" \"fr\"
- Option \"xkb_variant\" \"bepo\"
- EndSection")
- (operating-system
- ...
- (services
- (modify-services %desktop-services
- (slim-service-type config =>
- (slim-configuration
- (inherit config)
- (startx (xorg-start-command
- #:configuration-file
- (xorg-configuration-file
- #:extra-config
- (list bepo-evdev)))))))))
- @end example
- La ligne @code{MatchIsKeyboard} spécifie que nous n'appliquons la
- configuration qu'aux claviers. Sans cette ligne, d'autres périphériques
- comme les pavés tactiles ne fonctionneront pas correctement parce qu'ils
- seront associés au mauvais pilote. Dans cet exemple, l'utilisateur
- utiliserait typiquement @code{setxkbmap fr bepo} pour utiliser sa
- disposition de clavier préférée une fois connecté. Le premier argument
- correspond à la disposition, tandis que le second argument correspond à la
- variante. La ligne @code{xkb_variant} peut être omise pour choisir la
- variante par défaut.
- @end deffn
- @deffn {Procédure Scheme} screen-locker-service @var{package} [@var{program}]
- Ajoute @var{package}, un paquet pour un verrouiller l'écran ou un
- économiseur d'écran dont la commande est @var{program}, à l'ensemble des
- programmes setuid et lui ajoute une entrée PAM. Par exemple :
- @lisp
- (screen-locker-service xlockmore "xlock")
- @end lisp
- rend utilisable le bon vieux XlockMore.
- @end deffn
- @node Services d'impression
- @subsubsection Services d'impression
- @cindex support des imprimantes avec CUPS
- Le module @code{(gnu services cups)} fournit une définition de service Guix
- pour le service d'impression CUPS. Pour ajouter le support d'une imprimante
- à un système GuixSD, ajoutez un @code{cups-service} à la définition du
- système d'exploitation :
- @deffn {Variable Scheme} cups-service-type
- Le type de service pour un serveur d'impression CUPS. Sa valeur devrait
- être une configuration CUPS valide (voir plus bas). Pour utiliser les
- paramètres par défaut, écrivez simplement :
- @example
- (service cups-service-type)
- @end example
- @end deffn
- La configuration de CUPS contrôle les paramètres de base de votre
- installation CUPS : sur quelles interfaces il doit écouter, que faire si un
- travail échoue, combien de journalisation il faut faire, etc. Pour ajouter
- une imprimante, vous devrez visiter l'URL @url{http://localhost:631} ou
- utiliser un outil comme les services de configuration d'imprimante de
- GNOME. Par défaut, la configuration du service CUPS générera un certificat
- auto-signé si besoin, pour les connexions sécurisée avec le serveur
- d'impression.
- Supposons que vous souhaitiez activer l'interface Web de CUPS et ajouter le
- support pour les imprimantes Epson via le paquet @code{escpr} et our les
- imprimantes HP via le paquet @code{hplip-minimal}. Vous pouvez le faire
- directement, comme ceci (vous devez utiliser le module @code{(gnu packages
- cups)}) :
- @example
- (service cups-service-type
- (cups-configuration
- (web-interface? #t)
- (extensions
- (list cups-filters escpr hplip-minimal))))
- @end example
- Remarque : si vous souhaitez utiliser la GUI basée sur Qt5 qui provient du
- paquet hplip, nous vous suggérons d'installer le paquet @code{hplip}, soit
- dans votre configuration d'OS, soit en tant qu'utilisateur.
- Les paramètres de configuration disponibles sont les suivants. Chaque
- définition des paramètres est précédé par son type ; par exemple,
- @samp{string-list foo} indique que le paramètre @code{foo} devrait être
- spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
- de spécifier la configuration comme une chaîne de caractères, si vous avez
- un vieux fichier @code{cupsd.conf} que vous voulez porter depuis un autre
- système ; voir la fin pour plus de détails.
- @c The following documentation was initially generated by
- @c (generate-documentation) in (gnu services cups). Manually maintained
- @c documentation is better, so we shouldn't hesitate to edit below as
- @c needed. However if the change you want to make to this documentation
- @c can be done in an automated way, it's probably easier to change
- @c (generate-documentation) than to make it below and have to deal with
- @c the churn as CUPS updates.
- Les champs de @code{cups-configuration} disponibles sont :
- @deftypevr {paramètre de @code{cups-configuration}} package cups
- Le paquet CUPS.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} package-list extensions
- Pilotes et autres extensions du paquet CUPS.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} files-configuration files-configuration
- Configuration de l'emplacement où écrire les journaux, quels répertoires
- utiliser pour les travaux d'impression et les paramètres de configuration
- privilégiés liés.
- Les champs @code{files-configuration} disponibles sont :
- @deftypevr {paramètre de @code{files-configuration}} log-location access-log
- Définit le fichier de journal d'accès. Spécifier un nom de fichier vide
- désactive la génération de journaux d'accès. La valeur @code{stderr} fait
- que les entrées du journal seront envoyés sur l'erreur standard lorsque
- l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
- lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
- entrées du journal sont envoyées au démon de journalisation du système. Le
- nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
- @code{%s}, comme dans @code{/var/log/cups/%s-access_log}.
- La valeur par défaut est @samp{"/var/log/cups/access_log"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} file-name cache-dir
- L'emplacement où CUPS devrait mettre les données en cache.
- La valeur par défaut est @samp{"/var/cache/cups"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} string config-file-perm
- Spécifie les permissions pour tous les fichiers de configuration que
- l'ordonnanceur écrit.
- Remarquez que les permissions pour le fichier printers.conf sont
- actuellement masqués pour ne permettre que l'accès par l'utilisateur de
- l'ordonnanceur (typiquement root). La raison est que les URI des
- imprimantes contiennent des informations d'authentification sensibles qui ne
- devraient pas être connues sur le système. Il n'est pas possible de
- désactiver cette fonctionnalité de sécurité.
- La valeur par défaut est @samp{"0640"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} log-location error-log
- Définit le fichier de journal d'erreur. Spécifier un nom de fichier vide
- désactive la génération de journaux d'erreur. La valeur @code{stderr} fait
- que les entrées du journal seront envoyés sur l'erreur standard lorsque
- l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
- lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
- entrées du journal sont envoyées au démon de journalisation du système. Le
- nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
- @code{%s}, comme dans @code{/var/log/cups/%s-error_log}.
- La valeur par défaut est @samp{"/var/log/cups/error_log"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} string fatal-errors
- Spécifie quelles erreurs sont fatales, qui font terminer l'ordonnanceur.
- Les types de chaînes sont :
- @table @code
- @item none
- Aucune erreur n'est fatale.
- @item all
- Toutes les erreurs ci-dessous sont fatales.
- @item browse
- Les erreurs d'initialisation de la navigation sont fatales, par exemple les
- connexion échouées au démon DNS-SD.
- @item config
- Les erreurs de syntaxe du fichier de configuration sont fatale.
- @item listen
- Les erreurs d'écoute ou de port sont fatales, sauf pour les erreurs d'IPv6
- sur la boucle locale ou les adresses @code{any}.
- @item log
- Les erreurs de création ou d'écriture des fichiers de journal sont fatales.
- @item permissions
- Les mauvaises permissions des fichiers de démarrage sont fatales, par
- exemple un certificat TLS et des fichiers de clefs avec des permissions
- permettant la lecture à tout le monde.
- @end table
- La valeur par défaut est @samp{"all -browse"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} boolean file-device?
- Spécifie si le fichier de pseudo-périphérique peut être utilisé pour de
- nouvelles queues d'impression. L'URI @uref{file:///dev/null} est toujours
- permise.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} string group
- Spécifie le nom ou l'ID du groupe qui sera utilisé lors de l'exécution de
- programmes externes.
- La valeur par défaut est @samp{"lp"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} string log-file-perm
- Spécifie les permissions pour tous les fichiers de journal que
- l'ordonnanceur écrit.
- La valeur par défaut est @samp{"0644"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} log-location page-log
- Définit le fichier de journal de page. Spécifier un nom de fichier vide
- désactive la génération de journaux de pages. La valeur @code{stderr} fait
- que les entrées du journal seront envoyés sur l'erreur standard lorsque
- l'ordonnanceur est lancé au premier plan ou vers le démon de journal système
- lorsqu'il tourne en tache de fond. La valeur @code{syslog} fait que les
- entrées du journal sont envoyées au démon de journalisation du système. Le
- nom du serveur peut être inclus dans les noms de fichiers avec la chaîne
- @code{%s}, comme dans @code{/var/log/cups/%s-page_log}.
- La valeur par défaut est @samp{"/var/log/cups/page_log"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} string remote-root
- Spécifie le nom d'utilisateur associé aux accès non authentifiés par des
- clients qui se disent être l'utilisateur root. La valeur par défaut est
- @code{remroot}.
- La valeur par défaut est @samp{"remroot"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} file-name request-root
- Spécifie le répertoire qui contient les travaux d'impression et d'autres
- données des requêtes HTTP.
- La valeur par défaut est @samp{"/var/spool/cups"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} sandboxing sandboxing
- Spécifie le niveau d'isolation de sécurité appliqué aux filtres
- d'impression, aux moteurs et aux autres processus fils de l'ordonnanceur ;
- soit @code{relaxed} soit @code{strict}. Cette directive n'est actuellement
- utilisée et supportée que sur macOS.
- La valeur par défaut est @samp{strict}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} file-name server-keychain
- Spécifie l'emplacement des certifications TLS et des clefs privées. CUPS
- cherchera les clefs publiques et privées dans ce répertoire : un fichier
- @code{.crt} pour un certificat encodé en PEM et le fichier @code{.key}
- correspondant pour la clef privée encodée en PEM.
- La valeur par défaut est @samp{"/etc/cups/ssl"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} file-name server-root
- Spécifie le répertoire contenant les fichiers de configuration du serveur.
- La valeur par défaut est @samp{"/etc/cups"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} boolean sync-on-close?
- Spécifie si l'ordonnanceur appelle fsync(2) après avoir écrit la
- configuration ou les fichiers d'état.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} space-separated-string-list system-group
- Spécifie le groupe ou les groupes à utiliser pour l'authentification du
- groupe @code{@@SYSTEM}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} file-name temp-dir
- Spécifie le répertoire où les fichiers temporaires sont stockés.
- La valeur par défaut est @samp{"/var/spool/cups/tmp"}.
- @end deftypevr
- @deftypevr {paramètre de @code{files-configuration}} string user
- Spécifie le nom d'utilisateur ou l'ID utilisé pour lancer des programmes
- externes.
- La valeur par défaut est @samp{"lp"}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} access-log-level access-log-level
- Spécifie le niveau de journalisation pour le fichier AccessLog. Le niveau
- @code{config} enregistre les ajouts, suppressions et modifications
- d'imprimantes et de classes et lorsque les fichiers de configuration sont
- accédés ou mis à jour. Le niveau @code{actions} enregistre la soumission,
- la suspension, la libération, la modification et l'annulation des travaux et
- toutes les conditions de @code{config}. Le niveau @code{all} enregistre
- toutes les requêtes.
- La valeur par défaut est @samp{actions}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean auto-purge-jobs?
- Spécifie s'il faut vider l'historique des travaux automatiquement lorsqu'il
- n'est plus nécessaire pour les quotas.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} browse-local-protocols browse-local-protocols
- Spécifie les protocoles à utiliser pour partager les imprimantes sur le
- réseau local.
- La valeur par défaut est @samp{dnssd}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean browse-web-if?
- Spécifie si l'interface web de CUPS est publiée.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean browsing?
- Spécifie si les imprimantes partagées sont publiées.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string classification
- Spécifie la classification de sécurité du serveur. N'importe quel nom de
- bannière peut être utilisé, comme « classifié », « confidentiel », « secret
- », « top secret » et « déclassifié » ou la bannière peut être omise pour
- désactiver les fonctions d'impression sécurisées.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean classify-override?
- Spécifie si les utilisateurs peuvent remplacer la classification (page de
- couverture) des travaux d'impression individuels avec l'option
- @code{job-sheets}.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} default-auth-type default-auth-type
- Spécifie le type d'authentification par défaut à utiliser.
- La valeur par défaut est @samp{Basic}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} default-encryption default-encryption
- Spécifie si le chiffrement sera utilisé pour les requêtes authentifiées.
- La valeur par défaut est @samp{Required}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string default-language
- Spécifie la langue par défaut à utiliser pour le contenu textuel et web.
- La valeur par défaut est @samp{"en"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string default-paper-size
- Spécifie la taille de papier par défaut pour les nouvelles queues
- d'impression. @samp{"Auto"} utilise la valeur par défaut du paramètre de
- régionalisation, tandis que @samp{"None"} spécifie qu'il n'y a pas de taille
- par défaut. Des noms de tailles spécifique sont par exemple @samp{"Letter"}
- et @samp{"A4"}.
- La valeur par défaut est @samp{"Auto"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string default-policy
- Spécifie la politique d'accès par défaut à utiliser.
- La valeur par défaut est @samp{"default"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean default-shared?
- Spécifie si les imprimantes locales sont partagées par défaut.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer dirty-clean-interval
- Spécifie le délai pour mettre à jour les fichiers de configuration et
- d'état. Une valeur de 0 fait que la mise à jour arrive aussi vite que
- possible, typiquement en quelques millisecondes.
- La valeur par défaut est @samp{30}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} error-policy error-policy
- Spécifie ce qu'il faut faire si une erreur a lieu. Les valeurs possibles
- sont @code{abort-job}, qui supprimera les travaux d'impression en échec ;
- @code{retry-job}, qui tentera de nouveau l'impression plus tard ;
- @code{retry-this-job}, qui retentera l'impression immédiatement ; et
- @code{stop-printer} qui arrête l'imprimante.
- La valeur par défaut est @samp{stop-printer}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-limit
- Spécifie le coût maximum des filtres qui sont lancés en même temps, pour
- minimiser les problèmes de ressources de disque, de mémoire et de CPU. Une
- limite de 0 désactive la limite de filtrage. Une impression standard vers
- une imprimante non-PostScript requirt une limite de filtre d'environ 200.
- Une imprimante PostScript requiert environ la moitié (100). Mettre en place
- la limite en dessous de ces valeurs limitera l'ordonnanceur à un seul
- travail d'impression à la fois.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer filter-nice
- Spécifie la priorité des filtres de l'ordonnanceur qui sont lancés pour
- imprimer un travail. La valeur va de 0, la plus grande priorité, à 19, la
- plus basse priorité.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} host-name-lookups host-name-lookups
- Spécifie s'il faut faire des résolutions inverses sur les clients qui se
- connectent. Le paramètre @code{double} fait que @code{cupsd} vérifie que le
- nom d'hôte résolu depuis l'adresse correspond à l'une des adresses renvoyées
- par ce nom d'hôte. Les résolutions doubles évitent aussi que des clients
- avec des adresses non enregistrées ne s'adressent à votre serveur.
- N'initialisez cette valeur qu'à @code{#t} ou @code{double} que si c'est
- absolument nécessaire.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-kill-delay
- Spécifie le nombre de secondes à attendre avant de tuer les filtres et les
- moteurs associés avec un travail annulé ou suspendu.
- La valeur par défaut est @samp{30}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-interval
- Spécifie l'intervalle des nouvelles tentatives en secondes. C'est
- typiquement utilisé pour les queues de fax mais peut aussi être utilisé avec
- des queues d'impressions normales dont la politique d'erreur est
- @code{retry-job} ou @code{retry-current-job}.
- La valeur par défaut est @samp{30}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer job-retry-limit
- Spécifie le nombre de nouvelles tentatives pour les travaux. C'est
- typiquement utilisé pour les queues de fax mais peut aussi être utilisé pour
- les queues d'impressions dont la politique d'erreur est @code{retry-job} ou
- @code{retry-current-job}.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean keep-alive?
- Spécifie s'il faut supporter les connexion HTTP keep-alive.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer keep-alive-timeout
- Spécifie combien de temps les connexions inactives avec les clients restent
- ouvertes, en secondes.
- La valeur par défaut est @samp{30}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer limit-request-body
- Spécifie la taille maximale des fichiers à imprimer, des requêtes IPP et des
- données de formulaires HTML. Une limite de 0 désactive la vérification de
- la limite.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list listen
- Écoute sur les interfaces spécifiées. Les valeurs valides sont de la forme
- @var{adresse}:@var{port}, où @var{adresse} est sotit une daresse IPv6 dans
- des crochets, soit une adresse IPv4, soit @code{*} pour indiquer toutes les
- adresses. Les valeurs peuvent aussi être des noms de fichiers de socket
- UNIX domain. La directive Listen est similaire à la directive Port mais
- vous permet de restreindre l'accès à des interfaces ou des réseaux
- spécifiques.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer listen-back-log
- Spécifie le nombre de connexions en attente qui seront permises. Ça
- n'affecte normalement que les serveurs très actifs qui ont atteint la limite
- MaxClients, mais peut aussi être déclenché par un grand nombre de connexions
- simultanées. Lorsque la limite est atteinte, le système d'exploitation
- refusera les connexions supplémentaires jusqu'à ce que l'ordonnanceur
- accepte les connexions en attente.
- La valeur par défaut est @samp{128}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} location-access-control-list location-access-controls
- Spécifie un ensemble de contrôles d'accès supplémentaires.
- Les champs de @code{location-access-controls} disponibles sont :
- @deftypevr {paramètre de @code{location-access-controls}} file-name path
- Spécifie le chemin d'URI auquel les contrôles d'accès s'appliquent.
- @end deftypevr
- @deftypevr {paramètre de @code{location-access-controls}} access-control-list access-controls
- Les contrôles d'accès pour tous les accès à ce chemin, dans le même format
- que le champ @code{access-controls} de @code{operation-access-control}.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{location-access-controls}} method-access-control-list method-access-controls
- Contrôles d'accès pour les accès spécifiques à la méthode à ce chemin.
- La valeur par défaut est @samp{()}.
- Les champs de @code{method-access-controls} disponibles sont :
- @deftypevr {paramètre de @code{method-access-controls}} boolean reverse?
- Si la valeur est @code{#t}, applique les contrôles d'accès à toutes les
- méthodes sauf les méthodes listées. Sinon, applique le contrôle uniquement
- aux méthodes listées.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{method-access-controls}} method-list methods
- Les méthodes auxquelles ce contrôle d'accès s'applique.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{method-access-controls}} access-control-list access-controls
- Directives de contrôle d'accès, comme une liste de chaînes de caractères.
- Chaque chaîne devrait être une directive, comme « Order allow, deny ».
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer log-debug-history
- Spécifie le nombre de messages de débogage qui sont retenu pour la
- journalisation si une erreur arrive dans un travail d'impression. Les
- messages de débogage sont journalisés indépendamment du paramètre LogLevel.
- La valeur par défaut est @samp{100}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} log-level log-level
- Spécifie le niveau de journalisation du fichier ErrorLog. La valeur
- @code{none} arrête toute journalisation alors que que @code{debug2}
- enregistre tout.
- La valeur par défaut est @samp{info}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} log-time-format log-time-format
- Spécifie le format de la date et de l'heure dans les fichiers de journaux.
- La valeur @code{standard} enregistre les secondes entières alors que
- @code{usecs} enregistre les microsecondes.
- La valeur par défaut est @samp{standard}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients
- Spécifie le nombre maximum de clients simultanés qui sont autorisés par
- l'ordonnanceur.
- La valeur par défaut est @samp{100}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-clients-per-host
- Spécifie le nombre maximum de clients simultanés permis depuis une même
- adresse.
- La valeur par défaut est @samp{100}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-copies
- Spécifie le nombre maximum de copies qu'un utilisateur peut imprimer pour
- chaque travail.
- La valeur par défaut est @samp{9999}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-hold-time
- Spécifie la durée maximum qu'un travail peut rester dans l'état de
- suspension @code{indefinite} avant qu'il ne soit annulé. La valeur 0
- désactive l'annulation des travaux suspendus.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs
- Spécifie le nombre maximum de travaux simultanés autorisés. La valeur 0
- permet un nombre illimité de travaux.
- La valeur par défaut est @samp{500}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-printer
- Spécifie le nombre maximum de travaux simultanés autorisés par imprimante.
- La valeur 0 permet au plus MaxJobs travaux par imprimante.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-jobs-per-user
- Spécifie le nombre maximum de travaux simultanés permis par utilisateur. La
- valeur 0 permet au plus MaxJobs travaux par utilisateur.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-job-time
- Spécifie la durée maximum qu'un travail peut prendre avant qu'il ne soit
- annulé, en secondes. Indiquez 0 pour désactiver l'annulation des travaux «
- coincés ».
- La valeur par défaut est @samp{10800}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer max-log-size
- Spécifie la taille maximale des fichiers de journaux avant qu'on ne les
- fasse tourner, en octets. La valeur 0 désactive la rotation.
- La valeur par défaut est @samp{1048576}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer multiple-operation-timeout
- Spécifie la durée maximale à permettre entre les fichiers d'un travail en
- contenant plusieurs, en secondes.
- La valeur par défaut est @samp{300}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string page-log-format
- Spécifie le format des lignes PageLog. Les séquences qui commencent par un
- pourcent (@samp{%}) sont remplacées par l'information correspondante, tandis
- que les autres caractères sont copiés littéralement. Les séquences pourcent
- suivantes sont reconnues :
- @table @samp
- @item %%
- insère un seul caractères pourcent
- @item %@{name@}
- insère la valeur de l'attribut IPP spécifié
- @item %C
- insère le nombre de copies pour la page actuelle
- @item %P
- insère le numéro de page actuelle
- @item %T
- insère la date et l'heure actuelle dans un format de journal commun
- @item %j
- insère l'ID du travail
- @item %p
- insère le nom de l'imprimante
- @item %u
- insère le nom d'utilisateur
- @end table
- Si la valeur est la chaîne vide, le PageLog est désactivée. La chaîne
- @code{%p %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
- %@{job-name@} %@{media@} %@{sides@}} crée un PageLog avec les entrées
- standards.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} environment-variables environment-variables
- Passe les variables d'environnement spécifiées aux processus fils ; une
- liste de chaînes de caractères.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} policy-configuration-list policies
- Spécifie des politiques de contrôle d'accès nommées.
- Les champs de @code{policy-configuration} disponibles sont :
- @deftypevr {paramètre de @code{policy-configuration}} string name
- Nom de la politique.
- @end deftypevr
- @deftypevr {paramètre de @code{policy-configuration}} string job-private-access
- Spécifie une liste d'accès pour les valeurs privées du travail.
- @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
- requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
- propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
- le champ @code{system-group} de la configuration @code{files-config}, qui
- est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
- possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
- @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
- liste d'accès peut aussi être simplement @code{all} ou @code{default}.
- La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
- @end deftypevr
- @deftypevr {paramètre de @code{policy-configuration}} string job-private-values
- Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
- @code{default}, ou @code{none}.
- La valeur par défaut est @samp{"job-name job-originating-host-name
- job-originating-user-name phone"}.
- @end deftypevr
- @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-access
- Spécifie un liste d'accès pour les valeurs privées de la souscription.
- @code{@@ACL} correspond aux valeurs requesting-user-name-allowed ou
- requesting-user-name-denied de l'imprimante. @code{@@OWNER} correspond au
- propriétaire du travail. @code{@@SYSTEM} correspond aux groupes listés dans
- le champ @code{system-group} de la configuration @code{files-config}, qui
- est réifié dans le fichier @code{cups-files.conf(5)}. Les autres éléments
- possibles de la liste d'accès sont des noms d'utilisateurs spécifiques et
- @code{@@@var{group}} pour indiquer les membres d'un groupe spécifique. La
- liste d'accès peut aussi être simplement @code{all} ou @code{default}.
- La valeur par défaut est @samp{"@@OWNER @@SYSTEM"}.
- @end deftypevr
- @deftypevr {paramètre de @code{policy-configuration}} string subscription-private-values
- Spécifie la liste des valeurs de travaux à rendre privée, ou @code{all},
- @code{default}, ou @code{none}.
- La valeur par défaut est @samp{"notify-events notify-pull-method
- notify-recipient-uri notify-subscriber-user-name notify-user-data"}.
- @end deftypevr
- @deftypevr {paramètre de @code{policy-configuration}} operation-access-control-list access-controls
- Contrôle d'accès par les actions IPP.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-files
- Spécifie si les fichiers de travaux (les documents) sont préservés après
- qu'un travail est imprimé. Si une valeur numérique est spécifiée, les
- fichiers de travaux sont préservés pour le nombre de secondes indiquées
- après l'impression. Sinon, une valeur booléenne s'applique indéfiniment.
- La valeur par défaut est @samp{86400}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean-or-non-negative-integer preserve-job-history
- Spécifie si l'historique des travaux est préservé après qu'un travail est
- imprimé. Si une valeur numérique est spécifiée, l'historique des travaux
- est préservé pour le nombre de secondes indiquées après l'impression. Si la
- valeur est @code{#t}, l'historique des travaux est préservé jusqu'à
- atteindre la limite MaxJobs.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer reload-timeout
- Spécifie la durée d'attente pour la fin des travaux avant de redémarrer
- l'ordonnanceur.
- La valeur par défaut est @samp{30}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string rip-cache
- Spécifie la quantité de mémoire maximale à utiliser pour convertir des
- documents en bitmaps pour l'imprimante.
- La valeur par défaut est @samp{"128m"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string server-admin
- Spécifie l'adresse de courriel de l'administrateur système.
- La valeur par défaut est @samp{"root@@localhost.localdomain"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} host-name-list-or-* server-alias
- La directive ServerAlias est utilisée pour la validation des en-tête HTTP
- Host lorsque les clients se connectent à l'ordonnanceur depuis des
- interfaces externes. Utiliser le nom spécial @code{*} peut exposer votre
- système à des attaques connues de recombinaison DNS dans le navigateur, même
- lorsque vous accédez au site à travers un pare-feu. Si la découverte
- automatique des autres noms ne fonctionne pas, nous vous recommandons de
- lister chaque nom alternatif avec une directive SeverAlias plutôt que
- d'utiliser @code{*}.
- La valeur par défaut est @samp{*}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string server-name
- Spécifie le nom d'hôte pleinement qualifié du serveur.
- La valeur par défaut est @samp{"localhost"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} server-tokens server-tokens
- Spécifie les informations incluses dans les en-têtes Server des réponses
- HTTP. @code{None} désactive l'en-tête Server. @code{ProductOnly} rapporte
- @code{CUPS}. @code{Major} rapporte @code{CUPS 2}. @code{Minor} rapporte
- @code{CUPS 2.0}. @code{Minimal} rapporte @code{CUPS 2.0.0}. @code{OS}
- rapporte @code{CUPS 2.0.0 (@var{uname})} où @var{uname} est la sortie de la
- commande @code{uname}. @code{Full} rapporte @code{CUPS 2.0.0 (@var{uname})
- IPP/2.0}.
- La valeur par défaut est @samp{Minimal}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} string set-env
- Indique que la variable d'environnement spécifiée doit être passée aux
- processus fils.
- La valeur par défaut est @samp{"variable value"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} multiline-string-list ssl-listen
- Écoute des connexions chiffrées sur les interfaces spécifiées. Les valeurs
- valides sont de la forme @var{adresse}:@var{port}, où @var{adresse} est soit
- une adresse IPv6 dans des crochets, soit une adresse IPv4, soit @code{*}
- pour indiquer toutes les interfaces.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} ssl-options ssl-options
- Indique les options de chiffrement. Par défaut, CUPS ne supporte que le
- chiffrement avec TLS 1.0 ou plus avec des suites de chiffrement connues pour
- être sures. L'option @code{AllowRC4} active les suites de chiffrement
- 128-bits RC4, qui sont requises pour certains vieux clients qui
- n'implémentent pas les nouvelles. L'option @code{AllowSSL3} active SSL
- v3.0, qui est requis par certains vieux clients qui ne supportent pas TLS
- v1.0.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean strict-conformance?
- Spécifie si l'ordonnanceur demande aux clients d'adhérer aux spécifications
- IPP.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} non-negative-integer timeout
- Spécifie le délai d'attente des requêtes HTTP, en secondes.
- La valeur par défaut est @samp{300}.
- @end deftypevr
- @deftypevr {paramètre de @code{cups-configuration}} boolean web-interface?
- Spécifie si l'interface web est activée.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- Maintenant, vous vous dîtes peut-être « oh la la, cher manuel de Guix, je
- t'aime bien mais arrête maintenant avec ces options de configuration
- »@footnote{NdT : je vous rassure, c'est aussi mon sentiment au moment de
- traduire ces lignes. Et pour moi, c'est encore loin d'être fini.}. En
- effet. cependant, encore un point supplémentaire : vous pouvez avoir un
- fichier @code{cupsd.conf} existant que vous pourriez vouloir utiliser. Dans
- ce cas, vous pouvez passer un @code{opaque-cups-configuration} en
- configuration d'un @code{cups-service-type}.
- Les champs de @code{opaque-cups-configuration} disponibles sont :
- @deftypevr {paramètre de @code{opaque-cups-configuration}} package cups
- Le paquet CUPS.
- @end deftypevr
- @deftypevr {paramètre de @code{opaque-cups-configuration}} string cupsd.conf
- Le contenu de @code{cupsd.conf}, en tant que chaîne de caractères.
- @end deftypevr
- @deftypevr {paramètre de @code{opaque-cups-configuration}} string cups-files.conf
- Le contenu du fichier @code{cups-files.conf}, en tant que chaîne de
- caractères.
- @end deftypevr
- Par exemple, si vos fichiers @code{cupsd.conf} et @code{cups-files.conf}
- sont dans des chaînes du même nom, pouvez instancier un service CUPS de
- cette manière :
- @example
- (service cups-service-type
- (opaque-cups-configuration
- (cupsd.conf cupsd.conf)
- (cups-files.conf cups-files.conf)))
- @end example
- @node Services de bureaux
- @subsubsection Services de bureaux
- Le module @code{(gnu services desktop)} fournit des services qui sont
- habituellement utiles dans le contexte d'une installation « de bureau » —
- c'est-à-dire sur une machine qui fait tourner un service d'affichage
- graphique, éventuellement avec des interfaces utilisateurs graphiques, etc.
- Il définit aussi des services qui fournissent des environnements de bureau
- spécifiques comme GNOME, XFCE et MATE.
- Pour simplifier les choses, le module définit une variable contenant
- l'ensemble des services que les utilisateurs s'attendent en général à avoir
- sur une machine avec un environnement graphique et le réseau :
- @defvr {Variable Scheme} %desktop-services
- C'est la liste des services qui étend @var{%base-services} en ajoutant ou en
- ajustant des services pour une configuration « de bureau » typique.
- 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
- gestion réseau (@pxref{Services réseau,
- @code{network-manager-service-type}}), des services de gestion de l'énergie
- et des couleurs, le gestionnaire de connexion et de session @code{elogind},
- le service de privilèges Polkit, le service de géolocalisation GeoClue, le
- démon Accounts Service qui permet aux utilisateurs autorisés de changer leur
- mot de passe, un client NTP (@pxref{Services réseau}), le démon Avahi,
- et le service name service switch est configuré pour pouvoir utiliser
- @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
- @end defvr
- La variable @var{%desktop-services} peut être utilisée comme champ
- @code{services} d'une déclaration @code{operating-system}
- (@pxref{Référence de système d'exploitation, @code{services}}).
- En plus, les procédures @code{gnome-desktop-service},
- @code{xfce-desktop-service}, @code{mate-desktop-service} et
- @code{enlightenment-desktop-service-type} peuvent ajouter GNOME, XFCE, MATE
- ou Enlightenment à un système. « Ajouter GNOME » signifie que les services
- du système comme les utilitaires d'ajustement de la luminosité et de gestion
- de l'énergie sont ajoutés au système, en étendant @code{polkit} et
- @code{dbus} de la bonne manière, ce qui permet à GNOME d'opérer avec des
- privilèges plus élevés sur un nombre limité d'interfaces systèmes
- spécialisées. En plus, ajouter un service construit par
- @code{gnome-desktop-service} ajoute le métapaquet GNOME au profil du
- système. de même, ajouter le service XFCE ajoute le métapaquet @code{xfce}
- au profil système, mais il permet aussi au gestionnaire de fichiers Thunar
- d'ouvrir une fenêtre de gestion des fichier « en mode root », si
- l'utilisateur s'authentifie avec le mot de passe administrateur via
- l'interface graphique polkit standard. « Ajouter MATE » signifie que
- @code{polkit} et @code{dbus} sont étendue de la bonne manière, ce qui permet
- à MATE d'opérer avec des privilèges plus élevés sur un nombre limité
- d'interface systèmes spécialisées. « Ajouter ENLIGHTENMENT » signifie que
- @code{dbus} est étendu comme il faut et que plusieurs binaires
- d'Enlightenment récupèrent le bit setuid, ce qui permet au verrouilleur
- d'écran d'Enlightenment et à d'autres fonctionnalités de fonctionner
- correctement.
- Les environnement de bureau dans Guix utilisent le service d'affichage Xorg
- par défaut. Si vous voulez utiliser le protocol de serveur d'affichage plus
- récent Wayland, vous devez utiliser @code{sddm-service} à la place de
- @code{slim-service} comme gestionnaire de connexion graphique. Vous devriez
- ensuite sélectionner la session « GNOME (Wayland) » dans SDDM. Autrement,
- vous pouvez essayer de démarrer GNOME sur Wayland manuellement depuis un TTY
- avec la commande @command{XDG_SESSION_TYPE=wayland exec dbus-run-session
- gnome-session}. Actuellement seul GNOME support Wayland.
- @deffn {Procédure Scheme} gnome-desktop-service
- Renvoie un service qui ajoute le paquet @code{gnome} au profil système et
- étend polkit avec des actions de @code{gnome-settings-daemon}.
- @end deffn
- @deffn {Procédure Scheme} xfce-desktop-service
- Renvoie un service qui ajoute le paquet @code{xfce} au profil du système et
- étend polkit avec la capacité pour @code{thunar} de manipuler le système de
- fichier en tant que root depuis une session utilisateur, après que
- l'utilisateur s'est authentifié avec le mot de passe administrateur.
- @end deffn
- @deffn {Procédure Scheme} mate-desktop-service
- Renvoie un service qui ajoute le paquet @code{mate} au profil du système et
- étend polkit avec les actions de @code{mate-settings-daemon}.
- @end deffn
- @deffn {Procédure Scheme} enlightenment-desktop-service-type
- Renvoie un service qui ajoute le paquet @code{enlightenment} et étend dbus
- avec les actions de @code{efl}
- @end deffn
- @deftp {Type de données} enlightenment-desktop-service-configuration
- @table @asis
- @item @code{enlightenment} (par défaut : @code{enlightenment})
- Le paquet enlightenment à utiliser.
- @end table
- @end deftp
- Comme les services de bureau GNOME, XFCE et MATE récupèrent tant de paquet,
- la variable @code{%desktop-services} par défaut n'inclut aucun d'entre eux.
- Pour ajouter GNOME, XFCE ou MATE, utilisez @code{cons} pour les ajouter à
- @code{%desktop-services} dans le champ @code{services} de votre
- @code{operating-system}.
- @example
- (use-modules (gnu))
- (use-service-modules desktop)
- (operating-system
- ...
- ;; cons* ajoute les élément à la liste donnée en dernier argument
- (services (cons* (gnome-desktop-service)
- (xfce-desktop-service)
- %desktop-services))
- ...)
- @end example
- Ces environnements de bureau seront alors disponibles comme une option dans
- la fenêtre de connexion graphique.
- Les définitions de service qui sont vraiment incluses dans
- @code{%desktop-services} et fournies par @code{(gnu services dbus)} et
- @code{(gnu services desktop)} sont décrites plus bas.
- @deffn {Procédure Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
- Renvoie un service qui lance le « bus système », @var{dbus}, avec le support
- de @var{services}.
- @uref{http://dbus.freedesktop.org/, D-Bus} est un utilitaire de
- communication inter-processus. Son bus système est utilisé pour permettre à
- des services systèmes de communiquer et d'être notifiés d'événements
- systèmes.
- @var{services} doit être une liste de paquets qui fournissent un répertoire
- @file{etc/dbus-1/system.d} contenant de la configuration D-Bus
- supplémentaire et des fichiers de politiques. Par exemple, pour permettre à
- avahi-daemon d'utiliser le bus système, @var{services} doit être égal à
- @code{(list avahi)}.
- @end deffn
- @deffn {Procédure Scheme} elogind-service [#:config @var{config}]
- Renvoie un service qui lance le démon de gestion de connexion et de session
- @code{elogind}. @uref{https://github.com/elogind/elogind, Elogind} expose
- une interface D-Bus qui peut être utilisée pour connaître quels utilisateurs
- sont connectés, le type de session qu'ils sont ouverte, suspendre le
- système, désactiver la veille système, redémarrer le système et d'autre
- taches.
- Elogind gère la plupart des événements liés à l'énergie du système, par
- exemple mettre en veille le système quand l'écran est rabattu ou en
- l'éteignant quand le bouton de démarrage est appuyé.
- L'argument @var{config} spécifie la configuration d'elogind et devrait être
- le résultat d'une invocation de @code{(elogind-configuration
- (@var{parameter} @var{value})...)}. Les paramètres disponibles et leur
- valeur par défaut sont :
- @table @code
- @item kill-user-processes?
- @code{#f}
- @item kill-only-users
- @code{()}
- @item kill-exclude-users
- @code{("root")}
- @item inhibit-delay-max-seconds
- @code{5}
- @item handle-power-key
- @code{poweroff}
- @item handle-suspend-key
- @code{suspend}
- @item handle-hibernate-key
- @code{hibernate}
- @item handle-lid-switch
- @code{suspend}
- @item handle-lid-switch-docked
- @code{ignore}
- @item power-key-ignore-inhibited?
- @code{#f}
- @item suspend-key-ignore-inhibited?
- @code{#f}
- @item hibernate-key-ignore-inhibited?
- @code{#f}
- @item lid-switch-ignore-inhibited?
- @code{#t}
- @item holdoff-timeout-seconds
- @code{30}
- @item idle-action
- @code{ignore}
- @item idle-action-seconds
- @code{(* 30 60)}
- @item runtime-directory-size-percent
- @code{10}
- @item runtime-directory-size
- @code{#f}
- @item remove-ipc?
- @code{#t}
- @item suspend-state
- @code{("mem" "standby" "freeze")}
- @item suspend-mode
- @code{()}
- @item hibernate-state
- @code{("disk")}
- @item hibernate-mode
- @code{("platform" "shutdown")}
- @item hybrid-sleep-state
- @code{("disk")}
- @item hybrid-sleep-mode
- @code{("suspend" "platform" "shutdown")}
- @end table
- @end deffn
- @deffn {Procédure Scheme} accountsservice-service @
- [#:accountsservice @var{accountsservice}]
- Renvoie un service qui lance AccountsService, un service système qui peut
- lister les comptes disponibles, changer leur mot de passe, etc.
- AccountsService s'intègre à Polkit pour permettre aux utilisateurs non
- privilégiés de pouvoir modifier la configuration de leur système.
- @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, le site de
- accountsservice} pour trouver plus d'informations.
- L'argument @var{accountsservice} est le paquet @code{accountsservice} à
- exposer comme un service.
- @end deffn
- @deffn {Procédure Scheme} polkit-service @
- [#:polkit @var{polkit}]
- Renvoie un service qui lance le
- @uref{http://www.freedesktop.org/wiki/Software/polkit/, service de gestion
- des privilèges Polkit}, qui permet aux administrateurs systèmes de permettre
- l'accès à des opération privilégiées d'une manière structurée. En demandant
- au service Polkit, un composant système privilégié peut savoir lorsqu'il
- peut donner des privilèges supplémentaires à des utilisateurs normaux. Par
- exemple, un utilisateur normal peut obtenir le droit de mettre le système en
- veille si l'utilisateur est connecté localement.
- @end deffn
- @deffn {Procédure Scheme} upower-service [#:upower @var{upower}] @
- [#:watts-up-pro? #f] @
- [#:poll-batteries? #t] @
- [#:ignore-lid? #f] @
- [#:use-percentage-for-policy? #f] @
- [#:percentage-low 10] @
- [#:percentage-critical 3] @
- [#:percentage-action 2] @
- [#:time-low 1200] @
- [#:time-critical 300] @
- [#:time-action 120] @
- [#:critical-power-action 'hybrid-sleep]
- Renvoie un service qui lance @uref{http://upower.freedesktop.org/,
- @command{upowerd}}, un moniteur système pour la consommation électrique et
- le niveau de batterie, avec les paramètres de configuration données. Il
- implémente l'interface D-Bus @code{org.freedesktop.UPower} et est notamment
- utilisé par GNOME.
- @end deffn
- @deffn {Procédure Scheme} udisks-service [#:udisks @var{udisks}]
- Renvoie un service pour @uref{http://udisks.freedesktop.org/docs/latest/,
- UDisks}, un démon de @dfn{gestion de disques} qui fournit des notifications
- et la capacité de monter et démonter des disques à des interfaces
- utilisateurs. Les programmes qui parlent à UDisks sont par exemple la
- commande @command{udisksctl}, qui fait partie de UDisks et GNOME Disks.
- @end deffn
- @deffn {Procédure Scheme} colord-service [#:colord @var{colord}]
- Renvoie un service qui lance @command{colord}, un service système avec une
- interface D-Bus pour gérer les profils de couleur des périphériques
- d'entrées et de sorties comme les écrans et les scanners. Il est notamment
- utilisé par l'outil graphique GNOME Color Manager. Voir
- @uref{http://www.freedesktop.org/software/colord/, le site web de colord}
- pour plus d'informations.
- @end deffn
- @deffn {Procédure Scheme} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
- Renvoie une configuration qui permet d'accéder aux données de localisation
- de GeoClue. @var{name} est l'ID Desktop de l'application, sans la partie en
- @code{.desktop}. Si @var{allowed?} est vraie, l'application aura droit
- d'accéder aux informations de localisation par défaut. Le booléen
- @var{system?} indique si une application est un composant système ou non.
- Enfin @var{users} est la liste des UID des utilisateurs pour lesquels cette
- application a le droit d'accéder aux informations de géolocalisation. Une
- liste d'utilisateurs vide indique que tous les utilisateurs sont autorisés.
- @end deffn
- @defvr {Variable Scheme} %standard-geoclue-applications
- la liste standard de configuration des application GeoClue connues, qui
- permet à l'utilitaire date-and-time de GNOME de demander l'emplacement
- actuel pour initialiser le fuseau horaire et aux navigateurs web IceCat et
- Epiphany de demander les informations de localisation. IceCat et Epiphany
- demandent tous deux à l'utilisateur avant de permettre à une page web de
- connaître l'emplacement de l'utilisateur.
- @end defvr
- @deffn {Procédure Scheme} geoclue-service [#:colord @var{colord}] @
- [#:whitelist '()] @
- [#:wifi-geolocation-url
- "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
- [#:submit-data? #f] [#:wifi-submission-url
- "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
- [#:submission-nick "geoclue"] @
- [#:applications %standard-geoclue-applications]
- Renvoie un service qui lance le service de géolocalisation GeoClue. Ce
- service fournit une interface D-Bus pour permettre aux applications de
- demande l'accès à la position de l'utilisateur et éventuellement d'ajouter
- des informations à des bases de données de géolocalisation en ligne. Voir
- @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, le site web de
- GeoClue} pour plus d'informations.
- @end deffn
- @deffn {Procédure Scheme} bluetooth-service [#:bluez @var{bluez}] @
- [@w{#:auto-enable? #f}]
- Renvoie un service qui lance le démon @command{bluetoothd} qui gère tous les
- appareils Bluetooth et fournit un certain nombre d'interfaces D-Bus.
- Lorsque @var{auto-enable?} est vraie, le contrôler bluetooth est
- automatiquement alimenté au démarrage, ce qui peut être utile lorsque vous
- utilisez un clavier ou une souris bluetooth.
- Les utilisateurs doivent être dans le groupe @code{lp} pour accéder au
- service D-Bus.
- @end deffn
- @node Services de son
- @subsubsection Services de son
- @cindex support du son
- @cindex ALSA
- @cindex PulseAudio, support du son
- Le module @code{(gnu services sound)} fournit un service pour configurer le
- système ALSA (architecture son linux avancée), qui fait de PulseAudio le
- pilote de sortie préféré d'ALSA.
- @deffn {Variable Scheme} alsa-service-type
- C'est le type pour le système @uref{https://alsa-project.org/, Advanced
- Linux Sound Architecture} (ALSA), qui génère le fichier de configuration
- @file{/etc/asound.conf}. La valer de ce type est un enregistrement
- @command{alsa-configuration} comme dans cet exemple :
- @example
- (service alsa-service-type)
- @end example
- Voir plus bas pour des détails sur @code{alsa-configuration}.
- @end deffn
- @deftp {Type de données} alsa-configuration
- Type de données représentant la configuration pour @code{alsa-service}.
- @table @asis
- @item @code{alsa-plugins} (par défaut : @var{alsa-plugins})
- Le paquet @code{alsa-plugins} à utiliser.
- @item @code{pulseaudio?} (par défaut : @var{#t})
- Indique si les applications ALSA devraient utiliser le serveur de son
- @uref{http://www.pulseaudio.org/, PulseAudio} de manière transparente pour
- elles.
- Utiliser PulseAudio vous permet dans lancer plusieurs applications qui
- produisent du son en même temps et de les contrôler individuellement via
- @command{pavucontrol} entre autres choses.
- @item @code{extra-options} (par défaut : @var{""})
- Chaîne à ajouter au fichier @file{/etc/asound.conf}.
- @end table
- @end deftp
- Les utilisateurs individuels qui veulent modifier la configuration système
- d'ALSA peuvent le faire avec le fichier @file{~/.asoundrc} :
- @example
- # Dans guix, il faut spécifier le chemin absolu des greffons.
- pcm_type.jack @{
- lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
- @}
- # Faire passer ALSA par Jack :
- # <http://jackaudio.org/faq/routing_alsa.html>.
- pcm.rawjack @{
- type jack
- playback_ports @{
- 0 system:playback_1
- 1 system:playback_2
- @}
- capture_ports @{
- 0 system:capture_1
- 1 system:capture_2
- @}
- @}
- pcm.!default @{
- type plug
- slave @{
- pcm "rawjack"
- @}
- @}
- @end example
- Voir @uref{https://www.alsa-project.org/main/index.php/Asoundrc} pour les
- détails.
- @node Services de bases de données
- @subsubsection Services de bases de données
- @cindex database
- @cindex SQL
- Le module @code{(gnu services databases)} fournit les services suivants.
- @deffn {Procédure Scheme} postgresql-service [#:postgresql postgresql] @
- [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
- [#:port 5432] [#:locale ``en_US.utf8'']
- Renvoie un service qui lance @var{postgresql}, le service de bases de
- données PostgreSQL.
- Le démon PostgreSQL charge sa configuration à l'exécution depuis
- @var{config-file}, crée une grappe de bases de données avec @var{locale}
- comme paramètre de régionalisation par défaut, stockée dans
- @var{data-directory}. Il écoute ensuite sur @var{port}.
- @end deffn
- @deffn {Procédure Scheme} mysql-service [#:config (mysql-configuration)]
- Renvoie un service qui lance @command{mysqld}, le service de bases de
- données MySQL ou MariaDB.
- L'argument @var{config} facultatif spécifie la configuration de
- @command{mysqld}, qui devrait être un objet @code{<mysql-configuration>}.
- @end deffn
- @deftp {Type de données} mysql-configuration
- Type de données représentant la configuration de @var{mysql-service}.
- @table @asis
- @item @code{mysql} (par défaut : @var{mariadb})
- Objet paquet du serveur de base de données MySQL, qui peut être soit
- @var{mariadb}, soit @var{mysql}.
- Pour MySQL, un mot de passe root temporaire sera affiché à l'activation.
- Pour MariaDB, le mot de passe root est vide.
- @item @code{port} (par défaut : @code{3306})
- Port TCP sur lequel le serveur de base de données écoute les connexions
- entrantes.
- @end table
- @end deftp
- @defvr {Variable Scheme} memcached-service-type
- C'est le type de service pour le service @uref{https://memcached.org/,
- Memcached} qui fournit un cache en mémoire distribué. La valeur pour le
- type de service est un objet @code{memcached-configuration}.
- @end defvr
- @example
- (service memcached-service-type)
- @end example
- @deftp {Type de données} memcached-configuration
- Type de données représentant la configuration de memcached.
- @table @asis
- @item @code{memcached} (par défaut : @code{memcached})
- Le paquet Memcached à utiliser.
- @item @code{interfaces} (par défaut : @code{'("0.0.0.0")})
- Les interfaces réseaux sur lesquelles écouter.
- @item @code{tcp-port} (par défaut : @code{11211})
- Port sur lequel accepter les connexions.
- @item @code{udp-port} (par défaut : @code{11211})
- Port sur lequel accepter les connexions UDP, une valeur de 0 désactive
- l'écoute en UDP.
- @item @code{additional-options} (par défaut : @code{'()})
- Options de la ligne de commande supplémentaires à passer à @code{memcached}.
- @end table
- @end deftp
- @defvr {Variable Scheme} mongodb-service-type
- C'est le type de service pour @uref{https://www.mongodb.com/, MongoDB}. La
- valeur de ce service est un objet @code{mongodb-configuration}.
- @end defvr
- @example
- (service mongodb-service-type)
- @end example
- @deftp {Type de données} mongodb-configuration
- Type de données représentant la configuration de mongodb.
- @table @asis
- @item @code{mongodb} (par défaut : @code{mongodb})
- Le paquet MongoDB à utiliser.
- @item @code{config-file} (par défaut : @code{%default-mongodb-configuration-file})
- Le fichier de configuration pour MongoDB.
- @item @code{data-directory} (par défaut : @code{"/var/lib/mongodb"})
- Cette valeur est utilisée pour créer le répertoire, pour qu'il existe et
- appartienne à l'utilisateur mongodb. Il devrait correspondre au
- data-directory que MongoDB est configuré pour utiliser dans son fichier de
- configuration.
- @end table
- @end deftp
- @defvr {Variable Scheme} redis-service-type
- C'est le type de service pour la base clef-valeur @uref{https://redis.io/,
- Redis} dont la valeur est un objet @code{redis-configuration}.
- @end defvr
- @deftp {Type de données} redis-configuration
- Type de données représentant la configuration de redis.
- @table @asis
- @item @code{redis} (par défaut : @code{redis})
- Le paquet Redis à utiliser.
- @item @code{bind} (par défaut : @code{"127.0.0.1"})
- Interface réseau sur laquelle écouter.
- @item @code{port} (par défaut : @code{6379})
- Port sur lequel accepter les connexions, une valeur de 0 désactive l'écoute
- sur un socket TCP.
- @item @code{working-directory} (par défaut : @code{"/var/lib/redis"})
- Répertoire dans lequel stocker la base de données et les fichiers liés.
- @end table
- @end deftp
- @node Services de courriels
- @subsubsection Services de courriels
- @cindex courriel
- @cindex email
- Le module @code{(gnu services mail)} fournit des définitions de services
- Guix pour les services de courriel : des serveurs IMAP, POP3 et LMTP ainsi
- que des MTA (Mail Transport Agent). Que d'acronymes ! Ces services sont
- détaillés dans les sous-sections ci-dessous.
- @subsubheading Service Dovecot
- @deffn {Procédure Scheme} dovecot-service [#:config (dovecot-configuration)]
- Renvoie un service qui lance le serveur de courriel IMAP/POP3/LMTP Dovecot.
- @end deffn
- Par défaut, Dovecot n'a pas besoin de beaucoup de configuration ; l'objet de
- configuration par défaut créé par @code{(dovecot-configuration)} suffira si
- votre courriel est livré dans @code{~/Maildir}. Un certificat auto-signé
- sera généré pour les connexions TLS, bien que Dovecot écoutera aussi sur les
- ports non chiffrés par défaut. Il y a quelques options cependant, que les
- administrateurs peuvent avoir besoin de changer et comme c'est le cas avec
- d'autres services, Guix permet aux administrateurs systèmes de spécifier ces
- paramètres via une interface Scheme unifiée.
- Par exemple, pour spécifier que les courriels se trouvent dans
- @code{maildir~/.mail}, on peut instancier Dovecot de cette manière :
- @example
- (dovecot-service #:config
- (dovecot-configuration
- (mail-location "maildir:~/.mail")))
- @end example
- Les paramètres de configuration disponibles sont les suivants. Chaque
- définition des paramètres est précédé par son type ; par exemple,
- @samp{string-list foo} indique que le paramètre @code{foo} devrait être
- spécifié comme une liste de chaînes de caractères. Il y a aussi une manière
- de spécifier la configuration comme une chaîne de caractères, si vous avez
- un vieux fichier @code{dovecot.conf} que vous voulez porter depuis un autre
- système ; voir la fin pour plus de détails.
- @c The following documentation was initially generated by
- @c (generate-documentation) in (gnu services mail). Manually maintained
- @c documentation is better, so we shouldn't hesitate to edit below as
- @c needed. However if the change you want to make to this documentation
- @c can be done in an automated way, it's probably easier to change
- @c (generate-documentation) than to make it below and have to deal with
- @c the churn as dovecot updates.
- Les champs de @code{dovecot-configuration} disponibles sont :
- @deftypevr {paramètre de @code{dovecot-configuration}} package dovecot
- Le paquet dovecot
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} comma-separated-string-list listen
- Une liste d'IP ou d'hôtes à écouter pour les connexions. @samp{*} écoute
- sur toutes les interfaces IPv4, @samp{::} écoute sur toutes les interfaces
- IPv6. Si vous voulez spécifier des ports différents de la valeur par défaut
- ou quelque chose de plus complexe, complétez les champs d'adresse et de port
- de @samp{inet-listener} des services spécifiques qui vous intéressent.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} protocol-configuration-list protocols
- Liste des protocoles que vous voulez servir. Les protocoles disponibles
- comprennent @samp{imap}, @samp{pop3} et @samp{lmtp}.
- Les champs @code{protocol-configuration} disponibles sont :
- @deftypevr {paramètre de @code{protocol-configuration}} string name
- Le nom du protocole.
- @end deftypevr
- @deftypevr {paramètre de @code{protocol-configuration}} string auth-socket-path
- Le chemin d'un socket UNIX vers le serveur d'authentification maître pour
- trouver les utilisateurs. C'est utilisé par imap (pour les utilisateurs
- partagés) et lda. Sa valeur par défaut est
- @samp{"/var/run/dovecot/auth-userdb"}.
- @end deftypevr
- @deftypevr {paramètre de @code{protocol-configuration}} space-separated-string-list mail-plugins
- Liste de greffons à charger séparés par des espaces.
- @end deftypevr
- @deftypevr {paramètre de @code{protocol-configuration}} non-negative-integer mail-max-userip-connections
- Nombre maximum de connexions IMAP permises pour un utilisateur depuis chaque
- adresse IP. Remarque : la comparaison du nom d'utilisateur est sensible à
- la casse. Par défaut @samp{10}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} service-configuration-list services
- Liste des services à activer. Les services disponibles comprennent
- @samp{imap}, @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}
- et @samp{lmtp}.
- Les champs de @code{service-configuration} disponibles sont :
- @deftypevr {paramètre de @code{service-configuration}} string kind
- Le type de service. Les valeurs valides comprennent @code{director},
- @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3},
- @code{auth}, @code{auth-worker}, @code{dict}, @code{tcpwrap},
- @code{quota-warning} ou n'importe quoi d'autre.
- @end deftypevr
- @deftypevr {paramètre de @code{service-configuration}} listener-configuration-list listeners
- Les auditeurs du service. Un auditeur est soit un
- @code{unix-listener-configuration}, soit un
- @code{fifo-listener-configuration}, soit un
- @code{inet-listener-configuration}. La valeur par défaut est @samp{()}.
- Les champs de @code{unix-listener-configuration} disponibles sont :
- @deftypevr {paramètre de @code{unix-listener-configuration}} string path
- Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
- utilisé comme nom de section.
- @end deftypevr
- @deftypevr {paramètre de @code{unix-listener-configuration}} string mode
- Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
- @end deftypevr
- @deftypevr {paramètre de @code{unix-listener-configuration}} string user
- L'utilisateur à qui appartient le socket. La valeur par défaut est
- @samp{""}
- @end deftypevr
- @deftypevr {paramètre de @code{unix-listener-configuration}} string group
- Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
- @end deftypevr
- Les champs de @code{fifo-listener-configuration} disponibles sont :
- @deftypevr {paramètre de @code{fifo-listener-configuration}} string path
- Chemin vers le fichier, relativement au champ @code{base-dir}. C'est aussi
- utilisé comme nom de section.
- @end deftypevr
- @deftypevr {paramètre de @code{fifo-listener-configuration}} string mode
- Le mode d'accès pour le socket. La valeur par défaut est @samp{"0600"}.
- @end deftypevr
- @deftypevr {paramètre de @code{fifo-listener-configuration}} string user
- L'utilisateur à qui appartient le socket. La valeur par défaut est
- @samp{""}
- @end deftypevr
- @deftypevr {paramètre de @code{fifo-listener-configuration}} string group
- Le groupe auquel appartient le socket. La valeur par défaut est @samp{""}.
- @end deftypevr
- Les champs de @code{inet-listener-configuration} disponibles sont :
- @deftypevr {paramètre de @code{inet-listener-configuration}} string protocol
- Le protocole à écouter.
- @end deftypevr
- @deftypevr {paramètre de @code{inet-listener-configuration}} string address
- L'adresse sur laquelle écouter, ou la chaîne vide pour toutes les adresses.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{inet-listener-configuration}} non-negative-integer port
- Le port sur lequel écouter.
- @end deftypevr
- @deftypevr {paramètre de @code{inet-listener-configuration}} boolean ssl?
- S'il faut utiliser SSL pour ce service ; @samp{yes}, @samp{no} ou
- @samp{required}. La valeur par défaut est @samp{#t}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{service-configuration}} non-negative-integer client-limit
- Connexions de clients simultanées maximum par processus. Une fois ce nombre
- de connections atteint, la connexion suivante fera en sorte que Dovecot
- démarre un autre processus. Si la valeur est 0, @code{default-client-limit}
- est utilisé à la place.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{service-configuration}} non-negative-integer service-count
- Nombre de connexions à gérer avant de démarrer un nouveau processus.
- Typiquement les valeurs utiles sont 0 (sans limite) ou 1. 1 est plus sûr,
- mais 0 est plus rapide. <doc/wiki/LoginProcess.txt>. La valeur par défaut
- est @samp{1}.
- @end deftypevr
- @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-limit
- Nombre de processus maximum qui peut exister pour ce service. Si la valeur
- est 0, @code{default-process-limit} est utilisé à la place.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{service-configuration}} non-negative-integer process-min-avail
- Nombre de processus à toujours garder en attente de connexions. La valeur
- par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{service-configuration}} non-negative-integer vsz-limit
- Si vous mettez @samp{service-count 0}, vous avez sans doute besoin
- d'augmenter ce paramètre. La valeur par défaut est @samp{256000000}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} dict-configuration dict
- Configuration du dictionnaire, créé par le constructeur
- @code{dict-configuration}.
- Les champs de @code{dict-configuration} disponibles sont :
- @deftypevr {paramètre de @code{dict-configuration}} free-form-fields entries
- Une liste de paires de clefs-valeurs que ce dictionnaire contient. La
- valeur par défaut est @samp{()}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} passdb-configuration-list passdbs
- Une liste de configurations passdb, chacune créée par le constructeur
- @code{passdb-configuration}.
- Les champs de @code{passdb-configuration} disponibles sont :
- @deftypevr {paramètre de @code{passdb-configuration}} string driver
- Le pilote à utiliser par passdb. Les valeur valides comprennent @samp{pam},
- @samp{passwd}, @samp{shadow}, @samp{bsdauth} et @samp{static}. La valeur
- par défaut est @samp{"pam"}.
- @end deftypevr
- @deftypevr {paramètre de @code{passdb-configuration}} space-separated-string-list args
- Liste d'arguments pour le pilote passdb séparés par des espaces. La valeur
- par défaut est @samp{""}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} userdb-configuration-list userdbs
- Liste des configurations userdb, chacune créée par le constructeur
- @code{userdb-configuration}.
- Les champs de @code{userdb-configuration} disponibles sont :
- @deftypevr {paramètre de @code{userdb-configuration}} string driver
- Le pilote que userdb devrait utiliser. Les valeurs valides comprennent
- @samp{passwd} et @samp{static}. La valeur par défaut est @samp{"passwd"}.
- @end deftypevr
- @deftypevr {paramètre de @code{userdb-configuration}} space-separated-string-list args
- Liste des arguments du pilote userdb séparés par des espaces. La valeur par
- défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{userdb-configuration}} free-form-args override-fields
- Remplace des champs de passwd. La valeur par défaut est @samp{()}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} plugin-configuration plugin-configuration
- Configuration du greffon, créé par le constructeur
- @code{plugin-configuration}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} list-of-namespace-configuration namespaces
- Liste d'espaces de noms. Chaque élément de la liste est créé par le
- constructeur @code{namespace-configuration}.
- Les champs de @code{namespace-configuration} disponibles sont :
- @deftypevr {paramètre de @code{namespace-configuration}} string name
- Nom de cet espace de nom.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} string type
- Type d'espace de nom : @samp{private}, @samp{shared} ou @samp{public}. La
- valeur par défaut est @samp{"private"}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} string separator
- Séparateur de hiérarchie à utiliser. Vous devriez utiliser le même
- séparateur pour tous les espaces de noms ou certains clients seront confus.
- @samp{/} est généralement une bonne valeur. La valeur par défaut dépend
- cependant du format de stockage sous-jacent. La valeur par défaut est
- @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} string prefix
- Préfixe requis pour accéder à cet espace de nom. Ce paramètres doit être
- différent pour tous les espaces de noms. Par exemple @samp{Public/}. La
- valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} string location
- Emplacement physique de la boîte aux lettres. C'est le même format que
- mail_location, qui est aussi la valeur par défaut. La valeur par défaut est
- @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} boolean inbox?
- Il ne peut y avoir qu'un INBOX, et ce paramètre définit l'espace de nom qui
- le possède. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} boolean hidden?
- Si l'espace de nom est caché, il n'est pas publié auprès des clients par
- l'extension NAMESPACE. Vous voudrez aussi sans doute indiquer @samp{list?
- #f}. C'est surtout utile lors de la conversion depuis un autre serveur avec
- des espaces de noms différents que vous voulez rendre obsolètes sans les
- casser. Par exemple vous pouvez cacher les espaces de noms avec les
- préfixes @samp{~/mail/}, @samp{~%u/mail/} et @samp{mail/}. La valeur par
- défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} boolean list?
- Montre les boîtes aux lettres sons cet espace de nom avec la commande LIST.
- Cela rend l'espace de nom visible pour les clients qui ne supportent pas
- l'extension NAMESPACE. La valeur spéciale @code{children} liste les boîtes
- aux lettres filles mais cache le préfixe de l'espace de nom. La valeur par
- défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} boolean subscriptions?
- Les espaces de noms gèrent leur propre souscription. Si la valeur est
- @code{#f}, l'espace de nom parent s'en charge. Le préfixe vide devrait
- toujours avoir cette valeur à @code{#t}. La valeur par défaut est
- @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{namespace-configuration}} mailbox-configuration-list mailboxes
- Liste des boîtes aux lettres prédéfinies dans cet espace de nom. La valeur
- par défaut est @samp{()}.
- Les champs de @code{mailbox-configuration} disponibles sont :
- @deftypevr {paramètre de @code{mailbox-configuration}} string name
- Nom de cette boîte aux lettres.
- @end deftypevr
- @deftypevr {paramètre de @code{mailbox-configuration}} string auto
- @samp{create} créera automatiquement cette boîte aux lettres.
- @samp{subscribe} créera et souscrira à la boîte aux lettres. La valeur par
- défaut est @samp{"no"}.
- @end deftypevr
- @deftypevr {paramètre de @code{mailbox-configuration}} space-separated-string-list special-use
- Liste des attributs @code{SPECIAL-USE} IMAP spécifiés par la RFC 6154. Les
- valeurs valides sont @code{\All}, @code{\Archive}, @code{\Drafts},
- @code{\Flagged}, @code{\Junk}, @code{\Sent} et @code{\Trash}. La valeur par
- défaut est @samp{()}.
- @end deftypevr
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} file-name base-dir
- Répertoire de base où stocker les données d'exécution. La valeur par défaut
- est @samp{"/var/run/dovecot/"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string login-greeting
- Message d'accueil pour les clients. La valeur par défaut est @samp{"Dovecot
- ready."}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-trusted-networks
- Liste des groupes d'adresses de confiance. Les connexions depuis ces IP
- sont autorisées à modifier leurs adresses IP et leurs ports (pour la
- connexion et la vérification d'authentification).
- @samp{disable-plaintext-auth} est aussi ignoré pour ces réseaux.
- Typiquement vous voudrez spécifier votre mandataire IMAP ici. La valeur par
- défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-access-sockets
- List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-proctitle?
- Show more verbose process titles (in ps). Currently shows user name and IP
- address. Useful for seeing who is actually using the IMAP processes (e.g.@:
- shared mailboxes or if the same uid is used for multiple accounts).
- Defaults to @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean shutdown-clients?
- Should all processes be killed when Dovecot master process shuts down.
- Setting this to @code{#f} means that Dovecot can be upgraded without forcing
- existing client connections to close (although that could also be a problem
- if the upgrade is e.g.@: due to a security fix). Defaults to @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer doveadm-worker-count
- Si la valeur n'est pas zéro, lance les commandes de courriel via ce nombre
- de connexions au serveur doveadm au lieu de les lancer dans le même
- processus. La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string doveadm-socket-path
- Socket UNIX ou hôte:port utilisé pour se connecter au serveur doveadm. La
- valeur par défaut est @samp{"doveadm-server"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list import-environment
- Liste des variables d'environnement qui sont préservées au démarrage de
- Dovecot et passées à tous ses processus fils. Vous pouvez aussi donner des
- paires clef=valeur pour toujours spécifier ce paramètre.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean disable-plaintext-auth?
- Disable LOGIN command and all other plaintext authentications unless SSL/TLS
- is used (LOGINDISABLED capability). Note that if the remote IP matches the
- local IP (i.e.@: you're connecting from the same computer), the connection
- is considered secure and plaintext authentication is allowed. See also
- ssl=required setting. Defaults to @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-cache-size
- Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
- Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for
- caching to be used. Defaults to @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-ttl
- Durée de vie des données en cache. Après l'expiration du TTL
- l'enregistrement en cache n'est plus utilisé *sauf* si la requête à la base
- de données principale revoie une erreur interne. Nous essayons aussi de
- gérer les changements de mot de passe automatiquement : si
- l'authentification précédente de l'utilisateur était réussie mais pas
- celle-ci, le cache n'est pas utilisé. Pour l'instant cela fonctionne avec
- l'authentification en texte clair uniquement. La valeur par défaut est
- @samp{"1 hour"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-cache-negative-ttl
- TTL pour les résultats négatifs (l'utilisateur n'est pas trouvé ou le mot de
- passe ne correspond pas). 0 désactive la mise en cache complètement. La
- valeur par défaut est @samp{"1 hour"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-realms
- Liste des domaines pour les mécanismes d'authentification SASL qui en ont
- besoin. Vous pouvez laisser ce paramètre vide si vous ne voulez pas
- utiliser plusieurs domaines. Beaucoup de clients utilisent le premier
- domaine listé ici, donc gardez celui par défaut en premier. La valeur par
- défaut est @samp{()}
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-default-realm
- Domaine par défaut à utiliser si aucun n'est spécifié. C'est utilisé pour
- les domaines SASL et pour ajouter @@domaine au nom d'utilisateur dans les
- authentification en texte clair. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-chars
- Liste des caractères autorisés dans les noms d'utilisateur. Si le nom
- d'utilisateur donné par l'utilisateur contient un caractère qui n'est pas
- listé ici, la connexion échoue automatiquement. C'est juste une
- vérification supplémentaire pour s'assure que l'utilisateur ne puisse pas
- exploiter des vulnérabilités potentielles d'échappement de guillemets avec
- les bases de données SQL/LDAP. Si vous voulez autoriser tous les
- caractères, indiquez la liste vide.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-translation
- Traduction de caractères dans les noms d'utilisateur avant qu'ils ne soient
- cherchés en base. La valeur contient une série de caractère de -> à. Par
- exemple @samp{#@@/@@} signifie que @samp{#} et @samp{/} sont traduits en
- @samp{@@}. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-username-format
- Username formatting before it's looked up from databases. You can use the
- standard variables here, e.g.@: %Lu would lowercase the username, %n would
- drop away the domain if it was given, or @samp{%n-AT-%d} would change the
- @samp{@@} into @samp{-AT-}. This translation is done after
- @samp{auth-username-translation} changes. Defaults to @samp{"%Lu"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-master-user-separator
- If you want to allow master users to log in by specifying the master
- username within the normal username string (i.e.@: not using SASL
- mechanism's support for it), you can specify the separator character here.
- The format is then <username><separator><master username>. UW-IMAP uses
- @samp{*} as the separator, so that could be a good choice. Defaults to
- @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-anonymous-username
- Nom d'utilisateur à utiliser pour les utilisateurs qui se connectent avec le
- mécanisme SASL ANONYMOUS. La valeur par défaut est @samp{"anonymous"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer auth-worker-max-count
- Maximum number of dovecot-auth worker processes. They're used to execute
- blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're
- automatically created and destroyed as needed. Defaults to @samp{30}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-gssapi-hostname
- Nom d'hôte à utiliser dans les noms GSSAPI principaux. La valeur par défaut
- est d'utiliser le nom renvoyé par gethostname(). Utilisez @samp{$ALL} (avec
- des guillemets) pour permettre toutes les entrées keytab. La valeur par
- défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-krb5-keytab
- Keytab Kerberos à utiliser pour le mécanisme GSSAPI. Utilisera la valeur
- par défaut du système (typiquement @file{/etc/krb5.keytab}) s'il n'est pas
- spécifié. Vous pourriez avoir besoin de faire en sorte que le service
- d'authentification tourne en root pour pouvoir lire ce fichier. La valeur
- par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-use-winbind?
- Effectue l'authentification NTLM et GSS-SPNEGO avec le démon winbind de
- Samba et l'utilitaire @samp{ntlm-auth}.
- <doc/wiki/Authentication/Mechanisms/Winbind.txt>. La valeur par défaut est
- @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-winbind-helper-path
- Chemin du binaire @samp{ntlm-auth} de samba. La valeur par défaut est
- @samp{"/usr/bin/ntlm_auth"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string auth-failure-delay
- Durée d'attente avant de répondre à des authentifications échouées. La
- valeur par défaut est @samp{"2 secs"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-require-client-cert?
- Requiert un certification client SSL valide ou l'authentification échoue.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-ssl-username-from-cert?
- Prend le nom d'utilisateur du certificat SSL client, avec
- @code{X509_NAME_get_text_by_NID()} qui renvoie le CommonName du DN du
- sujet. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list auth-mechanisms
- Liste des mécanismes d'authentification souhaités. Les mécanismes supportés
- sont : @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
- @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
- @samp{otp}, @samp{skey} et @samp{gss-spnego}. Remarquez : Voir aussi le
- paramètre @samp{disable-plaintext-auth}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-servers
- Liste des IP ou des noms d'hôtes des serveurs directeurs, dont soi-même.
- Les ports peuvent être spécifiés avec ip:port. Le port par défaut est le
- même que le @samp{inet-listener} du service directeur. La valeur par défaut
- est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list director-mail-servers
- Liste des IP ou des noms d'hôtes de tous les serveurs de courriel de la
- grappe. Les intervalles sont aussi permis, comme 10.0.0.10-10.0.0.30. La
- valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string director-user-expire
- Combien de temps avant de rediriger les utilisateurs à un serveur spécifique
- après qu'il n'y a plus de connexion. La valeur par défaut est @samp{"15
- min"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string director-username-hash
- La manière de traduire le nom d'utilisateur avant de le hasher. Les valeurs
- utiles comprennent %Ln si l'utilisateur peut se connecter avec ou sans
- @@domain, %Ld si les boîtes aux lettres sont partagées dans le domaine. La
- valeur par défaut est @samp{"%Lu"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string log-path
- Fichier de journal à utiliser pour les messages d'erreur. @samp{syslog}
- journalise vers syslog, @samp{/dev/stderr} vers la sortie d'erreur. La
- valeur par défaut est @samp{"syslog"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string info-log-path
- Fichier de journal à utiliser pour les messages d'information. La valeur
- par défaut est @samp{log-path}. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string debug-log-path
- Fichier de journal à utiliser pour les messages de débogage. La valeur par
- défaut est @samp{info-log-path}. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string syslog-facility
- Dispositif syslog à utiliser si vous journalisez avec syslog. Normalement
- si vous ne voulez pas utiliser @samp{mail}, vous voudrez utiliser
- local0..local7. D'autres dispositifs standard sont supportés. La valeur
- par défaut est @samp{"mail"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose?
- Indique s'il faut enregistrer les tentatives de connexion échouées et la
- raison de leur échec. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-verbose-passwords?
- In case of password mismatches, log the attempted password. Valid values
- are no, plain and sha1. sha1 can be useful for detecting brute force
- password attempts vs. user simply trying the same password over and over
- again. You can also truncate the value to n chars by appending ":n" (e.g.@:
- sha1:6). Defaults to @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug?
- Journaux encore plus verbeux pour le débogage. Cela montre par exemple les
- requêtes SQL effectuées. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean auth-debug-passwords?
- Dans le cas où le mot de passe était incorrect, indique s'il faut
- enregistrer les mots de passe et les schémas utilisés pour que le problème
- puisse être débogué. Activer cette option active aussi @samp{auth-debug}.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-debug?
- Indique s'il faut activer le débogage du traitement des courriels. Cela
- peut vous aider à comprendre pourquoi Dovecot ne trouve pas vos courriels.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean verbose-ssl?
- Indique s'il faut montrer les erreurs au niveau SSL. La valeur par défaut
- est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string log-timestamp
- Préfixe à utiliser devant chaque ligne écrite dans le fichier journal. Les
- codes % sont au format strftime(3). La valeur par défaut est @samp{"\"%b %d
- %H:%M:%S \""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list login-log-format-elements
- Liste des éléments qu'il faut enregistrer. Les éléments qui ont une
- variable non vide sont agrégés pour former une chaîne de mots séparés par
- des virgules.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string login-log-format
- Format du journal de connexion. %s contient la chaîne
- @samp{login-log-format-elements}, %$ contient la donnée à enregistrer. La
- valeur par défaut est @samp{"%$: %s"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-log-prefix
- Préfixe à utiliser devant chaque ligne du fichier de journal pour les
- processus traitant les courriels. Voir doc/wiki/Variables.txt pour trouver
- la liste des variables que vous pouvez utiliser. La valeur par défaut est
- @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string deliver-log-format
- Format à utiliser pour enregistrer les livraisons de courriels. Vous pouvez
- utiliser ces variables :
- @table @code
- @item %$
- Delivery status message (e.g.@: @samp{saved to INBOX})
- @item %m
- Message-ID
- @item %s
- Objet
- @item %f
- Adresse « de »
- @item %p
- Taille physique
- @item %w
- Taille virtuelle.
- @end table
- La valeur par défaut est @samp{"msgid=%m: %$"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-location
- Emplacement des boîtes à lettre des utilisateurs. La valeur par défaut est
- vide, ce qui signifie que Dovecot essaiera de trouver les boîte aux lettres
- automatiquement. Cela ne fonctionnera pas si l'utilisateur n'a aucun
- courriel, donc il vaut mieux indiquer explicitement le bon emplacement à
- Dovecot.
- If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u)
- isn't enough. You'll also need to tell Dovecot where the other mailboxes
- are kept. This is called the "root mail directory", and it must be the
- first path given in the @samp{mail-location} setting.
- Il y a quelques variables spéciales que vous pouvez utiliser :
- @table @samp
- @item %u
- nom d'utilisateur
- @item %n
- la partie « utilisateur » dans « utilisateur@@domaine », comme %u s'il n'y a
- pas de domaine.
- @item %d
- la partie « domaine » dans « utilisateur@@domaine », vide s'il n'y a pas de
- domaine
- @item %h
- répertoire personnel
- @end table
- Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemple :
- @table @samp
- @item maildir:~/Maildir
- @item mbox:~/mail:INBOX=/var/mail/%u
- @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
- @end table
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-uid
- Utilisateur et groupe système utilisé pour accéder aux courriels. Si vous
- utilisez multiple, userdb peut remplacer ces valeurs en renvoyant les champs
- uid et gid. Vous pouvez utiliser soit des nombres, soit des noms.
- <doc/wiki/UserIds.txt>. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-gid
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-privileged-group
- Groupe à activer temporairement pour les opérations privilégiées.
- Actuellement cela est utilisé uniquement avec INBOX lors de sa création
- initiale et quand le verrouillage échoie. Typiquement, vous pouvez utiliser
- « mail » pour donner accès à /var/mail. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-access-groups
- Grant access to these supplementary groups for mail processes. Typically
- these are used to set up access to shared mailboxes. Note that it may be
- dangerous to set these if users can create symlinks (e.g.@: if "mail" group
- is set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
- mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
- it). Defaults to @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-full-filesystem-access?
- Allow full file system access to clients. There's no access checks other
- than what the operating system does for the active UID/GID. It works with
- both maildir and mboxes, allowing you to prefix mailboxes names with e.g.@:
- /path/ or ~user/. Defaults to @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mmap-disable?
- Ne pas du tout utiliser mmap(). Cela est requis si vous stockez les index
- dans des systèmes de fichiers partagés (NFS ou clusterfs). La valeur par
- défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean dotlock-use-excl?
- S'appuyer sur @samp{O_EXCL} lors de la création de fichiers de
- verrouillage. NFS supporte @samp{O_EXCL} depuis la version 3, donc cette
- option est sûre de nos jours. La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-fsync
- Quand utiliser les appels à fsync() ou fdatasync() :
- @table @code
- @item optimized
- Lorsque cela est nécessaire pour éviter de perdre des données importantes
- @item always
- Useful with e.g.@: NFS when write()s are delayed
- @item never
- Ne l'utilisez pas (ça a de meilleures performances, mais les crashs font
- perdre toutes les données).
- @end table
- La valeur par défaut est @samp{"optimized"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-storage?
- Le stockage des courriels se fait sur NFS. Utilisez cette option pour que
- Dovecot vide les caches NFS lorsque c'est nécessaire. Si vous utilisez
- seulement un simple serveur de courriel, ce n'est pas nécessaire. La valeur
- par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-nfs-index?
- Les fichiers d'index de courriels sont sur un système de fichiers NFS. Pour
- utiliser cette option, vous aurez besoin de @samp{mmap-disable? #t} et
- @samp{fsync-disable? #f}. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string lock-method
- Méthode de verrouillage des fichiers d'index. Les alternatives sont fcntl,
- flock et dotlock. Le verrouillage-point (dotlocking) utilise des astuces
- qui peuvent créer plus d'utilisation du disque que les autres méthodes de
- verrouillage. Pour les utilisateurs de NFS, flock ne marche pas, et
- rappelez-vous de modifier @samp{mmap-disable}. La valeur par défaut est
- @samp{"fcntl"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-temp-dir
- Le répertoire dans lequel LDA/LMTP stockent temporairement les courriels de
- plus de 128 Ko. La valeur par défaut est @samp{"/tmp"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-uid
- L'intervalle d'UID valides pour les utilisateurs. Cette option est surtout
- utile pour s'assurer que les utilisateurs ne peuvent pas s'authentifier en
- tant que démon ou qu'un autre utilisateur système. Remarquez que la
- connexion en root est interdite en dur dans le binaire de dovecot et qu'on
- ne peut pas l'autoriser même si @samp{first-valid-uid} vaut 0. La valeur
- par défaut est @samp{500}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-uid
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer first-valid-gid
- Li'ntervalle de GID valides pour les utilisateurs. Les utilisateurs qui ont
- un GID non-valide comme numéro de groupe primaire ne peuvent pas se
- connecter. Si l'utilisateur appartient à un groupe avec un GID non valide,
- ce groupe n'est pas utilisable. La valeur par défaut est @samp{1}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer last-valid-gid
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-max-keyword-length
- Longueur maximale autorisée pour les mots-clefs. Elle n'est utilisée que
- lors de la création de nouveaux mots-clefs. La valeur par défaut est
- @samp{50}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} colon-separated-file-name-list valid-chroot-dirs
- List of directories under which chrooting is allowed for mail processes
- (i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar too). This
- setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
- settings. If this setting is empty, "/./" in home dirs are ignored.
- WARNING: Never add directories here which local users can modify, that may
- lead to root exploit. Usually this should be done only if you don't allow
- shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-chroot
- Default chroot directory for mail processes. This can be overridden for
- specific users in user database by giving /./ in user's home directory
- (e.g.@: /home/./user chroots into /home). Note that usually there is no
- real need to do chrooting, Dovecot doesn't allow users to access files
- outside their mail directory anyway. If your home directories are prefixed
- with the chroot directory, append "/."@: to @samp{mail-chroot}.
- <doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} file-name auth-socket-path
- Chemin de socket UNIX vers le serveur d'authentification maître pour trouver
- les utilisateurs. C'est utilisé par imap (pour les utilisateurs partagés)
- et lda. La valeur par défaut est @samp{"/var/run/dovecot/auth-userdb"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} file-name mail-plugin-dir
- Répertoire où trouver les greffons. La valeur par défaut est
- @samp{"/usr/lib/dovecot"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mail-plugins
- List of plugins to load for all services. Plugins specific to IMAP, LDA,
- etc.@: are added to this list in their own .conf files. Defaults to
- @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-cache-min-mail-count
- Le nombre minimal de courriels dans une boîte aux lettres avant de mettre à
- jour le fichier de cache. Cela permet d'optimiser le comportement de
- Dovecot pour qu'il fasse moins d'écriture disque contre plus de lecture
- disque. La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mailbox-idle-check-interval
- Lorsque la commande IDLE est lancée, la boîte aux lettres est vérifiée de
- temps en temps pour voir s'il y a de nouveaux messages ou d'autres
- changements. Ce paramètre défini le temps d'attente minimum entre deux
- vérifications. Dovecot peut aussi utilise dnotify, inotify et kqueue pour
- trouver immédiatement les changements. La valeur par défaut est @samp{"30
- secs"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mail-save-crlf?
- Sauvegarder les courriels avec CR+LF plutôt que seulement LF. Cela permet
- de consommer moins de CPU en envoyant ces courriels, surtout avec l'appel
- système sendfile() de Linux et FreeBSD. Mais cela crée un peu plus
- d'utilisation du disque, ce qui peut aussi le ralentir. Remarquez aussi que
- si d'autres logiciels lisent les mbox/maildirs, ils peuvent se tromper dans
- leur traitement de ces CR supplémentaires et causer des problèmes. La
- valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-stat-dirs?
- Par défaut la commande LIST renvoie toutes les entrées du maildir qui
- commencent par un point. Activer cette option permet à Dovecot de renvoyer
- uniquement les entrées qui sont des répertoires. Cela se fait avec stat()
- sur chaque entrée, ce qui cause plus d'utilisation du disque. For systems
- setting struct @samp{dirent->d_type} this check is free and it's done always
- regardless of this setting). La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-copy-with-hardlinks?
- Lors de la copie d'un message, le faire avec des liens en dur si possible.
- Cela améliore un peu la performance et n'a que peu de chance d'avoir des
- effets secondaires.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean maildir-very-dirty-syncs?
- Suppose que Dovecot est le seul MUA qui accède à Maildir : scanne le
- répertoire cur/ seulement lorsque son mtime change de manière inattendue ou
- lorsqu'il ne peut pas trouver le courriel autrement. La valeur par défaut
- est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-read-locks
- La méthode de verrouillage à utiliser pour verrouiller le boîtes aux lettres
- mbox. Il y en a quatre :
- @table @code
- @item dotlock
- Crée un fichier <mailbox>.lock. C'est la solution la plus ancienne et la
- plus sûr pour NFS. Si vous voulez utiliser /var/mail/, les utilisateurs
- auront besoin de l'accès en écriture à ce répertoire.
- @item dotlock-try
- Comme pour dotlock, mais si elle échoue à cause d'un problème de permission
- ou parce qu'il n'y a pas assez d'espace disque, l'ignore.
- @item fcntl
- Utilisez cette méthode si possible. Elle fonctionne aussi avec NFS si vous
- utilisez lockd.
- @item flock
- Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
- @item lockf
- Peut ne pas exister sur tous les systèmes. Ne fonctionne pas avec NFS.
- @end table
- Vous pouvez utiliser plusieurs méthodes de verrouillage ; dans ce cas
- l'ordre dans lequel elles sont déclarées est important pour éviter des
- interblocages si d'autres MTA/MUA utilisent aussi plusieurs méthodes.
- Certains systèmes d'exploitation ne permettent pas d'utiliser certaines
- méthodes en même temps.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list mbox-write-locks
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-lock-timeout
- Temps d'attente maximal pour un verrou (tous les verrous) avant
- d'abandonner. La valeur par défaut est @samp{"5 mins"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mbox-dotlock-change-timeout
- Si le fichier dotlock existe mais que la boîte aux lettres n'est pas
- modifiée, remplacer le fichier de verrouillage après ce temps d'attente. La
- valeur par défaut est @samp{"2 mins"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-dirty-syncs?
- Lorsqu'un mbox change ne manière inattendue, il faut le lire en entier pour
- savoir ce qui a changé. Si le mbox est assez grand cela peut prendre
- beaucoup de temps. Comme le changement est habituellement un simple
- courriel supplémentaire, il serait plus rapide de lire le nouveaux
- courriels. Si ce paramètre est activé, Dovecot fait cela mais revient
- toujours à relire le fichier mbox complet si le fichier n'est pas comme
- attendu. Le seul réel inconvénient à ce paramètre est que certains MUA
- changent les drapeaux des messages, et dans ce cas Dovecot ne s'en rend pas
- immédiatement compte. Remarquez qu'une synchronisation complète est
- effectuée avec les commandes SELECT, EXAMINE, EXPUNGE et CHECK. La valeur
- par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-very-dirty-syncs?
- Comme @samp{mbox-dirty-syncs}, mais ne synchronise pas complètement même
- avec les commandes SELECT, EXAMINE, EXPUNGE ou CHECK. Si l'option n'est pas
- actifée, @samp{mbox-dirty-syncs} est ignorée. La valeur par défaut est
- @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mbox-lazy-writes?
- Attendre avant d'écrire les en-têtes mbox jusqu'à la prochaine
- synchronisation des écritures (les commandes EXPUNGE et CHECK et quand on
- ferme la boîte aux lettres). C'est surtout utile pour POP3 où les clients
- suppriment souvent tous les courriels. L'inconvénient c'est que vos
- changements ne sont pas immédiatement visibles pour les autres MUA. La
- valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mbox-min-index-size
- If mbox size is smaller than this (e.g.@: 100k), don't write index files.
- If an index file already exists it's still read, just not updated. Defaults
- to @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mdbox-rotate-size
- Taille du fichier dbox maximale avant rotation. La valeur par défaut est
- @samp{10000000}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mdbox-rotate-interval
- Âge maximum du fichier dbox avant rotation. Typiquement en jours. Les
- jours commencent à minuit, donc 1d signifie aujourd'hui, 2d pour hier, etc.
- 0 pour désactiver la vérification. La valeur par défaut est @samp{"1d"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean mdbox-preallocate-space?
- Lors de la création des fichiers mdbox, préallouer immédiatement leur taille
- à @samp{mdbox-rotate-size}. Ce paramètre ne fonctionne actuellement que
- dans Linux avec certains systèmes de fichiers (ext4, xfs). La valeur par
- défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-dir
- Les formats sdbox et mdbox supportent la sauvegarde des pièces-jointes dans
- des fichiers externes, ce qui permet de les stocker une seule fois. Les
- autres moteurs ne le supportent pas pour le moment.
- ATTENTION : Cette fonctionnalité n'a pas été beaucoup testée. Utilisez-la à
- vos risques et périls.
- Racine du répertoire où stocker les pièces-jointes. Désactivé si vide. La
- valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer mail-attachment-min-size
- Les pièces-jointes plus petites que cela ne sont pas enregistrées à part.
- Il est aussi possible d'écrire un greffon pour désactiver l'enregistrement
- externe de certaines pièces-jointes spécifiques. La valeur par défaut est
- @samp{128000}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-fs
- Moteur du système de fichier à utiliser pour sauvegarder les pièces-jointes
- :
- @table @code
- @item posix
- Pas de SiS (single instance storage) par Dovecot (mais cela peut aider la
- déduplication du système de fichier)
- @item sis posix
- SiS avec comparaison bit-à-bit immédiate pendant la sauvegarde
- @item sis-queue posix
- SiS avec déduplication et comparaison différées
- @end table
- La valeur par défaut est @samp{"sis posix"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string mail-attachment-hash
- Hash format to use in attachment filenames. You can add any text and
- variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
- @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
- truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
- Defaults to @samp{"%@{sha1@}"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-process-limit
- La valeur par défaut est @samp{100}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-client-limit
- La valeur par défaut est @samp{1000}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer default-vsz-limit
- Limite VSZ (taille mémoire virtuelle) par défaut pour les processus de
- service. C'est surtout pour attraper et tuer les processus qui font fuiter
- la mémoire avant qu'ils ne l'utilisent en entier. La valeur par défaut est
- @samp{256000000}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string default-login-user
- Utilisateur de connexion utilisé en interne par les processus de connexion.
- C'est l'utilisateur avec la confiance minimale pour Dovecot. Il ne devrait
- avoir accès à rien du tout. La valeur par défaut est @samp{"dovenull"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string default-internal-user
- Utilisateur utilisé en interne par les processus non privilégiés. Il
- devrait être différent de l'utilisateur de connexion, pour que les processus
- de connexion ne puissent pas perturber les autres processus. La valeur par
- défaut est @samp{"dovecot"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl?
- Support SSL/TLS : yes, no, required. <doc/wiki/SSL.txt>. La valeur par
- défaut est @samp{"required"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert
- Certificat SSL/TLS X.509 encodé en PEM (clef publique). La valeur par
- défaut est @samp{"</etc/dovecot/default.pem"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key
- Clef privée SSL/TLS encodée en PEM. La clef est ouverte avant l'abandon des
- privilèges root, donc laissez-la non-lisible pour les utilisateurs. La
- valeur par défaut est @samp{"</etc/dovecot/private/default.pem"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-key-password
- Si le fichier de clef est protégé par un mot de passe, donnez-le ici.
- Autrement, donnez-le en démarrant dovecot avec le paramètre -p. Comme ce
- fichier est souvent lisible pour tout le monde, vous pourriez vouloir placer
- ce paramètre dans un autre fichier. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-ca
- PEM encoded trusted certificate authority. Set this only if you intend to
- use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
- certificate(s) followed by the matching CRL(s). (e.g.@: @samp{ssl-ca
- </etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-require-crl?
- Indique si les certificats clients doivent réussir la vérification du CRL.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean ssl-verify-client-cert?
- Demande aux clients d'envoyer un certificat. Si vous voulez aussi le
- requérir, indiquez @samp{auth-ssl-require-client-cert? #t} dans la section
- auth. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cert-username-field
- Le champ du certificat à utiliser pour le nom d'utilisateur. Les choix
- habituels sont commonName et X500UniqueIdentifier. Vous devrez aussi
- indiquer @samp{auth-ssl-username-from-cert? #t}. La valeur par défaut est
- @samp{"commonName"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-min-protocol
- Version minimale de SSL à accepter. La valeur par défaut est
- @samp{"TLSv1"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-cipher-list
- Méthodes de chiffrement à utiliser. La valeur par défaut est
- @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string ssl-crypto-device
- Moteur cryptographique SSL à utiliser. Pour les valeur valides, lancez «
- openssl engine ». La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string postmaster-address
- Adresse à utiliser pour envoyer les courriels de rejet. %d correspond au
- domaine du destinataire. La valeur par défaut est @samp{"postmaster@@%d"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string hostname
- Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and
- in LMTP replies. Default is the system's real hostname@@domain. Defaults
- to @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean quota-full-tempfail?
- Si l'utilisateur dépasse le quota, renvoie un échec temporaire au lieu de
- rejeter le courriel. La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} file-name sendmail-path
- Binaire à utiliser pour envoyer des courriels. La valeur par défaut est
- @samp{"/usr/sbin/sendmail"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string submission-host
- Si la valeur est non vide, envoyer les courriels à ce serveur SMTP
- hôte[:port] au lieu de sendmail. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-subject
- En-tête d'objet à utiliser pour les courriels de rejet. Vous pouvez
- utiliser les mêmes variables que pour @samp{rejection-reason} ci-dessous.
- La valeur par défaut est @samp{"Rejected: %s"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string rejection-reason
- Message d'erreur pour les humains dans les courriels de rejet. Vous pouvez
- utiliser ces variables :
- @table @code
- @item %n
- CRLF
- @item %r
- raison
- @item %s
- objet du courriel de départ
- @item %t
- destinataire
- @end table
- La valeur par défaut est @samp{"Your message to <%t> was automatically
- rejected:%n%r"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string recipient-delimiter
- Caractère de délimitation entre la partie locale et le détail des adresses
- de courriel. La valeur par défaut est @samp{"+"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string lda-original-recipient-header
- En-tête où l'adresse du destinataire d'origine (l'adresse RCPT TO de SMTP)
- est récupérée si elle n'est pas disponible ailleurs. Le paramètre -a de
- dovecot-lda le remplace. L'en-tête couramment utilisée pour cela est
- X-Original-To. La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autocreate?
- Sauvegarder un courriel dans un fichier qui n'existe pas devrait-il le créer
- ? La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} boolean lda-mailbox-autosubscribe?
- Devrait-on aussi se souscrire aux boîtes aux lettres nouvellement créées ?
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} non-negative-integer imap-max-line-length
- Longueur maximale de la ligne de commande IMAP. Certains clients génèrent
- des lignes de commandes très longues avec des boîtes aux lettres énormes,
- donc vous pourriez avoir besoin d'augmenter cette limite si vous obtenez les
- erreurs « Too long argument » ou « IMAP command line too large ». La valeur
- par défaut est @samp{64000}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string imap-logout-format
- Format de la chaîne de déconnexion IMAP :
- @table @code
- @item %i
- nombre d'octets lus par le client
- @item %o
- nombre total d'octets envoyés au client.
- @end table
- Voir @file{doc/wiki/Variables.txt} pour une liste de toutes les variables
- utilisables. La valeur par défaut est @samp{"in=%i out=%o
- deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@}
- hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@}
- body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string imap-capability
- Override the IMAP CAPABILITY response. If the value begins with '+', add
- the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults
- to @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string imap-idle-notify-interval
- Temps d'attente entre les notifications « OK Still here » lorsque le client
- est en IDLE. La valeur par défaut est @samp{"2 mins"}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-send
- Noms des champs ID et de leur valeur à envoyer aux clients. « * » signifie
- la valeur par défaut. Les champs suivants ont actuellement des valeurs par
- défaut : name, version, os, os-version, support-url, support-email. La
- valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string imap-id-log
- Champs ID envoyés par le client à enregistrer. « * » signifie tout. La
- valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} space-separated-string-list imap-client-workarounds
- Contournements pour divers bogues de certains client :
- @table @code
- @item delay-newmail
- Envoie des notifications de nouveau message EXISTS/RECENT seulement en
- réponse aux commandes NOOP et CHECK. Certains clients les ignorent
- autrement, par exemple OSX Mail (< v2.1). Outlook Express est encore plus
- cassé, sans cela il peut montrer des erreurs de type « Le message n'est plus
- sur le serveur ». Remarquez que OE6 est toujours cassé même avec ce
- contournement si la synchronisation est à « En-têtes seulement ».
- @item tb-extra-mailbox-sep
- Thunderbird se mélange les pinceaux avec LAYOUT=fs (mbox et dbox) et ajoute
- un suffixe @samp{/} supplémentaire sur les noms des boîtes aux lettres.
- Cette option fait que dovecot ignore le @samp{/} supplémentaire au lieu de
- le traiter comme un nom de boîte aux lettres invalide.
- @item tb-lsub-flags
- Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This
- makes Thunderbird realize they aren't selectable and show them greyed out,
- instead of only later giving "not selectable" popup error.
- @end table
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{dovecot-configuration}} string imap-urlauth-host
- Hôte autorisé dans les URL URLAUTH envoyés par les clients. « * » les
- autorise tous. La valeur par défaut est @samp{""}.
- @end deftypevr
- Ouf ! Tant d'options de configuration. La bonne nouvelle, c'est que GuixSD
- a une interface complète avec le langage de configuration de Dovecot. Cela
- permet non seulement de déclarer la configuration de manière agréable, mais
- aussi d'offrir des capacités de réflexion : les utilisateurs peuvent écrire
- du code pour inspecter et transformer les configuration depuis Scheme.
- Cependant, vous pourriez avoir un fichier @code{dovecot.conf} déjà tout
- prêt. Dans ce cas, vous pouvez passer un objet
- @code{opaque-dovecot-configuration} comme paramètre @code{#:config} à
- @code{dovecot-service}. Comme son nom l'indique, une configuration opaque
- n'a pas les capacités de réflexions.
- Les champs de @code{opaque-dovecot-configuration} disponibles sont :
- @deftypevr {paramètre de @code{opaque-dovecot-configuration}} package dovecot
- Le paquet dovecot
- @end deftypevr
- @deftypevr {paramètre de @code{opaque-dovecot-configuration}} string string
- Le contenu de @code{dovecot.conf}, en tant que chaîne de caractères.
- @end deftypevr
- Par exemple, si votre @code{dovecot.conf} est simplement la chaîne vide,
- vous pouvez instancier un service dovecot comme cela :
- @example
- (dovecot-service #:config
- (opaque-dovecot-configuration
- (string "")))
- @end example
- @subsubheading Service OpenSMTPD
- @deffn {Variable Scheme} opensmtpd-service-type
- C'est le type de service de @uref{https://www.opensmtpd.org, OpenSMTPD},
- dont la valeur devrait être un objet @code{opensmtpd-configuration} comme
- dans cet exemple :
- @example
- (service opensmtpd-service-type
- (opensmtpd-configuration
- (config-file (local-file "./my-smtpd.conf"))))
- @end example
- @end deffn
- @deftp {Type de données} opensmtpd-configuration
- Type de données représentant la configuration de opensmtpd.
- @table @asis
- @item @code{package} (par défaut : @var{opensmtpd})
- Objet de paquet du serveur SMTP OpenSMTPD.
- @item @code{config-file} (par défaut : @var{%default-opensmtpd-file})
- Objet simili-fichier du fichier de configuration de OpenSMTPD à utiliser.
- Par défaut il écoute sur l'interface de boucle locale et accepte les
- courriels des utilisateurs et des démons de la machine locale, et autorise
- l'envoie de courriels à des serveurs distants. Lancez @command{man
- smtpd.conf} pour plus d'information.
- @end table
- @end deftp
- @subsubheading Service Exim
- @cindex agent de transfert de courriel (MTA)
- @cindex MTA (agent de transfert de courriel)
- @cindex SMTP
- @deffn {Variable Scheme} exim-service-type
- C'est le type de l'agent de transfert de courriel (MTA)
- @uref{https://exim.org, Exim}, dont la valeur devrait être un objet
- @code{exim-configuration} comme dans cet exemple :
- @example
- (service exim-service-type
- (exim-configuration
- (config-file (local-file "./my-exim.conf"))))
- @end example
- @end deffn
- Pour utilise le service @code{exim-service-type} vous devez aussi avoir un
- service @code{mail-aliases-service-type} dans votre @code{operating-system}
- (même sans alias).
- @deftp {Type de données} exim-configuration
- Type de données représentant la configuration d'exim.
- @table @asis
- @item @code{package} (par défaut : @var{exim})
- Objet de paquet du serveur Exim.
- @item @code{config-file} (par défaut : @code{#f})
- Objet simili-fichier du fichier de configuration d'Exim à utiliser. Si sa
- valeur est @code{#f} alors le service utilisera la configuration par défaut
- du paquet fournit dans @code{package}. Le fichier de configuration qui en
- résulte est chargé après avoir mis en place les variables de configuration
- @code{exim_user} et @code{exim_group}.
- @end table
- @end deftp
- @subsubheading Service d'alias de courriel
- @cindex alias de courriel
- @cindex alias, pour les adresses de courriel
- @deffn {Variable Scheme} mail-aliases-service-type
- C'est le type de service qui fournit @code{/etc/aliases} et qui spécifie
- comment délivrer les courriels aux utilisateurs du système.
- @example
- (service mail-aliases-service-type
- '(("postmaster" "bob")
- ("bob" "bob@@example.com" "bob@@example2.com")))
- @end example
- @end deffn
- La configuration pour un service @code{mail-aliases-service-type} est une
- liste associative qui dénote comment délivrer les courriels qui arrivent au
- système. Chaque entrée est de la forme @code{(alias adresses ...)} avec
- @code{alias} qui spécifie l'alias local et @code{adresses} qui spécifie où
- délivrer les courriels de cet utilisateur.
- Les alias n'ont pas besoin de correspondre à des utilisateurs locaux du
- système. Dans l'exemple au-dessus, il n'y a pas besoin d'une entrée
- @code{postmaster} dans la liste @code{user-accounts} du
- @code{operating-system} pour délivrer les courriels à destination de
- @code{postmaster} à @code{bob} (qui ensuite délivrerait le courriel à
- @code{bob@@example.com} et @code{bob@@example2.com}).
- @node Services de messagerie
- @subsubsection Services de messagerie
- @cindex messagerie intantanée
- @cindex jabber
- @cindex XMPP
- Le module @code{(gnu services messaging)} fournit des définitions de
- services Guix pour les services de messageries instantanées : actuellement
- seul Prosody est supporté.
- @subsubheading Service Prosody
- @deffn {Variable Scheme} prosody-service-type
- C'est le type pour le @uref{https://prosody.im, le serveur de communication
- XMPP Prosody}. Sa valeur doit être un enregistrement
- @code{prosody-configuration} comme dans cet exemple :
- @example
- (service prosody-service-type
- (prosody-configuration
- (modules-enabled (cons "groups" "mam" %default-modules-enabled))
- (int-components
- (list
- (int-component-configuration
- (hostname "conference.example.net")
- (plugin "muc")
- (mod-muc (mod-muc-configuration)))))
- (virtualhosts
- (list
- (virtualhost-configuration
- (domain "example.net"))))))
- @end example
- Voir plus bas pour des détails sur @code{prosody-configuration}.
- @end deffn
- Par défaut, Prosody n'a pas besoin de beaucoup de configuration. Seul un
- champ @code{virtualhosts} est requis : il spécifie le domaine que vous
- voulez voir Prosody servir.
- Vous pouvez effectuer plusieurs vérifications de la configuration générée
- avec la commande @code{prosodyctl check}.
- Prosodyctl vous aidera aussi à importer des certificats du répertoire
- @code{letsencrypt} pour que l'utilisateur @code{prosody} puisse y accéder.
- Voir @url{https://prosody.im/doc/letsencrypt}.
- @example
- prosodyctl --root cert import /etc/letsencrypt/live
- @end example
- Les paramètres de configuration disponibles sont les suivants. Chaque
- définition des paramètres est précédé par son type ; par exemple,
- @samp{string-list foo} indique que le paramètre @code{foo} devrait être
- spécifié comme une liste de chaînes de caractères. Les types précédés de
- @code{maybe-} signifient que le paramètre n'apparaîtra pas dans
- @code{prosody.cfg.lua} lorsque sa valeur est @code{'disabled}.
- Il y a aussi une manière de spécifier la configuration en tant que chaîne de
- caractères si vous avez un vieux fichier @code{prosody.cfg.lua} que vous
- voulez porter depuis un autre système ; voir la fin pour plus de détails.
- Le type @code{file-object} désigne soit un objet simili-fichier
- (@pxref{G-Expressions, file-like objects}), soit un nom de fichier.
- @c The following documentation was initially generated by
- @c (generate-documentation) in (gnu services messaging). Manually maintained
- @c documentation is better, so we shouldn't hesitate to edit below as
- @c needed. However if the change you want to make to this documentation
- @c can be done in an automated way, it's probably easier to change
- @c (generate-documentation) than to make it below and have to deal with
- @c the churn as Prosody updates.
- Les champs de @code{prosody-configuration} disponibles sont :
- @deftypevr {paramètre de @code{prosody-configuration}} package prosody
- Le paquet Prosody.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} file-name data-path
- Emplacement du répertoire de stockage des données de Prosody. Voir
- @url{https://prosody.im/doc/configure}. La valeur par défaut est
- @samp{"/var/lib/prosody"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} file-object-list plugin-paths
- Répertoires de greffons supplémentaires. Ils sont analysés dans l'ordre
- spécifié. Voir @url{https://prosody.im/doc/plugins_directory}. La valeur
- par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} file-name certificates
- Chaque hôte virtuel et composant a besoin d'un certificat pour que les
- clients et les serveurs puissent vérifier son identité. Prosody chargera
- automatiquement les clefs et les certificats dans le répertoire spécifié
- ici. La valeur par défaut est @samp{"/etc/prosody/certs"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string-list admins
- C'est une liste des comptes administrateurs de ce serveur. Remarquez que
- vous devez créer les comptes séparément. Voir
- @url{https://prosody.im/doc/admins} et
- @url{https://prosody.im/doc/creating_accounts}. Par exemple : @code{(admins
- '("user1@@example.com" "user2@@example.net"))}. La valeur par défaut est
- @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} boolean use-libevent?
- Active l'utilisation de libevent pour de meilleures performances sous une
- forte charge. Voir @url{https://prosody.im/doc/libevent}. La valeur par
- défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} module-list modules-enabled
- C'est la liste des modules que Prosody chargera au démarrage. Il cherchera
- @code{mod_modulename.lua} dans le répertoire des greffons, donc assurez-vous
- qu'il existe aussi. La documentation des modules se trouve sur
- @url{https://prosody.im/doc/modules}. La valeur par défaut est
- @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private"
- "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register"
- "admin_adhoc")}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string-list modules-disabled
- @samp{"offline"},@samp{"c2s"} et @samp{"s2s"} sont chargés automatiquement,
- mais si vous voulez les désactiver, ajoutez-les à cette liste. La valeur
- par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} file-object groups-file
- Chemin vers un fichier texte où les groupes partagés sont définis. Si ce
- chemin est vide alors @samp{mod_groups} ne fait rien. Voir
- @url{https://prosody.im/doc/modules/mod_groups}. La valeur par défaut est
- @samp{"/var/lib/prosody/sharedgroups.txt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} boolean allow-registration?
- Désactive la création de compte par défaut, pour la sécurité. Voir
- @url{https://prosody.im/doc/creating_accounts}. La valeur par défaut est
- @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} maybe-ssl-configuration ssl
- Ce sont les paramètres liés à SSL/TLS. La plupart sont désactivés pour
- pouvoir utiliser les paramètres par défaut de Prosody. Si vous ne comprenez
- pas complètement ces options, ne les ajoutez pas à votre configuration, il
- est aisé de diminuer la sécurité de votre serveur en les modifiant. Voir
- @url{https://prosody.im/doc/advanced_ssl_config}.
- Les champs de @code{ssl-configuration} disponibles sont :
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string protocol
- Cela détermine la poignée de main à utiliser.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name key
- Chemin vers votre fichier de clef privée.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name certificate
- Chemin vers votre fichier de certificat.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} file-object capath
- Chemin vers le répertoire contenant les certificats racines que vous voulez
- voir Prosody utiliser lors de la vérification des certificats des serveurs
- distants. La valeur par défaut est @samp{"/etc/ssl/certs"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-object cafile
- Chemin vers un fichier contenant les certificats racines auxquels Prosody
- devra faire confiance. Comme @code{capath} mais avec les certificats
- concaténés ensemble.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verify
- Une liste d'options de vérification (qui correspondent globalement aux
- drapeaux @code{set_verify()} d'OpenSSL).
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list options
- Une liste d'options générales liées à SSL/TLS. Elles correspondent
- globalement à @code{set_options()} d'OpenSSL. Pour une liste complète des
- options disponibles dans LuaSec, voir les sources de LuaSec.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-non-negative-integer depth
- Longueur maximale d'une chaîne d'autorités de certifications avant la
- racine.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string ciphers
- Une chaîne de méthodes de chiffrement OpenSSL. Cela choisi les méthodes de
- chiffrement que Prosody offrira aux clients, et dans quel ordre de
- préférence.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-file-name dhparam
- Un chemin vers un fichier contenant les paramètres pour l'échange de clef
- Diffie-Hellman. Vous pouvez créer un tel fichier avec : @code{openssl
- dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string curve
- Courbe pour Diffie-Hellman sur courbe elliptique. La valeur par défaut de
- Prosody est @samp{"secp384r1"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string-list verifyext
- Une liste d'options de vérification « supplémentaires ».
- @end deftypevr
- @deftypevr {paramètre de @code{ssl-configuration}} maybe-string password
- Mot de passe pour les clefs privées chiffrées.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} boolean c2s-require-encryption?
- S'il faut forcer toutes les connexions client-serveur à être chiffrées ou
- non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
- défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string-list disable-sasl-mechanisms
- Ensemble de mécanismes qui ne seront jamais offerts. Voir
- @url{https://prosody.im/doc/modules/mod_saslauth}. La valeur par défaut est
- @samp{("DIGEST-MD5")}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-require-encryption?
- S'il faut forcer toutes les connexion serveur-serveur à être chiffrées ou
- non. Voir @url{https://prosody.im/doc/modules/mod_tls}. La valeur par
- défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} boolean s2s-secure-auth?
- S'il faut requérir le chiffrement et l'authentification du certificat. Cela
- fournit une sécurité idéale, mais demande que les serveurs avec lesquels
- vous communiquez supportent le chiffrement ET présentent un certificat
- valide et de confiance. Voir @url{https://prosody.im/doc/s2s#security}. La
- valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-insecure-domains
- Beaucoup de serveurs ne supportent pas le chiffrement ou ont un certificat
- invalide ou auto-signé. Vous pouvez lister les domaines ici qui n'ont pas
- besoin de s'authentifier avec des certificats. Ils seront authentifiés par
- DNS. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
- est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string-list s2s-secure-domains
- Même si vous laissez @code{s2s-secure-auth?} désactivé, vous pouvez toujours
- demander un certificat valide pour certains domaine en spécifiant la liste
- ici. Voir @url{https://prosody.im/doc/s2s#security}. La valeur par défaut
- est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string authentication
- Choisi le moteur d'authentification à utiliser. Le moteur par défaut stocke
- les mots de passes en texte clair et utilise la configuration de stockage
- des données de Prosody pour stocker les données authentifiées. Si vous
- n'avez pas confiance dans le serveur, lisez
- @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} pour plus
- d'information sur l'utilisation du moteur hashed. Voir aussi
- @url{https://prosody.im/doc/authentication}. La valeur par défaut est
- @samp{"internal_plain"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} maybe-string log
- Indique les options de journalisation. La configuration avancée des
- journaux n'est pas encore supportée par le service Prosody dans GuixSD.
- Voir @url{https://prosody.im/doc/logging}. La valeur par défaut est
- @samp{"*syslog"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} file-name pidfile
- Fichier où écrire le PID. Voir
- @url{https://prosody.im/doc/modules/mod_posix}. La valeur par défaut est
- @samp{"/var/run/prosody/prosody.pid"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} maybe-non-negative-integer http-max-content-size
- Taille maximum autorisée pour le corps HTTP (en octets).
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} maybe-string http-external-url
- Certains modules exposent leur propre URL de diverses manières. Cette URL
- est construite à partir du protocole, de l'hôte et du port utilisé. Si
- Prosody se trouve derrière un proxy, l'URL publique sera
- @code{http-external-url} à la place. Voir
- @url{https://prosody.im/doc/http#external_url}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} virtualhost-configuration-list virtualhosts
- Un hôte dans Prosody est un domaine sur lequel les comptes utilisateurs sont
- créés. Par exemple si vous voulez que vos utilisateurs aient une adresse
- comme @samp{"john.smith@@example.com"} vous devrez ajouter un hôte
- @samp{"example.com"}. Toutes les options de cette liste seront appliquées
- uniquement à cet hôte.
- Remarque : le nom d'hôte « virtuel » est utilisé dans la configuration pour
- éviter de le confondre avec le nom d'hôte physique réel de la machine qui
- héberge Prosody. Une seule instance de Prosody peut servir plusieurs
- domaines, chacun défini comme une entrée VirtualHost dans la configuration
- de Prosody. Ainsi, un serveur qui n'héberge qu'un seul domaine n'aura
- qu'une entrée VirtualHost.
- Voir @url{https://prosody.im/doc/configure#virtual_host_settings}.
- Les champs de @code{virtualhost-configuration} disponibles sont :
- tous ces champs de @code{prosody-configuration} : @code{admins},
- @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
- @code{groups-file}, @code{allow-registration?}, @code{ssl},
- @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
- @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
- @code{s2s-insecure-domains}, @code{s2s-secure-domains},
- @code{authentication}, @code{log}, @code{http-max-content-size},
- @code{http-external-url}, @code{raw-content}, plus :
- @deftypevr {paramètre de @code{virtualhost-configuration}} string domain
- Domaine que vous souhaitez que Prosody serve.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} int-component-configuration-list int-components
- Les composant sont des services supplémentaires qui sont disponibles pour
- les clients, habituellement sur un sous-domaine du serveur principal (comme
- @samp{"mycomponent.example.com"}). Des exemples de composants sont des
- serveurs de chatroom, des répertoires utilisateurs ou des passerelles vers
- d'autres protocoles.
- Les composants internes sont implémentés dans des greffons spécifiques à
- Prosody. Pour ajouter un composant interne, vous n'avez qu'à remplir le
- champ de nom d'hôte et le greffon que vous voulez utiliser pour le
- composant.
- Voir @url{https://prosody.im/doc/components}. La valeur par défaut est
- @samp{()}.
- Les champs de @code{int-component-configuration} disponibles sont :
- tous ces champs de @code{prosody-configuration} : @code{admins},
- @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
- @code{groups-file}, @code{allow-registration?}, @code{ssl},
- @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
- @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
- @code{s2s-insecure-domains}, @code{s2s-secure-domains},
- @code{authentication}, @code{log}, @code{http-max-content-size},
- @code{http-external-url}, @code{raw-content}, plus :
- @deftypevr {paramètre de @code{int-component-configuration}} string hostname
- Nom d'hôte du composant.
- @end deftypevr
- @deftypevr {paramètre de @code{int-component-configuration}} string plugin
- Greffon que vous voulez utiliser pour ce composant.
- @end deftypevr
- @deftypevr {paramètre de @code{int-component-configuration}} maybe-mod-muc-configuration mod-muc
- Le chat multi-utilisateur (MUC) est le modules de Prosody qui vous permet de
- créer des chatrooms/conférences pour les utilisateurs XMPP.
- Des informations générales sur la configuration des chatrooms
- multi-utilisateurs se trouvent dans la documentation sur les chatrooms
- (@url{https://prosody.im/doc/chatrooms}), que vous devriez lire si vous les
- découvrez.
- Voir aussi @url{https://prosody.im/doc/modules/mod_muc}.
- Les champs de @code{mod-muc-configuration} disponibles sont :
- @deftypevr {paramètre de @code{mod-muc-configuration}} string name
- Le nom à renvoyer dans les réponses de découverte de services. La valeur
- par défaut est @samp{"Prosody Chatrooms"}.
- @end deftypevr
- @deftypevr {paramètre de @code{mod-muc-configuration}} string-or-boolean restrict-room-creation
- If @samp{#t}, this will only allow admins to create new chatrooms.
- Otherwise anyone can create a room. The value @samp{"local"} restricts room
- creation to users on the service's parent domain. E.g.@:
- @samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The
- value @samp{"admin"} restricts to service administrators only. Defaults to
- @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{mod-muc-configuration}} non-negative-integer max-history-messages
- Nombre maximum de messages d'historique qui seront envoyés aux membres qui
- viennent de rejoindre le salon. La valeur par défaut est @samp{20}.
- @end deftypevr
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} ext-component-configuration-list ext-components
- Les composants externes utilisent XEP-0114, que la plupart des composants
- supportent. Pour ajouter un composant externe, vous remplissez simplement
- le champ de nom d'hôte. Voir @url{https://prosody.im/doc/components}. La
- valeur par défaut est @samp{()}.
- Les champs de @code{ext-component-configuration} disponibles sont :
- tous ces champs de @code{prosody-configuration} : @code{admins},
- @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
- @code{groups-file}, @code{allow-registration?}, @code{ssl},
- @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
- @code{s2s-require-encryption?}, @code{s2s-secure-auth?},
- @code{s2s-insecure-domains}, @code{s2s-secure-domains},
- @code{authentication}, @code{log}, @code{http-max-content-size},
- @code{http-external-url}, @code{raw-content}, plus :
- @deftypevr {paramètre de @code{ext-component-configuration}} string component-secret
- Mot de passe que le composant utilisera pour s'authentifier.
- @end deftypevr
- @deftypevr {paramètre de @code{ext-component-configuration}} string hostname
- Nom d'hôte du composant.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} non-negative-integer-list component-ports
- Ports sur lesquels Prosody écoutera les connexions des composants. La
- valeur par défaut est @samp{(5347)}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} string component-interface
- Interface sur laquelle Prosody écoutera les connexions des composants. La
- valeur par défaut est @samp{"127.0.0.1"}.
- @end deftypevr
- @deftypevr {paramètre de @code{prosody-configuration}} maybe-raw-content raw-content
- Contenu brut qui sera ajouté au fichier de configuration.
- @end deftypevr
- Il se peut que vous ayez juste envie de lancer un fichier
- @code{prosody.cfg.lua} directement. Dans ce cas, vous pouvez passer un
- enregistrement @code{opaque-prosody-configuration} comme valeur à
- @code{prosody-service-type}. Comme son nom l'indique, une configuration
- opaque n'a pas de capacités de réflexion simples. Les champs disponibles de
- @code{opaque-prosody-configuration} sont :
- @deftypevr {paramètre de @code{opaque-prosody-configuration}} package prosody
- Le paquet prosody.
- @end deftypevr
- @deftypevr {paramètre de @code{opaque-prosody-configuration}} string prosody.cfg.lua
- Le contenu de @code{prosody.cfg.lua} à utiliser.
- @end deftypevr
- Par exemple, si votre @code{prosody.cfg.lua} est juste la chaîne vide, vous
- pouvez instancier un service prosody comme ceci :
- @example
- (service prosody-service-type
- (opaque-prosody-configuration
- (prosody.cfg.lua "")))
- @end example
- @c end of Prosody auto-generated documentation
- @subsubheading Service BitlBee
- @cindex IRC (Internet Relay Chat)
- @cindex passerelle IRC
- @url{http://bitlbee.org,BitlBee} est une passerelle qui fournit une
- interface IRC vers une variété de protocoles de messagerie instantanée comme
- XMPP.
- @defvr {Variable Scheme} bitlbee-service-type
- C'est le type de service pour le démon de passerelle IRC
- @url{http://bitlbee.org,BitlBee}. Sa valeur est un
- @code{bitlbee-configuration} (voir plus bas).
- Pour que BitlBee écoute sur le pourt 6667 sur localhost, ajoutez cette ligne
- à vos services :
- @example
- (service bitlbee-service-type)
- @end example
- @end defvr
- @deftp {Type de données} bitlbee-configuration
- C'est la configuration de BitlBee, avec les champs suivants :
- @table @asis
- @item @code{interface} (par défaut : @code{"127.0.0.1"})
- @itemx @code{port} (par défaut : @code{6667})
- Écoute sur l'interface réseau correspondant à l'adresse IP dans
- @var{interface}, sur @var{port}.
- Lorsque @var{interface} vaut @code{127.0.0.1}, seuls les clients locaux
- peuvent se connecter ; lorsqu'elle vaut @code{0.0.0.0}, les connexions
- peuvent venir de n'importe quelle interface réseau.
- @item @code{package} (par défaut : @code{bitlbee})
- Le paquet BitlBee à utiliser.
- @item @code{plugins} (par défaut : @code{'()})
- Liste des paquets de greffons à utiliser — p.@: ex.@:
- @code{bitlbee-discord}.
- @item @code{extra-settings} (par défaut : @code{""})
- Partie de configuration ajoutée telle-quelle au fichier de configuration de
- BitlBee.
- @end table
- @end deftp
- @node Services de téléphonie
- @subsubsection Services de téléphonie
- @cindex Murmur (serveur VoIP)
- @cindex serveur VoIP
- Cette section décrit comment configurer et lancer un serveur Murmur. Murmur
- est le serveur de la suite de voix-sur-IP (VoIP) @uref{https://mumble.info,
- Mumble}.
- @deftp {Type de données} murmur-configuration
- Le type de service pour le serveur Murmur. Voici un exemple de
- configuration :
- @example
- (service murmur-service-type
- (murmur-configuration
- (welcome-text
- "Welcome to this Mumble server running on GuixSD!")
- (cert-required? #t) ;disallow text password logins
- (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
- (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
- @end example
- Après avoir reconfiguré votre système, vous pouvez manuellement indiquer le
- mot de passe @code{SuperUser} de murmur avac la commande qui s'affiche
- pendant la phase d'activation.
- Il est recommandé d'enregistrer un compte utilisateur Mumble normal et de
- lui donner les droits admin ou modérateur. Vous pouvez utiliser le client
- @code{mumble} pour vous connecter en tant que nouvel utilisateur normal,
- vous enregistrer et vous déconnecter. Pour l'étape suivante, connectez-vous
- avec le nom @code{SuperUser} en utilisant le mot de passe @code{SuperUser}
- que vous avez indiqué précédemment et accordez les droits administrateur ou
- modérateur à vous utilisateur mumble nouvellement enregistré et créez
- quelques salons.
- Les champs de @code{murmur-configuration} disponibles sont :
- @table @asis
- @item @code{package} (par défaut : @code{mumble})
- Paquet qui contient @code{bin/murmurd}.
- @item @code{user} (par défaut : @code{"murmur"})
- Utilisateur qui lancera le serveur Murmur.
- @item @code{group} (par défaut : @code{"murmur"})
- Groupe de l'utilisateur qui lancera le serveur Murmur.
- @item @code{port} (par défaut : @code{64738})
- Port sur lequel le serveur écoutera.
- @item @code{welcome-text} (par défaut : @code{""})
- Texte de bienvenue envoyé aux clients lors de leur connexion.
- @item @code{server-password} (par défaut : @code{""})
- Mot de passe que les clients devront entrer pour se connecter.
- @item @code{max-users} (par défaut : @code{100})
- Nombre maximum d'utilisateurs qui peuvent se connecter à ce serveur en même
- temps.
- @item @code{max-user-bandwidth} (par défaut : @code{#f})
- Trafic de voix maximum qu'un utilisateur peut envoyer par seconde.
- @item @code{database-file} (par défaut : @code{"/var/lib/murmur/db.sqlite"})
- Nom de fichier de la base de données sqlite. L'utilisateur du service
- deviendra propriétaire du répertoire.
- @item @code{log-file} (par défaut : @code{"/var/log/murmur/murmur.log"})
- Nom du fichier de journal. L'utilisateur du service deviendra propriétaire
- du répertoire.
- @item @code{autoban-attempts} (par défaut : @code{10})
- Nombre maximum de connexions qu'un utilisateur peut faire pendant
- @code{autoban-timeframe} sans être banni automatiquement pour
- @code{autoban-time}.
- @item @code{autoban-timeframe} (par défaut : @code{120})
- Durée du temps pendant lequel le nombre de connexions est compté.
- @item @code{autoban-time} (par défaut : @code{300})
- Durée du bannissement automatique en secondes.
- @item @code{opus-threshold} (par défaut : @code{100})
- Pourcentage des clients qui doivent supporter opus avant de passer sur le
- codec audio opus.
- @item @code{channel-nesting-limit} (par défaut : @code{10})
- Profondeur maximum des canaux.
- @item @code{channelname-regex} (par défaut : @code{#f})
- Une chaîne de la forme d'une expression régulière Qt que les noms de canaux
- doivent respecter.
- @item @code{username-regex} (par défaut : @code{#f})
- Une chaîne de la forme d'une expression régulière Qt que les noms
- d'utilisateurs doivent respecter.
- @item @code{text-message-length} (par défaut : @code{5000})
- Taille maximum en octets qu'un utilisateur peut envoyer en un seul message
- textuel.
- @item @code{image-message-length} (par défaut : @code{(* 128 1024)})
- Taille maximum en octets qu'un utilisateur peut envoyer en une seule image.
- @item @code{cert-required?} (par défaut : @code{#f})
- Si la valeur est @code{#t} les clients utilisant une authentification par
- mot de passe faible ne seront pas acceptés. Les utilisateurs doivent
- compléter l'assistant de configuration des certificats pour rejoindre le
- serveur.
- @item @code{remember-channel?} (paramètre de : @code{#f})
- Indique si murmur devrait se rappeler du dernier canal dans lequel étaient
- les utilisateurs au moment de leur déconnexion et les y remettre lorsqu'ils
- se reconnectent.
- @item @code{allow-html?} (par défaut : @code{#f})
- Indique si le html est autorisé dans les messages textuels, les commentaires
- utilisateurs et les descriptions des canaux.
- @item @code{allow-ping?} (par défaut : @code{#f})
- Mettre à vrai expose le nombre d'utilisateurs, le nombre d'utilisateurs
- maximum et la bande passante maximale du serveur par client aux utilisateurs
- non connectés. Dans le client Mumble, cette information est affichée dans
- la boîte de dialogue de connexion.
- Désactiver ce paramètre empêchera le serveur d'être publiquement listé.
- @item @code{bonjour?} (par défaut : @code{#f})
- Indique si le serveur se présente sur le réseau local à travers le protocole
- bonjour.
- @item @code{send-version?} (par défaut : @code{#f})
- Indique si la version du serveur murmur doit être exposée dans les requêtes
- ping.
- @item @code{log-days} (par défaut : @code{31})
- Murmur stocke aussi les journaux en base de données, qui sont accessible via
- RPC. La valeur par défaut est 31 jours, mais vous pouvez le mettre à 0 pour
- les garder pour toujours ou à -1 pour désactiver la journalisation dans la
- base de données.
- @item @code{obfuscate-ips?} (par défaut : @code{#t})
- Indique si les IP enregistrées doivent être cachées pour protéger la vie
- privée des utilisateurs.
- @item @code{ssl-cert} (par défaut : @code{#f})
- Nom de fichier du certificat SSL/TLS utilisé pour les connexions chiffrées.
- @example
- (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
- @end example
- @item @code{ssl-key} (par défaut : @code{#f})
- Chemin de fichier vers la clef privée ssl pour les connexions chiffrées.
- @example
- (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
- @end example
- @item @code{ssl-dh-params} (par défaut : @code{#f})
- Nom de fichier d'un fichier encodé en PEM avec les paramètres Diffie-Hellman
- pour le chiffrement SSL/TLS. Autrement vous pouvez indiquer
- @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"},
- @code{"@@ffdhe6144"} ou @code{"@@ffdhe8192"} pour utiliser les paramètres
- inclus de la RFC 7919.
- @item @code{ssl-ciphers} (par défaut : @code{#f})
- L'option @code{ssl-ciphers} permet de choisir les suites de chiffrement
- disponibles pour SSL/TLS.
- Cette option est spécifiée en utilisant
- l'@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
- OpenSSL cipher list notation}
- Nous vous recommandons d'essayer votre chaîne de suites de chiffrements avec
- « openssl ciphers <chaîne> » avant de l'indiquer ici, pour avoir une idée
- des suites de chiffrement que vous aurez. Après avoir indiqué cette option,
- nous vous recommandons d'inspecter les journaux de Murmur pour vous assurer
- que Murmur utilise les suites de chiffrements auxquelles vous vous attendez.
- Remarque : modifier cette option peut impacter la rétrocompatibilité de
- votre serveur Murmur, et peut empêcher que des clients Mumble anciens se
- connectent.
- @item @code{public-registration} (par défaut : @code{#f})
- Doit être un enregistrement
- @code{<murmur-public-registration-configuration>} ou @code{#f}.
- Vous pouvez aussi enregistrer votre serveur dans la liste des serveurs
- publiques que le client @code{mumble} affiche au démarrage. Vous ne pouvez
- pas enregistrer votre serveur si vous avez un @code{server-password} ou
- @code{allow-ping} à @code{#f}.
- Cela peut prendre quelques heures avant d'arriver sur la liste publique.
- @item @code{file} (par défaut : @code{#f})
- Version alternative de cette configuration : si vous indiquez quelque chose,
- le reste est ignoré.
- @end table
- @end deftp
- @deftp {Type de données} murmur-public-registration-configuration
- Configuration pour l'enregistrement public du service murmur.
- @table @asis
- @item @code{name}
- C'est le nom d'affichage de votre serveur. Ne pas le confondre avec le nom
- d'hôte.
- @item @code{password}
- Un mot de passe pour identifier votre enregistrement. Les mises à jours
- suivantes devront utiliser le même mot de passe. Ne le perdez pas.
- @item @code{url}
- Cela devrait être le lien @code{http://} ou @code{https://} vers votre site
- web.
- @item @code{hostname} (par défaut : @code{#f})
- Par défaut votre serveur sera listé par son adresse IP. Si cette option est
- indiquée votre serveur sera listé par son nom d'hôte.
- @end table
- @end deftp
- @node Services de surveillance
- @subsubsection Services de surveillance
- @subsubheading Service Tailon
- @uref{https://tailon.readthedocs.io/, Tailon} est une application web pour
- visualiser et chercher des fichiers de journaux.
- L'exemple suivant configurera le service avec les valeurs par défaut. Par
- défaut, on peut accéder à Tailon sur le pour 8080
- (@code{http://localhost:8080}).
- @example
- (service tailon-service-type)
- @end example
- L'exemple suivant personnalise un peu plus la configuration de Tailon, en
- ajoutant @command{sed} à la liste des commandes autorisées.
- @example
- (service tailon-service-type
- (tailon-configuration
- (config-file
- (tailon-configuration-file
- (allowed-commands '("tail" "grep" "awk" "sed"))))))
- @end example
- @deftp {Type de données} tailon-configuration
- Type de données représentant la configuration de Tailon. Ce type a les
- paramètres suivants :
- @table @asis
- @item @code{config-file} (par défaut : @code{(tailon-configuration-file)})
- Le fichier de configuration à utiliser pour Tailon. Ce champ peut contenir
- un enregistrement @dfn{tailon-configuration-file} ou n'importe quelle gexp
- (@pxref{G-Expressions}).
- Par exemple, pour utiliser un fichier local à la place, on peut utiliser la
- fonction @code{local-file} :
- @example
- (service tailon-service-type
- (tailon-configuration
- (config-file (local-file "./my-tailon.conf"))))
- @end example
- @item @code{package} (par défaut : @code{tailon})
- Le paquet tailon à utiliser.
- @end table
- @end deftp
- @deftp {Type de données} tailon-configuration-file
- Type de données représentant les options de configuration de Tailon. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{files} (par défaut : @code{(list "/var/log")})
- Liste des fichiers à afficher. La liste peut inclure des chaînes pour des
- fichiers simple ou des répertoires, ou une liste, où le premier élément est
- le nom d'un sous-section et le reste des fichiers ou des répertoires de
- cette sous-section.
- @item @code{bind} (par défaut : @code{"localhost:8080"})
- Adresse et port sur lesquels Tailon écoute.
- @item @code{relative-root} (par défaut : @code{#f})
- Chemin de l'URL à utiliser pour Tailon, ou @code{#f} pour ne pas utiliser de
- chemin.
- @item @code{allow-transfers?} (par défaut : @code{#t})
- Permet de télécharger les journaux dans l'interface web.
- @item @code{follow-names?} (par défaut : @code{#t})
- Permet de surveiller des fichiers qui n'existent pas encore.
- @item @code{tail-lines} (par défaut : @code{200})
- Nombre de lignes à lire initialement dans chaque fichier.
- @item @code{allowed-commands} (par défaut : @code{(list "tail" "grep" "awk")})
- Commandes autorisées. Par défaut, @code{sed} est désactivé.
- @item @code{debug?} (par défaut : @code{#f})
- Configurez @code{debug?} à @code{#t} pour montrer les messages de débogage.
- @item @code{wrap-lines} (par défaut : @code{#t})
- État initial du retour à la ligne dans l'interface web. Configurez l'option
- à @code{#t} pour retourner à la ligne (par défaut) ou à @code{#f} pour ne
- pas retourner à la ligne au début.
- @item @code{http-auth} (par défaut : @code{#f})
- Type d'authentification HTTP à utiliser. Indiquez @code{#f} pour désactiver
- l'authentification (par défaut). Les valeur supportées sont @code{"digest"}
- et @code{"basic"}.
- @item @code{users} (par défaut : @code{#f})
- Si l'authentification HTTP est activée (voir @code{http-auth}), l'accès sera
- restreint aux identifiants fournis ici. Pour configurer des utilisateurs,
- utilisez une liste de paires, où le premier élément de la paire est le nom
- d'utilisateur et le second élément est le mot de passe.
- @example
- (tailon-configuration-file
- (http-auth "basic")
- (users '(("user1" . "password1")
- ("user2" . "password2"))))
- @end example
- @end table
- @end deftp
- @subsubheading Service Darkstat
- @cindex darkstat
- Darkstat est un « renifleur de paquets » qui capture le trafic réseau,
- calcul des statistiques sur l'utilisation et sert des rapport sur HTTP.
- @defvar {Variable Scheme} darkstat-service-type
- C'est le type de service pour le service
- @uref{https://unix4lyfe.org/darkstat/, darkstat}, sa valeur doit être un
- enregistrement @code{darkstat-configuration} comme dans cet exemple :
- @example
- (service darkstat-service-type
- (darkstat-configuration
- (interface "eno1")))
- @end example
- @end defvar
- @deftp {Type de données} darkstat-configuration
- Type de données représentant la configuration de @command{darkstat}.
- @table @asis
- @item @code{package} (par défaut : @code{darkstat})
- Le paquet darkstat à utiliser.
- @item @code{interface}
- Capture le trafic sur l'interface réseau spécifiée.
- @item @code{port} (par défaut : @code{"667"})
- Lie l'interface web sur le port spécifié.
- @item @code{bind-address} (par défaut : @code{"127.0.0.1"})
- Lie l'interface web sur l'adresse spécifiée.
- @item @code{base} (par défaut : @code{"/"})
- Spécifie le chemin de base des URL. C'est utile si on accède à
- @command{darkstat} à travers un proxy inverse.
- @end table
- @end deftp
- @subsubheading Service d'export de nœud de Prometheus
- @cindex prometheus-node-exporter
- L'exportateur de nœuds de Prometheus rend disponible les statistiques sur le
- matériel et le système d'exploitation fournies par le noyau Linux pour le
- système de surveillance Prometheus. Ce service devrait être déployé sur
- tous les nœuds physiques et les machines virtuelles, où vous voulez
- surveiller ces statistiques.
- @defvar {Variable Scheme} prometheus-node-exporter-service-type
- C'est le type de service pour le service
- @uref{https://github.com/prometheus/node_exporter/,
- prometheus-node-exporter}, sa valeur doit être un enregistrement
- @code{prometheus-node-exporter-configuration} comme dans cet exemple :
- @example
- (service prometheus-node-exporter-service-type
- (prometheus-node-exporter-configuration
- (web-listen-address ":9100")))
- @end example
- @end defvar
- @deftp {Type de données} prometheus-node-exporter-configuration
- Type de données représentant la configuration de @command{node_exporter}
- @table @asis
- @item @code{package} (par défaut : @code{go-github-com-prometheus-node-exporter})
- Le paquet prometheus-node-exporter à utiliser.
- @item @code{web-listen-address} (par défaut : @code{":9100"})
- Lie l'interface web sur l'adresse spécifiée.
- @end table
- @end deftp
- @node Services Kerberos
- @subsubsection Services Kerberos
- @cindex Kerberos
- Le module @code{(gnu services kerberos)} fournit des services liés au
- protocole d'authentification @dfn{Kerberos}.
- @subsubheading Service Krb5
- Les programmes qui utilisent une bibliothèque cliente Kerberos s'attendent à
- trouver un fichier de configuration dans @file{/etc/krb5.conf}. Ce service
- génère un tel fichier à partir d'une définition fournie par la déclaration
- de système d'exploitation. Il ne démarre aucun démon.
- Aucun fichier « keytab » n'est fourni par ce service — vous devez les créer
- explicitement. Ce service est connu pour fonctionner avec la bibliothèque
- cliente MIT, @code{mit-krb5}. Les autres implémentations n'ont pas été
- testées.
- @defvr {Variable Scheme} krb5-service-type
- Un type de service pour les clients Kerberos 5.
- @end defvr
- @noindent
- Voici un exemple d'utilisation :
- @lisp
- (service krb5-service-type
- (krb5-configuration
- (default-realm "EXAMPLE.COM")
- (allow-weak-crypto? #t)
- (realms (list
- (krb5-realm
- (name "EXAMPLE.COM")
- (admin-server "groucho.example.com")
- (kdc "karl.example.com"))
- (krb5-realm
- (name "ARGRX.EDU")
- (admin-server "kerb-admin.argrx.edu")
- (kdc "keys.argrx.edu"))))))
- @end lisp
- @noindent
- Cet exemple fournit une configuration cliente Kerberos@tie{}5 qui :
- @itemize
- @item Reconnais deux domaines : « EXAMPLE.COM » et « ARGREX.EDU », tous deux
- aillant des serveurs d'administration et des centres de distribution de
- clefs distincts ;
- @item Utilisera le domaine « EXAMPLE.COM » pr défaut si le domaine n'est pas spécifié
- explicitement par les clients ;
- @item Acceptera les services qui ne supportent que des types de chiffrements connus pour être faibles.
- @end itemize
- Les types @code{krb5-realm} et @code{krb5-configuration} ont de nombreux
- champs. Seuls les plus communs sont décrits ici. Pour une liste complète,
- et plus de détails sur chacun d'entre eux, voir la documentation de MIT
- @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}.
- @deftp {Type de données} krb5-realm
- @cindex domaine, kerberos
- @table @asis
- @item @code{name}
- Ce champ est une chaîne identifiant le nom d'un domaine. Une convention
- courante est d'utiliser le nom pleinement qualifié de votre organisation,
- converti en majuscule.
- @item @code{admin-server}
- Ce champ est une chaîne identifiant l'hôte où le serveur d'administration
- tourne.
- @item @code{kdc}
- Ce champ est une chaîne identifiant le centre de distribution de clefs pour
- ce domaine.
- @end table
- @end deftp
- @deftp {Type de données} krb5-configuration
- @table @asis
- @item @code{allow-weak-crypto?} (par défaut : @code{#f})
- Si ce drapeau est @code{#t} les services qui n'offrent que des algorithmes
- de chiffrement faibles seront acceptés.
- @item @code{default-realm} (par défaut : @code{#f})
- Ce champ devrait être une chaîne identifiant le domaine Kerberos par défaut
- pour le client. Vous devriez mettre le nom de votre domaine Kerberos dans
- ce champ. Si cette valeur est @code{#f} alors un domaine doit être spécifié
- pour chaque principal Kerberos à l'invocation des programmes comme
- @command{kinit}.
- @item @code{realms}
- Cela doit être une liste non-vide d'objets @code{krb5-realm}, auxquels les
- clients peuvent accéder. Normalement, l'un d'entre eux aura un champ
- @code{name} qui correspond au champ @code{default-realm}.
- @end table
- @end deftp
- @subsubheading Service PAM krb5
- @cindex pam-krb5
- Le service @code{pam-krb5} permet la connexion et la gestion des mots de
- passe par Kerberos. Vous aurez besoin de ce service si vous voulez que les
- applications qui utilisent PAM puissent authentifier automatiquement les
- utilisateurs avec Kerberos.
- @defvr {Variable Scheme} pam-krb5-service-type
- Un type de service pour le module PAM Kerberos 5.
- @end defvr
- @deftp {Type de données} pam-krb5-configuration
- Type de données représentant la configuration du module PAM Kerberos 5. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{pam-krb5} (par défaut : @code{pam-krb5})
- Le paquet pam-krb5 à utiliser.
- @item @code{minimum-uid} (par défaut : @code{1000})
- Le plus petite ID utilisateur pour lequel les authentifications Kerberos
- devraient être tentées. Les comptes locaux avec une valeur plus petite
- échoueront silencieusement leur authentification Kerberos.
- @end table
- @end deftp
- @node Services web
- @subsubsection Services web
- @cindex web
- @cindex www
- @cindex HTTP
- Le module @code{(gnu services web)} fournit le serveur Apache HTTP, le
- serveur web nginx et aussi un démon fastcgi.
- @subsubheading Serveur Apache HTTP
- @deffn {Variable Scheme} httpd-service-type
- Type de service pour le serveur @uref{https://httpd.apache.org/,Apache HTTP}
- (@dfn{httpd}). La valeur de ce type de service est un enregistrement
- @code{httpd-configuration}.
- Un exemple de configuration simple est donné ci-dessous.
- @example
- (service httpd-service-type
- (httpd-configuration
- (config
- (httpd-config-file
- (server-name "www.example.com")
- (document-root "/srv/http/www.example.com")))))
- @end example
- D'autres services peuvent aussi étendre @code{httpd-service-type} pour être
- ajouté à la configuration.
- @example
- (simple-service 'my-extra-server httpd-service-type
- (list
- (httpd-virtualhost
- "*:80"
- (list (string-append
- "ServerName "www.example.com
- DocumentRoot \"/srv/http/www.example.com\"")))))
- @end example
- @end deffn
- Les détails des types d'enregistrement @code{httpd-configuration},
- @code{httpd-module}, @code{httpd-config-file} et @code{httpd-virtualhost}
- sont donnés plus bas.
- @deffn {Type de données} httpd-configuration
- Ce type de données représente la configuration du service httpd.
- @table @asis
- @item @code{package} (par défaut : @code{httpd})
- Le paquet httpd à utiliser.
- @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
- Le fichier de pid utilisé par le service shepherd.
- @item @code{config} (par défaut : @code{(httpd-config-file)})
- Le fichier de configuration à utiliser avec le service httpd. La valeur par
- défaut est un enregistrement @code{httpd-config-file} mais cela peut aussi
- être un G-expression qui génère un fichier, par exemple un
- @code{plain-file}. Un fichier en dehors du dépôt peut aussi être spécifié
- avec une chaîne de caractères.
- @end table
- @end deffn
- @deffn {Type de données} httpd-module
- Ce type de données représente un module pour le service httpd.
- @table @asis
- @item @code{name}
- Le nom du module.
- @item @code{file}
- Le fichier pour le module. Cela peut être relatif au paquet httpd utilisé,
- l'emplacement absolu d'un fichier ou une G-expression pour un fichier dans
- le dépôt, par exemple @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
- @end table
- @end deffn
- @defvr {Variable Scheme} %default-httpd-modules
- Une liste par défaut des objets @code{httpd-module}.
- @end defvr
- @deffn {Type de données} httpd-config-file
- Ce type de données représente un fichier de configuration pour le service
- httpd.
- @table @asis
- @item @code{modules} (par défaut : @code{%default-httpd-modules})
- Les modules à charger. Les modules supplémentaires peuvent être ajoutés ici
- ou chargés par des configuration supplémentaires.
- Par exemple, pour gérer les requêtes pour des fichiers PHP, vous pouvez
- utiliser le module @code{mod_proxy_fcgi} d'Apache avec
- @code{php-fpm-service-type} :
- @example
- (service httpd-service-type
- (httpd-configuration
- (config
- (httpd-config-file
- (modules (cons*
- (httpd-module
- (name "proxy_module")
- (file "modules/mod_proxy.so"))
- (httpd-module
- (name "proxy_fcgi_module")
- (file "modules/mod_proxy_fcgi.so"))
- %default-httpd-modules))
- (extra-config (list "\
- <FilesMatch \\.php$>
- SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
- </FilesMatch>"))))))
- (service php-fpm-service-type
- (php-fpm-configuration
- (socket "/var/run/php-fpm.sock")
- (socket-group "httpd")))
- @end example
- @item @code{server-root} (par défaut : @code{httpd})
- Le @code{ServerRoot} dans le fichier de configuration, par défaut le paquet
- httpd. Les directives comme @code{Include} et @code{LoadModule} sont prises
- relativement à la racine du serveur.
- @item @code{server-name} (par défaut : @code{#f})
- Le @code{ServerName} dans le fichier de configuration, utilisé pour
- spécifier le schéma de requête, le nom d'hôte et le port que le serveur
- utilise pour s'identifier.
- Cela n'a pas besoin d'être dans la configuration du serveur, et peut être
- spécifié dans les hôtes virtuels. La valeur par défaut est @code{#f} pour
- ne pas spécifier de @code{ServerName}.
- @item @code{document-root} (par défaut : @code{"/srv/http"})
- Le @code{DocumentRoot} depuis lequel les fichiers seront servis.
- @item @code{listen} (par défaut : @code{'("80")})
- La liste des valeurs pour les directives @code{Listen} dans le fichier de
- configuration. La valeur devrait être une liste de chaînes, où chacune
- spécifie le port sur lequel écouter et éventuellement une adresse IP et un
- protocole à utiliser.
- @item @code{pid-file} (par défaut : @code{"/var/run/httpd"})
- Le @code{PidFile} à utiliser. Cela devrait correspondre à @code{pid-file}
- indiqué dans @code{httpd-configuration} pour que le service Shepherd soit
- correctement configuré.
- @item @code{error-log} (par défaut : @code{"/var/log/httpd/error_log"})
- Le @code{ErrorLog} où le serveur écrit les journaux d'erreurs.
- @item @code{user} (par défaut : @code{"httpd"})
- Le @code{User} en tant que lequel le serveur répondra aux requêtes.
- @item @code{group} (par défaut : @code{"httpd"})
- Le @code{Group} que le serveur utilisera pour répondre aux requêtes.
- @item @code{extra-config} (par défaut : @code{(list "TypesConfig etc/httpd/mime.types")})
- Une liste plate de chaînes et de G-expressions qui seront ajoutées à la fin
- du fichier de configuration.
- N'importe quelle valeur avec laquelle le service est étendu sera ajouté à
- cette liste.
- @end table
- @end deffn
- @deffn {Type de données} httpd-virtualhost
- Ce type de données représente la configuration d'un hôte virtuel pour le
- service httpd.
- Ils devraient être ajoutés à extra-config dans httpd-service.
- @example
- (simple-service 'my-extra-server httpd-service-type
- (list
- (httpd-virtualhost
- "*:80"
- (list (string-append
- "ServerName "www.example.com
- DocumentRoot \"/srv/http/www.example.com\"")))))
- @end example
- @table @asis
- @item @code{addresses-and-ports}
- L'adresse et le port pour la directive @code{VirtualHost}.
- @item @code{contents}
- Le contenu de la directive @code{VirtualHost}, cela devrait être une liste
- de chaîne et de G-expressions.
- @end table
- @end deffn
- @subsubheading NGINX
- @deffn {Variable Scheme} nginx-service-type
- Type de service pour le serveur web @uref{https://nginx.org/,NGinx}. La
- valeur de ce service est un enregistrement @code{<nginx-configuration>}.
- Un exemple de configuration simple est donné ci-dessous.
- @example
- (service nginx-service-type
- (nginx-configuration
- (server-blocks
- (list (nginx-server-configuration
- (server-name '("www.example.com"))
- (root "/srv/http/www.example.com"))))))
- @end example
- En plus d'ajouter des blocs de serveurs dans la configuration du service
- directement, ce service peut être étendu par d'autres services pour ajouter
- des blocs de serveurs, comme dans cet exemple :
- @example
- (simple-service 'my-extra-server nginx-service-type
- (list (nginx-server-configuration
- (root "/srv/http/extra-website")
- (try-files (list "$uri" "$uri/index.html")))))
- @end example
- @end deffn
- Au démarrage, @command{nginx} n'a pas encore lu son fichier de
- configuration, donc il utilise les fichiers par défaut pour les messages
- d'erreur. S'il échoue à charger sa configuration, c'est là où les messages
- seront enregistrés. Après la lecture du fichier de configuration, le
- fichier de journal d'erreur par défaut change en fonction de celle-ci. Dans
- notre cas, les messages d'erreur au démarage se trouvent dans
- @file{/var/run/nginx/logs/error.log} et après la configuration dans
- @file{/var/log/nginx/error.log}. Ce second emplacement peut être modifié
- avec l'option de configuration @var{log-directory}.
- @deffn {Type de données} nginx-configuration
- Ce type de données représente la configuration de NGinx. Certaines
- configurations peuvent se faire ici et d'autres fournissent des types
- d'enregistrement ou éventuellement, on peut fournir un fichier de
- configuration.
- @table @asis
- @item @code{nginx} (par défaut : @code{nginx})
- Le paquet nginx à utiliser.
- @item @code{log-directory} (par défaut : @code{"/var/log/nginx"})
- Le répertoire dans lequel NGinx écrira ses fichiers journaux.
- @item @code{run-directory} (par défaut : @code{"/var/run/nginx"})
- Le répertoire dans lequel NGinx créera un fichier de pid et écrira des
- fichiers temporaires.
- @item @code{server-blocks} (par défaut : @code{'()})
- Une liste de @dfn{blocs serveur} à créer dans le fichier de configuration
- généré, dont les éléments sont de type @code{<nginx-server-configuration>}.
- L'exemple suivant paramètre NGinx pour servir @code{www.example.com} depuis
- le répertoire @code{/srv/http/www.example.com} sans utiliser HTTPS.
- @example
- (service nginx-service-type
- (nginx-configuration
- (server-blocks
- (list (nginx-server-configuration
- (server-name '("www.example.com"))
- (root "/srv/http/www.example.com"))))))
- @end example
- @item @code{upstream-blocks} (par défaut : @code{'()})
- Une liste de @dfn{blocs amont} à créer dans le fichier de configuration
- généré, dont les éléments sont de type
- @code{<nginx-upstream-configuration>}.
- Configurer les serveurs amont à travers les @code{upstream-blocks} peut être
- utile en combinaison avec @code{locations} dans les enregistrements
- @code{<nginx-server-configuration>}. L'exemple suivant crée une
- configuration de serveur avec une configuration « location » qui sera
- mandataire pour une configuration amont, qui gérera les requêtes avec deux
- serveurs.
- @example
- (service
- nginx-service-type
- (nginx-configuration
- (server-blocks
- (list (nginx-server-configuration
- (server-name '("www.example.com"))
- (root "/srv/http/www.example.com")
- (locations
- (list
- (nginx-location-configuration
- (uri "/path1")
- (body '("proxy_pass http://server-proxy;"))))))))
- (upstream-blocks
- (list (nginx-upstream-configuration
- (name "server-proxy")
- (servers (list "server1.example.com"
- "server2.example.com")))))))
- @end example
- @item @code{file} (par défaut : @code{#f})
- Si un fichier de configuration @var{file} est fourni, il sera utilisé au
- lieu de générer un fichier de configuration à partir des
- @code{log-directory}, @code{run-directory}, @code{server-blocks} et
- @code{upstream-blocks} fournis. Pour un bon fonctionnement, ces arguments
- devraient correspondre à ce qui se trouve dans @var{file} pour s'assurer que
- les répertoires sont créé lorsque le service est activé.
- Cela peut être utile si vous avez déjà un fichier de configuration existant
- ou s'il n'est pas possible de faire ce dont vous avez besoin avec les autres
- parties de l'enregistrement nginx-configuration.
- @item @code{server-names-hash-bucket-size} (par défaut : @code{#f})
- Taille du seau pour les tables de hashage des noms de serveurs, par dauft
- @code{#f} pour utilise la taille des lignes de cache du processeur.
- @item @code{server-names-hash-bucket-max-size} (par défaut : @code{#f})
- Taille maximum des seaux pour les tables de hashage des serveurs de noms.
- @item @code{extra-content} (par défaut : @code{""})
- Contenu supplémentaire du bloc @code{http}. Cela devrait être une chaîne ou
- un G-expression.
- @end table
- @end deffn
- @deftp {Type de données} nginx-server-configuration
- Type de données représentant la configuration d'un bloc serveur de nginx.
- Ce type a les paramètres suivants :
- @table @asis
- @item @code{listen} (par défaut : @code{'("80" "443 ssl")})
- Chaque directive @code{listen} indique l'adresse et le port pour le
- protocole IP ou le chemin d'un socket UNIX-domain sur lequel le serveur
- acceptera les connexions. On peut spécifier l'adresse et le port, ou juste
- l'adresse ou juste le port. Une adresse peut aussi être un nom d'hôte, par
- exemple :
- @example
- '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
- @end example
- @item @code{server-name} (par défaut : @code{(list 'default)})
- Une liste de noms de serveurs que ce serveur représente. @code{'default}
- représente le serveur par défaut pour les connexions qui ne correspondent à
- aucun autre serveur.
- @item @code{root} (par défaut : @code{"/srv/http"})
- Racine du site web que sert nginx.
- @item @code{locations} (par défaut : @code{'()})
- Une liste d'enregistrements @dfn{nginx-location-configuration} ou
- @dfn{nginx-named-location-configuration} à utiliser dans ce bloc serveur.
- @item @code{index} (par défaut : @code{(list "index.html")})
- Fichiers d'index à chercher lorsque les clients demandent un répertoire.
- S'il ne peut pas être trouvé, Nginx enverra la liste des fichiers dans le
- répertoire.
- @item @code{try-files} (par défaut : @code{'()})
- Une liste de fichiers dont l'existence doit être vérifiée dans l'ordre
- spécifié. @code{nginx} utilisera le premier fichier trouvé pour satisfaire
- la requête.
- @item @code{ssl-certificate} (par défaut : @code{#f})
- Où trouver les certificats pour les connexions sécurisées. Indiquez
- @code{#f} si vous n'avez pas de certificats et que vous ne voulez pas
- utiliser HTTPS.
- @item @code{ssl-certificate-key} (par défaut : @code{#f})
- Où trouver la clef privée pour les connexions sécurisées. Indiquez
- @code{#f} si vous n'avez pas de clef et que vous ne voulez pas utiliser
- HTTPS.
- @item @code{server-tokens?} (par défaut : @code{#f})
- Indique si le serveur devrait ajouter sa configuration dans les réponses.
- @item @code{raw-content} (par défaut : @code{'()})
- Une liste de lignes brutes à ajouter dans le bloc serveur.
- @end table
- @end deftp
- @deftp {Type de données} nginx-upstream-configuration
- Type de données représentant la configuration d'un bloc @code{upstream}
- nginx. Ce type a les paramètres suivants :
- @table @asis
- @item @code{name}
- Nome de ces groupe de serveurs.
- @item @code{serveurs}
- Specify the addresses of the servers in the group. The address can be
- specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name (e.g.@:
- @samp{backend1.example.com}) or a path to a UNIX socket using the prefix
- @samp{unix:}. For addresses using an IP address or domain name, the default
- port is 80, and a different port can be specified explicitly.
- @end table
- @end deftp
- @deftp {Type de données} nginx-location-configuration
- Type de données représentant la configuration d'un bloc @code{location}
- nginx. Ce type a les paramètres suivants :
- @table @asis
- @item @code{uri}
- URI qui correspond à ce bloc.
- @anchor{nginx-location-configuration body}
- @item @code{body}
- Corps du block location, spécifié comme une liste de chaînes de caractères.
- Cela peut contenir de nombreuses directives de configuration. PAr exemple,
- pour passer des requêtes à un groupe de serveurs amont définis dans un bloc
- @code{nginx-upstream-configuration}, la directive suivante peut être
- spécifiée dans le corps : @samp{(list "proxy_pass http://upstream-name;")}.
- @end table
- @end deftp
- @deftp {Type de données} nginx-named-location-configuration
- Type de données représentant la configuration d'un bloc location nginx
- nommé. Les blocs location nommés sont utilisé les redirections de requêtes
- et pas pour le traitement des requêtes normales. Ce type a les paramètres
- suivants :
- @table @asis
- @item @code{name}
- Nom pour identifier ce bloc location.
- @item @code{body}
- @xref{nginx-location-configuration body}, comme le corps d'un bloc location
- nommé peut être utilisé de la même manière que
- @code{nginx-location-configuration body}. Une restriction est que le corps
- d'un bloc location nommé ne peut pas contenir de bloc location.
- @end table
- @end deftp
- @subsubheading Cache Varnish
- @cindex Varnish
- Varnish est un serveur de cache rapide qui se trouve entre les applications
- web et les utilisateurs. Il sert de serveur mandataire pour les requêtes
- des clients et met les URL accédées en cache pour que plusieurs requêtes à
- la même ressource ne crée qu'une requête au moteur.
- @defvr {Variable Scheme} varnish-service-type
- Type de service pour le démon Varnish.
- @end defvr
- @deftp {Type de données} varnish-configuration
- Type de données représentant la configuration du service @code{varnish}. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{package} (par défaut : @code{varnish})
- Le paquet Varnish à utiliser.
- @item @code{name} (par défaut : @code{"default"})
- Un nom pour cet instance de Varnish. Varnish va créer un répertoire dans
- @file{/var/varnish/} avec ce nom et gardera des fichiers temporaires à cet
- endroit. Si le nom commence par une barre oblique, il est interprété comme
- un nom de répertoire absolu.
- Pass the @code{-n} argument to other Varnish programs to connect to the
- named instance, e.g.@: @command{varnishncsa -n default}.
- @item @code{backend} (par défaut : @code{"localhost:8080"})
- Le moteur à utiliser. Cette option n'a pas d'effet si @code{vcl} est vrai.
- @item @code{vcl} (par défaut : #f)
- Le programme @dfn{VCL} (Varnish Configuration Language) à lancer. Si la
- valeur est @code{#f}, Varnsh servira de mandataire pour @code{backend} avec
- la configuration par défaut. Sinon, ce doit être un objet simili-fichier
- avec une syntaxe VCL valide.
- @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
- Par exemple, pour créer un miroir de @url{http://www.gnu.org,www.gnu.org}
- avec VCL vous pouvez faire quelque chose comme cela :
- @example
- (define %gnu-mirror
- (plain-file
- "gnu.vcl"
- "vcl 4.1;
- backend gnu @{ .host = "www.gnu.org"; @}"))
- (operating-system
- ...
- (services (cons (service varnish-service-type
- (varnish-configuration
- (listen '(":80"))
- (vcl %gnu-mirror)))
- %base-services)))
- @end example
- On peut inspecter la configuration d'une instance Varnish actuellement
- lancée en utilisant le programme @command{varnishadm}.
- Consultez le @url{https://varnish-cache.org/docs/,guide utilisateur de
- varnish} et le @url{https://book.varnish-software.com/4.0/,livre varnish}
- pour une documentation complète sur Varnish et son langage de configuration.
- @item @code{listen} (par défaut : @code{'("localhost:80")})
- Liste des adresses sur lesquelles écoute Varnish.
- @item @code{storage} (par défaut : @code{'("malloc,128m")})
- Liste de moteurs de stockage qui seront disponibles en VCL.
- @item @code{parameters} (par défaut : @code{'()})
- Liste des paramètres à l'exécution de la forme @code{'(("parameter"
- . "value"))}.
- @item @code{extra-options} (par défaut : @code{'()})
- Arguments supplémentaires à passer au processus @command{varnishd}.
- @end table
- @end deftp
- @subsubheading FastCGI
- @cindex fastcgi
- @cindex fcgiwrap
- FastCGI est une interface entre le frontal et le moteur d'un service web.
- C'est un dispositif quelque peu désué ; les nouveaux services devraient
- généralement juste parler HTTP entre le frontal et le moteur. Cependant il
- y a un certain nombre de services de moteurs comme PHP ou l'accès aux dépôts
- Git optimisé en HTTP qui utilisent FastCGI, donc nous le supportons dans
- Guix.
- Pour utiliser FastCGI, vous configurez le serveur web frontal (p.@: ex.@:
- nginx) pour envoyer un sous-ensemble de ses requêtes au moteur fastcgi, qui
- écoute sur un socket UNIX ou TCP local. Il y a un programme @code{fcgiwrap}
- intermédiaire qui se trouve entre le processus du moteur et le serveur web.
- Le frontal indique quel moteur lancer, en passant cette information au
- processus @code{fcgiwrap}.
- @defvr {Variable Scheme} fcgiwrap-service-type
- Un type de service pour le mandataire FastCGI @code{fcgiwrap}.
- @end defvr
- @deftp {Type de données} fcgiwrap-configuration
- Type de données représentant la configuration d'un service @code{fcgiwrap}.
- Ce type a les paramètres suivants :
- @table @asis
- @item @code{package} (par défaut : @code{fcgiwrap})
- Le paquet fcgiwrap à utiliser.
- @item @code{socket} (par défaut : @code{tcp:127.0.0.1:9000})
- Le socket sur lequel le processus @code{fcgiwrap} écoute, en tant que chaîne
- de caractères. Les valeurs valides de @var{socket} sont
- @code{unix:@var{/path/to/unix/socket}},
- @code{tcp:@var{dot.ted.qu.ad}:@var{port}} et
- @code{tcp6:[@var{ipv6_addr}]:port}.
- @item @code{user} (par défaut : @code{fcgiwrap})
- @itemx @code{group} (par défaut : @code{fcgiwrap})
- Les noms de l'utilisateur et du groupe, en tant que chaînes de caractères,
- sous lesquels lancer le processus @code{fcgiwrap}. Le service
- @code{fastcgi} s'assurera que si l'utilisateur demande les noms
- d'utilisateurs et de groupes @code{fcgiwrap} l'utilisateur et le groupe
- correspondant seront présents sur le système.
- Il est possible de configurer un service web soutenu par FastCGI pour passer
- les informations d'authentification HTTP depuis le frontal jusqu'au moteur,
- et de permettre à @code{fcgiwrap} dans lancer le processus de moteur avec
- l'utilisateur correspondant. Pour activer cette fonctionnalité sur le
- moteur, lancez @code{fcgiwrap} en tant qu'utilisateur et groupe
- @code{root}. Remarquez que cette fonctionnalité doit aussi être configurée
- sur le frontal.
- @end table
- @end deftp
- @cindex php-fpm
- PHP-FPM (FastCGI Process Manager) est une implémentation FastCGI de PHP
- alternative avec quelques fonctionnalités supplémentaires utiles pour les
- sites de toutes tailles.
- Ces fonctionnalités comprennent :
- @itemize @bullet
- @item La création de processus adaptative
- @item Des statistiques de base (comme le mod_status d'Apache)
- @item La gestion des processus avancée avec arrêt et démarrage sans heurts
- @item La possibilité de démarrer des processus de travail avec différents uid/gid/chroot/environnement
- et différents php.ini (à la place de safe_mode)
- @item L'enregistrement des journaux sur stdout et stderr
- @item Le redémarrage d'urgence dans le cas de la destruction accidentelle du cache des opcodes
- @item Le support des téléversements accélérés
- @item Le support de « showlog »
- @item Des améliorations à FastCGI, comme fastcgi_finish_request() -
- une fonction spéciale pour terminer la requête et nettoyer toutes les
- données tout en continuant à faire d'autres choses qui prennent du temps
- (conversion vidéo, gestion des stats, etc…).
- @end itemize
- ...@: and much more.
- @defvr {Variable Scheme} php-fpm-service-type
- Un type de service pour @code{php-fpm}.
- @end defvr
- @deftp {Type de données} php-fpm-configuration
- Type de données pour la configuration du service php-fpm.
- @table @asis
- @item @code{php} (par défaut : @code{php})
- Le paquet php à utiliser.
- @item @code{socket} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
- L'adresse sur laquelle accepter les requêts FastCGI. Les syntaxes valides
- sont :
- @table @asis
- @item @code{"ip.add.re.ss:port"}
- Écoute sur un socket TCP sur l'adresse spécifiée sur un port spécifié.
- @item @code{"port"}
- Écoute sur un socket TCP sur toutes les adresse sur un port spécifique.
- @item @code{"/path/to/unix/socket"}
- Écoute sur un socket unix.
- @end table
- @item @code{user} (par défaut : @code{php-fpm})
- Utilisateur à qui appartiendra le processus de travail de php.
- @item @code{group} (par défaut : @code{php-fpm})
- Groupe du processus de travail.
- @item @code{socket-user} (par défaut : @code{php-fpm})
- Utilisateur qui peut parler au socket php-fpm.
- @item @code{socket-group} (par défaut : @code{php-fpm})
- Groupe qui peut parler au socket php-fpm.
- @item @code{pid-file} (par défaut : @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
- Le pid de php-fpm est écrit dans ce fichier une fois que le service a
- démarré.
- @item @code{log-file} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
- Fichier de journal pour le processus maître de php-fpm.
- @item @code{process-manager} (par défaut : @code{(php-fpm-dynamic-process-manager-configuration)})
- Configuration détaillée pour le gestionnaire de processus de php-fpm. Il
- doit s'agir soit de :
- @table @asis
- @item @code{<php-fpm-dynamic-process-manager-configuration>,}
- @item @code{<php-fpm-static-process-manager-configuration> ou}
- @item @code{<php-fpm-on-demand-process-manager-configuration>}
- @end table
- @item @code{display-errors} (par défaut : @code{#f})
- Détermine si les erreurs et les avertissements php doivent être envoyés aux
- clients et affichés dans leur navigateur. Cela est utile pour un
- développement php local, mais un risque pour la sécurité pour les sites
- publics, comme les messages d'erreur peuvent révéler des mots de passes et
- des données personnelles.
- @item @code{workers-logfile} (par défaut : @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
- Ce fichier enregistrera la sortie @code{stderr} des processus de travail de
- php. On peut indiquer @code{#f} pour désactiver la journalisation.
- @item @code{file} (par défaut : @code{#f})
- Une version alternative de la configuration complète. Vous pouvez utiliser
- la fonction @code{mixed-text-file} ou un chemin de fichier absolu.
- @end table
- @end deftp
- @deftp {Type de données} php-fpm-dynamic-process-manager-configuration
- Type de données pour le gestionnaire de processus @code{dynamic} de
- php-fpm. Avec le gestionnaire de processus @code{dynamic}, des processus de
- travail de secours sont gardés en fonction des limites configurées.
- @table @asis
- @item @code{max-children} (par défaut : @code{5})
- Nombre maximum de processus de travail.
- @item @code{start-servers} (par défaut : @code{2})
- Nombre de processus de travail au démarrage.
- @item @code{min-spare-servers} (par défaut : @code{1})
- Nombre de processus de travail de secours minimum qui doivent rester à
- disposition.
- @item @code{max-spare-servers} (par défaut : @code{3})
- Nombre maximum de processus de travail de secours qui peuvent rester à
- disposition.
- @end table
- @end deftp
- @deftp {Type de données} php-fpm-static-process-manager-configuration
- Type de données pour le gestionnaire de processus @code{static} de php-fpm.
- Avec le gestionnaire de processus @code{static}, un nombre constant de
- processus de travail est créé.
- @table @asis
- @item @code{max-children} (par défaut : @code{5})
- Nombre maximum de processus de travail.
- @end table
- @end deftp
- @deftp {Type de données} php-fpm-on-demand-process-manager-configuration
- Type de données pour le gestionnaire de processus @code{on-demand} de
- php-fpm. Avec le gestionnaire de processus @code{on-demand}, les processus
- de travail ne sont créés que lorsque les requêtes arrivent.
- @table @asis
- @item @code{max-children} (par défaut : @code{5})
- Nombre maximum de processus de travail.
- @item @code{process-idle-timeout} (par défaut : @code{10})
- La durée en secondes après laquelle un processus sans requête sera tué.
- @end table
- @end deftp
- @deffn {Procédure Scheme} nginx-php-fpm-location @
- [#:nginx-package nginx] @
- [socket (string-append "/var/run/php" @
- (version-major (package-version php)) @
- "-fpm.sock")]
- Une fonction d'aide pour ajouter rapidement php à un
- @code{nginx-server-configuration}.
- @end deffn
- Une configuration simple de services pour php ressemble à ceci :
- @example
- (services (cons* (service dhcp-client-service-type)
- (service php-fpm-service-type)
- (service nginx-service-type
- (nginx-server-configuration
- (server-name '("example.com"))
- (root "/srv/http/")
- (locations
- (list (nginx-php-location)))
- (https-port #f)
- (ssl-certificate #f)
- (ssl-certificate-key #f)))
- %base-services))
- @end example
- @cindex cat-avatar-generator
- Le générateur d'avatar de chat est un simple service pour démontrer
- l'utilisation de php-fpm dans @code{Nginx}. Il permet de générer des
- avatars de chats à partir d'une graine, par exemple le hash de l'adresse de
- courriel d'un utilisateur.
- @deffn {Procédure Scheme} cat-avatar-generator-serice @
- [#:cache-dir "/var/cache/cat-avatar-generator"] @
- [#:package cat-avatar-generator] @
- [#:configuration (nginx-server-configuration)]
- Renvoie un nginx-server-configuration qui hérite de @code{configuration}.
- Il étend la configuration nginx pour ajouter un bloc de serveur qui sert
- @code{package}, une version de cat-avatar-generator. Pendant l'exécution,
- cat-avatar-generator pourra utiliser @code{cache-dir} comme répertoire de
- cache.
- @end deffn
- Une configuration simple de cat-avatar-generator ressemble à ceci :
- @example
- (services (cons* (cat-avatar-generator-service
- #:configuration
- (nginx-server-configuration
- (server-name '("example.com"))))
- ...
- %base-services))
- @end example
- @subsubheading Hpcguix-web
- @cindex hpcguix-web
- Le programme @uref{hpcguix-web,
- https://github.com/UMCUGenetics/hpcguix-web/} est une interface web
- personnalisable pour naviguer dans les paquets Guix, initialement conçue
- pour les utilisateurs des grappes de calcul de haute performance (HPC).
- @defvr {Variable Scheme} hpcguix-web-service-type
- Le type de service pour @code{hpcguix-web}.
- @end defvr
- @deftp {Type de données} hpcguix-web-configuration
- Type de données pour la configuration du service hpcguix-web.
- @table @asis
- @item @code{specs}
- Une gexp (@pxref{G-Expressions}) spécifiant la configuration du service
- hpcguix-web. Les éléments principaux disponibles dans cette spec sont :
- @table @asis
- @item @code{title-prefix} (par défaut : @code{"hpcguix | "})
- Le préfixe du titre des pages.
- @item @code{guix-command} (par défaut : @code{"guix"})
- La commande @command{guix}
- @item @code{package-filter-proc} (par défaut : @code{(const #t)})
- Une procédure qui spécifie comment filtrer les paquets qui seront affichés.
- @item @code{package-page-extension-proc} (par défaut : @code{(const '())})
- Paquet d'extensions pour @code{hpcguix-web}.
- @item @code{menu} (par défaut : @code{'()})
- Entrée supplémentaire dans la page @code{menu}.
- @item @code{channels} (par défaut : @code{%default-channels})
- Liste des canaux depuis lesquels la liste des paquets est construite
- (@pxref{Canaux}).
- @item @code{package-list-expiration} (par défaut : @code{(* 12 3600)})
- Le temps d'expiration, en secondes, après lequel la liste des paquets est
- reconstruite depuis les dernières instance des canaux donnés.
- @end table
- Voir le dépôt hpcguix-web pour un
- @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
- exemple complet}
- @item @code{package} (par défaut : @code{hpcguix-web})
- Le paquet hpcguix-web à utiliser.
- @end table
- @end deftp
- Une déclaration de service hpcguix-web typique ressemble à cela :
- @example
- (service hpcguix-web-service-type
- (hpcguix-web-configuration
- (specs
- #~(define site-config
- (hpcweb-configuration
- (title-prefix "Guix-HPC - ")
- (menu '(("/about" "ABOUT"))))))))
- @end example
- @quotation Remarque
- Le service hpcguix-web met régulièrement à jour la liste des paquets qu'il
- publie en récupérant les canaux depuis Git. Pour cela, il doit accéder aux
- certificats X.509 pour qu'il puisse authentifier les serveurs Git quand il
- communique en HTTPS, et il suppose que @file{/etc/ssl/certs} contient ces
- certificats.
- Ainsi, assurez-vous d'ajouter @code{nss-certs} ou un autre paquet de
- certificats dans le champ @code{packages} de votre configuration.
- @ref{Certificats X.509} pour plus d'informations sur les certificats X.509.
- @end quotation
- @node Services de certificats
- @subsubsection Services de certificats
- @cindex Web
- @cindex HTTP, HTTPS
- @cindex Let's Encrypt
- @cindex certificats TLS
- Le module @code{(gnu services certbot)} fournit un service qui récupère
- automatiquement un certificat TLS valide de l'autorité de certification
- Let's Encrypt. Ces certificats peuvent ensuite être utilisés pour servir du
- contenu de manière sécurisée sur HTTPS et d'autres protocoles basés sur TLS,
- en sachant que le client sera capable de vérifier l'authenticité du serveur.
- @url{https://letsencrypt.org/, Let's Encrypt} fournit l'outil @code{certbot}
- pour automatiser le processus de certification. Cet outil génère d'abord un
- clef sur le serveur de manière sécurisée. Ensuite il demande à l'autorité
- de certification Let's Encrypt de signer la clef. La CA vérifie que la
- requête provient de l'hôte en question en utilisant un protocole de
- défi-réponse, ce qui requiert que le serveur fournisse sa réponse par HTTP.
- Si ce protocole se passe sans encombre, la CA signe la clef et on obtient un
- certificat. Ce certificat est valide pour une durée limitée et donc, pour
- continuer à fournir des services en TLS, le serveur doit régulièrement
- demander à la CA de renouveler sa signature.
- The certbot service automates this process: the initial key generation, the
- initial certification request to the Let's Encrypt service, the web server
- challenge/response integration, writing the certificate to disk, the
- automated periodic renewals, and the deployment tasks associated with the
- renewal (e.g.@: reloading services, copying keys with different
- permissions).
- Certbot est lancé deux fois par jour, à une minute aléatoire dans l'heure.
- Il ne fera rien sauf si vos certificats doivent être renouvelés ou sont
- révoqués, mais le lancer régulièrement permettra à vos services de rester en
- ligne si Let's Encrypt décide de révoquer votre certificat.
- En utilisant ce service, vous acceptez le document « ACME Subscriber
- Agreement », qu'on peut trouver ici :
- @url{https://acme-v01.api.letsencrypt.org/directory}.
- @defvr {Variable Scheme} certbot-service-type
- Un type de service pour le client Let's Encrypt @code{certbot}. Sa valeur
- doit être un enregistrement @code{certbot-configuration} comme dans cet
- exemple :
- @example
- (define %nginx-deploy-hook
- (program-file
- "nginx-deploy-hook"
- #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
- (kill pid SIGHUP))))
- (service certbot-service-type
- (certbot-configuration
- (email "foo@@example.net")
- (certificates
- (list
- (certificate-configuration
- (domains '("example.net" "www.example.net"))
- (deploy-hook %nginx-deploy-hook))
- (certificate-configuration
- (domains '("bar.example.net")))))))
- @end example
- Voir plus bas pour des détails sur @code{certbot-configuration}.
- @end defvr
- @deftp {Type de données} certbot-configuration
- Type données représentant la configuration du service @code{certbot}. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{package} (par défaut : @code{certbot})
- Le paquet certbot à utiliser.
- @item @code{webroot} (par défaut : @code{/var/www})
- Le répertoire depuis lequel servir les fichiers du défi/réponse de Let's
- Encrypt.
- @item @code{certificates} (par défaut : @code{()})
- Une liste de @code{certificates-configuration} pour lesquels générer des
- certificats et demander des signatures. Chaque certificat a un @code{name}
- et plusieurs @code{domains}.
- @item @code{email}
- Courriel obligatoire utilisé pour la création de compte, le contact en cas
- de problème et des notifications importantes sur le compte.
- @item @code{rsa-key-size} (par défaut : @code{2048})
- Taille de la clef RSA.
- @item @code{default-location} (par défaut : @i{voir plus bas})
- Le @code{nginx-location-configuration} par défaut. Come @code{certbot} doit
- pouvoir servir les défis et les réponses, il doit être capable de lancer un
- serveur web. Cela se fait en étendant le service web @code{nginx} avec un
- @code{nginx-server-configuration} qui écoute sur les @var{domains} sur le
- port 80 et qui a un @code{nginx-location-configuration} pour le chemin
- @code{/.well-known/} utilisé par Let's Encrypt. @xref{Services web} pour
- plus d'information sur les types de données de la configuration de nginx.
- Les requêtes vers d'autres URL correspondra à @code{default-location}, qui,
- s'il est présent, sera ajout é à tous les @code{nginx-server-configuration}.
- Par défaut, le @code{default-location} sera une redirection de
- @code{http://@var{domain}/…} vers @code{https://@var{domain}/…}, en vous
- laissant définir ce que vous voulez servir sur votre site en @code{https}.
- Passez @code{#f} pour ne pas utiliser de location par défaut.
- @end table
- @end deftp
- @deftp {Type de données} certificate-configuration
- Type de données représentant la configuration d'un certificat. Ce type a
- les paramètres suivants :
- @table @asis
- @item @code{name} (par défaut : @i{voir plus bas})
- Ce nom est utilisé par Certbot pour ses tâches quotidiennes et dans les
- chemins de fichiers ; il n'affecte pas le contenu des certificats
- eux-mêmes. Pour voir les noms des certificats, lancez @code{certbot
- certificates}.
- Sa valeur par défaut est le premier domaine spécifié.
- @item @code{domains} (par défaut : @code{()})
- Le premier domaine spécifié sera le CN du sujet du certificat, et tous les
- domaines seront les noms alternatifs du sujet dans le certificat.
- @item @code{deploy-hook} (par défaut : @code{#f})
- Commande à lancer dans un shell une fois par certificat récupéré avec
- succès. Pour cette commande, la variable @code{$RENEWED_LINEAGE} pointera
- sur le sous-répertoire live (par exemple,
- @samp{"/etc/letsencrypt/live/example.com"}) contenant le nouveau certificat
- et la clef ; la variable @code{$RENEWED_DOMAINS} contiendra les noms de
- domaines séparés par des espaces (par exemple @samp{"example.com
- www.example.com"}).
- @end table
- @end deftp
- Pour chaque @code{certificate-configuration}, le certificat est sauvegardé
- dans @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} et la clef est
- sauvegardée dans @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
- @node Services DNS
- @subsubsection Services DNS
- @cindex DNS (domain name system)
- @cindex domain name system (DNS)
- Le module @code{(gnu services dns)} fournit des services liés au
- @dfn{système de noms de domaines} (DNS). Il fournit un service de serveur
- pour héberger un serveur DNS @emph{faisant autorité} pour plusieurs zones,
- en esclave ou en maître. Ce service utilise @uref{https://www.knot-dns.cz/,
- Knot DNS}. Il fournit aussi un service de cache et de renvoie DNS pour le
- LAN, qui utilise @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html,
- dnsmasq}.
- @subsubheading Service Knot
- Voici un exemple de configuration pour un serveur faisant autorité sur deux
- zone, un maître et un esclave :
- @lisp
- (define-zone-entries example.org.zone
- ;; Name TTL Class Type Data
- ("@@" "" "IN" "A" "127.0.0.1")
- ("@@" "" "IN" "NS" "ns")
- ("ns" "" "IN" "A" "127.0.0.1"))
- (define master-zone
- (knot-zone-configuration
- (domain "example.org")
- (zone (zone-file
- (origin "example.org")
- (entries example.org.zone)))))
- (define slave-zone
- (knot-zone-configuration
- (domain "plop.org")
- (dnssec-policy "default")
- (master (list "plop-master"))))
- (define plop-master
- (knot-remote-configuration
- (id "plop-master")
- (address (list "208.76.58.171"))))
- (operating-system
- ;; ...
- (services (cons* (service knot-service-type
- (knot-configuration
- (remotes (list plop-master))
- (zones (list master-zone slave-zone))))
- ;; ...
- %base-services)))
- @end lisp
- @deffn {Variable Scheme} knot-service-type
- C'est le type pour le serveur DNS Knot.
- Knot DNS est un serveur DNS faisant autorité, ce qui signifie qu'il peut
- servir plusieurs zones, c'est-à-dire des noms de domaines que vous achetez à
- un registrar. Ce serveur n'est pas un résolveur, ce qui signifie qu'il ne
- peut pas résoudre les noms pour lesquels il ne fait pas autorité. Ce
- serveur peut être configuré pour servir des zones comme un serveur maître ou
- comme un serveur esclave, en fonction des zones. Les zones esclaves
- récupèrent leurs données des maîtres, et seront servies comme faisant
- autorité. Du point de vue d'un résolveur, il n'y a pas de différence entre
- un maître et un esclave@footnote{NdT : Voir la conférence en Français de
- Stéphane Bortzmeyer pour en apprendre plus sur le DNS :
- @url{https://iletaitunefoisinternet.fr/dns-bortzmeyer/index.html}}.
- Les types de données suivants sont utilisés pour configurer le serveur DNS
- Knot :
- @end deffn
- @deftp {Type de données} knot-key-configuration
- Type de données représentant une clef. Ce type a les paramètres suivants :
- @table @asis
- @item @code{id} (par défaut : @code{""})
- Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
- clef. Les ID doivent être uniques et non vides.
- @item @code{algorithm} (par défaut : @code{#f})
- L'algorithme à utiliser. Choisissez entre @code{#f}, @code{'hmac-md5},
- @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
- @code{'hmac-sha384} et @code{'hmac-sha512}.
- @item @code{secret} (par défaut : @code{""})
- La clef secrète elle-même.
- @end table
- @end deftp
- @deftp {Type de données} knot-acl-configuration
- Type de données représentant une configuration de liste de contrôle d'accès
- (ACL). Ce type a les paramètres suivants :
- @table @asis
- @item @code{id} (par défaut : @code{""})
- Un identifiant pour d'autres champs de configuration qui se réfèrent à cette
- clef. Les ID doivent être uniques et non vides.
- @item @code{address} (par défaut : @code{'()})
- Une liste ordonnée d'adresses IP, de sous-réseaux ou d'intervalles de
- réseaux représentés par des chaînes de caractères. La requête doit
- correspondre à l'une d'entre elles. La valeur vide signifie que l'adresse
- n'a pas besoin de correspondre.
- @item @code{key} (par défaut : @code{'()})
- Une liste ordonnées de références à des clefs représentés par des chaînes.
- La chaîne doit correspondre à un ID définie dans un
- @code{knot-key-configuration}. Aucune clef signifie qu'une clef n'est pas
- nécessaire pour correspondre à l'ACL.
- @item @code{action} (par défaut : @code{'()})
- Une liste ordonnée d'actions permises ou interdites par cet ACL. Les
- valeurs possibles sont une liste de zéro ou plus d'éléments entre
- @code{'transfer}, @code{'notify} et @code{'update}.
- @item @code{deny?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, l'ACL définie des restrictions. Les actions
- listées sont interdites. Lorsque la valeur est fausse, les actions listées
- sont autorisées.
- @end table
- @end deftp
- @deftp {Type de données} zone-entry
- Type de données représentant une entrée dans un fichier de zone. Ce type a
- les paramètres suivants :
- @table @asis
- @item @code{name} (par défaut : @code{"@@"})
- Le nom de l'enregistrement. @code{"@@"} se réfère à l'origine de la zone.
- Les noms sont relatifs à l'origine de la zone. Par exemple, dans la zone
- @code{example.org}, @code{"ns.example.org"} se réfère en fait à
- @code{ns.example.org.example.org}. Les noms qui finissent par un point sont
- absolus, ce qui signifie que @code{"ns.example.org."} se réfère bien à
- @code{ns.example.org}.
- @item @code{ttl} (par défaut : @code{""})
- La durée de vie (TTL) de cet enregistrement. S'il n'est pas indiqué, le TTL
- par défaut est utilisé.
- @item @code{class} (par défaut : @code{"IN"})
- La classe de l'enregistrement. Knot ne supporte actuellement que
- @code{"IN"} et partiellement @code{"CH"}.
- @item @code{type} (par défaut : @code{"A"})
- Le type d'enregistrement. Les types usuels sont A (une adresse IPv4), NS
- (serveur de nom) et MX (serveur de courriel). Bien d'autres types sont
- définis.
- @item @code{data} (par défaut : @code{""})
- Les données contenues dans l'enregistrement. Par exemple une adresse IP
- associée à un enregistrement A, ou un nom de domaine associé à un
- enregistrement NS. Rappelez-vous que les noms de domaines sont relatifs à
- l'origine à moins qu'ils ne finissent par un point.
- @end table
- @end deftp
- @deftp {Type de données} zone-file
- Type données représentant le contenu d'un fichier de zone. Ce type a les
- paramètres suivants :
- @table @asis
- @item @code{entries} (par défaut : @code{'()})
- La liste des entrées. On s'occupe de l'enregistrement SOA, donc vous n'avez
- pas besoin de l'ajouter dans la liste des entrées. Cette liste devrait
- contenir une entrée pour votre serveur DNS primaire faisant autorité. En
- plus d'utiliser une liste des entrées directement, vous pouvez utiliser
- @code{define-zone-entries} pour définir un objet contenant la liste des
- entrées plus facilement, que vous pouvez ensuite passer au champ
- @code{entries} de @code{zone-file}.
- @item @code{origin} (par défaut : @code{""})
- Le nom de votre zone. Ce paramètre ne peut pas être vide.
- @item @code{ns} (par défaut : @code{"ns"})
- Le domaine de votre serveur DNS primaire faisant autorité. Le nom est
- relatif à l'origine, à moins qu'il finisse par un point. Il est nécessaire
- que ce serveur DNS primaire corresponde à un enregistrement NS dans la zone
- et qu'il soit associé à une adresse IP dans la liste des entrées.
- @item @code{mail} (par défaut : @code{"hostmaster"})
- Une adresse de courriel pour vous contacter en tant que propriétaire de la
- zone. Cela se transforme en @code{<mail>@@<origin>}.
- @item @code{serial} (par défaut : @code{1})
- Le numéro de série de la zone. Comme c'est utilisé pour vérifier les
- changements à la fois par les esclaves et par les résolveurs, il est
- nécessaire qu'il ne décroisse @emph{jamais}. Incrémentez-le toujours quand
- vous faites un changement sur votre zone.
- @item @code{refresh} (par défaut : @code{(* 2 24 3600)})
- La fréquence à laquelle les esclaves demanderont un transfert de zone.
- Cette valeur est un nombre de secondes. On peut le calculer avec des
- multiplications ou avec @code{(string->duration)}.
- @item @code{retry} (par défaut : @code{(* 15 60)})
- La période après laquelle un esclave essaiera de contacter son maître
- lorsqu'il échoue à le faire la première fois.
- @item @code{expiry} (par défaut : @code{(* 14 24 3600)})
- TTL par défaut des enregistrements. Les enregistrements existants sont
- considérés corrects pour au moins cette durée. Après cette période, les
- résolveurs invalideront leur cache et vérifieront de nouveau qu'ils existent
- toujours.
- @item @code{nx} (par défaut : @code{3600})
- TTL par défaut des enregistrement inexistants. Ce TTL est habituellement
- court parce que vous voulez que vous nouveaux domaines soient disponibles
- pour tout le monde le plus rapidement possible.
- @end table
- @end deftp
- @deftp {Type de données} knot-remote-configuration
- Type de données représentant une configuration de serveurs distants. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{id} (par défaut : @code{""})
- Un identifiant pour que les autres champs de configuration se réfèrent à ce
- serveur distant. les ID doivent être uniques et non vides.
- @item @code{address} (par défaut : @code{'()})
- Une liste ordonnée d'adresses IP de destination. Ces adresses sont essayées
- en séquence. Un port facultatif peut être donné avec le séparateur @@. Par
- exemple @code{(list "1.2.3.4" "2.3.4.5@@53")}. Le port par défaut est le
- 53.
- @item @code{via} (par défaut : @code{'()})
- Une liste ordonnée d'adresses IP sources. Une liste vide fera choisir une
- IP source appropriée à Knot. Un port facultatif peut être donné avec le
- séparateur @@. La valeur par défaut est de choisir aléatoirement.
- @item @code{key} (par défaut : @code{#f})
- Une référence à une clef, c'est-à-dire une chaîne contenant l'identifiant
- d'une clef définie dans un champ @code{knot-key-configuration}.
- @end table
- @end deftp
- @deftp {Type de données} knot-keystore-configuration
- Type de données représentant une base de clefs pour garder les clefs
- dnssec. Ce type a les paramètres suivants :
- @table @asis
- @item @code{id} (par défaut : @code{""})
- L'id de cette base de clefs. Il ne doit pas être vide.
- @item @code{backend} (par défaut : @code{'pem})
- Le moteur de stockage des clefs. Cela peut être @code{'pem} ou
- @code{'pkcs11}.
- @item @code{config} (par défaut : @code{"/var/lib/knot/keys/keys"})
- La chaîne de configuration pour le moteur. Voici un exemple pour PKCS#11 :
- @code{"pkcs11:token=knot;pin-value=1234
- /gnu/store/.../lib/pkcs11/libsofthsm2.so"}. Pour le moteur pem, la chaîne
- représente un chemin dans le système de fichiers.
- @end table
- @end deftp
- @deftp {Type de données} knot-policy-configuration
- Type de données représentant une politique dnssec. Knot DNS est capable de
- signer automatiquement vos zones. Il peut soit générer et gérer vos clefs
- automatiquement ou utiliser des clefs que vous générez.
- Dnssec est habituellement implémenté avec deux clefs : une KSK (key signing
- key) qui est utilisé pour signer une seconde, la ZSK (zone signing key) qui
- est utilisée pour signer la zone. Pour pouvoir être de confiance, la KSK
- doit être présente dans la zone parente (normalement un domaine de haut
- niveau). Si votre registrar supporte dnssec, vous devrez leur envoyer le
- hash de votre KSK pour qu'il puisse ajouter un enregistrement DS dans la
- zone parente. Ce n'est pas automatique et vous devrez le faire à chaque
- fois que vous changerez votre KSK.
- La politique définie aussi la durée de vie des clefs. Habituellement, la
- ZSK peut être changée facilement et utilise des fonctions cryptographiques
- plus faibles (avec un paramètre plus faible) pour signer les enregistrements
- rapidement, donc elles sont changées très régulièrement. La KSK en revanche
- requiert une interaction manuelle avec le registrar, donc elle change moins
- souvent et utilise des paramètres plus robustes puisqu'elle ne signe qu'un
- seul enregistrement.
- Ce type a les paramètres suivants :
- @table @asis
- @item @code{id} (par défaut : @code{""})
- L'id de la politique. Il ne doit pas être vide.
- @item @code{keystore} (par défaut : @code{"default"})
- Une référence à une base de clefs, c'est-à-dire une chaîne contenant
- l'identifiant d'une base de clefs définie dans un champ
- @code{knot-keystore-configuration}. L'identifiant @code{"default"} signifie
- la base par défaut (une base de données kasp initialisée par ce service).
- @item @code{manual?} (par défaut : @code{#f})
- Indique si la clef est gérée manuellement ou automatiquement.
- @item @code{single-type-signing?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, utilise le schéma de signature Single-Type
- @item @code{algorithm} (par défaut : @code{"ecdsap256sha256"})
- Un algorithme de clef de signature et de signatures.
- @item @code{ksk-size} (par défaut : @code{256})
- La longueur de la KSK. Remarquez que cette valeur est correcte pour
- l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
- algorithmes.
- @item @code{zsk-size} (par défaut : @code{256})
- La longueur de la ZSK. Remarquez que cette valeur est correcte pour
- l'algorithme par défaut, mais ne serait pas sécurisée pour d'autres
- algorithmes.
- @item @code{dnskey-ttl} (par défaut : @code{'default})
- La valeur du TTL pour les enregistrements DNSKEY ajoutés au sommet de la
- zone. La valeur spéciale @code{'default} signifie la même valeur que le TTL
- du SOA de la zone.
- @item @code{zsk-lifetime} (par défaut : @code{(* 30 24 3600)})
- La période entre la publication d'une ZSK et l'initialisation d'un nouveau
- changement.
- @item @code{propagation-delay} (par défaut : @code{(* 24 3600)})
- Un délai supplémentaire pour chaque étape du changement. Cette valeur
- devrait être assez grande pour couvrir le temps de propagation des données
- entre le serveur primaire et tous les secondaires.
- @item @code{rrsig-lifetime} (par défaut : @code{(* 14 24 3600)})
- Une période de validité des nouvelles signatures.
- @item @code{rrsig-refresh} (par défaut : @code{(* 7 24 3600)})
- Une période qui indique combien de temps avant l'expiration d'une signature
- elle sera rafraîchie.
- @item @code{nsec3?} (par défaut : @code{#f})
- Lorsque la valeur est @code{#t}, on utilisera NSEC3 au lien de NSEC.
- @item @code{nsec3-iterations} (par défaut : @code{5})
- Le nombre de fois supplémentaires que le hash est effectué.
- @item @code{nsec3-salt-length} (par défaut : @code{8})
- La longueur du champ de sel en octets, ajouté au nom du propriétaire avant
- de hasher.
- @item @code{nsec3-salt-lifetime} (par défaut : @code{(* 30 24 3600)})
- La période de validité des nouveaux champs sel.
- @end table
- @end deftp
- @deftp {Type de données} knot-zone-configuration
- Type de données représentant la zone servie par Knot. ce type a les
- paramètres suivants :
- @table @asis
- @item @code{domain} (par défaut : @code{""})
- Le domaine servi par cette configuration. Il ne doit pas être vide.
- @item @code{file} (par défaut : @code{""})
- Le fichier où la zone est sauvegardée. Ce paramètre est ignoré pour les
- zones maîtres. La valeur vide signifie l'emplacement par défaut qui dépend
- du nom de domaine.
- @item @code{zone} (par défaut : @code{(zone-file)})
- Le contenu du fichier de zone. Ce paramètre est ignoré par les zones
- esclaves. Il doit contenir un enregistrement zone-file.
- @item @code{master} (par défaut : @code{'()})
- Une liste des serveurs distants maîtres. Lorsque la liste est vide, cette
- zone est un maître. Lorsque la valeur est indiquée, cette zone est un
- esclave. C'est al liste des identifiants des serveurs distants.
- @item @code{ddns-master} (par défaut : @code{#f})
- Le maître principal. Lorsque la valeur est vide, la valeur par défaut est
- le premier maître de la liste des maîtres.
- @item @code{notify} (par défaut : @code{'()})
- Une liste d'identifiants de groupe de serveurs esclaves.
- @item @code{acl} (par défaut : @code{'()})
- Une liste d'identifiants d'ACL.
- @item @code{semantic-checks?} (par défaut : @code{#f})
- Lorsque la valeur est indiquée, cela ajoute plus de vérifications
- sémantiques à la zone.
- @item @code{disable-any?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, cela interdit les requêtes de type ANY.
- @item @code{zonefile-sync} (par défaut : @code{0})
- Le délai entre une modification en mémoire et sur le disque. 0 signifie une
- synchronisation immédiate.
- @item @code{serial-policy} (par défaut : @code{'increment})
- Une politique entre @code{'increment} et @code{'unixtime}.
- @end table
- @end deftp
- @deftp {Type de données} knot-configuration
- Type de donées représentant la configuration de Knot. Ce type a les
- paramètres suivants :
- @table @asis
- @item @code{knot} (par défaut : @code{knot})
- Le paquet Knot.
- @item @code{run-directory} (par défaut : @code{"/var/run/knot"})
- Le répertoire de travail. Ce répertoire sera utilisé pour le fichier pid et
- les sockets.
- @item @code{listen-v4} (par défaut : @code{"0.0.0.0"})
- Une adresse IP sur laquelle écouter.
- @item @code{listen-v6} (par défaut : @code{"::"})
- Une adresse IP sur laquelle écouter.
- @item @code{listen-port} (par défaut : @code{53})
- Un port sur lequel écouter.
- @item @code{keys} (par défaut : @code{'()})
- La liste des knot-key-configuration utilisés par cette configuration.
- @item @code{acls} (par défaut : @code{'()})
- La liste des knot-acl-configuration utilisés par cette configuration.
- @item @code{remotes} (par défaut : @code{'()})
- La liste des knot-remote-configuration utilisés par cette configuration.
- @item @code{zones} (par défaut : @code{'()})
- La liste des knot-zone-configuration utilisés par cette configuration.
- @end table
- @end deftp
- @subsubheading Services Dnsmasq
- @deffn {Variable Scheme} dnsmasq-service-type
- C'est le type du service dnsmasq, dont la valeur devrait être un objet
- @code{dnsmasq-configuration} comme dans cet exemple :
- @example
- (service dnsmasq-service-type
- (dnsmasq-configuration
- (no-resolv? #t)
- (servers '("192.168.1.1"))))
- @end example
- @end deffn
- @deftp {Type de données} dnsmasq-configuration
- Type de données qui représente la configuration de dnsmasq.
- @table @asis
- @item @code{package} (par défaut : @var{dnsmasq})
- L'objet de paquet du serveur dnsmasq.
- @item @code{no-hosts?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, ne pas lire les noms d'hôte dans /etc/hosts.
- @item @code{port} (par défaut : @code{53})
- Le port sur lequel écouter. Le mettre à zéro désactive complètement les
- réponses DNS, ce qui ne laisse que les fonctions DHCP et TFTP.
- @item @code{local-service?} (par défaut : @code{#t})
- Accepte les requêtes DNS seulement des hôtes dont les adresses sont sur le
- sous-réseau local, c.-à-d.@: sur un sous-réseau pour lequel une interface
- existe sur le serveur.
- @item @code{listen-addresses} (par défaut : @code{'()})
- Écoute sur le adresses IP données.
- @item @code{resolv-file} (par défaut : @code{"/etc/resolv.conf"})
- Le fichier où lire l'adresse IP des serveurs de noms en amont.
- @item @code{no-resolv?} (par défaut : @code{#f})
- Lorsque la valeur est vraie, ne pas lire @var{resolv-file}.
- @item @code{servers} (par défaut : @code{'()})
- Spécifiez l'adresse IP des serveurs en amont directement.
- @item @code{cache-size} (par défaut : @code{150})
- Indique la taille du cache de dnsmasq. Indiquer 0 désactive le cache.
- @item @code{negative-cache?} (par défaut : @code{#t})
- Lorsque la valeur est fausse, désactive le cache des réponses négatives.
- @end table
- @end deftp
- @subsubheading Service ddclient
- @cindex ddclient
- Le srevice ddclient décrit plus bas lance le démon ddclient, qui prend en
- charge la mise à jour automatique des entrées DNS pour les fournisseurs de
- service comme @uref{https://dyn.com/dns/, Dyn}.
- L'exemple suivant montre comment instantier le service avec sa configuration
- par défaut :
- @example
- (service ddclient-service-type)
- @end example
- Remarquez que ddclient a besoin d'accéder à des identifiants stockés dans un
- @dfn{fichier de secrets}, par défaut @file{/etc/ddclient/secrets} (voir
- @code{secret-file} plus bas). On s'attend à ce que vous créiez ce fichier
- manuellement, de manière externe à guix (vous @emph{pourriez} ajouter ce
- fichier dans une partie de votre configuration, par exemple avec
- @code{plain-file}, mais il serait lisible pour tout le monde via
- @file{/gnu/store}). Vois les exemples dans le répertoire
- @file{share/ddclient} du paquet @code{ddclient}.
- @c %start of fragment
- Les champs de @code{ddclient-configuration} disponibles sont :
- @deftypevr {paramètre de @code{ddclient-configuration}} package ddclient
- Le paquet ddclient.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} integer daemon
- La période après laquelle ddclient réessaiera de vérifier l'IP et le nom de
- domaine.
- La valeur par défaut est @samp{300}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} boolean syslog
- Utiliser syslog pour la sortie.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} string mail
- Courriel de l'utilisateur.
- La valeur par défaut est @samp{"root"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} string mail-failure
- Courriel de l'utilisateur pour les échecs.
- La valeur par défaut est @samp{"root"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} string pid
- Le fichier de PID de ddclient.
- La valeur par défaut est @samp{"/var/run/ddclient/ddclient.pid"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} boolean ssl
- Activer le support de SSL.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} string user
- Spécifie le nm d'utilisateur ou l'ID qui est utilisé pour lancer le
- programme ddclient.
- La valeur par défaut est @samp{"ddclient"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} string group
- Groupe de l'utilisateur qui lancera le programme ddclient.
- La valeur par défaut est @samp{"ddclient"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} string secret-file
- Fichier de secrets qui sera ajouté au fichier @file{ddclient.conf}. Ce
- fichier contient les paramètres d'authentification utilisés par ddclient.
- On s'attend à ce que vous le créiez manuellement.
- La valeur par défaut est @samp{"/etc/ddclient/secrets.conf"}.
- @end deftypevr
- @deftypevr {paramètre de @code{ddclient-configuration}} list extra-options
- Options supplémentaires qui seront ajoutées au fichier @file{ddclient.conf}.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @c %end of fragment
- @node Services VPN
- @subsubsection Services VPN
- @cindex VPN (réseau privé virtuel)
- @cindex réseau privé virtuel (VPN)
- Le module @code{(gnu services vpn)} fournit des services liés aux
- @dfn{réseaux privés virtuels} (VPN). Il fournit un srevice @emph{client}
- pour que votre machine se connecte à un VPN et un service @emph{serveur}
- pour que votre machine héberge un VPN. Les deux services utilisent
- @uref{https://openvpn.net/, OpenVPN}.
- @deffn {Procédure Scheme} openvpn-client-service @
- [#:config (openvpn-client-configuration)]
- Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
- client.
- @end deffn
- @deffn {Procédure Scheme} openvpn-server-service @
- [#:config (openvpn-server-configuration)]
- Renvoie un service qui lance @command{openvpn}, un démon VPN, en tant que
- serveur.
- Les deux services peuvent être lancés en même temps.
- @end deffn
- @c %automatically generated documentation
- Les champs de @code{openvpn-client-configuration} disponibles sont :
- @deftypevr {paramètre de @code{openvpn-client-configuration}} package openvpn
- Le paquet OpenVPN.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} string pid-file
- Le fichier de PID d'OpenVPN.
- La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} proto proto
- Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
- les serveurs.
- La valeur par défaut est @samp{udp}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} dev dev
- Le périphérique utilisé pour représenter la connexion VPN.
- La valeur par défaut est @samp{tun}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} string ca
- L'autorité de certification qui sert à vérifier les connexions.
- La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} string cert
- Le certificat de la machine sur laquelle tourne le démon. Il devrait être
- signé par l'autorité indiquée dans @code{ca}.
- La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} string key
- La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
- dont le certificat est donné dans @code{cert}.
- La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean comp-lzo?
- Indique s'il faut utiliser l'algorithme de compression lzo.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-key?
- Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} boolean persist-tun?
- Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
- démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} number verbosity
- Niveau de verbosité.
- La valeur par défaut est @samp{3}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} tls-auth-client tls-auth
- Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
- de contrôle TLS pour se protéger contre les attaques DoS.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} key-usage verify-key-usage?
- Indique s'il faut vérifier que le certificat du serveur a l'extension
- d'utilisation.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} bind bind?
- Se lier à un port spécifique.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} resolv-retry resolv-retry?
- Réessayer de résoudre l'adresse du serveur.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-client-configuration}} openvpn-remote-list remote
- Une liste de serveurs distants sur lesquels se connecter.
- La valeur par défaut est @samp{()}.
- Les champs de @code{openvpn-remote-configuration} disponibles sont :
- @deftypevr {paramètre de @code{openvpn-remote-configuration}} string name
- Nom du serveur.
- La valeur par défaut est @samp{"my-server"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-remote-configuration}} number port
- Numéro de port sur lequel écoute le serveur.
- La valeur par défaut est @samp{1194}.
- @end deftypevr
- @end deftypevr
- @c %end of automatic openvpn-client documentation
- @c %automatically generated documentation
- Les champs de @code{openvpn-server-configuration} disponibles sont :
- @deftypevr {paramètre de @code{openvpn-server-configuration}} package openvpn
- Le paquet OpenVPN.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string pid-file
- Le fichier de PID d'OpenVPN.
- La valeur par défaut est @samp{"/var/run/openvpn/openvpn.pid"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} proto proto
- Le protocole (UDP ou TCP) utilisé pour ouvrir un canal entre les clients et
- les serveurs.
- La valeur par défaut est @samp{udp}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} dev dev
- Le périphérique utilisé pour représenter la connexion VPN.
- La valeur par défaut est @samp{tun}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string ca
- L'autorité de certification qui sert à vérifier les connexions.
- La valeur par défaut est @samp{"/etc/openvpn/ca.crt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string cert
- Le certificat de la machine sur laquelle tourne le démon. Il devrait être
- signé par l'autorité indiquée dans @code{ca}.
- La valeur par défaut est @samp{"/etc/openvpn/client.crt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string key
- La clef de la machine sur laquelle tourne le démon. Elle doit être la clef
- dont le certificat est donné dans @code{cert}.
- La valeur par défaut est @samp{"/etc/openvpn/client.key"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean comp-lzo?
- Indique s'il faut utiliser l'algorithme de compression lzo.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-key?
- Ne pas relire les fichiers de clefs entre les SIGUSR1 et les --ping-restart.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean persist-tun?
- Ne pas fermer et rouvrir les périphériques TUN/TAP ou lancer de scripts de
- démarrage/d'arrêt entre les SIGUSR1 et les --ping-restart.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} number verbosity
- Niveau de verbosité.
- La valeur par défaut est @samp{3}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} tls-auth-server tls-auth
- Ajoute une couche d'authentification HMAC supplémentaire au dessus du canal
- de contrôle TLS pour se protéger contre les attaques DoS.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} number port
- Spécifie le numéro de port sur lequel les serveurs écoutent.
- La valeur par défaut est @samp{1194}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} ip-mask server
- Une ip et un masque de sous-réseau spécifiant le sous-réseau dans le réseau
- virtuel.
- La valeur par défaut est @samp{"10.8.0.0 255.255.255.0"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} cidr6 server-ipv6
- Une notation CIDR pour spécifier le sous-réseau IPv6 dans le réseau virtuel.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string dh
- Le fichier de paramètres Diffie-Hellman.
- La valeur par défaut est @samp{"/etc/openvpn/dh2048.pem"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string ifconfig-pool-persist
- Le fichier qui enregistre les IP des clients.
- La valeur par défaut est @samp{"/etc/openvpn/ipp.txt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} gateway redirect-gateway?
- Lorsque la valeur est vraie, le serveur agira comme une passerelle pour ses
- clients.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} boolean client-to-client?
- Lorsque la valeur est vraie, les clients sont autorisés à se parler entre
- eux dans le VPN.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} keepalive keepalive
- Fait que des messages de ping sont envoyés régulièrement dans les deux sens
- pour que chaque côté sache quand l'autre n'est plus disponible.
- @code{keepalive} a besoin d'une paire. Le premier élément est la période
- d'envoie du ping, et le second élément est le délai d'attente avant de
- considéré que l'autre côté n'est plus disponible.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} number max-clients
- Le nombre maximum de clients.
- La valeur par défaut est @samp{100}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} string status
- Le fichier de statut. Ce fichier montre un court rapport sur les connexions
- actuelles. Il est tronqué et réécrit toutes les minutes.
- La valeur par défaut est @samp{"/var/run/openvpn/status"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-server-configuration}} openvpn-ccd-list client-config-dir
- La liste des configuration pour certains clients.
- La valeur par défaut est @samp{()}.
- Les champs de @code{openvpn-ccd-configuration} disponibles sont :
- @deftypevr {paramètre de @code{openvpn-ccd-configuration}} string name
- Nom du client.
- La valeur par défaut est @samp{"client"}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask iroute
- Le réseau du client.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{openvpn-ccd-configuration}} ip-mask ifconfig-push
- IP du client sur le VPN.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @end deftypevr
- @c %end of automatic openvpn-server documentation
- @node Système de fichiers en réseau
- @subsubsection Système de fichiers en réseau
- @cindex NFS
- Le module @code{(gnu services nfs)} fournit les services suivants, qui sont
- tous utilisés pour monter et exporter des arborescences de répertoires en
- @dfn{network file systems} (NFS).
- @subsubheading Service RPC Bind
- @cindex rpcbind
- Le service RPC Bind fournit un dispositif pour faire correspondre les
- numéros de programmes à des adresses universelles. De nombreux services
- liés à NFS utilisent ce dispositif. Donc il est automatiquement démarré
- lorsqu'un service qui en dépend est démarré.
- @defvr {Variable Scheme} rpcbind-service-type
- Un type de service pour le démon RPC portmapper.
- @end defvr
- @deftp {Type de données} rpcbind-configuration
- Type données représentant la configuration du service RPC Bind. Ce type a
- les paramètres suivants :
- @table @asis
- @item @code{rpcbind} (par défaut : @code{rpcbind})
- Le paquet rpcbind à utiliser.
- @item @code{warm-start?} (par défaut : @code{#t})
- Si ce paramètre est @code{#t}, alors le démon lira un fichier d'état au
- démarrage ce qui lui fait recharger les informations d'états sauvegardés par
- une instance précédente.
- @end table
- @end deftp
- @subsubheading Pseudo-système de fichiers Pipefs
- @cindex pipefs
- @cindex rpc_pipefs
- Le système de fichiers pipefs est utilisé pour transférer des données liées
- à NFS entre le noyau et les programmes en espace utilisateur.
- @defvr {Variable Scheme} pipefs-service-type
- Un type de service pour le pseudo-système de fichiers pipefs.
- @end defvr
- @deftp {Type de données} pipefs-configuration
- Type de données représentant la configuration du service du pseudo-système
- de fichiers pipefs. Ce type a les paramètres suivants :
- @table @asis
- @item @code{mount-point} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
- Le répertoire dans lequel le système de fichiers est attaché.
- @end table
- @end deftp
- @subsubheading Service de démon GSS
- @cindex GSSD
- @cindex GSS
- @cindex système de sécurité global
- Le démon du @dfn{système de sécurité global} (GSS) fournit une sécurité
- forte pour les protocoles basés sur des RPC. Avant d'échanger des requêtes
- RPC, un client RPC doit établir un contexte sécurisé. Typiquement cela se
- fait avec la commande Kerberos @command{kinit} ou automatiquement à la
- connexion avec les services PAM (@pxref{Services Kerberos}).
- @defvr {Variable Scheme} gss-service-type
- Un type de service pour le démon du système de sécurité global (GSS).
- @end defvr
- @deftp {Type de données} gss-configuration
- Type de données représentant la configuration du service du démon GSS. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{nfs-utils} (par défaut : @code{nfs-utils})
- Le paquet dans lequel la commande @command{rpc.gssd} se trouve.
- @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
- Le répertoire où le système de fichier pipefs doit être monté.
- @end table
- @end deftp
- @subsubheading Service de démon IDMAP
- @cindex idmapd
- @cindex correspondance de nom
- Le service du démon idmap fournit une correspondance entre les ID
- utilisateur et les noms d'utilisateurs. Typiquement, cela est requis pour
- accéder aux systèmes de fichiers montés via NFSv4.
- @defvr {Variable Scheme} idmap-service-type
- Un type de service pour le démon de correspondance d'identité (IDMAP).
- @end defvr
- @deftp {Type de données} idmap-configuration
- Type de données représentant la configuration du service du démon IDMAP. Ce
- type a les paramètres suivants :
- @table @asis
- @item @code{nfs-utils} (par défaut : @code{nfs-utils})
- Le paquet dans lequel se trouve la commande @command{rpc.idmapd}.
- @item @code{pipefs-directory} (par défaut : @code{"/var/lib/nfs/rpc_pipefs"})
- Le répertoire où le système de fichier pipefs doit être monté.
- @item @code{domain} (par défaut : @code{#f})
- Le nom de domaine NFSv4 local. Il faut que ce soit une chaîne de caractères
- ou @code{#f}. Si la valeur est @code{#f} le démon utilisera le nom de
- domaine pleinement qualifié de l'hôte.
- @end table
- @end deftp
- @node Intégration continue
- @subsubsection Intégration continue
- @cindex intégration continue
- @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} est
- un outil d'intégration continue pour Guix. On peut l'utiliser aussi bien
- pour le développement que pour fournir des substituts à d'autres
- (@pxref{Substituts}).
- Le module @code{(gnu services cuirass)} fournit le service suivant.
- @defvr {Procédure Scheme} cuirass-service-type
- Le type du service Cuirass. Sa valeur doit être un objet
- @code{cuirass-configuration}, décrit ci-dessous.
- @end defvr
- Pour ajouter des travaux de construction, vous devez indiquer le champ
- @code{specifications} de la configuration. Voici un exemple de service qui
- récupère le dépôt Guix et construit les paquets depuis un manifeste.
- Certains des paquets sont définis dans l'entrée @code{"custom-packages"},
- qui est l'équivalent de @code{GUIX_PACKAGE_PATH}.
- @example
- (define %cuirass-specs
- #~(list
- '((#:name . "my-manifest")
- (#:load-path-inputs . ("guix"))
- (#:package-path-inputs . ("custom-packages"))
- (#:proc-input . "guix")
- (#:proc-file . "build-aux/cuirass/gnu-system.scm")
- (#:proc . cuirass-jobs)
- (#:proc-args . ((subset . "manifests")
- (systems . ("x86_64-linux"))
- (manifests . (("config" . "guix/manifest.scm")))))
- (#:inputs . (((#:name . "guix")
- (#:url . "git://git.savannah.gnu.org/guix.git")
- (#:load-path . ".")
- (#:branch . "master")
- (#:no-compile? . #t))
- ((#:name . "config")
- (#:url . "git://git.example.org/config.git")
- (#:load-path . ".")
- (#:branch . "master")
- (#:no-compile? . #t))
- ((#:name . "custom-packages")
- (#:url . "git://git.example.org/custom-packages.git")
- (#:load-path . ".")
- (#:branch . "master")
- (#:no-compile? . #t)))))))
- (service cuirass-service-type
- (cuirass-configuration
- (specifications %cuirass-specs)))
- @end example
- Tandis que les informations liés aux travaux de construction sont
- directement dans les spécifications, les paramètres globaux pour le
- processus @command{cuirass} sont accessibles dans les autres champs de
- @code{cuirass-configuration}.
- @deftp {Type de données} cuirass-configuration
- Type de données représentant la configuration de Cuirass.
- @table @asis
- @item @code{log-file} (par défaut : @code{"/var/log/cuirass.log"})
- Emplacement du fichier de journal.
- @item @code{cache-directory} (par défaut : @code{"/var/cache/cuirass"})
- Emplacement du cache du dépôt.
- @item @code{user} (par défaut : @code{"cuirass"})
- Propriétaire du processus @code{cuirass}.
- @item @code{group} (par défaut : @code{"cuirass"})
- Groupe du propriétaire du processus @code{cuirass}.
- @item @code{interval} (par défaut : @code{60})
- Nombre de secondes entre les mises à jour du dépôt suivis des travaux de
- Cuirass.
- @item @code{database} (par défaut : @code{"/var/lib/cuirass/cuirass.db"})
- Emplacement de la base de données sqlite qui contient les résultats de
- construction et les spécifications précédemment ajoutées.
- @item @code{ttl} (par défaut : @code{(* 30 24 3600)})
- Spécifie la durée de vie (TTL) en seconde des racines du ramasse-miette qui
- sont enregistrés comme des résultats de construction. Cela signifie que les
- résultats de construction ne seront pas glanés pendant au moins @var{ttl}
- secondes.
- @item @code{port} (par défaut : @code{8081})
- Numéro de port utilisé pour le serveur HTTP.
- @item --listen=@var{hôte}
- Écoute sur l'interface réseau de @var{host}. La valeur par défaut est
- d'accepter les connexions depuis localhost.
- @item @code{specifications} (par défaut : @code{#~'()})
- Une gexp (@pxref{G-Expressions}) qui s'évalue en une liste de
- spécifications, où une spécification est une liste d'association
- (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) dont les
- clefs sont des mots-clefs (@code{#:exemple-de-mot-clef}) comme dans
- l'exemple plus haut.
- @item @code{use-substitutes?} (par défaut : @code{#f})
- Cela permet d'utiliser des substituts pour éviter de construire toutes les
- dépendance d'un travail depuis les sources.
- @item @code{one-shot?} (par défaut : @code{#f})
- N'évaluer les spécification et construire les dérivations qu'une seule fois.
- @item @code{fallback?} (par défaut : @code{#f})
- Lorsque la substitution d'un binaire pré-construit échoue, revenir à la
- construction locale du paquet.
- @item @code{cuirass} (par défaut : @code{cuirass})
- Le paquet Cuirass à utiliser.
- @end table
- @end deftp
- @node Services de gestion de l'énergie
- @subsubsection Services de gestion de l'énergie
- @cindex tlp
- @cindex gestion de l'énergie avec TLP
- @subsubheading démon TLP
- Le module @code{(gnu services pm)} fournit une définition de service Guix
- pour l'outil de gestion d'énergie Linux TLP.
- TLP active plusieurs modes un espace utilisateur et dans le noyau.
- Contrairement à @code{upower-service}, ce n'est pas un outil passif de
- surveillance, puisqu'il applique des paramètres personnalisés à chaque fois
- qu'il détecte une nouvelle source d'énergie. Vous pouvez trouver plus
- d'informations sur @uref{http://linrunner.de/en/tlp/tlp.html, la page
- d'accueil de TLP}.
- @deffn {Variable Scheme} tlp-service-type
- Le type de service pour l'outil TLP. Sa valeur devrait être une
- configuration valide de TLP (voir plus bas). Pour utiliser les paramètres
- par défaut, écrivez simplement :
- @example
- (service tlp-service-type)
- @end example
- @end deffn
- Par défaut TLP n'a pas besoin de beaucoup de configuration mais la plupart
- des paramètres de TLP peuvent être modifiés avec @code{tlp-configuration}.
- Chaque définition de paramètre est précédée par son type ; par exemple,
- @samp{boolean foo} indique que le paramètre @code{foo} doit être spécifié
- comme un booléen. Les types qui commencent par @code{maybe-} dénotent des
- paramètres qui n'apparaîtront pas dans la configuration de TLP lorsque leur
- valeur est @code{'disabled}.
- @c The following documentation was initially generated by
- @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
- @c documentation is better, so we shouldn't hesitate to edit below as
- @c needed. However if the change you want to make to this documentation
- @c can be done in an automated way, it's probably easier to change
- @c (generate-documentation) than to make it below and have to deal with
- @c the churn as TLP updates.
- Les champs de @code{tlp-configuration} disponibles sont :
- @deftypevr {paramètre de @code{tlp-configuration}} package tlp
- Le paquet TLP.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean tlp-enable?
- Indiquez vrai si vous souhaitez activer TLP.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string tlp-default-mode
- Mode par défaut lorsqu'aucune source d'énergie ne peut être détectée. Les
- possibilités sont AC et BAT.
- La valeur par défaut est @samp{"AC"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-ac
- Nombre de secondes que le noyau Linux doit attendre après que les disques
- s'arrêtent pour se synchroniser quand il est sur secteur.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer disk-idle-secs-on-bat
- Comme @code{disk-idle-ac} mais en mode batterie.
- La valeur par défaut est @samp{2}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-ac
- Périodicité du nettoyage des pages invalidées, en secondes.
- La valeur par défaut est @samp{15}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer max-lost-work-secs-on-bat
- Comme @code{max-lost-work-secs-on-ac} mais en mode batterie.
- La valeur par défaut est @samp{60}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-ac
- Gouverneur de fréquence d'horloge sur secteur. Avec le pilote intel_pstate,
- les possibilités sont powersave et performance. Avec le pilote
- acpi-cpufreq, les possibilités sont ondemand, powersave, performance et
- conservative.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list cpu-scaling-governor-on-bat
- Comme @code{cpu-scaling-governor-on-ac} mais en mode batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
- Indique la fréquence d'horloge minimale pour le gouverneur sur secteur.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
- Indique la fréquence d'horloge maximale pour le gouverneur sur secteur.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
- Indique la fréquence d'horloge minimale pour le gouverneur sur batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
- Indique la fréquence d'horloge maximale pour le gouverneur sur batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-ac
- Limite le P-état minimum pour contrôler la dissipation de puissance dans le
- CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
- performances disponibles.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-ac
- Limite le P-état maximum pour contrôler la dissipation de puissance dans le
- CPU, sur secteur. Les valeurs sont indiqués comme un pourcentage des
- performances disponibles.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-min-perf-on-bat
- Comme @code{cpu-min-perf-on-ac} mais en mode batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-non-negative-integer cpu-max-perf-on-bat
- Comme @code{cpu-max-perf-on-ac} mais en mode batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-ac?
- Active la fonctionnalité turbo boost du CPU sur secteur.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean cpu-boost-on-bat?
- Comme @code{cpu-boost-on-ac?} mais en mode batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-ac?
- Permet au noyau Linux de minimiser le nombre de cœurs/hyper-threads CPU
- utilisés lorsque la charge est faible.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean sched-powersave-on-bat?
- Comme @code{sched-powersave-on-ac?} mais en mode batterie.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean nmi-watchdog?
- Active le chien de garde NMI du noyau Linux.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-string phc-controls
- Pour les noyaux Linux avec le correctif PHC, change le voltage du CPU. Une
- valeur serait par exemple @samp{"F:V F:V F:V F:V"}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-ac
- Indique le niveau de performance du CPU par rapport à la politique de
- gestion de l'énergie sur secteur. Les possibilités sont performance, normal
- et powersave.
- La valeur par défaut est @samp{"performance"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string energy-perf-policy-on-bat
- Comme @code{energy-perf-policy-ac} mais en mode batterie.
- La valeur par défaut est @samp{"powersave"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disks-devices
- Périphériques de disque dur.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-ac
- Niveau de gestion de l'énergie avancé des disques durs.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list disk-apm-level-on-bat
- Comme @code{disk-apm-bat} mais en mode batterie.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-ac
- Délai d'attente pour arrêter de faire tourner les disques. Une valeur doit
- être spécifiée pour chaque disque dur déclaré.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-spindown-timeout-on-bat
- Comme @code{disk-spindown-timeout-on-ac} mais en mode batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list disk-iosched
- Sélectionne l'ordonnanceur d'entrées-sorties pour le disque. Une valeur
- doit être spécifiée pour chaque disque déclaré. Les possibilités sont par
- exemple cfq, deadline et noop.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-ac
- Niveau de gestion de l'énergie des lien SATA aggressive (ALPM). Les
- possibilités sont min_power, medium_power et max_performance.
- La valeur par défaut est @samp{"max_performance"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string sata-linkpwr-on-bat
- Comme @code{sata-linkpwr-ac} mais en mode batterie.
- La valeur par défaut est @samp{"min_power"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-string sata-linkpwr-blacklist
- Exclu les périphériques SATA spécifiés de la gestion de l'énergie des liens.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-ac?
- Active la gestion de l'énergie à l'exécution pour les contrôleurs AHCI et
- les disques, sur secteur
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-on-off-boolean ahci-runtime-pm-on-bat?
- Comme @code{ahci-runtime-pm-on-ac} mais en mode batterie.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer ahci-runtime-pm-timeout
- Secondes d'inactivités avant de suspendre les disques.
- La valeur par défaut est @samp{15}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-ac
- Niveau de gestion de l'énergie des états actifs de PCI Express. Les
- possibilités sont default, performance et powersave.
- La valeur par défaut est @samp{"performance"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string pcie-aspm-on-bat
- Comme @code{pcie-aspm-ac} mais en mode batterie.
- La valeur par défaut est @samp{"powersave"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-ac
- Niveau de vitesse de l'horloge des cartes graphiques Radeon. Les
- possibilités sont low, mid, high, auto et default.
- La valeur par défaut est @samp{"high"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string radeon-power-profile-on-bat
- Comme @code{radeon-power-ac} mais en mode batterie.
- La valeur par défaut est @samp{"low"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-ac
- Méthode de gestion de l'énergie dynamique de Radeon (DPM). Les possibilités
- sont battery et performance.
- La valeur par défaut est @samp{"performance"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-state-on-bat
- Comme @code{radeon-dpm-state-ac} mais en mode batterie.
- La valeur par défaut est @samp{"battery"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-ac
- Niveau de performance de DPM. Les possibilités sont auto, low et high.
- La valeur par défaut est @samp{"auto"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string radeon-dpm-perf-level-on-bat
- Comme @code{radeon-dpm-perf-ac} mais en mode batterie.
- La valeur par défaut est @samp{"auto"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-ac?
- Mode de gestion de l'énergie wifi.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} on-off-boolean wifi-pwr-on-bat?
- Comme @code{wifi-power-ac?} mais en mode batterie.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean wol-disable?
- Désactive wake on LAN.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-ac
- Durée d'attente en secondes avant d'activer la gestion de l'énergie audio
- sur les périphériques Intel HDA et AC97. La valeur 0 désactive la gestion
- de l'énergie.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} non-negative-integer sound-power-save-on-bat
- Comme @code{sound-powersave-ac} mais en mode batterie.
- La valeur par défaut est @samp{1}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} y-n-boolean sound-power-save-controller?
- Désactive le contrôleur en mode de gestion de l'énergie sur les
- périphériques Intel HDA.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean bay-poweroff-on-bat?
- Active le périphérique optique AltraBay/MediaBay en mode batterie. Le
- périphérique peut être de nouveau alimenté en lâchant (et en réinsérant) le
- levier d'éjection ou en appuyant sur le bouton d'éjection sur les modèles
- plus récents.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string bay-device
- Nom du périphérique optique à éteindre.
- La valeur par défaut est @samp{"sr0"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-ac
- Gestion de l'énergie à l'exécution sur les bus PCI(e). Les possibilités
- sont on et auto.
- La valeur par défaut est @samp{"on"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} string runtime-pm-on-bat
- Comme @code{runtime-pm-ac} mais en mode batterie.
- La valeur par défaut est @samp{"auto"}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean runtime-pm-all?
- Gestion de l'énergie à l'exécution pour tous les bus PCI(e), sauf ceux en
- liste noire.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-space-separated-string-list runtime-pm-blacklist
- Exclue les adresses des périphériques PCI(e) spécifiés de la gestion de
- l'énergie à l'exécution.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} space-separated-string-list runtime-pm-driver-blacklist
- Exclue les périphériques PCI(e) assignés aux pilotes spécifiés de la gestion
- de l'énergie à l'exécution.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-autosuspend?
- Active la fonctionnalité de mise en veille automatique de l'USB.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-blacklist
- Exclue les périphériques spécifiés de la mise en veille automatique de
- l'USB.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean usb-blacklist-wwan?
- Exclue les périphériques WWAN de la mise en veille automatique de l'USB.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-string usb-whitelist
- Inclue les périphériques spécifiés dans la mise en veille automatique de
- l'USB, même s'ils sont déjà exclus par le pilote ou via
- @code{usb-blacklist-wwan?}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} maybe-boolean usb-autosuspend-disable-on-shutdown?
- Active la mise en veille de l'USB avant l'arrêt.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{tlp-configuration}} boolean restore-device-state-on-startup?
- Restaure l'état des périphériques radio (bluetooth, wifi, wwan) du dernier
- arrêt au démarrage du système.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @cindex thermald
- @cindex gestion de la fréquence du CPU avec thermald
- @subsubheading démon Thermald
- Le module @code{(gnu services pm)} fournit une interface pour thermald, un
- service de gestion de l'horloge CPU qui aide à éviter la surchauffe.
- @defvr {Variable Scheme} thermald-service-type
- C'est le type de service pour @uref{https://01.org/linux-thermal-daemon/,
- thermald}, le démon de température de Linux, responsable du contrôle de
- l'état thermique des processeurs et d'éviter la surchauffe.
- @end defvr
- @deftp {Type de données} thermald-configuration
- Type de données représentant la configuration de
- @code{thermald-service-type}.
- @table @asis
- @item @code{ignore-cpuid-check?} (par défaut : @code{#f})
- Ignore la vérification des modèles CPU supportés avec cpuid.
- @item @code{thermald} (par défaut : @var{thermald})
- Objet du paquet de thermald.
- @end table
- @end deftp
- @node Services audio
- @subsubsection Services audio
- Le module @code{(gnu services audio)} fournit un service qui lance MPD (le
- démon de lecture de musique).
- @cindex mpd
- @subsubheading Music Player Daemon
- Le démon de lecture de musique (MPD) est un service qui joue de la musique
- tout en étant contrôlé depuis la machine locale ou à travers le réseau par
- divers clients.
- L'exemple suivant montre comment on peut lancer @code{mpd} en tant
- qu'utilisateur @code{"bob"} sur le port @code{6666}. Il utilise pulseaudio
- pour la sortie audio.
- @example
- (service mpd-service-type
- (mpd-configuration
- (user "bob")
- (port "6666")))
- @end example
- @defvr {Variable Scheme} mpd-service-type
- Le type de service pour @command{mpd}.
- @end defvr
- @deftp {Type de données} mpd-configuration
- Type de données représentant la configuration de @command{mpd}.
- @table @asis
- @item @code{user} (par défaut : @code{"mpd"})
- L'utilisateur qui lance mpd.
- @item @code{music-dir} (par défaut : @code{"~/Music"})
- Le répertoire à scanner pour trouver les fichiers de musique.
- @item @code{playlist-dir} (par défaut : @code{"~/.mpd/playlists"})
- Le répertoire où stocker les playlists.
- @item @code{port} (par défaut : @code{"6600"})
- Le port sur lequel lancer mpd.
- @item @code{address} (par défaut : @code{"any"})
- L'adresse sur laquelle se lie mpd. Pour utiliser un socket Unix domain, un
- chemin absolu peut être spécifié ici.
- @end table
- @end deftp
- @node Services de virtualisation
- @subsubsection services de virtualisation
- Le module @code{(gnu services virtualization)} fournit des services pour les
- démons libvirt et virtlog, ainsi que d'autres services liés à la
- virtualisation.
- @subsubheading démon libvirt
- @code{libvirtd} est le démon côté serveur du système de gestion de
- virtualisation libvirt. Ce démon tourne sur des serveurs hôtes et effectue
- les taches de gestion requises pour les clients virtualisés.
- @deffn {Variable Scheme} libvirt-service-type
- C'est le type du @uref{https://libvirt.org, démon libvirt}. Sa valeur doit
- être un @code{libvirt-configuration}.
- @example
- (service libvirt-service-type
- (libvirt-configuration
- (unix-sock-group "libvirt")
- (tls-port "16555")))
- @end example
- @end deffn
- @c Auto-generated with (generate-libvirt-documentation)
- Les champs de @code{libvirt-configuration} disponibles sont :
- @deftypevr {paramètre de @code{libvirt-configuration}} package libvirt
- Paquet libvirt.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tls?
- Indique s'il faut écouter des connexions TLS sécurisées sur le port TCP/IP
- public. Vous devez remplir le champ @code{listen} pour que cela ait un
- effet.
- Il est nécessaire de mettre en place une CA et de créer un certificat
- serveur avant d'utiliser cette fonctionnalité.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} boolean listen-tcp?
- Écoute des connexions non-chiffrées sur le port TCP/IP public. Vous devez
- remplir le champ @code{listen} pour que cela ait un effet.
- L'utilisation des sockets TCP requiert une authentification SASL par
- défaut. Seuls les mécanismes SASL qui supportent le chiffrement des données
- sont permis. Il s'agit de DIGEST_MD5 et GSSAPI (Kerberos5).
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string tls-port
- Pour pour accepter les connexions TLS sécurisées. Il peut s'agir d'un
- numéro de port ou d'un nom de service.
- La valeur par défaut est @samp{"16514"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string tcp-port
- Pour sur lequel accepter les connexions TCP non sécurisées. Cela peut être
- un numéro de port ou un nom de service.
- La valeur par défaut est @samp{"16509"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string listen-addr
- Adresse IP ou nom d'hôte utilisé pour les connexions des clients.
- La valeur par défaut est @samp{"0.0.0.0"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} boolean mdns-adv?
- Indique s'il faut publier le service libvirt en mDNS.
- Autrement, vous pouvez désactiver cela pour tous les services en stoppant le
- démon Avahi.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string mdns-name
- Nom publié par défaut sur mDNS. Cela doit être unique sur le réseau local.
- La valeur par défaut est @samp{"Virtualization Host <hostname>"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-group
- Groupe propriétaire du socket Unix domain. Cela peut être utilisé pour
- permettre à un ensemble d'utilisateurs « de confiance » de gérer les
- fonctionnalités sans devenir root.
- La valeur par défaut est @samp{"root"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-ro-perms
- Permission Unix pour le socket en lecture seule. Il est utilisé pour
- surveiller le statut des VM uniquement.
- La valeur par défaut est @samp{"0777"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-rw-perms
- Permission Unix pour le socket en lecture-écriture. La valeur par défaut
- n'autorise que root. Si PolicyKit est activé sur le socket, la valeur par
- défaut change et permet tout le monde (c.-à-d.@: 0777).
- La valeur par défaut est @samp{"0770"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-admin-perms
- permissions Unix pour le socket d'administration. La valeur par défaut ne
- permet que le propriétaire (root), ne la changez pas à moins que vous ne
- soyez sûr de savoir à qui vous exposez cet accès.
- La valeur par défaut est @samp{"0777"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string unix-sock-dir
- Le répertoire dans lequel les sockets sont créés.
- La valeur par défaut est @samp{"/var/run/libvirt"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-ro
- Schéma d'authentification pour les socket Unix en lecture-seule. Par défaut
- les permissions des socket permettent à n'importe qui de se connecter.
- La valeur par défaut est @samp{"polkit"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string auth-unix-rw
- Schéma d'authentification pour les socket UNIX en lecture-écriture. Par
- défaut les permissions du socket ne permettent que root. Si le support de
- PolicyKit a été compilé dans libvirt, la valeur par défaut utilise
- l'authentification « polkit ».
- La valeur par défaut est @samp{"polkit"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tcp
- Schéma d'authentification pour les sockets TCP. Si vous n'avez pas activé
- SASL, alors tout le trafic TCP est en clair. Ne le faites pas en dehors de
- scénario de développement ou de test.
- La valeur par défaut est @samp{"sasl"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string auth-tls
- Schéma d'authentification pour les sockets TLS. Les sockets TLS sont déjà
- chiffrés par la couche TLS, et une authentification limitée est effectuée
- avec les certificats.
- Il est possible d'utiliser de n'importe quel mécanisme d'authentification
- SASL en utilisant « sasl » pour cette option.
- La valeur par défaut est @samp{"none"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} optional-list access-drivers
- Schéma de contrôle d'accès à l'API.
- Par défaut un utilisateur authentifié peut accéder à toutes les API. Les
- pilotes d'accès peuvent placer des restrictions là-dessus.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string key-file
- Chemin de fichier de la clef du serveur. Si la valeur est une chaîne vide,
- aucune clef privée n'est chargée.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string cert-file
- Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
- certificat n'est chargé.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string ca-file
- Chemin de fichier de la clef du serveur. Si la chaîne est vide, aucun
- certificat de CA n'est chargé.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string crl-file
- Chemin de la liste de révocation des certificats. Si la chaîne est vide,
- aucun CRL n'est chargé.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-sanity-cert
- Désactive la vérification de nos propres certificats serveurs.
- Lorsque libvirtd démarre il effectue des vérifications de routine sur ses
- propres certificats.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} boolean tls-no-verify-cert
- Désactive la vérification des certificats clients.
- La vérification des certificats clients est le mécanisme d'authentification
- principal. Tout client qui ne présent pas de certificat signé par la CA
- sera rejeté.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} optional-list tls-allowed-dn-list
- Liste blanche des Distinguished Name x509 autorisés.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} optional-list sasl-allowed-usernames
- Liste blanche des noms d'utilisateur SASL permis. Le format des noms
- d'utilisateurs dépend du mécanisme d'authentification SASL.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string tls-priority
- Modifie la chaîne de priorité TLS par défaut fixée à la compilation. La
- valeur par défaut est typiquement « NORMAL » à moins qu'elle n'ait été
- modifiée à la compilation. Ne l'indiquez que si vous voulez que libvirt
- agisse différemment des paramètres par défaut globaux.
- La valeur par défaut est @samp{"NORMAL"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer max-clients
- Nombre maximum de connexions clientes en même temps sur tous les sockets.
- La valeur par défaut est @samp{5000}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer max-queued-clients
- Longueur maximum de la queue de connexions en attente d'acceptation du
- démon. Remarquez que certains protocoles supportant la retransmission
- peuvent obéir à ce paramètre pour qu'une connexion ultérieure réussisse.
- La valeur par défaut est @samp{1000}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer max-anonymous-clients
- Longueur maximum de la queue des clients acceptés mais pas authentifiés.
- Indiquez zéro pour désactiver ce paramètre.
- La valeur par défaut est @samp{20}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer min-workers
- Nombre de processus de travail démarrés initialement.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer max-workers
- Nombre maximum de threads de travail.
- Si le nombre de clients actifs dépasse @code{min-workers}, plus de threads
- seront démarrés, jusqu'à la limite de max_workers. Typiquement vous voulez
- que max_workers soit égal au nombre maximum de clients permis.
- La valeur par défaut est @samp{20}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer prio-workers
- Nombre de travailleurs prioritaires. Si tous les threads de travail du
- groupe ci-dessus sont bloqués, certains appels marqués comme prioritaires
- (notamment domainDestroy) peuvent être exécutés par ce groupe.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer max-requests
- Limite globale totale sur les appels RPC concurrents.
- La valeur par défaut est @samp{20}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer max-client-requests
- Limit on concurrent requests from a single client connection. To avoid one
- client monopolizing the server this should be a small fraction of the global
- max_requests and max_workers parameter.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-min-workers
- Same as @code{min-workers} but for the admin interface.
- La valeur par défaut est @samp{1}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-workers
- Same as @code{max-workers} but for the admin interface.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-clients
- Same as @code{max-clients} but for the admin interface.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-queued-clients
- Same as @code{max-queued-clients} but for the admin interface.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-max-client-requests
- Same as @code{max-client-requests} but for the admin interface.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer log-level
- Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
- La valeur par défaut est @samp{3}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string log-filters
- Logging filters.
- A filter allows to select a different logging level for a given category of
- logs The format for a filter is one of:
- @itemize @bullet
- @item
- x:nom
- @item
- x:+nom
- @end itemize
- where @code{name} is a string which is matched against the category given in
- the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
- "remote", "qemu", or "util.json" (the name in the filter can be a substring
- of the full category name, in order to match multiple similar categories),
- the optional "+" prefix tells libvirt to log stack trace for each message
- matching name, and @code{x} is the minimal level where matching messages
- should be logged:
- @itemize @bullet
- @item
- 1: DEBUG
- @item
- 2: INFO
- @item
- 3: WARNING
- @item
- 4: ERROR
- @end itemize
- Multiple filters can be defined in a single filters statement, they just
- need to be separated by spaces.
- La valeur par défaut est @samp{"3:remote 4:event"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string log-outputs
- Logging outputs.
- An output is one of the places to save logging information The format for an
- output can be:
- @table @code
- @item x:stderr
- output goes to stderr
- @item x:syslog:name
- use syslog for the output and use the given name as the ident
- @item x:file:file_path
- output to a file, with the given filepath
- @item x:journald
- output to journald logging system
- @end table
- In all case the x prefix is the minimal level, acting as a filter
- @itemize @bullet
- @item
- 1: DEBUG
- @item
- 2: INFO
- @item
- 3: WARNING
- @item
- 4: ERROR
- @end itemize
- Multiple outputs can be defined, they just need to be separated by spaces.
- La valeur par défaut est @samp{"3:stderr"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer audit-level
- Allows usage of the auditing subsystem to be altered
- @itemize @bullet
- @item
- 0: disable all auditing
- @item
- 1: enable auditing, only if enabled on host
- @item
- 2: enable auditing, and exit if disabled on host.
- @end itemize
- La valeur par défaut est @samp{1}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} boolean audit-logging
- Send audit messages via libvirt logging infrastructure.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} optional-string host-uuid
- Host UUID. UUID must not have all digits be the same.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} string host-uuid-source
- Source to read host UUID.
- @itemize @bullet
- @item
- @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
- @item
- @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
- @end itemize
- If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
- generated.
- La valeur par défaut est @samp{"smbios"}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-interval
- A keepalive message is sent to a client after @code{keepalive_interval}
- seconds of inactivity to check if the client is still responding. If set to
- -1, libvirtd will never send keepalive requests; however clients can still
- send them and the daemon will send responses.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer keepalive-count
- Maximum number of keepalive messages that are allowed to be sent to the
- client without getting any response before the connection is considered
- broken.
- In other words, the connection is automatically closed approximately after
- @code{keepalive_interval * (keepalive_count + 1)} seconds since the last
- message received from the client. When @code{keepalive-count} is set to 0,
- connections will be automatically closed after @code{keepalive-interval}
- seconds of inactivity without sending any keepalive messages.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-interval
- Same as above but for admin interface.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer admin-keepalive-count
- Same as above but for admin interface.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{libvirt-configuration}} integer ovs-timeout
- Timeout for Open vSwitch calls.
- The @code{ovs-vsctl} utility is used for the configuration and its timeout
- option is set by default to 5 seconds to avoid potential infinite waits
- blocking libvirt.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @c %end of autogenerated docs
- @subsubheading démon Virrlog
- The virtlogd service is a server side daemon component of libvirt that is
- used to manage logs from virtual machine consoles.
- This daemon is not used directly by libvirt client applications, rather it
- is called on their behalf by @code{libvirtd}. By maintaining the logs in a
- standalone daemon, the main @code{libvirtd} daemon can be restarted without
- risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
- itself upon receiving @code{SIGUSR1}, to allow live upgrades without
- downtime.
- @deffn {Variable Scheme} virtlog-service-type
- This is the type of the virtlog daemon. Its value must be a
- @code{virtlog-configuration}.
- @example
- (service virtlog-service-type
- (virtlog-configuration
- (max-clients 1000)))
- @end example
- @end deffn
- @deftypevr {paramètre de @code{virtlog-configuration}} integer log-level
- Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
- La valeur par défaut est @samp{3}.
- @end deftypevr
- @deftypevr {paramètre de @code{virtlog-configuration}} string log-filters
- Logging filters.
- A filter allows to select a different logging level for a given category of
- logs The format for a filter is one of:
- @itemize @bullet
- @item
- x:nom
- @item
- x:+nom
- @end itemize
- where @code{name} is a string which is matched against the category given in
- the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
- "remote", "qemu", or "util.json" (the name in the filter can be a substring
- of the full category name, in order to match multiple similar categories),
- the optional "+" prefix tells libvirt to log stack trace for each message
- matching name, and @code{x} is the minimal level where matching messages
- should be logged:
- @itemize @bullet
- @item
- 1: DEBUG
- @item
- 2: INFO
- @item
- 3: WARNING
- @item
- 4: ERROR
- @end itemize
- Multiple filters can be defined in a single filters statement, they just
- need to be separated by spaces.
- La valeur par défaut est @samp{"3:remote 4:event"}.
- @end deftypevr
- @deftypevr {paramètre de @code{virtlog-configuration}} string log-outputs
- Logging outputs.
- An output is one of the places to save logging information The format for an
- output can be:
- @table @code
- @item x:stderr
- output goes to stderr
- @item x:syslog:name
- use syslog for the output and use the given name as the ident
- @item x:file:file_path
- output to a file, with the given filepath
- @item x:journald
- output to journald logging system
- @end table
- In all case the x prefix is the minimal level, acting as a filter
- @itemize @bullet
- @item
- 1: DEBUG
- @item
- 2: INFO
- @item
- 3: WARNING
- @item
- 4: ERROR
- @end itemize
- Multiple outputs can be defined, they just need to be separated by spaces.
- La valeur par défaut est @samp{"3:stderr"}.
- @end deftypevr
- @deftypevr {paramètre de @code{virtlog-configuration}} integer max-clients
- Nombre maximum de connexions clientes en même temps sur tous les sockets.
- La valeur par défaut est @samp{1024}.
- @end deftypevr
- @deftypevr {paramètre de @code{virtlog-configuration}} integer max-size
- Maximum file size before rolling over.
- La valeur par défaut est @samp{2MB}.
- @end deftypevr
- @deftypevr {paramètre de @code{virtlog-configuration}} integer max-backups
- Maximum number of backup files to keep.
- La valeur par défaut est @samp{3}.
- @end deftypevr
- @subsubheading Émulation transparente avec QEMU
- @cindex émulation
- @cindex @code{binfmt_misc}
- @code{qemu-binfmt-service-type} provides support for transparent emulation
- of program binaries built for different architectures---e.g., it allows you
- to transparently execute an ARMv7 program on an x86_64 machine. It achieves
- this by combining the @uref{https://www.qemu.org, QEMU} emulator and the
- @code{binfmt_misc} feature of the kernel Linux.
- @defvr {Variable Scheme} qemu-binfmt-service-type
- This is the type of the QEMU/binfmt service for transparent emulation. Its
- value must be a @code{qemu-binfmt-configuration} object, which specifies the
- QEMU package to use as well as the architecture we want to emulated:
- @example
- (service qemu-binfmt-service-type
- (qemu-binfmt-configuration
- (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
- @end example
- In this example, we enable transparent emulation for the ARM and aarch64
- platforms. Running @code{herd stop qemu-binfmt} turns it off, and running
- @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the
- @command{herd} command,, shepherd, The GNU Shepherd Manual}).
- @end defvr
- @deftp {Type de données} qemu-binfmt-configuration
- This is the configuration for the @code{qemu-binfmt} service.
- @table @asis
- @item @code{platforms} (par défaut : @code{'()})
- The list of emulated QEMU platforms. Each item must be a @dfn{platform
- object} as returned by @code{lookup-qemu-platforms} (see below).
- @item @code{guix-support?} (par défaut : @code{#f})
- When it is true, QEMU and all its dependencies are added to the build
- environment of @command{guix-daemon} (@pxref{Invoquer guix-daemon,
- @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
- handlers to be used within the build environment, which in turn means that
- you can transparently build programs for another architecture.
- For example, let's suppose you're on an x86_64 machine and you have this
- service:
- @example
- (service qemu-binfmt-service-type
- (qemu-binfmt-configuration
- (platforms (lookup-qemu-platforms "arm"))
- (guix-support? #t)))
- @end example
- Vous pouvez lancer :
- @example
- guix build -s armhf-linux inkscape
- @end example
- @noindent
- and it will build Inkscape for ARMv7 @emph{as if it were a native build},
- transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd
- like to test a package build for an architecture you don't have access to!
- @item @code{qemu} (par défaut : @code{qemu})
- Le paquet QEMU à utiliser.
- @end table
- @end deftp
- @deffn {Procédure Scheme} lookup-qemu-platforms @var{platforms}@dots{}
- Return the list of QEMU platform objects corresponding to
- @var{platforms}@dots{}. @var{platforms} must be a list of strings
- corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
- @code{"mips64el"}, and so on.
- @end deffn
- @deffn {Procédure Scheme} qemu-platform? @var{obj}
- Return true if @var{obj} is a platform object.
- @end deffn
- @deffn {Procédure Scheme} qemu-platform-name @var{platform}
- Return the name of @var{platform}---a string such as @code{"arm"}.
- @end deffn
- @node Services de contrôle de version
- @subsubsection Services de contrôle de version
- The @code{(gnu services version-control)} module provides a service to allow
- remote access to local Git repositories. There are three options: the
- @code{git-daemon-service}, which provides access to repositories via the
- @code{git://} unsecured TCP-based protocol, extending the @code{nginx} web
- server to proxy some requests to @code{git-http-backend}, or providing a web
- interface with @code{cgit-service-type}.
- @deffn {Procédure Scheme} git-daemon-service [#:config (git-daemon-configuration)]
- Return a service that runs @command{git daemon}, a simple TCP server to
- expose repositories over the Git protocol for anonymous access.
- The optional @var{config} argument should be a
- @code{<git-daemon-configuration>} object, by default it allows read-only
- access to exported@footnote{By creating the magic file
- "git-daemon-export-ok" in the repository directory.} repositories under
- @file{/srv/git}.
- @end deffn
- @deftp {Type de données} git-daemon-configuration
- Data type representing the configuration for @code{git-daemon-service}.
- @table @asis
- @item @code{package} (par défaut : @var{git})
- Package object of the Git distributed version control system.
- @item @code{export-all?} (par défaut : @var{#f})
- Whether to allow access for all Git repositories, even if they do not have
- the @file{git-daemon-export-ok} file.
- @item @code{base-path} (par défaut : @file{/srv/git})
- Whether to remap all the path requests as relative to the given path. If
- you run git daemon with @var{(base-path "/srv/git")} on example.com, then if
- you later try to pull @code{git://example.com/hello.git}, git daemon will
- interpret the path as @code{/srv/git/hello.git}.
- @item @code{user-path} (par défaut : @var{#f})
- Whether to allow @code{~user} notation to be used in requests. When
- specified with empty string, requests to @code{git://host/~alice/foo} is
- taken as a request to access @code{foo} repository in the home directory of
- user @code{alice}. If @var{(user-path "path")} is specified, the same
- request is taken as a request to access @code{path/foo} repository in the
- home directory of user @code{alice}.
- @item @code{listen} (par défaut : @var{'()})
- Whether to listen on specific IP addresses or hostnames, defaults to all.
- @item @code{port} (par défaut : @var{#f})
- Whether to listen on an alternative port, which defaults to 9418.
- @item @code{whitelist} (par défaut : @var{'()})
- If not empty, only allow access to this list of directories.
- @item @code{extra-options} (par défaut : @var{'()})
- Extra options will be passed to @code{git daemon}, please run @command{man
- git-daemon} for more information.
- @end table
- @end deftp
- The @code{git://} protocol lacks authentication. When you pull from a
- repository fetched via @code{git://}, you don't know that the data you
- receive was modified is really coming from the specified host, and you have
- your connection is subject to eavesdropping. It's better to use an
- authenticated and encrypted transport, such as @code{https}. Although Git
- allows you to serve repositories using unsophisticated file-based web
- servers, there is a faster protocol implemented by the
- @code{git-http-backend} program. This program is the back-end of a proper
- Git web service. It is designed to sit behind a FastCGI proxy. @xref{Services web}, for more on running the necessary @code{fcgiwrap} daemon.
- Guix has a separate configuration data type for serving Git repositories
- over HTTP.
- @deftp {Type de données} git-http-configuration
- Data type representing the configuration for @code{git-http-service}.
- @table @asis
- @item @code{package} (par défaut : @var{git})
- Package object of the Git distributed version control system.
- @item @code{git-root} (par défaut : @file{/srv/git})
- Directory containing the Git repositories to expose to the world.
- @item @code{export-all?} (par défaut : @var{#f})
- Whether to expose access for all Git repositories in @var{git-root}, even if
- they do not have the @file{git-daemon-export-ok} file.
- @item @code{uri-path} (par défaut : @file{/git/})
- Path prefix for Git access. With the default @code{/git/} prefix, this will
- map @code{http://@var{server}/git/@var{repo}.git} to
- @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with
- this prefix are not passed on to this Git instance.
- @item @code{fcgiwrap-socket} (par défaut : @code{127.0.0.1:9000})
- The socket on which the @code{fcgiwrap} daemon is listening. @xref{Services web}.
- @end table
- @end deftp
- There is no @code{git-http-service-type}, currently; instead you can create
- an @code{nginx-location-configuration} from a @code{git-http-configuration}
- and then add that location to a web server.
- @deffn {Procédure Scheme} git-http-nginx-location-configuration @
- [config=(git-http-configuration)] Compute an
- @code{nginx-location-configuration} that corresponds to the given Git http
- configuration. An example nginx service definition to serve the default
- @file{/srv/git} over HTTPS might be:
- @example
- (service nginx-service-type
- (nginx-configuration
- (server-blocks
- (list
- (nginx-server-configuration
- (listen '("443 ssl"))
- (server-name "git.my-host.org")
- (ssl-certificate
- "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
- (ssl-certificate-key
- "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
- (locations
- (list
- (git-http-nginx-location-configuration
- (git-http-configuration (uri-path "/"))))))))))
- @end example
- This example assumes that you are using Let's Encrypt to get your TLS
- certificate. @xref{Services de certificats}. The default @code{certbot}
- service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS.
- You will also need to add an @code{fcgiwrap} proxy to your system services.
- @xref{Services web}.
- @end deffn
- @subsubheading Service Cgit
- @cindex service cgit
- @cindex git, interface web
- @uref{https://git.zx2c4.com/cgit/, Cgit} est une interface web pour des
- dépôts Git écrite en C.
- The following example will configure the service with default values. By
- default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
- @example
- (service cgit-service-type)
- @end example
- The @code{file-object} type designates either a file-like object
- (@pxref{G-Expressions, file-like objects}) or a string.
- @c %start of fragment
- Les champs de @code{cgit-configuration} disponibles sont :
- @deftypevr {paramètre de @code{cgit-configuration}} package package
- Le paquet cgit.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} nginx-server-configuration-list nginx
- Configuration Nginx.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object about-filter
- Specifies a command which will be invoked to format the content of about
- pages (both top-level and for each repository).
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string agefile
- Specifies a path, relative to each repository path, which can be used to
- specify the date and time of the youngest commit in the repository.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object auth-filter
- Specifies a command that will be invoked for authenticating repository
- access.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string branch-sort
- Flag which, when set to @samp{age}, enables date ordering in the branch ref
- list, and when set @samp{name} enables ordering by branch name.
- La valeur par défaut est @samp{"name"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string cache-root
- Path used to store the cgit cache entries.
- La valeur par défaut est @samp{"/var/cache/cgit"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-static-ttl
- Number which specifies the time-to-live, in minutes, for the cached version
- of repository pages accessed with a fixed SHA1.
- La valeur par défaut est @samp{-1}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-dynamic-ttl
- Number which specifies the time-to-live, in minutes, for the cached version
- of repository pages accessed without a fixed SHA1.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-repo-ttl
- Number which specifies the time-to-live, in minutes, for the cached version
- of the repository summary page.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-root-ttl
- Number which specifies the time-to-live, in minutes, for the cached version
- of the repository index page.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-scanrc-ttl
- Number which specifies the time-to-live, in minutes, for the result of
- scanning a path for Git repositories.
- La valeur par défaut est @samp{15}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-about-ttl
- Number which specifies the time-to-live, in minutes, for the cached version
- of the repository about page.
- La valeur par défaut est @samp{15}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-snapshot-ttl
- Number which specifies the time-to-live, in minutes, for the cached version
- of snapshots.
- La valeur par défaut est @samp{5}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer cache-size
- The maximum number of entries in the cgit cache. When set to @samp{0},
- caching is disabled.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean case-sensitive-sort?
- Sort items in the repo list case sensitively.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} list clone-prefix
- List of common prefixes which, when combined with a repository URL,
- generates valid clone URLs for the repository.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} list clone-url
- List of @code{clone-url} templates.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object commit-filter
- Command which will be invoked to format commit messages.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string commit-sort
- Flag which, when set to @samp{date}, enables strict date ordering in the
- commit log, and when set to @samp{topo} enables strict topological ordering.
- La valeur par défaut est @samp{"git log"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object css
- URL which specifies the css document to include in all cgit pages.
- La valeur par défaut est @samp{"/share/cgit/cgit.css"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object email-filter
- Specifies a command which will be invoked to format names and email address
- of committers, authors, and taggers, as represented in various places
- throughout the cgit interface.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean embedded?
- Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment
- suitable for embedding in other HTML pages.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-commit-graph?
- Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit
- history graph to the left of the commit messages in the repository log page.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-filter-overrides?
- Flag which, when set to @samp{#t}, allows all filter settings to be
- overridden in repository-specific cgitrc files.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-follow-links?
- Flag which, when set to @samp{#t}, allows users to follow a file in the log
- view.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-http-clone?
- If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-links?
- Flag which, when set to @samp{#t}, will make cgit generate extra links
- "summary", "commit", "tree" for each repo in the repository index.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-index-owner?
- Flag which, when set to @samp{#t}, will make cgit display the owner of each
- repo in the repository index.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-filecount?
- Flag which, when set to @samp{#t}, will make cgit print the number of
- modified files for each commit on the repository log page.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-log-linecount?
- Flag which, when set to @samp{#t}, will make cgit print the number of added
- and removed lines for each commit on the repository log page.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-remote-branches?
- Flag which, when set to @code{#t}, will make cgit display remote branches in
- the summary and refs views.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-subject-links?
- Flag which, when set to @code{1}, will make cgit use the subject of the
- parent commit as link text when generating links to parent commits in commit
- view.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-html-serving?
- Flag which, when set to @samp{#t}, will make cgit use the subject of the
- parent commit as link text when generating links to parent commits in commit
- view.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-tree-linenumbers?
- Flag which, when set to @samp{#t}, will make cgit generate linenumber links
- for plaintext blobs printed in the tree view.
- La valeur par défaut est @samp{#t}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean enable-git-config?
- Flag which, when set to @samp{#f}, will allow cgit to use Git config to set
- any repo specific settings.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object favicon
- URL used as link to a shortcut icon for cgit.
- La valeur par défaut est @samp{"/favicon.ico"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string footer
- The content of the file specified with this option will be included verbatim
- at the bottom of all pages (i.e.@: it replaces the standard "generated
- by..."@: message).
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string head-include
- The content of the file specified with this option will be included verbatim
- in the HTML HEAD section on all pages.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string header
- The content of the file specified with this option will be included verbatim
- at the top of all pages.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object include
- Name of a configfile to include before the rest of the current config- file
- is parsed.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string index-header
- The content of the file specified with this option will be included verbatim
- above the repository index.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string index-info
- The content of the file specified with this option will be included verbatim
- below the heading on the repository index page.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean local-time?
- Flag which, if set to @samp{#t}, makes cgit print commit and tag times in
- the servers timezone.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object logo
- URL which specifies the source of an image which will be used as a logo on
- all cgit pages.
- La valeur par défaut est @samp{"/share/cgit/cgit.png"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string logo-link
- URL loaded when clicking on the cgit logo image.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object owner-filter
- Command which will be invoked to format the Owner column of the main page.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer max-atom-items
- Number of items to display in atom feeds view.
- La valeur par défaut est @samp{10}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer max-commit-count
- Number of entries to list per page in "log" view.
- La valeur par défaut est @samp{50}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer max-message-length
- Number of commit message characters to display in "log" view.
- La valeur par défaut est @samp{80}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer max-repo-count
- Specifies the number of entries to list per page on the repository index
- page.
- La valeur par défaut est @samp{50}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer max-repodesc-length
- Specifies the maximum number of repo description characters to display on
- the repository index page.
- La valeur par défaut est @samp{80}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer max-blob-size
- Specifies the maximum size of a blob to display HTML for in KBytes.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string max-stats
- Maximum statistics period. Valid values are @samp{week},@samp{month},
- @samp{quarter} and @samp{year}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} mimetype-alist mimetype
- Mimetype for the specified filename extension.
- La valeur par défaut est @samp{((gif "image/gif") (html "text/html") (jpg
- "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png "image/png")
- (svg "image/svg+xml"))}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object mimetype-file
- Specifies the file to use for automatic mimetype lookup.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string module-link
- Text which will be used as the formatstring for a hyperlink when a submodule
- is printed in a directory listing.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean nocache?
- If set to the value @samp{#t} caching will be disabled.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean noplainemail?
- If set to @samp{#t} showing full author email addresses will be disabled.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean noheader?
- Flag which, when set to @samp{#t}, will make cgit omit the standard header
- on all pages.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} project-list project-list
- A list of subdirectories inside of @code{repository-directory}, relative to
- it, that should loaded as Git repositories. An empty list means that all
- subdirectories will be loaded.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object readme
- Text which will be used as default value for @code{cgit-repo-readme}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean remove-suffix?
- If set to @code{#t} and @code{repository-directory} is enabled, if any
- repositories are found with a suffix of @code{.git}, this suffix will be
- removed for the URL and name.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer renamelimit
- Maximum number of files to consider when detecting renames.
- La valeur par défaut est @samp{-1}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string repository-sort
- The way in which repositories in each section are sorted.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} robots-list robots
- Text used as content for the @code{robots} meta-tag.
- La valeur par défaut est @samp{("noindex" "nofollow")}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string root-desc
- Text printed below the heading on the repository index page.
- La valeur par défaut est @samp{"a fast webinterface for the git dscm"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string root-readme
- The content of the file specified with this option will be included verbatim
- below thef "about" link on the repository index page.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string root-title
- Text printed as heading on the repository index page.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean scan-hidden-path
- If set to @samp{#t} and repository-directory is enabled,
- repository-directory will recurse into directories whose name starts with a
- period. Otherwise, repository-directory will stay away from such
- directories, considered as "hidden". Note that this does not apply to the
- ".git" directory in non-bare repos.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} list snapshots
- Text which specifies the default set of snapshot formats that cgit generates
- links for.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} repository-directory repository-directory
- Name of the directory to scan for repositories (represents
- @code{scan-path}).
- La valeur par défaut est @samp{"/srv/git"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string section
- The name of the current repository section - all repositories defined after
- this option will inherit the current section name.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string section-sort
- Flag which, when set to @samp{1}, will sort the sections on the repository
- listing by name.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer section-from-path
- A number which, if defined prior to repository-directory, specifies how many
- path elements from each repo path to use as a default section name.
- La valeur par défaut est @samp{0}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} boolean side-by-side-diffs?
- If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
- default.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} file-object source-filter
- Specifies a command which will be invoked to format plaintext blobs in the
- tree view.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer summary-branches
- Specifies the number of branches to display in the repository "summary"
- view.
- La valeur par défaut est @samp{10}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer summary-log
- Specifies the number of log entries to display in the repository "summary"
- view.
- La valeur par défaut est @samp{10}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} integer summary-tags
- Specifies the number of tags to display in the repository "summary" view.
- La valeur par défaut est @samp{10}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string strict-export
- Filename which, if specified, needs to be present within the repository for
- cgit to allow access to that repository.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} string virtual-root
- URL which, if specified, will be used as root for all cgit links.
- La valeur par défaut est @samp{"/"}.
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} repository-cgit-configuration-list repositories
- A list of @dfn{cgit-repo} records to use with config.
- La valeur par défaut est @samp{()}.
- Les champs de @code{repository-cgit-configuration} disponibles sont :
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list snapshots
- A mask of snapshot formats for this repo that cgit generates links for,
- restricted by the global @code{snapshots} setting.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object source-filter
- Override the default @code{source-filter}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string url
- The relative URL used to access the repository.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object about-filter
- Override the default @code{about-filter}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string branch-sort
- Flag which, when set to @samp{age}, enables date ordering in the branch ref
- list, and when set to @samp{name} enables ordering by branch name.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list clone-url
- A list of URLs which can be used to clone repo.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object commit-filter
- Override the default @code{commit-filter}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string commit-sort
- Flag which, when set to @samp{date}, enables strict date ordering in the
- commit log, and when set to @samp{topo} enables strict topological ordering.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string defbranch
- The name of the default branch for this repository. If no such branch
- exists in the repository, the first branch name (when sorted) is used as
- default instead. By default branch pointed to by HEAD, or "master" if there
- is no suitable HEAD.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string desc
- The value to show as repository description.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string homepage
- The value to show as repository homepage.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object email-filter
- Override the default @code{email-filter}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-commit-graph?
- A flag which can be used to disable the global setting
- @code{enable-commit-graph?}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-filecount?
- A flag which can be used to disable the global setting
- @code{enable-log-filecount?}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-log-linecount?
- A flag which can be used to disable the global setting
- @code{enable-log-linecount?}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-remote-branches?
- Flag which, when set to @code{#t}, will make cgit display remote branches in
- the summary and refs views.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-subject-links?
- A flag which can be used to override the global setting
- @code{enable-subject-links?}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} maybe-repo-boolean enable-html-serving?
- A flag which can be used to override the global setting
- @code{enable-html-serving?}.
- La valeur par défaut est @samp{disabled}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean hide?
- Flag which, when set to @code{#t}, hides the repository from the repository
- index.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-boolean ignore?
- Flag which, when set to @samp{#t}, ignores the repository.
- La valeur par défaut est @samp{#f}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object logo
- URL which specifies the source of an image which will be used as a logo on
- this repo’s pages.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string logo-link
- URL loaded when clicking on the cgit logo image.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-file-object owner-filter
- Override the default @code{owner-filter}.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string module-link
- Text which will be used as the formatstring for a hyperlink when a submodule
- is printed in a directory listing. The arguments for the formatstring are
- the path and SHA1 of the submodule commit.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} module-link-path module-link-path
- Text which will be used as the formatstring for a hyperlink when a submodule
- with the specified subdirectory path is printed in a directory listing.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string max-stats
- Override the default maximum statistics period.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string name
- The value to show as repository name.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string owner
- A value used to identify the owner of the repository.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string path
- An absolute path to the repository directory.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string readme
- A path (relative to repo) which specifies a file to include verbatim as the
- "About" page for this repo.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-string section
- The name of the current repository section - all repositories defined after
- this option will inherit the current section name.
- La valeur par défaut est @samp{""}.
- @end deftypevr
- @deftypevr {paramètre de @code{repository-cgit-configuration}} repo-list extra-options
- Extra options will be appended to cgitrc file.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @end deftypevr
- @deftypevr {paramètre de @code{cgit-configuration}} list extra-options
- Extra options will be appended to cgitrc file.
- La valeur par défaut est @samp{()}.
- @end deftypevr
- @c %end of fragment
- However, it could be that you just want to get a @code{cgitrc} up and
- running. In that case, you can pass an @code{opaque-cgit-configuration} as
- a record to @code{cgit-service-type}. As its name indicates, an opaque
- configuration does not have easy reflective capabilities.
- Les champs de @code{opaque-cgit-configuration} disponibles sont :
- @deftypevr {paramètre de @code{opaque-cgit-configuration}} package cgit
- The cgit package.
- @end deftypevr
- @deftypevr {paramètre de @code{opaque-cgit-configuration}} string string
- The contents of the @code{cgitrc}, as a string.
- @end deftypevr
- For example, if your @code{cgitrc} is just the empty string, you could
- instantiate a cgit service like this:
- @example
- (service cgit-service-type
- (opaque-cgit-configuration
- (cgitrc "")))
- @end example
- @subsubheading Service Gitolite
- @cindex service Gitolite
- @cindex Git, hébergement
- @uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
- repositories on a central server.
- Gitolite can handle multiple repositories and users, and supports flexible
- configuration of the permissions for the users on the repositories.
- The following example will configure Gitolite using the default @code{git}
- user, and the provided SSH public key.
- @example
- (service gitolite-service-type
- (gitolite-configuration
- (admin-pubkey (plain-file
- "yourname.pub"
- "ssh-rsa AAAA... guix@@example.com"))))
- @end example
- Gitolite is configured through a special admin repository which you can
- clone, for example, if you setup Gitolite on @code{example.com}, you would
- run the following command to clone the admin repository.
- @example
- git clone git@@example.com:gitolite-admin
- @end example
- When the Gitolite service is activated, the provided @code{admin-pubkey}
- will be inserted in to the @file{keydir} directory in the gitolite-admin
- repository. If this results in a change in the repository, it will be
- committed using the message ``gitolite setup by GNU Guix''.
- @deftp {Type de données} gitolite-configuration
- Type de données représentant la configuration de
- @code{gitolite-service-type}.
- @table @asis
- @item @code{package} (par défaut : @var{gitolite})
- Le paquet Gitolite à utiliser.
- @item @code{user} (par défaut : @var{git})
- User to use for Gitolite. This will be user that you use when accessing
- Gitolite over SSH.
- @item @code{group} (par défaut : @var{git})
- Groupe à utiliser pour Gitolite.
- @item @code{home-directory} (par défaut : @var{"/var/lib/gitolite"})
- Répertoire dans lequel stocker la configuration et les dépôts de Gitolite.
- @item @code{rc-file} (par défaut : @var{(gitolite-rc-file)})
- Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
- représentant la configuration de Gitolite.
- @item @code{admin-pubkey} (par défaut : @var{#f})
- Un objet « simili-fichier » (@pxref{G-Expressions, file-like objects})
- utilisé pour paramétrer Gitolite. Il sera inséré dans le répertoire
- @file{keydir} dans le dépôt gitolite-admin.
- To specify the SSH key as a string, use the @code{plain-file} function.
- @example
- (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
- @end example
- @end table
- @end deftp
- @deftp {Type de données} gitolite-rc-file
- Type de données représentant le fichier RC de Gitolite.
- @table @asis
- @item @code{umask} (par défaut : @code{#o0077})
- This controls the permissions Gitolite sets on the repositories and their
- contents.
- A value like @code{#o0027} will give read access to the group used by
- Gitolite (by default: @code{git}). This is necessary when using Gitolite
- with software like cgit or gitweb.
- @item @code{git-config-keys} (par défaut : @code{""})
- Gitolite allows you to set git config values using the "config"
- keyword. This setting allows control over the config keys to accept.
- @item @code{roles} (par défaut : @code{'(("READERS" . 1) ("WRITERS" . ))})
- Set the role names allowed to be used by users running the perms command.
- @item @code{enable} (par défaut : @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
- This setting controls the commands and features to enable within Gitolite.
- @end table
- @end deftp
- @node Services de jeu
- @subsubsection Services de jeu
- @subsubheading The Battle for Wesnoth Service
- @cindex wesnothd
- @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn based
- tactical strategy game, with several single player campaigns, and
- multiplayer games (both networked and local).
- @defvar {Variable Scheme} wesnothd-service-type
- Service type for the wesnothd service. Its value must be a
- @code{wesnothd-configuration} object. To run wesnothd in the default
- configuration, instantiate it as:
- @example
- (service wesnothd-service-type)
- @end example
- @end defvar
- @deftp {Type de données} wesnothd-configuration
- Data type representing the configuration of @command{wesnothd}.
- @table @asis
- @item @code{package} (par défaut : @code{wesnoth-server})
- The wesnoth server package to use.
- @item @code{port} (par défaut : @code{15000})
- The port to bind the server to.
- @end table
- @end deftp
- @node Services divers
- @subsubsection Services divers
- @cindex fingerprint
- @subsubheading Service d'empreintes digitales
- Le module @code{(gnu services fingerprint)} fournit un service DBus pour
- lire et identifier les empreintes digitales via un lecteur d'empreinte.
- @defvr {Variable Scheme} fprintd-service-type
- The service type for @command{fprintd}, which provides the fingerprint
- reading capability.
- @example
- (service fprintd-service-type)
- @end example
- @end defvr
- @cindex sysctl
- @subsubheading System Control Service
- The @code{(gnu services sysctl)} provides a service to configure kernel
- parameters at boot.
- @defvr {Variable Scheme} sysctl-service-type
- The service type for @command{sysctl}, which modifies kernel parameters
- under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated
- as:
- @example
- (service sysctl-service-type
- (sysctl-configuration
- (settings '(("net.ipv4.ip_forward" . "1")))))
- @end example
- @end defvr
- @deftp {Type de données} sysctl-configuration
- The data type representing the configuration of @command{sysctl}.
- @table @asis
- @item @code{sysctl} (par défaut : @code{(file-append procps "/sbin/sysctl"})
- The @command{sysctl} executable to use.
- @item @code{settings} (par défaut : @code{'()})
- An association list specifies kernel parameters and their values.
- @end table
- @end deftp
- @cindex pcscd
- @subsubheading PC/SC Smart Card Daemon Service
- The @code{(gnu services security-token)} module provides the following
- service to run @command{pcscd}, the PC/SC Smart Card Daemon.
- @command{pcscd} is the daemon program for pcsc-lite and the MuscleCard
- framework. It is a resource manager that coordinates communications with
- smart card readers, smart cards and cryptographic tokens that are connected
- to the system.
- @defvr {Variable Scheme} pcscd-service-type
- Le type de service pour le service @command{pcscd}. Sa valeur doit être un
- objet @code{pcscd-configuration}. Pour lancer pcscd dans sa configuration
- par défaut, instantiez-le avec :
- @example
- (service pcscd-service-type)
- @end example
- @end defvr
- @deftp {Type de données} pcscd-configuration
- Type de données représentant la configuration de @command{pcscd}.
- @table @asis
- @item @code{pcsc-lite} (par défaut : @code{pcsc-lite})
- Le paquet pcsc-lite qui fournit pcscd.
- @item @code{usb-drivers} (par défaut : @code{(list ccid)})
- List of packages that provide USB drivers to pcscd. Drivers are expected to
- be under @file{pcsc/drivers} in the store directory of the package.
- @end table
- @end deftp
- @cindex lirc
- @subsubheading Lirc Service
- The @code{(gnu services lirc)} module provides the following service.
- @deffn {Procédure Scheme} lirc-service [#:lirc lirc] @
- [#:device #f] [#:driver #f] [#:config-file #f] @ [#:extra-options '()]
- Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
- decodes infrared signals from remote controls.
- Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
- file name) may be specified. See @command{lircd} manual for details.
- Finally, @var{extra-options} is a list of additional command-line options
- passed to @command{lircd}.
- @end deffn
- @cindex spice
- @subsubheading Spice Service
- The @code{(gnu services spice)} module provides the following service.
- @deffn {Procédure Scheme} spice-vdagent-service [#:spice-vdagent]
- Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a
- daemon that enables sharing the clipboard with a vm and setting the guest
- display resolution when the graphical console window resizes.
- @end deffn
- @subsubsection Dictionary Services
- @cindex dictionary
- The @code{(gnu services dict)} module provides the following service:
- @deffn {Procédure Scheme} dicod-service [#:config (dicod-configuration)]
- Return a service that runs the @command{dicod} daemon, an implementation of
- DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
- The optional @var{config} argument specifies the configuration for
- @command{dicod}, which should be a @code{<dicod-configuration>} object, by
- default it serves the GNU Collaborative International Dictonary of English.
- You can add @command{open localhost} to your @file{~/.dico} file to make
- @code{localhost} the default server for @command{dico} client
- (@pxref{Initialization File,,, dico, GNU Dico Manual}).
- @end deffn
- @deftp {Type de données} dicod-configuration
- Data type representing the configuration of dicod.
- @table @asis
- @item @code{dico} (par défaut : @var{dico})
- Package object of the GNU Dico dictionary server.
- @item @code{interfaces} (par défaut : @var{'("localhost")})
- This is the list of IP addresses and ports and possibly socket file names to
- listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico
- Manual}).
- @item @code{handlers} (par défaut : @var{'()})
- List of @code{<dicod-handler>} objects denoting handlers (module instances).
- @item @code{databases} (par défaut : @var{(list %dicod-database:gcide)})
- List of @code{<dicod-database>} objects denoting dictionaries to be served.
- @end table
- @end deftp
- @deftp {Type de données} dicod-handler
- Data type representing a dictionary handler (module instance).
- @table @asis
- @item @code{name}
- Name of the handler (module instance).
- @item @code{module} (par défaut : @var{#f})
- Name of the dicod module of the handler (instance). If it is @code{#f}, the
- module has the same name as the handler. (@pxref{Modules,,, dico, GNU Dico
- Manual}).
- @item @code{options}
- List of strings or gexps representing the arguments for the module handler
- @end table
- @end deftp
- @deftp {Type de données} dicod-database
- Data type representing a dictionary database.
- @table @asis
- @item @code{name}
- Name of the database, will be used in DICT commands.
- @item @code{handler}
- Name of the dicod handler (module instance) used by this database
- (@pxref{Handlers,,, dico, GNU Dico Manual}).
- @item @code{complex?} (par défaut : @var{#f})
- Whether the database configuration complex. The complex configuration will
- need a corresponding @code{<dicod-handler>} object, otherwise not.
- @item @code{options}
- List of strings or gexps representing the arguments for the database
- (@pxref{Databases,,, dico, GNU Dico Manual}).
- @end table
- @end deftp
- @defvr {Variable Scheme} %dicod-database:gcide
- A @code{<dicod-database>} object serving the GNU Collaborative International
- Dictionary of English using the @code{gcide} package.
- @end defvr
- The following is an example @code{dicod-service} configuration.
- @example
- (dicod-service #:config
- (dicod-configuration
- (handlers (list (dicod-handler
- (name "wordnet")
- (module "dictorg")
- (options
- (list #~(string-append "dbdir=" #$wordnet))))))
- (databases (list (dicod-database
- (name "wordnet")
- (complex? #t)
- (handler "wordnet")
- (options '("database=wn")))
- %dicod-database:gcide))))
- @end example
- @node Programmes setuid
- @subsection Programmes setuid
- @cindex setuid programs
- Some programs need to run with ``root'' privileges, even when they are
- launched by unprivileged users. A notorious example is the @command{passwd}
- program, which users can run to change their password, and which needs to
- access the @file{/etc/passwd} and @file{/etc/shadow} files---something
- normally restricted to root, for obvious security reasons. To address that,
- these executables are @dfn{setuid-root}, meaning that they always run with
- root privileges (@pxref{How Change Persona,,, libc, The GNU C Library
- Reference Manual}, for more info about the setuid mechanism.)
- The store itself @emph{cannot} contain setuid programs: that would be a
- security issue since any user on the system can write derivations that
- populate the store (@pxref{Le dépôt}). Thus, a different mechanism is
- used: instead of changing the setuid bit directly on files that are in the
- store, we let the system administrator @emph{declare} which programs should
- be setuid root.
- The @code{setuid-programs} field of an @code{operating-system} declaration
- contains a list of G-expressions denoting the names of programs to be
- setuid-root (@pxref{Utiliser le système de configuration}). For instance, the
- @command{passwd} program, which is part of the Shadow package, can be
- designated by this G-expression (@pxref{G-Expressions}):
- @example
- #~(string-append #$shadow "/bin/passwd")
- @end example
- A default set of setuid programs is defined by the @code{%setuid-programs}
- variable of the @code{(gnu system)} module.
- @defvr {Variable Scheme} %setuid-programs
- A list of G-expressions denoting common programs that are setuid-root.
- The list includes commands such as @command{passwd}, @command{ping},
- @command{su}, and @command{sudo}.
- @end defvr
- Under the hood, the actual setuid programs are created in the
- @file{/run/setuid-programs} directory at system activation time. The files
- in this directory refer to the ``real'' binaries, which are in the store.
- @node Certificats X.509
- @subsection Certificats X.509
- @cindex HTTPS, certificates
- @cindex X.509 certificates
- @cindex TLS
- Web servers available over HTTPS (that is, HTTP over the transport-layer
- security mechanism, TLS) send client programs an @dfn{X.509 certificate}
- that the client can then use to @emph{authenticate} the server. To do that,
- clients verify that the server's certificate is signed by a so-called
- @dfn{certificate authority} (CA). But to verify the CA's signature, clients
- must have first acquired the CA's certificate.
- Web browsers such as GNU@tie{}IceCat include their own set of CA
- certificates, such that they are able to verify CA signatures
- out-of-the-box.
- However, most other programs that can talk HTTPS---@command{wget},
- @command{git}, @command{w3m}, etc.---need to be told where CA certificates
- can be found.
- @cindex @code{nss-certs}
- In GuixSD, this is done by adding a package that provides certificates to
- the @code{packages} field of the @code{operating-system} declaration
- (@pxref{Référence de système d'exploitation}). GuixSD includes one such package,
- @code{nss-certs}, which is a set of CA certificates provided as part of
- Mozilla's Network Security Services.
- Note that it is @emph{not} part of @var{%base-packages}, so you need to
- explicitly add it. The @file{/etc/ssl/certs} directory, which is where most
- applications and libraries look for certificates by default, points to the
- certificates installed globally.
- Unprivileged users, including users of Guix on a foreign distro, can also
- install their own certificate package in their profile. A number of
- environment variables need to be defined so that applications and libraries
- know where to find them. Namely, the OpenSSL library honors the
- @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE} variables. Some applications
- add their own environment variables; for instance, the Git version control
- system honors the certificate bundle pointed to by the @code{GIT_SSL_CAINFO}
- environment variable. Thus, you would typically run something like:
- @example
- $ guix package -i nss-certs
- $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
- $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
- $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
- @end example
- As another example, R requires the @code{CURL_CA_BUNDLE} environment
- variable to point to a certificate bundle, so you would have to run
- something like this:
- @example
- $ guix package -i nss-certs
- $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
- @end example
- For other applications you may want to look up the required environment
- variable in the relevant documentation.
- @node Name Service Switch
- @subsection Name Service Switch
- @cindex name service switch
- @cindex NSS
- The @code{(gnu system nss)} module provides bindings to the configuration
- file of the libc @dfn{name service switch} or @dfn{NSS} (@pxref{NSS
- Configuration File,,, libc, The GNU C Library Reference Manual}). In a
- nutshell, the NSS is a mechanism that allows libc to be extended with new
- ``name'' lookup methods for system databases, which includes host names,
- service names, user accounts, and more (@pxref{Name Service Switch, System
- Databases and Name Service Switch,, libc, The GNU C Library Reference
- Manual}).
- The NSS configuration specifies, for each system database, which lookup
- method is to be used, and how the various methods are chained together---for
- instance, under which circumstances NSS should try the next method in the
- list. The NSS configuration is given in the @code{name-service-switch}
- field of @code{operating-system} declarations (@pxref{Référence de système d'exploitation, @code{name-service-switch}}).
- @cindex nss-mdns
- @cindex .local, host name lookup
- As an example, the declaration below configures the NSS to use the
- @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
- back-end}, which supports host name lookups over multicast DNS (mDNS) for
- host names ending in @code{.local}:
- @example
- (name-service-switch
- (hosts (list %files ;first, check /etc/hosts
- ;; If the above did not succeed, try
- ;; with 'mdns_minimal'.
- (name-service
- (name "mdns_minimal")
- ;; 'mdns_minimal' is authoritative for
- ;; '.local'. When it returns "not found",
- ;; no need to try the next methods.
- (reaction (lookup-specification
- (not-found => return))))
- ;; Then fall back to DNS.
- (name-service
- (name "dns"))
- ;; Finally, try with the "full" 'mdns'.
- (name-service
- (name "mdns")))))
- @end example
- Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
- contains this configuration, so you will not have to type it if all you want
- is to have @code{.local} host lookup working.
- Note that, in this case, in addition to setting the
- @code{name-service-switch} of the @code{operating-system} declaration, you
- also need to use @code{avahi-service} (@pxref{Services réseau,
- @code{avahi-service}}), or @var{%desktop-services}, which includes it
- (@pxref{Services de bureaux}). Doing this makes @code{nss-mdns} accessible to
- the name service cache daemon (@pxref{Services de base, @code{nscd-service}}).
- For convenience, the following variables provide typical NSS configurations.
- @defvr {Variable Scheme} %default-nss
- This is the default name service switch configuration, a
- @code{name-service-switch} object.
- @end defvr
- @defvr {Variable Scheme} %mdns-host-lookup-nss
- This is the name service switch configuration with support for host name
- lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
- @end defvr
- The reference for name service switch configuration is given below. It is a
- direct mapping of the configuration file format of the C library , so please
- refer to the C library manual for more information (@pxref{NSS Configuration
- File,,, libc, The GNU C Library Reference Manual}). Compared to the
- configuration file format of libc NSS, it has the advantage not only of
- adding this warm parenthetic feel that we like, but also static checks: you
- will know about syntax errors and typos as soon as you run @command{guix
- system}.
- @deftp {Type de données} name-service-switch
- This is the data type representation the configuration of libc's name
- service switch (NSS). Each field below represents one of the supported
- system databases.
- @table @code
- @item aliases
- @itemx ethers
- @itemx group
- @itemx gshadow
- @itemx hosts
- @itemx initgroups
- @itemx netgroup
- @itemx networks
- @itemx password
- @itemx public-key
- @itemx rpc
- @itemx services
- @itemx shadow
- The system databases handled by the NSS. Each of these fields must be a
- list of @code{<name-service>} objects (see below).
- @end table
- @end deftp
- @deftp {Type de données} name-service
- This is the data type representing an actual name service and the associated
- lookup action.
- @table @code
- @item name
- A string denoting the name service (@pxref{Services in the NSS
- configuration,,, libc, The GNU C Library Reference Manual}).
- Note that name services listed here must be visible to nscd. This is
- achieved by passing the @code{#:name-services} argument to
- @code{nscd-service} the list of packages providing the needed name services
- (@pxref{Services de base, @code{nscd-service}}).
- @item reaction
- An action specified using the @code{lookup-specification} macro
- (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
- Reference Manual}). For example:
- @example
- (lookup-specification (unavailable => continue)
- (success => return))
- @end example
- @end table
- @end deftp
- @node Disque de RAM initial
- @subsection Disque de RAM initial
- @cindex initrd
- @cindex disque de RAM initial
- For bootstrapping purposes, the Linux-Libre kernel is passed an @dfn{initial
- RAM disk}, or @dfn{initrd}. An initrd contains a temporary root file system
- as well as an initialization script. The latter is responsible for mounting
- the real root file system, and for loading any kernel modules that may be
- needed to achieve that.
- The @code{initrd-modules} field of an @code{operating-system} declaration
- allows you to specify Linux-libre kernel modules that must be available in
- the initrd. In particular, this is where you would list modules needed to
- actually drive the hard disk where your root partition is---although the
- default value of @code{initrd-modules} should cover most use cases. For
- example, assuming you need the @code{megaraid_sas} module in addition to the
- default modules to be able to access your root file system, you would write:
- @example
- (operating-system
- ;; @dots{}
- (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
- @end example
- @defvr {Variable Scheme} %base-initrd-modules
- This is the list of kernel modules included in the initrd by default.
- @end defvr
- Furthermore, if you need lower-level customization, the @code{initrd} field
- of an @code{operating-system} declaration allows you to specify which initrd
- you would like to use. The @code{(gnu system linux-initrd)} module provides
- three ways to build an initrd: the high-level @code{base-initrd} procedure
- and the low-level @code{raw-initrd} and @code{expression->initrd}
- procedures.
- The @code{base-initrd} procedure is intended to cover most common uses. For
- example, if you want to add a bunch of kernel modules to be loaded at boot
- time, you can define the @code{initrd} field of the operating system
- declaration like this:
- @example
- (initrd (lambda (file-systems . rest)
- ;; Create a standard initrd but set up networking
- ;; with the parameters QEMU expects by default.
- (apply base-initrd file-systems
- #:qemu-networking? #t
- rest)))
- @end example
- The @code{base-initrd} procedure also handles common use cases that involves
- using the system as a QEMU guest, or as a ``live'' system with volatile root
- file system.
- The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
- Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
- such as trying to guess which kernel modules and packages should be included
- to the initrd. An example use of @code{raw-initrd} is when a user has a
- custom Linux kernel configuration and default kernel modules included by
- @code{base-initrd} are not available.
- The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
- honors several options passed on the Linux kernel command line (that is,
- arguments passed @i{via} the @code{linux} command of GRUB, or the
- @code{-append} option of QEMU), notably:
- @table @code
- @item --load=@var{boot}
- Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
- program, once it has mounted the root file system.
- GuixSD uses this option to yield control to a boot program that runs the
- service activation programs and then spawns the GNU@tie{}Shepherd, the
- initialization system.
- @item --root=@var{root}
- Mount @var{root} as the root file system. @var{root} can be a device name
- like @code{/dev/sda1}, a file system label, or a file system UUID.
- @item --system=@var{système}
- Have @file{/run/booted-system} and @file{/run/current-system} point to
- @var{system}.
- @item modprobe.blacklist=@var{modules}@dots{}
- @cindex module, black-listing
- @cindex black list, of kernel modules
- Instruct the initial RAM disk as well as the @command{modprobe} command
- (from the kmod package) to refuse to load @var{modules}. @var{modules} must
- be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}.
- @item --repl
- Start a read-eval-print loop (REPL) from the initial RAM disk before it
- tries to load kernel modules and to mount the root file system. Our
- marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will love
- it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference Manual},
- for more information on Guile's REPL.
- @end table
- Now that you know all the features that initial RAM disks produced by
- @code{base-initrd} and @code{raw-initrd} provide, here is how to use it and
- customize it further.
- @cindex initrd
- @cindex disque de RAM initial
- @deffn {Procédure Scheme} raw-initrd @var{file-systems} @
- [#:linux-modules '()] [#:mapped-devices '()] @ [#:helper-packages '()]
- [#:qemu-networking? #f] [#:volatile-root? #f] Return a derivation that
- builds a raw initrd. @var{file-systems} is a list of file systems to be
- mounted by the initrd, possibly in addition to the root file system
- specified on the kernel command line via @code{--root}. @var{linux-modules}
- is a list of kernel modules to be loaded at boot time. @var{mapped-devices}
- is a list of device mappings to realize before @var{file-systems} are
- mounted (@pxref{Périphériques mappés}). @var{helper-packages} is a list of
- packages to be copied in the initrd. It may include @code{e2fsck/static} or
- other packages needed by the initrd to check the root file system.
- When @var{qemu-networking?} is true, set up networking with the standard
- QEMU parameters. When @var{virtio?} is true, load additional modules so
- that the initrd can be used as a QEMU guest with para-virtualized I/O
- drivers.
- When @var{volatile-root?} is true, the root file system is writable but any
- changes to it are lost.
- @end deffn
- @deffn {Procédure Scheme} base-initrd @var{file-systems} @
- [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
- [#:linux-modules '()] Return as a file-like object a generic initrd, with
- kernel modules taken from @var{linux}. @var{file-systems} is a list of
- file-systems to be mounted by the initrd, possibly in addition to the root
- file system specified on the kernel command line via @code{--root}.
- @var{mapped-devices} is a list of device mappings to realize before
- @var{file-systems} are mounted.
- @var{qemu-networking?} and @var{volatile-root?} behaves as in
- @code{raw-initrd}.
- The initrd is automatically populated with all the kernel modules necessary
- for @var{file-systems} and for the given options. Additional kernel modules
- can be listed in @var{linux-modules}. They will be added to the initrd, and
- loaded at boot time in the order in which they appear.
- @end deffn
- Needless to say, the initrds we produce and use embed a statically-linked
- Guile, and the initialization program is a Guile program. That gives a lot
- of flexibility. The @code{expression->initrd} procedure builds such an
- initrd, given the program to run in that initrd.
- @deffn {Procédure Scheme} expression->initrd @var{exp} @
- [#:guile %guile-static-stripped] [#:name "guile-initrd"] Return as a
- file-like object a Linux initrd (a gzipped cpio archive) containing
- @var{guile} and that evaluates @var{exp}, a G-expression, upon booting. All
- the derivations referenced by @var{exp} are automatically copied to the
- initrd.
- @end deffn
- @node Configuration du chargeur d'amorçage
- @subsection Configuration du chargeur d'amorçage
- @cindex bootloader
- @cindex boot loader
- The operating system supports multiple bootloaders. The bootloader is
- configured using @code{bootloader-configuration} declaration. All the
- fields of this structure are bootloader agnostic except for one field,
- @code{bootloader} that indicates the bootloader to be configured and
- installed.
- Some of the bootloaders do not honor every field of
- @code{bootloader-configuration}. For instance, the extlinux bootloader does
- not support themes and thus ignores the @code{theme} field.
- @deftp {Type de données} bootloader-configuration
- The type of a bootloader configuration declaration.
- @table @asis
- @item @code{bootloader}
- @cindex EFI, bootloader
- @cindex UEFI, bootloader
- @cindex BIOS, bootloader
- The bootloader to use, as a @code{bootloader} object. For now
- @code{grub-bootloader}, @code{grub-efi-bootloader},
- @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
- @vindex grub-efi-bootloader
- @code{grub-efi-bootloader} allows to boot on modern systems using the
- @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
- use if the installation image contains a @file{/sys/firmware/efi} directory
- when you boot it on your system.
- @vindex grub-bootloader
- @code{grub-bootloader} allows you to boot in particular Intel-based machines
- in ``legacy'' BIOS mode.
- @cindex ARM, chargeurs d'amorçage
- @cindex AArch64, chargeurs d'amorçage
- Available bootloaders are described in @code{(gnu bootloader @dots{})}
- modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
- of bootloaders for a wide range of ARM and AArch64 systems, using the
- @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
- @item @code{target}
- This is a string denoting the target onto which to install the bootloader.
- The interpretation depends on the bootloader in question. For
- @code{grub-bootloader}, for example, it should be a device name understood
- by the bootloader @command{installer} command, such as @code{/dev/sda} or
- @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
- @code{grub-efi-bootloader}, it should be the mount point of the EFI file
- system, usually @file{/boot/efi}.
- @item @code{menu-entries} (par défaut : @code{()})
- A possibly empty list of @code{menu-entry} objects (see below), denoting
- entries to appear in the bootloader menu, in addition to the current system
- entry and the entry pointing to previous system generations.
- @item @code{default-entry} (par défaut : @code{0})
- The index of the default boot menu entry. Index 0 is for the entry of the
- current system.
- @item @code{timeout} (par défaut : @code{5})
- The number of seconds to wait for keyboard input before booting. Set to 0
- to boot immediately, and to -1 to wait indefinitely.
- @item @code{theme} (par défaut : @var{#f})
- The bootloader theme object describing the theme to use. If no theme is
- provided, some bootloaders might use a default theme, that's true for GRUB.
- @item @code{terminal-outputs} (par défaut : @code{'gfxterm})
- The output terminals used for the bootloader boot menu, as a list of
- symbols. GRUB accepts the values: @code{console}, @code{serial},
- @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text},
- @code{morse}, and @code{pkmodem}. This field corresponds to the GRUB
- variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,,
- grub,GNU GRUB manual}).
- @item @code{terminal-inputs} (par défaut : @code{'()})
- The input terminals used for the bootloader boot menu, as a list of
- symbols. For GRUB, the default is the native platform terminal as
- determined at run-time. GRUB accepts the values: @code{console},
- @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
- @code{usb_keyboard}. This field corresponds to the GRUB variable
- @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
- manual}).
- @item @code{serial-unit} (par défaut : @code{#f})
- The serial unit used by the bootloader, as an integer from 0 to 3. For
- GRUB, it is chosen at run-time; currently GRUB chooses 0, which corresponds
- to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
- @item @code{serial-speed} (par défaut : @code{#f})
- The speed of the serial interface, as an integer. For GRUB, the default
- value is chosen at run-time; currently GRUB chooses 9600@tie{}bps
- (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
- @end table
- @end deftp
- @cindex dual boot
- @cindex boot menu
- Should you want to list additional boot menu entries @i{via} the
- @code{menu-entries} field above, you will need to create them with the
- @code{menu-entry} form. For example, imagine you want to be able to boot
- another distro (hard to imagine!), you can define a menu entry along these
- lines:
- @example
- (menu-entry
- (label "The Other Distro")
- (linux "/boot/old/vmlinux-2.6.32")
- (linux-arguments '("root=/dev/sda2"))
- (initrd "/boot/old/initrd"))
- @end example
- Details below.
- @deftp {Type de données} menu-entry
- The type of an entry in the bootloader menu.
- @table @asis
- @item @code{label}
- The label to show in the menu---e.g., @code{"GNU"}.
- @item @code{linux}
- The Linux kernel image to boot, for example:
- @example
- (file-append linux-libre "/bzImage")
- @end example
- For GRUB, it is also possible to specify a device explicitly in the file
- path using GRUB's device naming convention (@pxref{Naming convention,,,
- grub, GNU GRUB manual}), for example:
- @example
- "(hd0,msdos1)/boot/vmlinuz"
- @end example
- If the device is specified explicitly as above, then the @code{device} field
- is ignored entirely.
- @item @code{linux-arguments} (par défaut : @code{()})
- The list of extra Linux kernel command-line arguments---e.g.,
- @code{("console=ttyS0")}.
- @item @code{initrd}
- A G-Expression or string denoting the file name of the initial RAM disk to
- use (@pxref{G-Expressions}).
- @item @code{device} (par défaut : @code{#f})
- The device where the kernel and initrd are to be found---i.e., for GRUB,
- @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
- This may be a file system label (a string), a file system UUID (a
- bytevector, @pxref{Systèmes de fichiers}), or @code{#f}, in which case the
- bootloader will search the device containing the file specified by the
- @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must
- @emph{not} be an OS device name such as @file{/dev/sda1}.
- @end table
- @end deftp
- @c FIXME: Write documentation once it's stable.
- Fow now only GRUB has theme support. GRUB themes are created using the
- @code{grub-theme} form, which is not documented yet.
- @defvr {Variable Scheme} %default-theme
- This is the default GRUB theme used by the operating system if no
- @code{theme} field is specified in @code{bootloader-configuration} record.
- It comes with a fancy background image displaying the GNU and Guix logos.
- @end defvr
- @node Invoquer guix system
- @subsection Invoquer @code{guix system}
- Once you have written an operating system declaration as seen in the
- previous section, it can be @dfn{instantiated} using the @command{guix
- system} command. The synopsis is:
- @example
- guix system @var{options}@dots{} @var{action} @var{file}
- @end example
- @var{file} must be the name of a file containing an @code{operating-system}
- declaration. @var{action} specifies how the operating system is
- instantiated. Currently the following values are supported:
- @table @code
- @item search
- Display available service type definitions that match the given regular
- expressions, sorted by relevance:
- @example
- $ guix system search console font
- name: console-fonts
- location: gnu/services/base.scm:729:2
- extends: shepherd-root
- description: Install the given fonts on the specified ttys (fonts are
- + per virtual console on GNU/Linux). The value of this service is a list
- + of tty/font pairs like:
- +
- + '(("tty1" . "LatGrkCyr-8x16"))
- relevance: 20
- name: mingetty
- location: gnu/services/base.scm:1048:2
- extends: shepherd-root
- description: Provide console login using the `mingetty' program.
- relevance: 2
- name: login
- location: gnu/services/base.scm:775:2
- extends: pam
- description: Provide a console log-in service as specified by its
- + configuration value, a `login-configuration' object.
- relevance: 2
- @dots{}
- @end example
- As for @command{guix package --search}, the result is written in
- @code{recutils} format, which makes it easy to filter the output
- (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
- @item reconfigure
- Build the operating system described in @var{file}, activate it, and switch
- to it@footnote{This action (and the related actions @code{switch-generation}
- and @code{roll-back}) are usable only on systems already running GuixSD.}.
- This effects all the configuration specified in @var{file}: user accounts,
- system services, global package list, setuid programs, etc. The command
- starts system services specified in @var{file} that are not currently
- running; if a service is currently running this command will arrange for it
- to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or
- @code{herd restart X}).
- This command creates a new generation whose number is one greater than the
- current generation (as reported by @command{guix system list-generations}).
- If that generation already exists, it will be overwritten. This behavior
- mirrors that of @command{guix package} (@pxref{Invoquer guix package}).
- It also adds a bootloader menu entry for the new OS configuration, ---unless
- @option{--no-bootloader} is passed. For GRUB, it moves entries for older
- configurations to a submenu, allowing you to choose an older system
- generation at boot time should you need it.
- @quotation Remarque
- @c The paragraph below refers to the problem discussed at
- @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
- It is highly recommended to run @command{guix pull} once before you run
- @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
- @command{reconfigure} has completed.
- @end quotation
- @item switch-generation
- @cindex générations
- Switch to an existing system generation. This action atomically switches
- the system profile to the specified system generation. It also rearranges
- the system's existing bootloader menu entries. It makes the menu entry for
- the specified system generation the default, and it moves the entries for
- the other generatiors to a submenu, if supported by the bootloader being
- used. The next time the system boots, it will use the specified system
- generation.
- The bootloader itself is not being reinstalled when using this command.
- Thus, the installed bootloader is used with an updated configuration file.
- The target generation can be specified explicitly by its generation number.
- For example, the following invocation would switch to system generation 7:
- @example
- guix system switch-generation 7
- @end example
- The target generation can also be specified relative to the current
- generation with the form @code{+N} or @code{-N}, where @code{+3} means ``3
- generations ahead of the current generation,'' and @code{-1} means ``1
- generation prior to the current generation.'' When specifying a negative
- value such as @code{-1}, you must precede it with @code{--} to prevent it
- from being parsed as an option. For example:
- @example
- guix system switch-generation -- -1
- @end example
- Currently, the effect of invoking this action is @emph{only} to switch the
- system profile to an existing generation and rearrange the bootloader menu
- entries. To actually start using the target system generation, you must
- reboot after running this action. In the future, it will be updated to do
- the same things as @command{reconfigure}, like activating and deactivating
- services.
- This action will fail if the specified generation does not exist.
- @item roll-back
- @cindex revenir en arrière
- Switch to the preceding system generation. The next time the system boots,
- it will use the preceding system generation. This is the inverse of
- @command{reconfigure}, and it is exactly the same as invoking
- @command{switch-generation} with an argument of @code{-1}.
- Currently, as with @command{switch-generation}, you must reboot after
- running this action to actually start using the preceding system generation.
- @item build
- Build the derivation of the operating system, which includes all the
- configuration files and programs needed to boot and run the system. This
- action does not actually install anything.
- @item init
- Populate the given directory with all the files necessary to run the
- operating system specified in @var{file}. This is useful for first-time
- installations of GuixSD. For instance:
- @example
- guix system init my-os-config.scm /mnt
- @end example
- copies to @file{/mnt} all the store items required by the configuration
- specified in @file{my-os-config.scm}. This includes configuration files,
- packages, and so on. It also creates other essential files needed for the
- system to operate correctly---e.g., the @file{/etc}, @file{/var}, and
- @file{/run} directories, and the @file{/bin/sh} file.
- This command also installs bootloader on the target specified in
- @file{my-os-config}, unless the @option{--no-bootloader} option was passed.
- @item vm
- @cindex virtual machine
- @cindex VM
- @anchor{guix system vm}
- Build a virtual machine that contains the operating system declared in
- @var{file}, and return a script to run that virtual machine (VM). Arguments
- given to the script are passed to QEMU as in the example below, which
- enables networking and requests 1@tie{}GiB of RAM for the emulated machine:
- @example
- $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
- @end example
- The VM shares its store with the host system.
- Additional file systems can be shared between the host and the VM using the
- @code{--share} and @code{--expose} command-line options: the former
- specifies a directory to be shared with write access, while the latter
- provides read-only access to the shared directory.
- The example below creates a VM in which the user's home directory is
- accessible read-only, and where the @file{/exchange} directory is a
- read-write mapping of @file{$HOME/tmp} on the host:
- @example
- guix system vm my-config.scm \
- --expose=$HOME --share=$HOME/tmp=/exchange
- @end example
- On GNU/Linux, the default is to boot directly to the kernel; this has the
- advantage of requiring only a very tiny root disk image since the store of
- the host can then be mounted.
- The @code{--full-boot} option forces a complete boot sequence, starting with
- the bootloader. This requires more disk space since a root image containing
- at least the kernel, initrd, and bootloader data files must be created. The
- @code{--image-size} option can be used to specify the size of the image.
- @cindex System images, creation in various formats
- @cindex Creating system images in various formats
- @item vm-image
- @itemx disk-image
- @itemx docker-image
- Return a virtual machine, disk image, or Docker image of the operating
- system declared in @var{file} that stands alone. By default, @command{guix
- system} estimates the size of the image needed to store the system, but you
- can use the @option{--image-size} option to specify a value. Docker images
- are built to contain exactly what they need, so the @option{--image-size}
- option is ignored in the case of @code{docker-image}.
- You can specify the root file system type by using the
- @option{--file-system-type} option. It defaults to @code{ext4}.
- When using @code{vm-image}, the returned image is in qcow2 format, which the
- QEMU emulator can efficiently use. @xref{Lancer GuixSD dans une VM}, for more
- information on how to run the image in a virtual machine.
- When using @code{disk-image}, a raw disk image is produced; it can be copied
- as is to a USB stick, for instance. Assuming @code{/dev/sdc} is the device
- corresponding to a USB stick, one can copy the image to it using the
- following command:
- @example
- # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
- @end example
- When using @code{docker-image}, a Docker image is produced. Guix builds the
- image from scratch, not from a pre-existing Docker base image. As a result,
- it contains @emph{exactly} what you define in the operating system
- configuration file. You can then load the image and launch a Docker
- container using commands like the following:
- @example
- image_id="$(docker load < guixsd-docker-image.tar.gz)"
- docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
- --entrypoint /var/guix/profiles/system/profile/bin/guile \\
- $image_id /var/guix/profiles/system/boot
- @end example
- This command starts a new Docker container from the specified image. It
- will boot the GuixSD system in the usual manner, which means it will start
- any services you have defined in the operating system configuration.
- Depending on what you run in the Docker container, it may be necessary to
- give the container additional permissions. For example, if you intend to
- build software using Guix inside of the Docker container, you may need to
- pass the @option{--privileged} option to @code{docker run}.
- @item conteneur
- Return a script to run the operating system declared in @var{file} within a
- container. Containers are a set of lightweight isolation mechanisms
- provided by the kernel Linux-libre. Containers are substantially less
- resource-demanding than full virtual machines since the kernel, shared
- objects, and other resources can be shared with the host system; this also
- means they provide thinner isolation.
- Currently, the script must be run as root in order to support more than a
- single user and group. The container shares its store with the host system.
- As with the @code{vm} action (@pxref{guix system vm}), additional file
- systems to be shared between the host and container can be specified using
- the @option{--share} and @option{--expose} options:
- @example
- guix system container my-config.scm \
- --expose=$HOME --share=$HOME/tmp=/exchange
- @end example
- @quotation Remarque
- This option requires Linux-libre 3.19 or newer.
- @end quotation
- @end table
- @var{options} can contain any of the common build options (@pxref{Options de construction communes}). In addition, @var{options} can contain one of the
- following:
- @table @option
- @item --expression=@var{expr}
- @itemx -e @var{expr}
- Consider the operating-system @var{expr} evaluates to. This is an
- alternative to specifying a file which evaluates to an operating system.
- This is used to generate the GuixSD installer @pxref{Construire l'image d'installation}).
- @item --system=@var{système}
- @itemx -s @var{système}
- Attempt to build for @var{system} instead of the host system type. This
- works as per @command{guix build} (@pxref{Invoquer guix build}).
- @item --derivation
- @itemx -d
- Return the derivation file name of the given operating system without
- building anything.
- @item --file-system-type=@var{type}
- @itemx -t @var{type}
- For the @code{disk-image} action, create a file system of the given
- @var{type} on the image.
- When this option is omitted, @command{guix system} uses @code{ext4}.
- @cindex ISO-9660 format
- @cindex CD image format
- @cindex DVD image format
- @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable for
- burning on CDs and DVDs.
- @item --image-size=@var{size}
- For the @code{vm-image} and @code{disk-image} actions, create an image of
- the given @var{size}. @var{size} may be a number of bytes, or it may
- include a unit as a suffix (@pxref{Block size, size specifications,,
- coreutils, GNU Coreutils}).
- When this option is omitted, @command{guix system} computes an estimate of
- the image size as a function of the size of the system declared in
- @var{file}.
- @item --root=@var{fichier}
- @itemx -r @var{fichier}
- Fait de @var{fichier} un lien symbolique vers le résultat, et l'enregistre
- en tant que racine du ramasse-miettes.
- @item --skip-checks
- Skip pre-installation safety checks.
- By default, @command{guix system init} and @command{guix system reconfigure}
- perform safety checks: they make sure the file systems that appear in the
- @code{operating-system} declaration actually exist (@pxref{Systèmes de fichiers}),
- and that any Linux kernel modules that may be needed at boot time are listed
- in @code{initrd-modules} (@pxref{Disque de RAM initial}). Passing this option
- skips these tests altogether.
- @item --on-error=@var{strategy}
- Apply @var{strategy} when an error occurs when reading @var{file}.
- @var{strategy} may be one of the following:
- @table @code
- @item nothing-special
- Report the error concisely and exit. This is the default strategy.
- @item backtrace
- Likewise, but also display a backtrace.
- @item debug
- Report the error and enter Guile's debugger. From there, you can run
- commands such as @code{,bt} to get a backtrace, @code{,locals} to display
- local variable values, and more generally inspect the state of the program.
- @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for a list of
- available debugging commands.
- @end table
- @end table
- @quotation Remarque
- All the actions above, except @code{build} and @code{init}, can use KVM
- support in the Linux-libre kernel. Specifically, if the machine has
- hardware virtualization support, the corresponding KVM kernel module should
- be loaded, and the @file{/dev/kvm} device node must exist and be readable
- and writable by the user and by the build users of the daemon (@pxref{Réglages de l'environnement de construction}).
- @end quotation
- Once you have built, configured, re-configured, and re-re-configured your
- GuixSD installation, you may find it useful to list the operating system
- generations available on disk---and that you can choose from the bootloader
- boot menu:
- @table @code
- @item list-generations
- List a summary of each generation of the operating system available on disk,
- in a human-readable way. This is similar to the @option{--list-generations}
- option of @command{guix package} (@pxref{Invoquer guix package}).
- Optionally, one can specify a pattern, with the same syntax that is used in
- @command{guix package --list-generations}, to restrict the list of
- generations displayed. For instance, the following command displays
- generations that are up to 10 days old:
- @example
- $ guix system list-generations 10d
- @end example
- @end table
- The @command{guix system} command has even more to offer! The following
- sub-commands allow you to visualize how your system services relate to each
- other:
- @anchor{system-extension-graph}
- @table @code
- @item extension-graph
- Emit in Dot/Graphviz format to standard output the @dfn{service extension
- graph} of the operating system defined in @var{file} (@pxref{Composition de services}, for more information on service extensions.)
- The command:
- @example
- $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
- @end example
- produces a PDF file showing the extension relations among services.
- @anchor{system-shepherd-graph}
- @item shepherd-graph
- Emit in Dot/Graphviz format to standard output the @dfn{dependency graph} of
- shepherd services of the operating system defined in @var{file}.
- @xref{Services Shepherd}, for more information and for an example graph.
- @end table
- @node Lancer GuixSD dans une VM
- @subsection Running GuixSD in a Virtual Machine
- @cindex virtual machine
- To run GuixSD in a virtual machine (VM), one can either use the pre-built
- GuixSD VM image distributed at
- @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
- , or build their own virtual machine image using @command{guix system
- vm-image} (@pxref{Invoquer guix system}). The returned image is in qcow2
- format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
- use.
- @cindex QEMU
- 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
- it. When invoking QEMU, you must choose a system emulator that is suitable
- for your hardware platform. Here is a minimal QEMU invocation that will
- boot the result of @command{guix system vm-image} on x86_64 hardware:
- @example
- $ qemu-system-x86_64 \
- -net user -net nic,model=virtio \
- -enable-kvm -m 256 /tmp/qemu-image
- @end example
- Here is what each of these options means:
- @table @code
- @item qemu-system-x86_64
- This specifies the hardware platform to emulate. This should match the
- host.
- @item -net user
- Enable the unprivileged user-mode network stack. The guest OS can access
- the host but not vice versa. This is the simplest way to get the guest OS
- online.
- @item -net nic,model=virtio
- You must create a network interface of a given model. If you do not create
- a NIC, the boot will fail. Assuming your hardware platform is x86_64, you
- can get a list of available NIC models by running
- @command{qemu-system-x86_64 -net nic,model=help}.
- @item -enable-kvm
- If your system has hardware virtualization extensions, enabling the virtual
- machine support (KVM) of the Linux kernel will make things run faster.
- @item -m 256
- RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
- which may be insufficient for some operations.
- @item /tmp/qemu-image
- The file name of the qcow2 image.
- @end table
- The default @command{run-vm.sh} script that is returned by an invocation of
- @command{guix system vm} does not add a @command{-net user} flag by
- default. To get network access from within the vm add the
- @code{(dhcp-client-service)} to your system definition and start the VM
- using @command{`guix system vm config.scm` -net user}. An important caveat
- of using @command{-net user} for networking is that @command{ping} will not
- work, because it uses the ICMP protocol. You'll have to use a different
- command to check for network connectivity, for example @command{guix
- download}.
- @subsubsection Connecting Through SSH
- @cindex SSH
- @cindex serveur SSH
- To enable SSH inside a VM you need to add a SSH server like
- @code{(dropbear-service)} or @code{(lsh-service)} to your VM. The
- @code{(lsh-service}) doesn't currently boot unsupervised. It requires you
- to type some characters to initialize the randomness generator. In addition
- you need to forward the SSH port, 22 by default, to the host. You can do
- this with
- @example
- `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
- @end example
- To connect to the VM you can run
- @example
- ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
- @end example
- The @command{-p} tells @command{ssh} the port you want to connect to.
- @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from
- complaining every time you modify your @command{config.scm} file and the
- @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
- connection to an unknown host every time you connect.
- @subsubsection Using @command{virt-viewer} with Spice
- As an alternative to the default @command{qemu} graphical client you can use
- the @command{remote-viewer} from the @command{virt-viewer} package. To
- connect pass the @command{-spice port=5930,disable-ticketing} flag to
- @command{qemu}. See previous section for further information on how to do
- this.
- Spice also allows you to do some nice stuff like share your clipboard with
- your VM. To enable that you'll also have to pass the following flags to
- @command{qemu}:
- @example
- -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
- -chardev spicevmc,name=vdagent,id=vdagent
- -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
- name=com.redhat.spice.0
- @end example
- You'll also need to add the @pxref{Services divers, Spice service}.
- @node Définir des services
- @subsection Définir des services
- The previous sections show the available services and how one can combine
- them in an @code{operating-system} declaration. But how do we define them
- in the first place? And what is a service anyway?
- @menu
- * Composition de services:: Le modèle de composition des services.
- * Types service et services:: Types et services.
- * Référence de service:: Référence de l'API@.
- * Services Shepherd:: Un type de service particulier.
- @end menu
- @node Composition de services
- @subsubsection Composition de services
- @cindex services
- @cindex daemons
- Here we define a @dfn{service} as, broadly, something that extends the
- functionality of the operating system. Often a service is a process---a
- @dfn{daemon}---started when the system boots: a secure shell server, a Web
- server, the Guix build daemon, etc. Sometimes a service is a daemon whose
- execution can be triggered by another daemon---e.g., an FTP server started
- by @command{inetd} or a D-Bus service activated by @command{dbus-daemon}.
- Occasionally, a service does not map to a daemon. For instance, the
- ``account'' service collects user accounts and makes sure they exist when
- the system runs; the ``udev'' service collects device management rules and
- makes them available to the eudev daemon; the @file{/etc} service populates
- the @file{/etc} directory of the system.
- @cindex service extensions
- GuixSD services are connected by @dfn{extensions}. For instance, the secure
- shell service @emph{extends} the Shepherd---the GuixSD initialization
- system, running as PID@tie{}1---by giving it the command lines to start and
- stop the secure shell daemon (@pxref{Services réseau,
- @code{lsh-service}}); the UPower service extends the D-Bus service by
- passing it its @file{.service} specification, and extends the udev service
- by passing it device management rules (@pxref{Services de bureaux,
- @code{upower-service}}); the Guix daemon service extends the Shepherd by
- passing it the command lines to start and stop the daemon, and extends the
- account service by passing it a list of required build user accounts
- (@pxref{Services de base}).
- All in all, services and their ``extends'' relations form a directed acyclic
- graph (DAG). If we represent services as boxes and extensions as arrows, a
- typical system might provide something like this:
- @image{images/service-graph,,5in,Typical service extension graph.}
- @cindex system service
- At the bottom, we see the @dfn{system service}, which produces the directory
- containing everything to run and boot the system, as returned by the
- @command{guix system build} command. @xref{Référence de service}, to learn
- about the other service types shown here. @xref{system-extension-graph, the
- @command{guix system extension-graph} command}, for information on how to
- generate this representation for a particular operating system definition.
- @cindex service types
- Technically, developers can define @dfn{service types} to express these
- relations. There can be any number of services of a given type on the
- system---for instance, a system running two instances of the GNU secure
- shell server (lsh) has two instances of @var{lsh-service-type}, with
- different parameters.
- The following section describes the programming interface for service types
- and services.
- @node Types service et services
- @subsubsection Types service et services
- A @dfn{service type} is a node in the DAG described above. Let us start
- with a simple example, the service type for the Guix build daemon
- (@pxref{Invoquer guix-daemon}):
- @example
- (define guix-service-type
- (service-type
- (name 'guix)
- (extensions
- (list (service-extension shepherd-root-service-type guix-shepherd-service)
- (service-extension account-service-type guix-accounts)
- (service-extension activation-service-type guix-activation)))
- (default-value (guix-configuration))))
- @end example
- @noindent
- It defines three things:
- @enumerate
- @item
- A name, whose sole purpose is to make inspection and debugging easier.
- @item
- A list of @dfn{service extensions}, where each extension designates the
- target service type and a procedure that, given the parameters of the
- service, returns a list of objects to extend the service of that type.
- Every service type has at least one service extension. The only exception
- is the @dfn{boot service type}, which is the ultimate service.
- @item
- Optionally, a default value for instances of this type.
- @end enumerate
- In this example, @var{guix-service-type} extends three services:
- @table @var
- @item shepherd-root-service-type
- The @var{guix-shepherd-service} procedure defines how the Shepherd service
- is extended. Namely, it returns a @code{<shepherd-service>} object that
- defines how @command{guix-daemon} is started and stopped (@pxref{Services Shepherd}).
- @item account-service-type
- This extension for this service is computed by @var{guix-accounts}, which
- returns a list of @code{user-group} and @code{user-account} objects
- representing the build user accounts (@pxref{Invoquer guix-daemon}).
- @item activation-service-type
- Here @var{guix-activation} is a procedure that returns a gexp, which is a
- code snippet to run at ``activation time''---e.g., when the service is
- booted.
- @end table
- A service of this type is instantiated like this:
- @example
- (service guix-service-type
- (guix-configuration
- (build-accounts 5)
- (use-substitutes? #f)))
- @end example
- The second argument to the @code{service} form is a value representing the
- parameters of this specific service instance.
- @xref{guix-configuration-type, @code{guix-configuration}}, for information
- about the @code{guix-configuration} data type. When the value is omitted,
- the default value specified by @code{guix-service-type} is used:
- @example
- (service guix-service-type)
- @end example
- @var{guix-service-type} is quite simple because it extends other services
- but is not extensible itself.
- @c @subsubsubsection Extensible Service Types
- The service type for an @emph{extensible} service looks like this:
- @example
- (define udev-service-type
- (service-type (name 'udev)
- (extensions
- (list (service-extension shepherd-root-service-type
- udev-shepherd-service)))
- (compose concatenate) ;concatenate the list of rules
- (extend (lambda (config rules)
- (match config
- (($ <udev-configuration> udev initial-rules)
- (udev-configuration
- (udev udev) ;the udev package to use
- (rules (append initial-rules rules)))))))))
- @end example
- This is the service type for the
- @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
- daemon}. Compared to the previous example, in addition to an extension of
- @var{shepherd-root-service-type}, we see two new fields:
- @table @code
- @item compose
- This is the procedure to @dfn{compose} the list of extensions to services of
- this type.
- Services can extend the udev service by passing it lists of rules; we
- compose those extensions simply by concatenating them.
- @item extend
- This procedure defines how the value of the service is @dfn{extended} with
- the composition of the extensions.
- Udev extensions are composed into a list of rules, but the udev service
- value is itself a @code{<udev-configuration>} record. So here, we extend
- that record by appending the list of rules it contains to the list of
- contributed rules.
- @item description
- This is a string giving an overview of the service type. The string can
- contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
- @command{guix system search} command searches these strings and displays
- them (@pxref{Invoquer guix system}).
- @end table
- There can be only one instance of an extensible service type such as
- @var{udev-service-type}. If there were more, the @code{service-extension}
- specifications would be ambiguous.
- Still here? The next section provides a reference of the programming
- interface for services.
- @node Référence de service
- @subsubsection Référence de service
- We have seen an overview of service types (@pxref{Types service et services}). This section provides a reference on how to manipulate services
- and service types. This interface is provided by the @code{(gnu services)}
- module.
- @deffn {Procédure Scheme} service @var{type} [@var{value}]
- Return a new service of @var{type}, a @code{<service-type>} object (see
- below.) @var{value} can be any object; it represents the parameters of this
- particular service instance.
- When @var{value} is omitted, the default value specified by @var{type} is
- used; if @var{type} does not specify a default value, an error is raised.
- For instance, this:
- @example
- (service openssh-service-type)
- @end example
- @noindent
- is equivalent to this:
- @example
- (service openssh-service-type
- (openssh-configuration))
- @end example
- In both cases the result is an instance of @code{openssh-service-type} with
- the default configuration.
- @end deffn
- @deffn {Procédure Scheme} service? @var{obj}
- Return true if @var{obj} is a service.
- @end deffn
- @deffn {Procédure Scheme} service-kind @var{service}
- Return the type of @var{service}---i.e., a @code{<service-type>} object.
- @end deffn
- @deffn {Procédure Scheme} service-value @var{service}
- Return the value associated with @var{service}. It represents its
- parameters.
- @end deffn
- Here is an example of how a service is created and manipulated:
- @example
- (define s
- (service nginx-service-type
- (nginx-configuration
- (nginx nginx)
- (log-directory log-directory)
- (run-directory run-directory)
- (file config-file))))
- (service? s)
- @result{} #t
- (eq? (service-kind s) nginx-service-type)
- @result{} #t
- @end example
- The @code{modify-services} form provides a handy way to change the
- parameters of some of the services of a list such as @var{%base-services}
- (@pxref{Services de base, @code{%base-services}}). It evaluates to a list of
- services. Of course, you could always use standard list combinators such as
- @code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
- GNU Guile Reference Manual}); @code{modify-services} simply provides a more
- concise form for this common pattern.
- @deffn {Scheme Syntax} modify-services @var{services} @
- (@var{type} @var{variable} => @var{body}) @dots{}
- Modify the services listed in @var{services} according to the given
- clauses. Each clause has the form:
- @example
- (@var{type} @var{variable} => @var{body})
- @end example
- where @var{type} is a service type---e.g., @code{guix-service-type}---and
- @var{variable} is an identifier that is bound within the @var{body} to the
- service parameters---e.g., a @code{guix-configuration} instance---of the
- original service of that @var{type}.
- The @var{body} should evaluate to the new service parameters, which will be
- used to configure the new service. This new service will replace the
- original in the resulting list. Because a service's service parameters are
- created using @code{define-record-type*}, you can write a succinct
- @var{body} that evaluates to the new service parameters by using the
- @code{inherit} feature that @code{define-record-type*} provides.
- @xref{Utiliser le système de configuration}, for example usage.
- @end deffn
- Next comes the programming interface for service types. This is something
- you want to know when writing new service definitions, but not necessarily
- when simply looking for ways to customize your @code{operating-system}
- declaration.
- @deftp {Type de données} service-type
- @cindex type de service
- This is the representation of a @dfn{service type} (@pxref{Types service et services}).
- @table @asis
- @item @code{name}
- This is a symbol, used only to simplify inspection and debugging.
- @item @code{extensions}
- A non-empty list of @code{<service-extension>} objects (see below).
- @item @code{compose} (par défaut : @code{#f})
- If this is @code{#f}, then the service type denotes services that cannot be
- extended---i.e., services that do not receive ``values'' from other
- services.
- Otherwise, it must be a one-argument procedure. The procedure is called by
- @code{fold-services} and is passed a list of values collected from
- extensions. It may return any single value.
- @item @code{extend} (par défaut : @code{#f})
- If this is @code{#f}, services of this type cannot be extended.
- Otherwise, it must be a two-argument procedure: @code{fold-services} calls
- it, passing it the initial value of the service as the first argument and
- the result of applying @code{compose} to the extension values as the second
- argument. It must return a value that is a valid parameter value for the
- service instance.
- @end table
- @xref{Types service et services}, for examples.
- @end deftp
- @deffn {Procédure Scheme} service-extension @var{target-type} @
- @var{compute} Return a new extension for services of type
- @var{target-type}. @var{compute} must be a one-argument procedure:
- @code{fold-services} calls it, passing it the value associated with the
- service that provides the extension; it must return a valid value for the
- target service.
- @end deffn
- @deffn {Procédure Scheme} service-extension? @var{obj}
- Return true if @var{obj} is a service extension.
- @end deffn
- Occasionally, you might want to simply extend an existing service. This
- involves creating a new service type and specifying the extension of
- interest, which can be verbose; the @code{simple-service} procedure provides
- a shorthand for this.
- @deffn {Procédure Scheme} simple-service @var{name} @var{target} @var{value}
- Return a service that extends @var{target} with @var{value}. This works by
- creating a singleton service type @var{name}, of which the returned service
- is an instance.
- For example, this extends mcron (@pxref{Exécution de tâches planifiées}) with an
- additional job:
- @example
- (simple-service 'my-mcron-job mcron-service-type
- #~(job '(next-hour (3)) "guix gc -F 2G"))
- @end example
- @end deffn
- At the core of the service abstraction lies the @code{fold-services}
- procedure, which is responsible for ``compiling'' a list of services down to
- a single directory that contains everything needed to boot and run the
- system---the directory shown by the @command{guix system build} command
- (@pxref{Invoquer guix system}). In essence, it propagates service
- extensions down the service graph, updating each node parameters on the way,
- until it reaches the root node.
- @deffn {Procédure Scheme} fold-services @var{services} @
- [#:target-type @var{system-service-type}] Fold @var{services} by propagating
- their extensions down to the root of type @var{target-type}; return the root
- service adjusted accordingly.
- @end deffn
- Lastly, the @code{(gnu services)} module also defines several essential
- service types, some of which are listed below.
- @defvr {Variable Scheme} system-service-type
- This is the root of the service graph. It produces the system directory as
- returned by the @command{guix system build} command.
- @end defvr
- @defvr {Variable Scheme} boot-service-type
- The type of the ``boot service'', which produces the @dfn{boot script}. The
- boot script is what the initial RAM disk runs when booting.
- @end defvr
- @defvr {Variable Scheme} etc-service-type
- The type of the @file{/etc} service. This service is used to create files
- under @file{/etc} and can be extended by passing it name/file tuples such
- as:
- @example
- (list `("issue" ,(plain-file "issue" "Welcome!\n")))
- @end example
- In this example, the effect would be to add an @file{/etc/issue} file
- pointing to the given file.
- @end defvr
- @defvr {Variable Scheme} setuid-program-service-type
- Type for the ``setuid-program service''. This service collects lists of
- executable file names, passed as gexps, and adds them to the set of
- setuid-root programs on the system (@pxref{Programmes setuid}).
- @end defvr
- @defvr {Variable Scheme} profile-service-type
- Type of the service that populates the @dfn{system profile}---i.e., the
- programs under @file{/run/current-system/profile}. Other services can
- extend it by passing it lists of packages to add to the system profile.
- @end defvr
- @node Services Shepherd
- @subsubsection Services Shepherd
- @cindex services shepherd
- @cindex PID 1
- @cindex init system
- The @code{(gnu services shepherd)} module provides a way to define services
- managed by the GNU@tie{}Shepherd, which is the GuixSD initialization
- system---the first process that is started when the system boots, also known
- as PID@tie{}1 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
- Services in the Shepherd can depend on each other. For instance, the SSH
- daemon may need to be started after the syslog daemon has been started,
- which in turn can only happen once all the file systems have been mounted.
- The simple operating system defined earlier (@pxref{Utiliser le système de configuration}) results in a service graph like this:
- @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
- You can actually generate such a graph for any operating system definition
- using the @command{guix system shepherd-graph} command
- (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
- The @var{%shepherd-root-service} is a service object representing
- PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended by
- passing it lists of @code{<shepherd-service>} objects.
- @deftp {Type de données} shepherd-service
- The data type representing a service managed by the Shepherd.
- @table @asis
- @item @code{provision}
- This is a list of symbols denoting what the service provides.
- These are the names that may be passed to @command{herd start},
- @command{herd status}, and similar commands (@pxref{Invoking herd,,,
- shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
- @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
- @item @code{requirements} (par défaut : @code{'()})
- List of symbols denoting the Shepherd services this one depends on.
- @item @code{respawn?} (par défaut : @code{#t})
- Whether to restart the service when it stops, for instance when the
- underlying process dies.
- @item @code{start}
- @itemx @code{stop} (par défaut : @code{#~(const #f)})
- The @code{start} and @code{stop} fields refer to the Shepherd's facilities
- to start and stop processes (@pxref{Service De- and Constructors,,,
- shepherd, The GNU Shepherd Manual}). They are given as G-expressions that
- get expanded in the Shepherd configuration file (@pxref{G-Expressions}).
- @item @code{actions} (par défaut : @code{'()})
- @cindex action, des services Shepherd
- This is a list of @code{shepherd-action} objects (see below) defining
- @dfn{actions} supported by the service, in addition to the standard
- @code{start} and @code{stop} actions. Actions listed here become available
- as @command{herd} sub-commands:
- @example
- herd @var{action} @var{service} [@var{arguments}@dots{}]
- @end example
- @item @code{documentation}
- A documentation string, as shown when running:
- @example
- herd doc @var{service-name}
- @end example
- where @var{service-name} is one of the symbols in @var{provision}
- (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
- @item @code{modules} (par défaut : @var{%default-modules})
- This is the list of modules that must be in scope when @code{start} and
- @code{stop} are evaluated.
- @end table
- @end deftp
- @deftp {Type de données} shepherd-action
- This is the data type that defines additional actions implemented by a
- Shepherd service (see above).
- @table @code
- @item name
- Symbole nommant l'action
- @item documentation
- This is a documentation string for the action. It can be viewed by running:
- @example
- herd doc @var{service} action @var{action}
- @end example
- @item procedure
- This should be a gexp that evaluates to a procedure of at least one
- argument, which is the ``running value'' of the service (@pxref{Slots of
- services,,, shepherd, The GNU Shepherd Manual}).
- @end table
- The following example defines an action called @code{say-hello} that kindly
- greets the user:
- @example
- (shepherd-action
- (name 'say-hello)
- (documentation "Say hi!")
- (procedure #~(lambda (running . args)
- (format #t "Hello, friend! arguments: ~s\n"
- args)
- #t)))
- @end example
- Assuming this action is added to the @code{example} service, then you can
- do:
- @example
- # herd say-hello example
- Hello, friend! arguments: ()
- # herd say-hello example a b c
- Hello, friend! arguments: ("a" "b" "c")
- @end example
- This, as you can see, is a fairly sophisticated way to say hello.
- @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
- info on actions.
- @end deftp
- @defvr {Variable Scheme} shepherd-root-service-type
- The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
- This is the service type that extensions target when they want to create
- shepherd services (@pxref{Types service et services}, for an example).
- Each extension must pass a list of @code{<shepherd-service>}.
- @end defvr
- @defvr {Variable Scheme} %shepherd-root-service
- This service represents PID@tie{}1.
- @end defvr
- @node Documentation
- @section Documentation
- @cindex documentation, searching for
- @cindex searching for documentation
- @cindex Info, documentation format
- @cindex man pages
- @cindex manual pages
- In most cases packages installed with Guix come with documentation. There
- are two main documentation formats: ``Info'', a browseable hypertext format
- used for GNU software, and ``manual pages'' (or ``man pages''), the linear
- documentation format traditionally found on Unix. Info manuals are accessed
- with the @command{info} command or with Emacs, and man pages are accessed
- using @command{man}.
- You can look for documentation of software installed on your system by
- keyword. For example, the following command searches for information about
- ``TLS'' in Info manuals:
- @example
- $ info -k TLS
- "(emacs)Network Security" -- STARTTLS
- "(emacs)Network Security" -- TLS
- "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
- "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
- @dots{}
- @end example
- @noindent
- The command below searches for the same keyword in man pages:
- @example
- $ man -k TLS
- SSL (7) - OpenSSL SSL/TLS library
- certtool (1) - GnuTLS certificate tool
- @dots {}
- @end example
- These searches are purely local to your computer so you have the guarantee
- that documentation you find corresponds to what you have actually installed,
- you can access it off-line, and your privacy is respected.
- Once you have these results, you can view the relevant documentation by
- running, say:
- @example
- $ info "(gnutls)Core TLS API"
- @end example
- @noindent
- or:
- @example
- $ man certtool
- @end example
- Info manuals contain sections and indices as well as hyperlinks like those
- found in Web pages. The @command{info} reader (@pxref{Top, Info reader,,
- info-stnd, Stand-alone GNU Info}) and its Emacs counterpart (@pxref{Misc
- Help,,, emacs, The GNU Emacs Manual}) provide intuitive key bindings to
- navigate manuals. @xref{Getting Started,,, info, Info: An Introduction},
- for an introduction to Info navigation.
- @node Installer les fichiers de débogage
- @section Installer les fichiers de débogage
- @cindex debugging files
- Program binaries, as produced by the GCC compilers for instance, are
- typically written in the ELF format, with a section containing
- @dfn{debugging information}. Debugging information is what allows the
- debugger, GDB, to map binary code to source code; it is required to debug a
- compiled program in good conditions.
- Le problème avec les informations de débogage est qu'elles prennent pas mal
- de place sur le disque. Par exemple, les informations de débogage de la
- bibliothèque C de GNU prend plus de 60 Mo. Ainsi, en tant qu'utilisateur,
- garder toutes les informations de débogage de tous les programmes installés
- n'est souvent pas une possibilité. Cependant, l'économie d'espace ne devrait
- pas empêcher le débogage — en particulier, dans le système GNU, qui devrait
- faciliter pour ses utilisateurs l'exercice de leurs libertés
- (@pxref{Distribution GNU}).
- Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a mechanism
- that allows users to get the best of both worlds: debugging information can
- be stripped from the binaries and stored in separate files. GDB is then
- able to load debugging information from those files, when they are available
- (@pxref{Separate Debug Files,,, gdb, Debugging with GDB}).
- The GNU distribution takes advantage of this by storing debugging
- information in the @code{lib/debug} sub-directory of a separate package
- output unimaginatively called @code{debug} (@pxref{Des paquets avec plusieurs résultats}). Users can choose to install the @code{debug} output of a package
- when they need it. For instance, the following command installs the
- debugging information for the GNU C Library and for GNU Guile:
- @example
- guix package -i glibc:debug guile:debug
- @end example
- GDB must then be told to look for debug files in the user's profile, by
- setting the @code{debug-file-directory} variable (consider setting it from
- the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with GDB}):
- @example
- (gdb) set debug-file-directory ~/.guix-profile/lib/debug
- @end example
- From there on, GDB will pick up debugging information from the @code{.debug}
- files under @file{~/.guix-profile/lib/debug}.
- In addition, you will most likely want GDB to be able to show the source
- code being debugged. To do that, you will have to unpack the source code of
- the package of interest (obtained with @code{guix build --source},
- @pxref{Invoquer guix build}), and to point GDB to that source directory
- using the @code{directory} command (@pxref{Source Path, @code{directory},,
- gdb, Debugging with GDB}).
- @c XXX: keep me up-to-date
- The @code{debug} output mechanism in Guix is implemented by the
- @code{gnu-build-system} (@pxref{Systèmes de construction}). Currently, it is
- opt-in---debugging information is available only for the packages with
- definitions explicitly declaring a @code{debug} output. This may be changed
- to opt-out in the future if our build farm servers can handle the load. To
- check whether a package has a @code{debug} output, use @command{guix package
- --list-available} (@pxref{Invoquer guix package}).
- @node Mises à jour de sécurité
- @section Mises à jour de sécurité
- @cindex security updates
- @cindex vulnérabilités
- Occasionally, important security vulnerabilities are discovered in software
- packages and must be patched. Guix developers try hard to keep track of
- known vulnerabilities and to apply fixes as soon as possible in the
- @code{master} branch of Guix (we do not yet provide a ``stable'' branch
- containing only security updates.) The @command{guix lint} tool helps
- developers find out about vulnerable versions of software packages in the
- distribution:
- @smallexample
- $ guix lint -c cve
- gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
- gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
- gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
- @dots{}
- @end smallexample
- @xref{Invoquer guix lint}, for more information.
- @quotation Remarque
- As of version @value{VERSION}, the feature described below is considered
- ``beta''.
- @end quotation
- Guix suit une discipline de gestion de paquets fonctionnelle
- (@pxref{Introduction}), ce qui implique que lorsqu'un paquet change,
- @emph{tous les paquets qui en dépendent} doivent être reconstruits. Cela
- peut grandement ralentir le déploiement de corrections dans les paquets du
- cœur comme libc ou bash comme presque toute la distribution aurait besoin
- d'être reconstruite. Cela aide d'utiliser des binaires pré-construits
- (@pxref{Substituts}), mais le déploiement peut toujours prendre plus de
- temps de souhaité.
- @cindex greffes
- To address this, Guix implements @dfn{grafts}, a mechanism that allows for
- fast deployment of critical updates without the costs associated with a
- whole-distribution rebuild. The idea is to rebuild only the package that
- needs to be patched, and then to ``graft'' it onto packages explicitly
- installed by the user and that were previously referring to the original
- package. The cost of grafting is typically very low, and order of
- magnitudes lower than a full rebuild of the dependency chain.
- @cindex replacements of packages, for grafts
- For instance, suppose a security update needs to be applied to Bash. Guix
- developers will provide a package definition for the ``fixed'' Bash, say
- @var{bash-fixed}, in the usual way (@pxref{Définition des paquets}). Then, the
- original package definition is augmented with a @code{replacement} field
- pointing to the package containing the bug fix:
- @example
- (define bash
- (package
- (name "bash")
- ;; @dots{}
- (replacement bash-fixed)))
- @end example
- From there on, any package depending directly or indirectly on Bash---as
- reported by @command{guix gc --requisites} (@pxref{Invoquer guix gc})---that
- is installed is automatically ``rewritten'' to refer to @var{bash-fixed}
- instead of @var{bash}. This grafting process takes time proportional to the
- size of the package, usually less than a minute for an ``average'' package
- on a recent machine. Grafting is recursive: when an indirect dependency
- requires grafting, then grafting ``propagates'' up to the package that the
- user is installing.
- Currently, the length of the name and version of the graft and that of the
- package it replaces (@var{bash-fixed} and @var{bash} in the example above)
- must be equal. This restriction mostly comes from the fact that grafting
- works by patching files, including binary files, directly. Other
- restrictions may apply: for instance, when adding a graft to a package
- providing a shared library, the original shared library and its replacement
- must have the same @code{SONAME} and be binary-compatible.
- The @option{--no-grafts} command-line option allows you to forcefully avoid
- grafting (@pxref{Options de construction communes, @option{--no-grafts}}). Thus, the
- command:
- @example
- guix build bash --no-grafts
- @end example
- @noindent
- returns the store file name of the original Bash, whereas:
- @example
- guix build bash
- @end example
- @noindent
- returns the store file name of the ``fixed'', replacement Bash. This allows
- you to distinguish between the two variants of Bash.
- To verify which Bash your whole profile refers to, you can run
- (@pxref{Invoquer guix gc}):
- @example
- guix gc -R `readlink -f ~/.guix-profile` | grep bash
- @end example
- @noindent
- @dots{} and compare the store file names that you get with those above.
- Likewise for a complete GuixSD system generation:
- @example
- guix gc -R `guix system build my-config.scm` | grep bash
- @end example
- Lastly, to check which Bash running processes are using, you can use the
- @command{lsof} command:
- @example
- lsof | grep /gnu/store/.*bash
- @end example
- @node Modules de paquets
- @section Modules de paquets
- From a programming viewpoint, the package definitions of the GNU
- distribution are provided by Guile modules in the @code{(gnu packages
- @dots{})} name space@footnote{Note that packages under the @code{(gnu
- packages @dots{})} module name space are not necessarily ``GNU packages''.
- This module naming scheme follows the usual Guile module naming convention:
- @code{gnu} means that these modules are distributed as part of the GNU
- system, and @code{packages} identifies modules that define packages.}
- (@pxref{Modules, Guile modules,, guile, GNU Guile Reference Manual}). For
- instance, the @code{(gnu packages emacs)} module exports a variable named
- @code{emacs}, which is bound to a @code{<package>} object (@pxref{Définition des paquets}).
- The @code{(gnu packages @dots{})} module name space is automatically scanned
- for packages by the command-line tools. For instance, when running
- @code{guix package -i emacs}, all the @code{(gnu packages @dots{})} modules
- are scanned until one that exports a package object whose name is
- @code{emacs} is found. This package search facility is implemented in the
- @code{(gnu packages)} module.
- @cindex personnalisation, des paquets
- @cindex package module search path
- Users can store package definitions in modules with different names---e.g.,
- @code{(my-packages emacs)}@footnote{Note that the file name and module name
- must match. For instance, the @code{(my-packages emacs)} module must be
- stored in a @file{my-packages/emacs.scm} file relative to the load path
- specified with @option{--load-path} or @code{GUIX_PACKAGE_PATH}.
- @xref{Modules and the File System,,, guile, GNU Guile Reference Manual}, for
- details.}. There are two ways to make these package definitions visible to
- the user interfaces:
- @enumerate
- @item
- By adding the directory containing your package modules to the search path
- with the @code{-L} flag of @command{guix package} and other commands
- (@pxref{Options de construction communes}), or by setting the @code{GUIX_PACKAGE_PATH}
- environment variable described below.
- @item
- By defining a @dfn{channel} and configuring @command{guix pull} so that it
- pulls from it. A channel is essentially a Git repository containing package
- modules. @xref{Canaux}, for more information on how to define and use
- channels.
- @end enumerate
- @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
- @defvr {Environment Variable} GUIX_PACKAGE_PATH
- This is a colon-separated list of directories to search for additional
- package modules. Directories listed in this variable take precedence over
- the own modules of the distribution.
- @end defvr
- The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: each
- package is built based solely on other packages in the distribution. The
- root of this dependency graph is a small set of @dfn{bootstrap binaries},
- provided by the @code{(gnu packages bootstrap)} module. For more
- information on bootstrapping, @pxref{Bootstrapping}.
- @node Consignes d'empaquetage
- @section Consignes d'empaquetage
- @cindex packages, creating
- The GNU distribution is nascent and may well lack some of your favorite
- packages. This section describes how you can help make the distribution
- grow. @xref{Contribuer}, for additional information on how you can help.
- Free software packages are usually distributed in the form of @dfn{source
- code tarballs}---typically @file{tar.gz} files that contain all the source
- files. Adding a package to the distribution means essentially two things:
- adding a @dfn{recipe} that describes how to build the package, including a
- list of other packages required to build it, and adding @dfn{package
- metadata} along with that recipe, such as a description and licensing
- information.
- In Guix all this information is embodied in @dfn{package definitions}.
- Package definitions provide a high-level view of the package. They are
- written using the syntax of the Scheme programming language; in fact, for
- each package we define a variable bound to the package definition, and
- export that variable from a module (@pxref{Modules de paquets}). However,
- in-depth Scheme knowledge is @emph{not} a prerequisite for creating
- packages. For more information on package definitions, @pxref{Définition des paquets}.
- Once a package definition is in place, stored in a file in the Guix source
- tree, it can be tested using the @command{guix build} command
- (@pxref{Invoquer guix build}). For example, assuming the new package is
- called @code{gnew}, you may run this command from the Guix build tree
- (@pxref{Lancer Guix avant qu'il ne soit installé}):
- @example
- ./pre-inst-env guix build gnew --keep-failed
- @end example
- Using @code{--keep-failed} makes it easier to debug build failures since it
- provides access to the failed build tree. Another useful command-line
- option when debugging is @code{--log-file}, to access the build log.
- If the package is unknown to the @command{guix} command, it may be that the
- source file contains a syntax error, or lacks a @code{define-public} clause
- to export the package variable. To figure it out, you may load the module
- from Guile to get more information about the actual error:
- @example
- ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
- @end example
- Once your package builds correctly, please send us a patch
- (@pxref{Contribuer}). Well, if you need help, we will be happy to help
- you too. Once the patch is committed in the Guix repository, the new
- package automatically gets built on the supported platforms by
- @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
- system}.
- @cindex substituter
- On peut obtenir la nouvelle définition du paquet simplement en lançant
- @command{guix pull} (@pxref{Invoquer guix pull}). Lorsque
- @code{hydra.gnu.org} a fini de construire le paquet, l'installation du
- paquet y télécharge automatiquement les binaires (@pxref{Substituts}). La
- seule intervention humaine requise est pendant la revue et l'application du
- correctif.
- @menu
- * Liberté logiciel:: Ce que la distribution peut contenir.
- * Conventions de nommage:: Qu'est-ce qu'un bon nom ?
- * Numéros de version:: Lorsque le nom n'est pas suffisant.
- * Synopsis et descriptions:: Aider les utilisateurs à trouver le bon
- paquet.
- * Modules python:: Un peu de comédie anglaise.
- * Modules perl:: Petites perles.
- * Paquets java:: Pause café.
- * Polices de caractères:: À fond les fontes.
- @end menu
- @node Liberté logiciel
- @subsection Liberté logiciel
- @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
- @cindex free software
- The GNU operating system has been developed so that users can have freedom
- in their computing. GNU is @dfn{free software}, meaning that users have the
- @url{http://www.gnu.org/philosophy/free-sw.html,four essential freedoms}: to
- run the program, to study and change the program in source code form, to
- redistribute exact copies, and to distribute modified versions. Packages
- found in the GNU distribution provide only software that conveys these four
- freedoms.
- In addition, the GNU distribution follow the
- @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
- software distribution guidelines}. Among other things, these guidelines
- reject non-free firmware, recommendations of non-free software, and discuss
- ways to deal with trademarks and patents.
- Some otherwise free upstream package sources contain a small and optional
- subset that violates the above guidelines, for instance because this subset
- is itself non-free code. When that happens, the offending items are removed
- with appropriate patches or code snippets in the @code{origin} form of the
- package (@pxref{Définition des paquets}). This way, @code{guix build --source}
- returns the ``freed'' source rather than the unmodified upstream source.
- @node Conventions de nommage
- @subsection Conventions de nommage
- @cindex package name
- A package has actually two names associated with it: First, there is the
- name of the @emph{Scheme variable}, the one following @code{define-public}.
- By this name, the package can be made known in the Scheme code, for instance
- as input to another package. Second, there is the string in the @code{name}
- field of a package definition. This name is used by package management
- commands such as @command{guix package} and @command{guix build}.
- Both are usually the same and correspond to the lowercase conversion of the
- project name chosen upstream, with underscores replaced with hyphens. For
- instance, GNUnet is available as @code{gnunet}, and SDL_net as
- @code{sdl-net}.
- We do not add @code{lib} prefixes for library packages, unless these are
- already part of the official project name. But @pxref{Modules python} and
- @ref{Modules perl} for special rules concerning modules for the Python and
- Perl languages.
- Font package names are handled differently, @pxref{Polices de caractères}.
- @node Numéros de version
- @subsection Numéros de version
- @cindex package version
- We usually package only the latest version of a given free software
- project. But sometimes, for instance for incompatible library versions, two
- (or more) versions of the same package are needed. These require different
- Scheme variable names. We use the name as defined in @ref{Conventions de nommage}
- for the most recent version; previous versions use the same name, suffixed
- by @code{-} and the smallest prefix of the version number that may
- distinguish the two versions.
- The name inside the package definition is the same for all versions of a
- package and does not contain any version number.
- For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as
- follows:
- @example
- (define-public gtk+
- (package
- (name "gtk+")
- (version "3.9.12")
- ...))
- (define-public gtk+-2
- (package
- (name "gtk+")
- (version "2.24.20")
- ...))
- @end example
- If we also wanted GTK+ 3.8.2, this would be packaged as
- @example
- (define-public gtk+-3.8
- (package
- (name "gtk+")
- (version "3.8.2")
- ...))
- @end example
- @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
- @c for a discussion of what follows.
- @cindex version number, for VCS snapshots
- Occasionally, we package snapshots of upstream's version control system
- (VCS) instead of formal releases. This should remain exceptional, because
- it is up to upstream developers to clarify what the stable release is. Yet,
- it is sometimes necessary. So, what should we put in the @code{version}
- field?
- Clearly, we need to make the commit identifier of the VCS snapshot visible
- in the version string, but we also need to make sure that the version string
- is monotonically increasing so that @command{guix package --upgrade} can
- determine which version is newer. Since commit identifiers, notably with
- Git, are not monotonically increasing, we add a revision number that we
- increase each time we upgrade to a newer snapshot. The resulting version
- string looks like this:
- @example
- 2.0.11-3.cabba9e
- ^ ^ ^
- | | `-- upstream commit ID
- | |
- | `--- Guix package revision
- |
- latest upstream version
- @end example
- It is a good idea to strip commit identifiers in the @code{version} field
- to, say, 7 digits. It avoids an aesthetic annoyance (assuming aesthetics
- have a role to play here) as well as problems related to OS limits such as
- the maximum shebang length (127 bytes for the Linux kernel.) It is best to
- use the full commit identifiers in @code{origin}s, though, to avoid
- ambiguities. A typical package definition may look like this:
- @example
- (define my-package
- (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
- (revision "1")) ;révision du paquet Guix
- (package
- (version (git-version "0.9" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "git://example.org/my-package.git")
- (commit commit)))
- (sha256 (base32 "1mbikn@dots{}"))
- (file-name (git-file-name name version))))
- ;; @dots{}
- )))
- @end example
- @node Synopsis et descriptions
- @subsection Synopsis et descriptions
- @cindex package description
- @cindex package synopsis
- As we have seen before, each package in GNU@tie{}Guix includes a synopsis
- and a description (@pxref{Définition des paquets}). Synopses and descriptions
- are important: They are what @command{guix package --search} searches, and a
- crucial piece of information to help users determine whether a given package
- suits their needs. Consequently, packagers should pay attention to what
- goes into them.
- Synopses must start with a capital letter and must not end with a period.
- They must not start with ``a'' or ``the'', which usually does not bring
- anything; for instance, prefer ``File-frobbing tool'' over ``A tool that
- frobs files''. The synopsis should say what the package is---e.g., ``Core
- GNU utilities (file, text, shell)''---or what it is used for---e.g., the
- synopsis for GNU@tie{}grep is ``Print lines matching a pattern''.
- Keep in mind that the synopsis must be meaningful for a very wide audience.
- For example, ``Manipulate alignments in the SAM format'' might make sense
- for a seasoned bioinformatics researcher, but might be fairly unhelpful or
- even misleading to a non-specialized audience. It is a good idea to come up
- with a synopsis that gives an idea of the application domain of the
- package. In this example, this might give something like ``Manipulate
- nucleotide sequence alignments'', which hopefully gives the user a better
- idea of whether this is what they are looking for.
- Descriptions should take between five and ten lines. Use full sentences,
- and avoid using acronyms without first introducing them. Please avoid
- marketing phrases such as ``world-leading'', ``industrial-strength'', and
- ``next-generation'', and avoid superlatives like ``the most
- advanced''---they are not helpful to users looking for a package and may
- even sound suspicious. Instead, try to be factual, mentioning use cases and
- features.
- @cindex Texinfo markup, in package descriptions
- Descriptions can include Texinfo markup, which is useful to introduce
- ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or hyperlinks
- (@pxref{Overview,,, texinfo, GNU Texinfo}). However you should be careful
- when using some characters for example @samp{@@} and curly braces which are
- the basic special characters in Texinfo (@pxref{Special Characters,,,
- texinfo, GNU Texinfo}). User interfaces such as @command{guix package
- --show} take care of rendering it appropriately.
- Synopses and descriptions are translated by volunteers
- @uref{http://translationproject.org/domain/guix-packages.html, at the
- Translation Project} so that as many users as possible can read them in
- their native language. User interfaces search them and display them in the
- language specified by the current locale.
- To allow @command{xgettext} to extract them as translatable strings,
- synopses and descriptions @emph{must be literal strings}. This means that
- you cannot use @code{string-append} or @code{format} to construct these
- strings:
- @lisp
- (package
- ;; @dots{}
- (synopsis "This is translatable")
- (description (string-append "This is " "*not*" " translatable.")))
- @end lisp
- Translation is a lot of work so, as a packager, please pay even more
- attention to your synopses and descriptions as every change may entail
- additional work for translators. In order to help them, it is possible to
- make recommendations or instructions visible to them by inserting special
- comments like this (@pxref{xgettext Invocation,,, gettext, GNU Gettext}):
- @example
- ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
- (description "ARandR is designed to provide a simple visual front end
- for the X11 resize-and-rotate (RandR) extension. @dots{}")
- @end example
- @node Modules python
- @subsection Modules python
- @cindex python
- We currently package Python 2 and Python 3, under the Scheme variable names
- @code{python-2} and @code{python} as explained in @ref{Numéros de version}. To
- avoid confusion and naming clashes with other programming languages, it
- seems desirable that the name of a package for a Python module contains the
- word @code{python}.
- Some modules are compatible with only one version of Python, others with
- both. If the package Foo compiles only with Python 3, we name it
- @code{python-foo}; if it compiles only with Python 2, we name it
- @code{python2-foo}. If it is compatible with both versions, we create two
- packages with the corresponding names.
- If a project already contains the word @code{python}, we drop this; for
- instance, the module python-dateutil is packaged under the names
- @code{python-dateutil} and @code{python2-dateutil}. If the project name
- starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as
- described above.
- @subsubsection Specifying Dependencies
- @cindex inputs, for Python packages
- Dependency information for Python packages is usually available in the
- package source tree, with varying degrees of accuracy: in the
- @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
- Your mission, when writing a recipe for a Python package, is to map these
- dependencies to the appropriate type of ``input'' (@pxref{Référence de paquet,
- inputs}). Although the @code{pypi} importer normally does a good job
- (@pxref{Invoquer guix import}), you may want to check the following check
- list to determine which dependency goes where.
- @itemize
- @item
- We currently package Python 2 with @code{setuptools} and @code{pip}
- installed like Python 3.4 has per default. Thus you don't need to specify
- either of these as an input. @command{guix lint} will warn you if you do.
- @item
- Python dependencies required at run time go into @code{propagated-inputs}.
- They are typically defined with the @code{install_requires} keyword in
- @file{setup.py}, or in the @file{requirements.txt} file.
- @item
- Python packages required only at build time---e.g., those listed with the
- @code{setup_requires} keyword in @file{setup.py}---or only for
- testing---e.g., those in @code{tests_require}---go into
- @code{native-inputs}. The rationale is that (1) they do not need to be
- propagated because they are not needed at run time, and (2) in a
- cross-compilation context, it's the ``native'' input that we'd want.
- Examples are the @code{pytest}, @code{mock}, and @code{nose} test
- frameworks. Of course if any of these packages is also required at
- run-time, it needs to go to @code{propagated-inputs}.
- @item
- Anything that does not fall in the previous categories goes to
- @code{inputs}, for example programs or C libraries required for building
- Python packages containing C extensions.
- @item
- If a Python package has optional dependencies (@code{extras_require}), it is
- up to you to decide whether to add them or not, based on their
- usefulness/overhead ratio (@pxref{Envoyer des correctifs, @command{guix size}}).
- @end itemize
- @node Modules perl
- @subsection Modules perl
- @cindex perl
- Perl programs standing for themselves are named as any other package, using
- the lowercase upstream name. For Perl packages containing a single class,
- we use the lowercase class name, replace all occurrences of @code{::} by
- dashes and prepend the prefix @code{perl-}. So the class @code{XML::Parser}
- becomes @code{perl-xml-parser}. Modules containing several classes keep
- their lowercase upstream name and are also prepended by @code{perl-}. Such
- modules tend to have the word @code{perl} somewhere in their name, which
- gets dropped in favor of the prefix. For instance, @code{libwww-perl}
- becomes @code{perl-libwww}.
- @node Paquets java
- @subsection Paquets java
- @cindex java
- Java programs standing for themselves are named as any other package, using
- the lowercase upstream name.
- To avoid confusion and naming clashes with other programming languages, it
- is desirable that the name of a package for a Java package is prefixed with
- @code{java-}. If a project already contains the word @code{java}, we drop
- this; for instance, the package @code{ngsjava} is packaged under the name
- @code{java-ngs}.
- For Java packages containing a single class or a small class hierarchy, we
- use the lowercase class name, replace all occurrences of @code{.} by dashes
- and prepend the prefix @code{java-}. So the class @code{apache.commons.cli}
- becomes package @code{java-apache-commons-cli}.
- @node Polices de caractères
- @subsection Polices de caractères
- @cindex polices
- For fonts that are in general not installed by a user for typesetting
- purposes, or that are distributed as part of a larger software package, we
- rely on the general packaging rules for software; for instance, this applies
- to the fonts delivered as part of the X.Org system or fonts that are part of
- TeX Live.
- To make it easier for a user to search for fonts, names for other packages
- containing only fonts are constructed as follows, independently of the
- upstream package name.
- The name of a package containing only one font family starts with
- @code{font-}; it is followed by the foundry name and a dash @code{-} if the
- foundry is known, and the font family name, in which spaces are replaced by
- dashes (and as usual, all upper case letters are transformed to lower
- case). For example, the Gentium font family by SIL is packaged under the
- name @code{font-sil-gentium}.
- For a package containing several font families, the name of the collection
- is used in the place of the font family name. For instance, the Liberation
- fonts consist of three families, Liberation Sans, Liberation Serif and
- Liberation Mono. These could be packaged separately under the names
- @code{font-liberation-sans} and so on; but as they are distributed together
- under a common name, we prefer to package them together as
- @code{font-liberation}.
- In the case where several formats of the same font family or font collection
- are packaged separately, a short form of the format, prepended by a dash, is
- added to the package name. We use @code{-ttf} for TrueType fonts,
- @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
- fonts.
- @node Bootstrapping
- @section Bootstrapping
- @c Adapted from the ELS 2013 paper.
- @cindex bootstrapping
- Bootstrapping in our context refers to how the distribution gets built
- ``from nothing''. Remember that the build environment of a derivation
- contains nothing but its declared inputs (@pxref{Introduction}). So there's
- an obvious chicken-and-egg problem: how does the first package get built?
- How does the first compiler get compiled? Note that this is a question of
- interest only to the curious hacker, not to the regular user, so you can
- shamelessly skip this section if you consider yourself a ``regular user''.
- @cindex bootstrap binaries
- The GNU system is primarily made of C code, with libc at its core. The GNU
- build system itself assumes the availability of a Bourne shell and
- command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
- `grep'. Furthermore, build programs---programs that run @code{./configure},
- @code{make}, etc.---are written in Guile Scheme (@pxref{Dérivations}).
- Consequently, to be able to build anything at all, from scratch, Guix relies
- on pre-built binaries of Guile, GCC, Binutils, libc, and the other packages
- mentioned above---the @dfn{bootstrap binaries}.
- These bootstrap binaries are ``taken for granted'', though we can also
- re-create them if needed (more on that later).
- @unnumberedsubsec Preparing to Use the Bootstrap Binaries
- @c As of Emacs 24.3, Info-mode displays the image, but since it's a
- @c large image, it's hard to scroll. Oh well.
- @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap
- derivations}
- The figure above shows the very beginning of the dependency graph of the
- distribution, corresponding to the package definitions of the @code{(gnu
- packages bootstrap)} module. A similar figure can be generated with
- @command{guix graph} (@pxref{Invoquer guix graph}), along the lines of:
- @example
- guix graph -t derivation \
- -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
- | dot -Tps > t.ps
- @end example
- At this level of detail, things are slightly complex. First, Guile itself
- consists of an ELF executable, along with many source and compiled Scheme
- files that are dynamically loaded when it runs. This gets stored in the
- @file{guile-2.0.7.tar.xz} tarball shown in this graph. This tarball is part
- of Guix's ``source'' distribution, and gets inserted into the store with
- @code{add-to-store} (@pxref{Le dépôt}).
- But how do we write a derivation that unpacks this tarball and adds it to
- the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
- derivation---the first one that gets built---uses @code{bash} as its
- builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
- @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, @file{xz},
- and @file{mkdir} are statically-linked binaries, also part of the Guix
- source distribution, whose sole purpose is to allow the Guile tarball to be
- unpacked.
- Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning Guile
- that can be used to run subsequent build programs. Its first task is to
- download tarballs containing the other pre-built binaries---this is what the
- @code{.tar.xz.drv} derivations do. Guix modules such as
- @code{ftp-client.scm} are used for this purpose. The
- @code{module-import.drv} derivations import those modules in a directory in
- the store, using the original layout. The @code{module-import-compiled.drv}
- derivations compile those modules, and write them in an output directory
- with the right layout. This corresponds to the @code{#:modules} argument of
- @code{build-expression->derivation} (@pxref{Dérivations}).
- Finally, the various tarballs are unpacked by the derivations
- @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etc., at which
- point we have a working C tool chain.
- @unnumberedsubsec Building the Build Tools
- Bootstrapping is complete when we have a full tool chain that does not
- depend on the pre-built bootstrap tools discussed above. This no-dependency
- requirement is verified by checking whether the files of the final tool
- chain contain references to the @file{/gnu/store} directories of the
- bootstrap inputs. The process that leads to this ``final'' tool chain is
- described by the package definitions found in the @code{(gnu packages
- commencement)} module.
- The @command{guix graph} command allows us to ``zoom out'' compared to the
- graph above, by looking at the level of package objects instead of
- individual derivations---remember that a package may translate to several
- derivations, typically one derivation to download its source, one to build
- the Guile modules it needs, and one to actually build the package from
- source. The command:
- @example
- guix graph -t bag \
- -e '(@@@@ (gnu packages commencement)
- glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
- @end example
- @noindent
- produces the dependency graph leading to the ``final'' C
- library@footnote{You may notice the @code{glibc-intermediate} label,
- suggesting that it is not @emph{quite} final, but as a good approximation,
- we will consider it final.}, depicted below.
- @image{images/bootstrap-packages,6in,,Graphe de dépendance des premiers
- paquets}
- @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
- The first tool that gets built with the bootstrap binaries is
- GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite for
- all the following packages. From there Findutils and Diffutils get built.
- Then come the first-stage Binutils and GCC, built as pseudo cross
- tools---i.e., with @code{--target} equal to @code{--host}. They are used to
- build libc. Thanks to this cross-build trick, this libc is guaranteed not
- to hold any reference to the initial tool chain.
- From there the final Binutils and GCC (not shown above) are built. GCC uses
- @code{ld} from the final Binutils, and links programs against the just-built
- libc. This tool chain is used to build the other packages used by Guix and
- by the GNU Build System: Guile, Bash, Coreutils, etc.
- And voilà! At this point we have the complete set of build tools that the
- GNU Build System expects. These are in the @code{%final-inputs} variable of
- the @code{(gnu packages commencement)} module, and are implicitly used by
- any package that uses @code{gnu-build-system} (@pxref{Systèmes de construction,
- @code{gnu-build-system}}).
- @unnumberedsubsec Building the Bootstrap Binaries
- @cindex bootstrap binaries
- Because the final tool chain does not depend on the bootstrap binaries,
- those rarely need to be updated. Nevertheless, it is useful to have an
- automated way to produce them, should an update occur, and this is what the
- @code{(gnu packages make-bootstrap)} module provides.
- The following command builds the tarballs containing the bootstrap binaries
- (Guile, Binutils, GCC, libc, and a tarball containing a mixture of Coreutils
- and other basic command-line tools):
- @example
- guix build bootstrap-tarballs
- @end example
- The generated tarballs are those that should be referred to in the
- @code{(gnu packages bootstrap)} module mentioned at the beginning of this
- section.
- Still here? Then perhaps by now you've started to wonder: when do we reach a
- fixed point? That is an interesting question! The answer is unknown, but if
- you would like to investigate further (and have significant computational
- and storage resources to do so), then let us know.
- @unnumberedsubsec Reducing the Set of Bootstrap Binaries
- Our bootstrap binaries currently include GCC, Guile, etc. That's a lot of
- binary code! Why is that a problem? It's a problem because these big chunks
- of binary code are practically non-auditable, which makes it hard to
- establish what source code produced them. Every unauditable binary also
- leaves us vulnerable to compiler backdoors as described by Ken Thompson in
- the 1984 paper @emph{Reflections on Trusting Trust}.
- This is mitigated by the fact that our bootstrap binaries were generated
- from an earlier Guix revision. Nevertheless it lacks the level of
- transparency that we get in the rest of the package dependency graph, where
- Guix always gives us a source-to-binary mapping. Thus, our goal is to
- reduce the set of bootstrap binaries to the bare minimum.
- The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
- on-going projects to do that. One of these is about replacing the bootstrap
- GCC with a sequence of assemblers, interpreters, and compilers of increasing
- complexity, which could be built from source starting from a simple and
- auditable assembler. Your help is welcome!
- @node Porter
- @section Porter vers une nouvelle plateforme
- As discussed above, the GNU distribution is self-contained, and
- self-containment is achieved by relying on pre-built ``bootstrap binaries''
- (@pxref{Bootstrapping}). These binaries are specific to an operating system
- kernel, CPU architecture, and application binary interface (ABI). Thus, to
- port the distribution to a platform that is not yet supported, one must
- build those bootstrap binaries, and update the @code{(gnu packages
- bootstrap)} module to use them on that platform.
- Fortunately, Guix can @emph{cross compile} those bootstrap binaries. When
- everything goes well, and assuming the GNU tool chain supports the target
- platform, this can be as simple as running a command like this one:
- @example
- guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
- @end example
- For this to work, the @code{glibc-dynamic-linker} procedure in @code{(gnu
- packages bootstrap)} must be augmented to return the right file name for
- libc's dynamic linker on that platform; likewise,
- @code{system->linux-architecture} in @code{(gnu packages linux)} must be
- taught about the new platform.
- Once these are built, the @code{(gnu packages bootstrap)} module needs to be
- updated to refer to these binaries on the target platform. That is, the
- hashes and URLs of the bootstrap tarballs for the new platform must be added
- alongside those of the currently supported platforms. The bootstrap Guile
- tarball is treated specially: it is expected to be available locally, and
- @file{gnu/local.mk} has rules to download it for the supported
- architectures; a rule for the new platform must be added as well.
- In practice, there may be some complications. First, it may be that the
- extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
- above) is not recognized by all the GNU tools. Typically, glibc recognizes
- some of these, whereas GCC uses an extra @code{--with-abi} configure flag
- (see @code{gcc.scm} for examples of how to handle this). Second, some of
- the required packages could fail to build for that platform. Lastly, the
- generated binaries could be broken for some reason.
- @c *********************************************************************
- @include contributing.fr.texi
- @c *********************************************************************
- @node Remerciements
- @chapter Remerciements
- Guix se base sur le @uref{http://nixos.org/nix/, gestionnaire de paquets
- Nix} conçu et implémenté par Eelco Dolstra, avec des constributions d'autres
- personnes (voir le fichier @file{nix/AUTHORS} dans Guix). Nix a inventé la
- gestion de paquet fonctionnelle et promu des fonctionnalités sans précédents
- comme les mises à jour de paquets transactionnelles et les retours en
- arrière, les profils par utilisateurs et les processus de constructions
- transparents pour les références. Sans ce travail, Guix n'existerait pas.
- Les distributions logicielles basées sur Nix, Nixpkgs et NixOS, ont aussi
- été une inspiration pour Guix.
- GNU@tie{}Guix lui-même est un travail collectif avec des contributions d'un
- grand nombre de personnes. Voyez le fichier @file{AUTHORS} dans Guix pour
- plus d'information sur ces personnes de qualité. Le fichier @file{THANKS}
- liste les personnes qui ont aidé en rapportant des bogues, en prenant soin
- de l'infrastructure, en fournissant des images et des thèmes, en faisant des
- suggestions et bien plus. Merci !
- @c *********************************************************************
- @node La licence GNU Free Documentation
- @appendix La licence GNU Free Documentation
- @cindex license, GNU Free Documentation License
- @include fdl-1.3.texi
- @c *********************************************************************
- @node Index des concepts
- @unnumbered Index des concepts
- @printindex cp
- @node Index de programmation
- @unnumbered Index de programmation
- @syncodeindex tp fn
- @syncodeindex vr fn
- @printindex fn
- @bye
- @c Local Variables:
- @c ispell-local-dictionary: "american";
- @c End:
|