[{"data":1,"prerenderedAt":33},["ShallowReactive",2],{"note-pins-on-first-use-ca":3},{"slug":4,"order":5,"title":6,"summary":7,"measured":8,"topic":9,"toc":10,"html":32},"pins-on-first-use",30,"\"Empremtes al primer ús: com plugin-hostd es refia del binari d'un plugin\"","plugin-hostd enregistra el resum dels fitxers d'un plugin i de la disposició dels seus paràmetres la primera vegada que s'afegeix, els comprova en cada addició posterior i ho refusa en veu alta quan canvien; així un amfitrió autònom té empremtes sense que cap controlador les hi enviï.","plugin-hostd 0.3.0 i posteriors.","host",[11,14,17,20,23,26,29],{"id":12,"title":13},"per-que","Per què",{"id":15,"title":16},"parametres","Paràmetres",{"id":18,"title":19},"un-sol-format-de-linia","Un sol format de línia",{"id":21,"title":22},"primer-us","Primer ús",{"id":24,"title":25},"un-canvi","Un canvi",{"id":27,"title":28},"el-fitxer-d-empremtes-de-plugin-qualify","El fitxer d'empremtes de plugin-qualify",{"id":30,"title":31},"un-amfitrio-neutral-quant-al-format","Un amfitrió neutral quant al format","\u003Ch2 id=\"per-que\">Per què\u003C\u002Fh2>\n\u003Cp>Mentre \u003Ccode>require_pins\u003C\u002Fcode> està activat, un plugin sense empremta es refusa (-508): el primer \u003Ccode>add\u003C\u002Fcode> d'un usuari autònom\nfallaria si cap controlador no hagués enviat abans \u003Ccode>pin_set\u003C\u002Fcode>. Un amfitrió que no fa empremtes pel seu compte hauria de\ndesactivar \u003Ccode>require_pins\u003C\u002Fcode> i aleshores no es comprovaria cap empremta. Per això l'empremta es pren al primer ús i es\nconserva i qualsevol canvi posterior es fa sentir.\u003C\u002Fp>\n\u003Cp>Un plugin extern no porta empremtes pròpies i el seu registre de qualificació és una prova, no una empremta. Només es\ndistribueix un fitxer d'empremtes per als binaris dels paquets d'OpenMixer i un registre amb el veredicte \u003Ccode>refused\u003C\u002Fcode>\nrefusa l'addició.\u003C\u002Fp>\n\u003Ch2 id=\"parametres\">Paràmetres\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>clau\u003C\u002Fth>\n\u003Cth>per defecte\u003C\u002Fth>\n\u003Cth>significat\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pin_mode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>first-use\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>strict\u003C\u002Fcode> o \u003Ccode>first-use\u003C\u002Fcode>; només es llegeix mentre \u003Ccode>require_pins\u003C\u002Fcode> val 1\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pin_store\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>buit\u003C\u002Ftd>\n\u003Ctd>el fitxer on es guarden les empremtes apreses; buit vol dir \u003Ccode>$XDG_STATE_HOME\u002Fplugin-hostd\u002Fpins\u003C\u002Fcode>, si no \u003Ccode>$HOME\u002F.local\u002Fstate\u002Fplugin-hostd\u002Fpins\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pin_file\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>buit\u003C\u002Ftd>\n\u003Ctd>un fitxer d'empremtes que es carrega en arrencar, escrit per \u003Ccode>plugin-qualify --all --pins\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Ccode>require_pins 0\u003C\u002Fcode> continua volent dir que no es comprova cap empremta. \u003Ccode>strict\u003C\u002Fcode> és el comportament d'abans: un plugin sense\nempremta es refusa amb -508. Un amfitrió que fa empremtes pel seu compte posa \u003Ccode>pin_mode strict\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"un-sol-format-de-linia\">Un sol format de línia\u003C\u002Fh2>\n\u003Cp>El magatzem d'empremtes, el fitxer d'empremtes i el verb \u003Ccode>pin_set\u003C\u002Fcode> porten la mateixa línia:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>pin_set &lt;uri&gt; &lt;path&gt;=&lt;sha256&gt;[,&lt;path&gt;=&lt;sha256&gt;...] &lt;scheme&gt;:&lt;sha256&gt; [verdict=&lt;word&gt;]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>En un fitxer el \u003Ccode>pin_set\u003C\u002Fcode> inicial és opcional, \u003Ccode>#\u003C\u002Fcode> comença un comentari i les línies buides se salten.\u003C\u002Fli>\n\u003Cli>La paraula de disposició és \u003Ccode>-\u003C\u002Fcode> mentre la disposició no s'ha après. \u003Ccode>pin_set\u003C\u002Fcode> com a verb refusa \u003Ccode>-\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>verdict=\u003C\u002Fcode> és el veredicte de qualificació dels bytes amb empremta: \u003Ccode>in-process\u003C\u002Fcode>, \u003Ccode>isolated\u003C\u002Fcode> o \u003Ccode>refused\u003C\u002Fcode>. Si no hi és, el\nplugin no està qualificat.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>El magatzem només guarda les empremtes que el dimoni ha après o acceptat. Una empremta arribada per \u003Ccode>pin_set\u003C\u002Fcode> o \u003Ccode>pin_file\u003C\u002Fcode>\nés del controlador: no s'escriu al magatzem i, mentre el dimoni corre, substitueix la que hi hagi guardada del mateix uri.\nEl magatzem s'escriu en un fitxer temporal del mateix directori i es reanomena, amb permisos 0600.\u003C\u002Fp>\n\u003Ch2 id=\"primer-us\">Primer ús\u003C\u002Fh2>\n\u003Cp>Un \u003Ccode>add\u003C\u002Fcode> en mode \u003Ccode>first-use\u003C\u002Fcode> sense empremta per a l'uri:\u003C\u002Fp>\n\u003Col>\n\u003Cli>El dimoni recull els fitxers que el format carrega per al plugin, en calcula el resum sobre descriptors oberts i\nenregistra una empremta amb disposició \u003Ccode>-\u003C\u002Fcode> i sense veredicte. D'una recollida fallida no s'accepta res: l'addició es\nrefusa amb -509 i no s'enregistra cap empremta.\u003C\u002Fli>\n\u003Cli>La instància es col·loca en un worker propi, demani el que demani la col·locació. Compartir procés demana el veredicte\n\u003Ccode>in-process\u003C\u002Fcode> a l'empremta i una empremta apresa no en té.\u003C\u002Fli>\n\u003Cli>Quan el worker ha acceptat l'addició, el dimoni li demana la disposició dels paràmetres (\u003Ccode>pin_layout &lt;instance&gt;\u003C\u002Fcode>), la\ndesa a l'empremta i escriu el magatzem. Un worker que no coneix el verb deixa la disposició a \u003Ccode>-\u003C\u002Fcode>; els fitxers es\ncontinuen comprovant en cada addició posterior.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Les addicions posteriors comproven l'empremta guardada com fa \u003Ccode>strict\u003C\u002Fcode>: els fitxers es resumeixen abans que cap worker vegi\nl'addició i la disposició es passa al worker amb \u003Ccode>pin_expect\u003C\u002Fcode>. Una addició repetida (un worker que es reinicia) mai no\naprèn: comprova l'empremta que té.\u003C\u002Fp>\n\u003Ch2 id=\"un-canvi\">Un canvi\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Si els fitxers són diferents, l'addició respon -509. Si la disposició és diferent, el worker la refusa i l'addició\nrespon -510. En tots dos modes el dimoni emet \u003Ccode>pin_changed &lt;uri&gt; files\u003C\u002Fcode> o \u003Ccode>pin_changed &lt;uri&gt; layout\u003C\u002Fcode> pel port de retorn.\u003C\u002Fli>\n\u003Cli>L'empremta es queda com estava. Res no carrega el plugin canviat fins que el controlador decideix.\u003C\u002Fli>\n\u003Cli>\u003Ccode>pin_accept &lt;uri&gt;\u003C\u002Fcode> pren l'empremta nova: els fitxers es tornen a recollir i resumir, s'enregistren amb disposició \u003Ccode>-\u003C\u002Fcode> i\nsense veredicte, de manera que la propera addició aprèn la nova disposició i col·loca la instància en un worker propi. En\nmode \u003Ccode>strict\u003C\u002Fcode> es refusa: un amfitrió que fa empremtes pel seu compte canvia una empremta amb \u003Ccode>pin_set\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Acceptar mai no fa que un plugin vagi dins del procés: això continua sent una decisió de la qualificació.\u003C\u002Fp>\n\u003Ch2 id=\"el-fitxer-d-empremtes-de-plugin-qualify\">El fitxer d'empremtes de plugin-qualify\u003C\u002Fh2>\n\u003Cp>\u003Ccode>plugin-qualify --all --pins &lt;file&gt;\u003C\u002Fcode> escriu la mateixa línia, amb \u003Ccode>verdict=\u003C\u002Fcode>, per a cada plugin que ha qualificat. El dimoni\nel carrega en arrencar amb \u003Ccode>pin_file\u003C\u002Fcode>; una línia que no pot llegir n'atura l'arrencada i en diu el número. Una sola ordre\nexplora, qualifica i fa l'empremta del que hi ha instal·lat; un resum corromput al fitxer fa que l'addició respongui -509.\u003C\u002Fp>\n\u003Ch2 id=\"un-amfitrio-neutral-quant-al-format\">Un amfitrió neutral quant al format\u003C\u002Fh2>\n\u003Cp>El dimoni té una sola taula de formats i un format n'és una fila:\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>capacitat\u003C\u002Fth>\n\u003Cth>significat\u003C\u002Fth>\n\u003Cth>lv2\u003C\u002Fth>\n\u003Cth>clap\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>la paraula que fan servir \u003Ccode>policy_set\u003C\u002Fcode>, \u003Ccode>worker_env\u003C\u002Fcode> i \u003Ccode>worker_list\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>lv2\u003C\u002Ftd>\n\u003Ctd>clap\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>prefix\u003C\u002Fcode>, \u003Ccode>strip_prefix\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>com diu un uri que és d'aquest format i si el worker el rep sense el prefix\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>lv2:\u003C\u002Fcode> tret; també és el format d'un uri sense prefix\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>clap:\u003C\u002Fcode> conservat\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>worker\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>el programa, segons els paràmetres\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>mod_host\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>clap_host\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pin_collect\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>l'arrel i els fitxers que l'amfitrió carrega per a un uri\u003C\u002Ftd>\n\u003Ctd>el manifest, el binari i els fitxers seeAlso del paquet\u003C\u002Ftd>\n\u003Ctd>el fitxer \u003Ccode>.clap\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>layout_check\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>el worker accepta \u003Ccode>pin_expect\u003C\u002Fcode> i \u003Ccode>pin_layout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>sí\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>world_scope\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>de què està fet el món del worker\u003C\u002Ftd>\n\u003Ctd>un paquet (reduït)\u003C\u002Ftd>\n\u003Ctd>res\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pin_pool\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>si l'empremta deixa el plugin compartir worker\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>sí\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>El protocol no anomena cap format quan es refereix a una capacitat. Una prova registra un tercer format en temps\nd'execució i el porta per \u003Ccode>add\u003C\u002Fcode>, \u003Ccode>param_set\u003C\u002Fcode>, \u003Ccode>pin_set\u003C\u002Fcode>, \u003Ccode>pin_check\u003C\u002Fcode> i \u003Ccode>remove\u003C\u002Fcode> sense tocar el protocol; una fila a la qual\nfalta una capacitat es refusa amb un motiu explícit, de manera que la prova surt vermella en lloc que el dimoni la compili\nen silenci.\u003C\u002Fp>\n\u003Cp>El que fa un amfitrió autònom amb un veredicte \u003Ccode>in-process\u003C\u002Fcode> és decisió seva: el veredicte viatja a l'empremta.\u003C\u002Fp>\n",1793954996372]