Re: Can't seem to get correct hash for binary download
"Bastian Eicher" <[email protected]> Wed, 12 Apr 2023 13:27:48 +0200
| Newsgroups | gmane.comp.file-systems.zero-install.devel |
|---|---|
| Message-ID | <[email protected]> |
This is a multipart message in MIME format. --===============2714879272240115849== Content-Type: multipart/alternative; boundary="----=_NextPart_000_0005_01D96D42.937BE620" Content-Language: de This is a multipart message in MIME format. ------=_NextPart_000_0005_01D96D42.937BE620 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I forgot an import detail last time: The manifest digest also covers = files=E2=80=99 last changed timestamp. Unlike for files extracted from = <archive>s, for <file>s this is always set to 0 Unix time. =20 So, to manually calculate the digest you could run: touch --date=3D@0 o/bins/v2.32.2/gnu/amd64/direnv.linux-amd64 0install digest --algorithm=3Dsha1new o/bins/v2.32.2/gnu/amd64 =20 I created a PR for you feed that adjusts the feed accordingly and it = works for me locally: https://github.com/ohmrun/0install_direnv/pull/1 =20 The whole experience of creating feeds is generally a lot smoother when = using <archive>s and/or tools like 0template, so you don=E2=80=99t have = to figure out digests by hand. But I=E2=80=99ll definitely write these steps up in a proper tutorial = soon-ish. =20 From: Laurence Taylor <[email protected]>=20 Sent: 12th of April 2023 12:44 To: Bastian Eicher <[email protected]> Subject: Re: [Zero-install-devel] Can't seem to get correct hash for = binary download =20 Thanks. I can affect the sha by changing executable and dest, but no = luck getting the correct digest by modifying the user/write bit of the = file (which as far as I can tell is the only thing in stat which is = used) =20 Is there any way I can stop it from removing the tmp directory to = inspect what properties of the download are? =20 Code here <https://github.com/ohmrun/0install_direnv> including the = binary so if you have the time you can see what results you get. =20 current XML: =20 <?xml version=3D"1.0" ?> <?xml-stylesheet type=3D'text/xsl' href=3D'interface.xsl'?> <interface = uri=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dire= nv.xml" = xmlns=3D"http://zero-install.sourceforge.net/2004/injector/interface" = xmlns:compile=3D"http://zero-install.sourceforge.net/2006/namespaces/0com= pile" = xmlns:ns=3D"http://zero-install.sourceforge.net/2006/namespaces/0compile"= = xmlns:release=3D"http://zero-install.sourceforge.net/2007/namespaces/0rel= ease"> =20 <name>direnv</name> <summary>Unclutter your .profile</summary> <homepage>http://direnv.net/</homepage> <description> direnv is a shell extension that loads different environment variables = depending on your path. =20 Instead of putting every environment variable in your = "~/.profile", have directory-specific ".envrc" files for your AWSACCESSKEY, = LIBRARY_PATH or other environment variables. =20 It does some of the job of rvm, rbenv or virtualenv but in a = language-agnostic way.</description> <category>Development</category> <needs-terminal/> <group released=3D"2022-24-11" version=3D"2.32.2"> =20 <implementation arch=3D"Linux-x86_64" = id=3D"f6c285b6cba7efd56c78ab780116a2dca9ce3b38" = main=3D"direnv.linux-amd64" released=3D"2022-11-24" version=3D"2.32.2"> <manifest-digest = sha1new=3D"f6c285b6cba7efd56c78ab780116a2dca9ce3b38"/> <file dest=3D"direnv.linux-amd64" executable=3D"true" = href=3D"https://github.com/direnv/direnv/releases/download/v2.32.2/direnv= .linux-amd64" size=3D"8988761"/>=20 </implementation> </group> </interface> =20 =20 On Tue, Apr 4, 2023 at 5:10=E2=80=AFPM Bastian Eicher = <[email protected] <mailto:[email protected]> > wrote: Hi Laurence, =20 the manifest digest <https://docs.0install.net/specifications/manifest/> = always covers an entire directory with file names and contents. Even = for a single file it still covers that file=E2=80=99s name as well, so = sha256sum by itself is not enough. =20 To get a suitable manifest digest for a single file you can do one of = the following: * Create an empty directory, place the file inside it and then run = 0install digest dir-path. or * Create a feed with everything except the IDs and <manifest-digest>s = and then run the following (only works on Windows): 0install run --command=3D0publish = https://apps.0install.net/0install/0publish-win.xml --add-missing = your-feed.xml This will automatically download the <file>s referenced in the feed and = calculate and insert any missing <manifest-digest>s. =20 Implementation IDs can be anything, as long as they=E2=80=99re unique = within the feed. But historically they=E2=80=99re usually set equal to = the digest. =20 For a single executable <file> the main=3D attribute of the = <implementation> should match the <file>=E2=80=99s dest=3D. In your case = that would be main=3D"direnv" instead of = main=3D"./o/bins/v2.32.2/gnu/amd64/direnv". Basically <file dest=3D"direnv" .../> tells 0install to download the = file and put it into the implementation directory under the name direnv. = And main=3D"direnv" tells 0install that to run that implementation it = needs to look for a file named direnv in the directory. =20 Hope this helps. We definitely need to add some more comprehensive = tutorials to the docs. =20 Regards Bastian =20 From: Laurence Taylor <[email protected] = <mailto:[email protected]> >=20 Sent: 4th of April 2023 16:39 To: [email protected] = <mailto:[email protected]>=20 Subject: [Zero-install-devel] Can't seem to get correct hash for binary = download =20 Hi all. I'm hoping to remove some of the pain in installing direnv on windows by = using 0install, but it's distributed as a bare binary and I'm running = into problems. =20 Show stopper being that the downloads made by 0install are consistently = reporting a different hash to the curl + sha256sum thing I'm using to do = the manifest-digest on the binary.=20 =20 =20 info: 0install 2.18 (OCaml version): verbose mode on info: Missing selection of = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml:= <implementation> at = /mnt/dat/i/prj/bertha/.local/bertha/o/var/0install/cache/interfaces/https= %3a%2f%2fraw.githubusercontent.com <http://2fraw.githubusercontent.com> = %2fohmrun%2f0install_direnv%2fmain%2fDirenv.xml:22:152 info: Checking for GTK plugin at = '/mnt/dat/i/prj/bertha/.local/bertha/o/os/linux/prg/0install/lib/0install= -gtk/gui_gtk.cmxs' info: Checking for GTK plugin at = '/mnt/dat/i/prj/bertha/.local/bertha/o/os/linux/prg/0install/lib/0install= .net/gui_gtk.cmxs <http://0install.net/gui_gtk.cmxs> ' info: Initialising GTK GUI info: Switching to GLib mainloop... debug: download_icon = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml info: No PNG icons found in = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml debug: download_icon = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml info: No PNG icons found in = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml info: Starting download of feed = 'https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml= ' debug: download_and_import_feed = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml debug: Download URL = 'https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml= '... (for = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml)= debug: start_monitoring = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml debug: Scheduling download of = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml info: HTTP GET = "https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml= " debug: Checking for certificate file = "/etc/ssl/certs/ca-certificates.crt" info: Download = 'https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml= ' completed successfully (2415 bytes) info: Running GnuPG: /usr/bin/gpg --no-secmem-warning --batch = --status-fd 1 --keyserver-options no-auto-key-retrieve --verify = /tmp/0install-b37581-gpg - debug: Updating = 'https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml= ' from network; modified at 2023-04-04 16:16 debug: No change info: Updated feed cache checked time for = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml = (modified 2023-04-04 16:16) debug: stop_monitoring = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml info: OK button =3D> true info: Missing selection of = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml:= <implementation> at = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml:= 22:152 debug: download_impls: for = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml = get 2.32.2 debug: Download URL = 'https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2/gnu/am= d64/direnv'... (for = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml)= debug: start_monitoring = https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2/gnu/amd= 64/direnv debug: Scheduling download of = https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2/gnu/amd= 64/direnv info: HTTP GET = "https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2/gnu/am= d64/direnv" info: Redirect from = 'https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2/gnu/am= d64/direnv' to = 'https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/bins/v2.= 32.2/gnu/amd64/direnv' = (https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/bins/v2.= 32.2/gnu/amd64/direnv) debug: Scheduling download of = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/bins/v2.3= 2.2/gnu/amd64/direnv info: HTTP GET = "https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/bins/v2.= 32.2/gnu/amd64/direnv" info: Download = 'https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/bins/v2.= 32.2/gnu/amd64/direnv' completed successfully (8988761 bytes) info: Removing temporary directory = '/mnt/dat/i/prj/bertha/.local/bertha/o/var/0install/cache/implementations= /tmp-2e3a418d' info: OK button =3D> false info: Reporting error to user: Incorrect manifest -- archive is = corrupted. Required digest: = sha256=3D43e7200746d526aec6f37e689dcced23d5e42cfac7022e301d6b37420d625663= Actual digest: = sha256=3Def1810692d07fb818f121fae5032d69719e982c636e305ff11e3d8955fc5d1cc= ... downloading implementation = https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Direnv.xml = 2.32.2 (id=3D./o/bins/v2.32.2/gnu/amd64) Raised at Zeroinstall__Fetch.fetcher#download_impls.(fun) in file = "src/zeroinstall/fetch.ml <http://fetch.ml> ", line 648, characters = 10-21 Called from = Lwt.Sequential_composition.bind.create_result_promise_and_callback_if_def= erred.callback in file "src/core/lwt.ml <http://lwt.ml> ", line 1849, = characters 23-26 debug: stop_monitoring = https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2/gnu/amd= 64/direnv =20 Still reading the docs but it's been confusing me the entire day so I = thought I'd sent a note in. =20 regards, Loz ------=_NextPart_000_0005_01D96D42.937BE620 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <html xmlns:v=3D"urn:schemas-microsoft-com:vml" = xmlns:o=3D"urn:schemas-microsoft-com:office:office" = xmlns:w=3D"urn:schemas-microsoft-com:office:word" = xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" = xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta = http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8"><meta = name=3DGenerator content=3D"Microsoft Word 15 (filtered = medium)"><style><!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} @font-face {font-family:Consolas; panose-1:2 11 6 9 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; font-size:11.0pt; font-family:"Calibri",sans-serif;} a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; text-decoration:underline;} span.EmailStyle18 {mso-style-type:personal-reply; font-family:"Calibri",sans-serif; color:windowtext;} .MsoChpDefault {mso-style-type:export-only; font-family:"Calibri",sans-serif; mso-ligatures:standardcontextual; mso-fareast-language:EN-US;} @page WordSection1 {size:612.0pt 792.0pt; margin:72.0pt 72.0pt 72.0pt 72.0pt;} div.WordSection1 {page:WordSection1;} /* List Definitions */ @list l0 {mso-list-id:295257340; mso-list-template-ids:-2103168604;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level2 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level3 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:108.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level4 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:144.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level5 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:180.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level6 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:216.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level7 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:252.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level8 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:288.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l0:level9 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:324.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1 {mso-list-id:683367233; mso-list-template-ids:1093451504;} @list l1:level1 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level2 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:72.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level3 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:108.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level4 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:144.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level5 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:180.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level6 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:216.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level7 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:252.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level8 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:288.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} @list l1:level9 {mso-level-number-format:bullet; mso-level-text:=EF=82=B7; mso-level-tab-stop:324.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --></style><!--[if gte mso 9]><xml> <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext=3D"edit"> <o:idmap v:ext=3D"edit" data=3D"1" /> </o:shapelayout></xml><![endif]--></head><body lang=3DDE link=3Dblue = vlink=3Dpurple style=3D'word-wrap:break-word'><div = class=3DWordSection1><p class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'>I forgot an import detail last = time: The manifest digest also covers files=E2=80=99 last changed = timestamp. Unlike for files extracted from <archive>s, for = <file>s this is always set to 0 Unix time.<o:p></o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'><o:p> </o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'>So, to manually calculate the = digest you could run:<o:p></o:p></span></p><p class=3DMsoNormal><span = lang=3DEN-US = style=3D'font-family:Consolas;mso-fareast-language:EN-US'>touch = --date=3D@0 = o/bins/v2.32.2/gnu/amd64/direnv.linux-amd64<o:p></o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'font-family:Consolas;mso-fareast-language:EN-US'>0install = digest --algorithm=3Dsha1new = o/bins/v2.32.2/gnu/amd64<o:p></o:p></span></p><p class=3DMsoNormal><span = lang=3DEN-US = style=3D'mso-fareast-language:EN-US'><o:p> </o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'>I created a PR for you feed that = adjusts the feed accordingly and it works for me locally: <a = href=3D"https://github.com/ohmrun/0install_direnv/pull/1">https://github.= com/ohmrun/0install_direnv/pull/1</a><o:p></o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'><o:p> </o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'>The whole experience of creating = feeds is generally a lot smoother when using <archive>s and/or = tools like 0template, so you don=E2=80=99t have to figure out digests by = hand.<o:p></o:p></span></p><p class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'>But I=E2=80=99ll definitely write = these steps up in a proper tutorial soon-ish.<o:p></o:p></span></p><p = class=3DMsoNormal><span lang=3DEN-US = style=3D'mso-fareast-language:EN-US'><o:p> </o:p></span></p><div = style=3D'border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm = 0cm 0cm'><p class=3DMsoNormal><b><span = lang=3DEN-US>From:</span></b><span lang=3DEN-US> Laurence Taylor = <[email protected]> <br><b>Sent:</b> 12<sup>th</sup> of April = 2023 12:44<br><b>To:</b> Bastian Eicher = <[email protected]><br><b>Subject:</b> Re: [Zero-install-devel] = Can't seem to get correct hash for binary = download<o:p></o:p></span></p></div><p class=3DMsoNormal><span = lang=3DEN-US><o:p> </o:p></span></p><div><div><p = class=3DMsoNormal>Thanks. I can affect the sha by changing <span = style=3D'font-family:"Courier New"'>executable</span> and <span = style=3D'font-family:"Courier New"'>dest</span>, but no luck getting the = correct digest by modifying the user/write bit of the file (which as far = as I can tell is the only thing in stat which is = used)<o:p></o:p></p></div><p = class=3DMsoNormal><o:p> </o:p></p><div><div><p class=3DMsoNormal>Is = there any way I can stop it from removing the tmp directory to inspect = what properties of the download are?<o:p></o:p></p></div><div><p = class=3DMsoNormal><o:p> </o:p></p></div><div><p = class=3DMsoNormal>Code <a = href=3D"https://github.com/ohmrun/0install_direnv">here</a> including = the binary so if you have the time you can see what results you = get.<o:p></o:p></p></div><div><p = class=3DMsoNormal><o:p> </o:p></p></div><div><p = class=3DMsoNormal>current XML:<o:p></o:p></p></div><div><p = class=3DMsoNormal><o:p> </o:p></p></div><div><div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><?</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>xml</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#9CDCFE'> = version</span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"1.0"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>?></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><?</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>xml-stylesheet</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#9CDCFE'> = type</span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>'text/xsl'</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#9CDCFE'> = href</span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>'interface.xsl'</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>?></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>interface</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>uri</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml">https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Di= renv.xml</a>"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>xmlns</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"<a = href=3D"http://zero-install.sourceforge.net/2004/injector/interface">http= ://zero-install.sourceforge.net/2004/injector/interface</a>"</span><= span style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>xmlns:compile</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"<a = href=3D"http://zero-install.sourceforge.net/2006/namespaces/0compile">htt= p://zero-install.sourceforge.net/2006/namespaces/0compile</a>"</span= ><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'> </span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>xmlns:ns</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"<a = href=3D"http://zero-install.sourceforge.net/2006/namespaces/0compile">htt= p://zero-install.sourceforge.net/2006/namespaces/0compile</a>"</span= ><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'> </span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>xmlns:release</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"<a = href=3D"http://zero-install.sourceforge.net/2007/namespaces/0release">htt= p://zero-install.sourceforge.net/2007/namespaces/0release</a>"</span= ><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p> </o:p></span></p><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>name</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>direnv</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>name</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>summary</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>Unclutter your .profile</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>summary</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>homepage</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'><a = href=3D"http://direnv.net/">http://direnv.net/</a></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>homepage</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>description</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>direnv = is a shell extension that loads different environment variables = depending<o:p></o:p></span></p></div><div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>on = your path.<o:p></o:p></span></p></div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p> </o:p></span></p><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>Instead of putting every environment variable in = your </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>&quot;</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>~/.profile</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>&quot;</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>, = have<o:p></o:p></span></p></div><div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>directory-specific </span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>&quot;</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>.envrc</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>&quot;</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> files = for your AWSACCESSKEY, LIBRARY_PATH or = other<o:p></o:p></span></p></div><div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>environment variables.<o:p></o:p></span></p></div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p> </o:p></span></p><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>It = does some of the job of rvm, rbenv or virtualenv but in a = language-agnostic<o:p></o:p></span></p></div><div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>way.</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>description</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>category</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>Development</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>category</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>needs-terminal</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>/></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>group</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>released</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"2022-24-11"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>version</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"2.32.2"</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=C2=A0=C2=A0=C2=A0 = <o:p></o:p></span></p></div><div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=C2=A0=C2=A0=C2=A0=C2=A0</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>implementation</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>arch</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"Linux-x86_64"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>id</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"f6c285b6cba7efd56c78ab780116a2dca9ce3b38"<= /span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'> </span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>main</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"direnv.linux-amd64"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>released</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"2022-11-24"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>version</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"2.32.2"</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=C2=A0=C2=A0=C2=A0 </span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>manifest-digest</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>sha1new</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"f6c285b6cba7efd56c78ab780116a2dca9ce3b38"<= /span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>/></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=C2=A0=C2=A0=C2=A0 </span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'><</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>file</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>dest</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"direnv.linux-amd64"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>executable</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"true"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>href</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"<a = href=3D"https://github.com/direnv/direnv/releases/download/v2.32.2/direnv= .linux-amd64">https://github.com/direnv/direnv/releases/download/v2.32.2/= direnv.linux-amd64</a>"</span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:#9CDCFE'>size</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=3D</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#CE9178'>"8988761"</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>/></span><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'> = <o:p></o:p></span></p></div><div><p class=3DMsoNormal = style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'>=C2=A0=C2=A0=C2=A0=C2=A0</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>implementation</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier New";color:#D4D4D4'>=C2=A0 = </span><span style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>group</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div><div><p = class=3DMsoNormal style=3D'line-height:8.25pt;background:#1E1E1E'><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'></</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#569CD6'>interface</span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:gray'>></span><span = style=3D'font-size:6.0pt;font-family:"Courier = New";color:#D4D4D4'><o:p></o:p></span></p></div></div></div><div><p = class=3DMsoNormal><o:p> </o:p></p></div></div></div><p = class=3DMsoNormal><o:p> </o:p></p><div><div><p class=3DMsoNormal>On = Tue, Apr 4, 2023 at 5:10=E2=80=AFPM Bastian Eicher <<a = href=3D"mailto:[email protected]">[email protected]</a>> = wrote:<o:p></o:p></p></div><blockquote = style=3D'border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm = 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><div><div><p = class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Hi = Laurence,<o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>the <a = href=3D"https://docs.0install.net/specifications/manifest/" = target=3D"_blank">manifest digest</a> always covers an entire directory = with file names and contents. Even for a single file it still covers = that file=E2=80=99s name as well, so sha256sum by itself is not = enough.</span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>To get a suitable manifest digest for a single = file you can do one of the following:</span><o:p></o:p></p><ul = type=3Ddisc><li class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 = level1 lfo1'><span lang=3DEN-US>Create an empty directory, place the = file inside it and then run </span><span lang=3DEN-US = style=3D'font-family:Consolas'>0install digest dir-path</span><span = lang=3DEN-US>.</span><o:p></o:p></li></ul><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>or<o:p></o:p= ></p><ul type=3Ddisc><li class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 = level1 lfo2'><span lang=3DEN-US>Create a feed with everything except the = IDs and </span><span lang=3DEN-US = style=3D'font-family:Consolas'><manifest-digest></span><span = lang=3DEN-US>s and then run the following (only works on = Windows):<br></span><span lang=3DEN-US = style=3D'font-family:Consolas'>0install run --command=3D0publish <a = href=3D"https://apps.0install.net/0install/0publish-win.xml" = target=3D"_blank">https://apps.0install.net/0install/0publish-win.xml</a>= --add-missing your-feed.xml<br></span><span lang=3DEN-US>This will = automatically download the </span><span lang=3DEN-US = style=3D'font-family:Consolas'><file></span><span lang=3DEN-US>s = referenced in the feed and calculate and insert any = missing </span><span lang=3DEN-US = style=3D'font-family:Consolas'><manifest-digest></span><span = lang=3DEN-US>s.</span><o:p></o:p></li></ul><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>Implementation IDs can be anything, as long as = they=E2=80=99re unique within the feed. But historically they=E2=80=99re = usually set equal to the digest.</span><o:p></o:p></p><p = class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>For a single executable </span><span lang=3DEN-US = style=3D'font-family:Consolas'><file></span><span lang=3DEN-US> = the </span><span lang=3DEN-US = style=3D'font-family:Consolas'>main=3D</span><span lang=3DEN-US> = attribute of the </span><span lang=3DEN-US = style=3D'font-family:Consolas'><implementation></span><span = lang=3DEN-US> should match the </span><span lang=3DEN-US = style=3D'font-family:Consolas'><file></span><span = lang=3DEN-US>=E2=80=99s </span><span lang=3DEN-US = style=3D'font-family:Consolas'>dest=3D</span><span lang=3DEN-US>. In = your case that would be </span><span lang=3DEN-US = style=3D'font-family:Consolas'>main=3D"direnv"</span><span = lang=3DEN-US> instead of </span><span lang=3DEN-US = style=3D'font-family:Consolas'>main=3D"./o/bins/v2.32.2/gnu/amd64/di= renv"</span><span lang=3DEN-US>.</span><o:p></o:p></p><p = class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>Basically </span><span lang=3DEN-US = style=3D'font-family:Consolas'><file dest=3D"direnv" = .../></span><span lang=3DEN-US> tells 0install to download the file = and put it into the implementation directory under the name </span><span = lang=3DEN-US style=3D'font-family:Consolas'>direnv</span><span = lang=3DEN-US>. And </span><span lang=3DEN-US = style=3D'font-family:Consolas'>main=3D"direnv"</span><span = lang=3DEN-US> tells 0install that to run that implementation it needs to = look for a file named </span><span lang=3DEN-US = style=3D'font-family:Consolas'>direnv</span><span lang=3DEN-US> in the = directory.</span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>Hope this helps. We definitely need to add some more = comprehensive tutorials to the docs.</span><o:p></o:p></p><p = class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>Regards</span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US>Bastian</span><o:p></o:p></p><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><div = style=3D'border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0cm = 0cm 0cm;border-color:currentcolor currentcolor'><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span = lang=3DEN-US>From:</span></b><span lang=3DEN-US> Laurence Taylor <<a = href=3D"mailto:[email protected]" = target=3D"_blank">[email protected]</a>> <br><b>Sent:</b> = 4<sup>th</sup> of April 2023 16:39<br><b>To:</b> <a = href=3D"mailto:[email protected]" = target=3D"_blank">[email protected]</a><br><b>Subj= ect:</b> [Zero-install-devel] Can't seem to get correct hash for binary = download</span><o:p></o:p></p></div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = lang=3DEN-US> </span><o:p></o:p></p><div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Hi = all.<o:p></o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I'm hoping = to remove some of the pain in installing direnv on windows by using = 0install, but it's distributed as a bare binary and I'm running into = problems.<o:p></o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p><= /o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Show = stopper being that the downloads made by 0install are consistently = reporting a different hash to the curl + sha256sum thing I'm using to do = the manifest-digest on the binary. <o:p></o:p></p></div><div><p = class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p><= /o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p><= /o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span = style=3D'font-family:"Courier New"'>info: 0install 2.18 (OCaml version): = verbose mode on<br>info: Missing selection of <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>: <implementation> at = /mnt/dat/i/prj/bertha/.local/bertha/o/var/0install/cache/interfaces/https= %3a%2f%<a href=3D"http://2fraw.githubusercontent.com" = target=3D"_blank">2fraw.githubusercontent.com</a>%2fohmrun%2f0install_dir= env%2fmain%2fDirenv.xml:22:152<br>info: Checking for GTK plugin at = '/mnt/dat/i/prj/bertha/.local/bertha/o/os/linux/prg/0install/lib/0install= -gtk/gui_gtk.cmxs'<br>info: Checking for GTK plugin at = '/mnt/dat/i/prj/bertha/.local/bertha/o/os/linux/prg/0install/lib/<a = href=3D"http://0install.net/gui_gtk.cmxs" = target=3D"_blank">0install.net/gui_gtk.cmxs</a>'<br>info: Initialising = GTK GUI<br>info: Switching to GLib mainloop...<br>debug: download_icon = <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>info: No PNG icons found in <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>debug: download_icon <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>info: No PNG icons found in <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>info: Starting download of feed '<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>'<br>debug: download_and_import_feed <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>debug: Download URL '<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml'." = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml'.</a>.. (for <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>)<br>debug: start_monitoring <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>debug: Scheduling download of <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>info: HTTP GET "<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>"<br>debug: Checking for certificate file = "/etc/ssl/certs/ca-certificates.crt"<br>info: Download '<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>' completed successfully (2415 bytes)<br>info: = Running GnuPG: /usr/bin/gpg --no-secmem-warning --batch --status-fd 1 = --keyserver-options no-auto-key-retrieve --verify = /tmp/0install-b37581-gpg -<br>debug: Updating '<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>' from network; modified at 2023-04-04 = 16:16<br>debug: No change<br>info: Updated feed cache checked time for = <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a> (modified 2023-04-04 16:16)<br>debug: = stop_monitoring <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a><br>info: OK button =3D> true<br>info: Missing = selection of <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>: <implementation> at <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml:22:152" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml:22:152</a><br>debug: download_impls: for <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a> get 2.32.2<br>debug: Download URL '<a = href=3D"https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2= /gnu/amd64/direnv'." = target=3D"_blank">https://github.com/ohmrun/0install_direnv/raw/main/o/bi= ns/v2.32.2/gnu/amd64/direnv'.</a>.. (for <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a>)<br>debug: start_monitoring <a = href=3D"https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2= /gnu/amd64/direnv" = target=3D"_blank">https://github.com/ohmrun/0install_direnv/raw/main/o/bi= ns/v2.32.2/gnu/amd64/direnv</a><br>debug: Scheduling download of <a = href=3D"https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2= /gnu/amd64/direnv" = target=3D"_blank">https://github.com/ohmrun/0install_direnv/raw/main/o/bi= ns/v2.32.2/gnu/amd64/direnv</a><br>info: HTTP GET "<a = href=3D"https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2= /gnu/amd64/direnv" = target=3D"_blank">https://github.com/ohmrun/0install_direnv/raw/main/o/bi= ns/v2.32.2/gnu/amd64/direnv</a>"<br>info: Redirect from '<a = href=3D"https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2= /gnu/amd64/direnv" = target=3D"_blank">https://github.com/ohmrun/0install_direnv/raw/main/o/bi= ns/v2.32.2/gnu/amd64/direnv</a>' to '<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/b= ins/v2.32.2/gnu/amd64/direnv" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/o/bins/v2.32.2/gnu/amd64/direnv</a>' (<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/b= ins/v2.32.2/gnu/amd64/direnv" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/o/bins/v2.32.2/gnu/amd64/direnv</a>)<br>debug: Scheduling = download of <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/b= ins/v2.32.2/gnu/amd64/direnv" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/o/bins/v2.32.2/gnu/amd64/direnv</a><br>info: HTTP GET "<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/b= ins/v2.32.2/gnu/amd64/direnv" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/o/bins/v2.32.2/gnu/amd64/direnv</a>"<br>info: Download '<a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/o/b= ins/v2.32.2/gnu/amd64/direnv" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/o/bins/v2.32.2/gnu/amd64/direnv</a>' completed successfully = (8988761 bytes)<br>info: Removing temporary directory = '/mnt/dat/i/prj/bertha/.local/bertha/o/var/0install/cache/implementations= /tmp-2e3a418d'<br>info: OK button =3D> false<br>info: Reporting error = to user: Incorrect manifest -- archive is corrupted.<br>Required digest: = sha256=3D43e7200746d526aec6f37e689dcced23d5e42cfac7022e301d6b37420d625663= <br>Actual digest: = sha256=3Def1810692d07fb818f121fae5032d69719e982c636e305ff11e3d8955fc5d1cc= <br>... downloading implementation <a = href=3D"https://raw.githubusercontent.com/ohmrun/0install_direnv/main/Dir= env.xml" = target=3D"_blank">https://raw.githubusercontent.com/ohmrun/0install_diren= v/main/Direnv.xml</a> 2.32.2 (id=3D./o/bins/v2.32.2/gnu/amd64)<br>Raised = at Zeroinstall__Fetch.fetcher#download_impls.(fun) in file = "src/zeroinstall/<a href=3D"http://fetch.ml" = target=3D"_blank">fetch.ml</a>", line 648, characters = 10-21<br>Called from = Lwt.Sequential_composition.bind.create_result_promise_and_callback_if_def= erred.callback in file "src/core/<a href=3D"http://lwt.ml" = target=3D"_blank">lwt.ml</a>", line 1849, characters = 23-26<br><br>debug: stop_monitoring <a = href=3D"https://github.com/ohmrun/0install_direnv/raw/main/o/bins/v2.32.2= /gnu/amd64/direnv" = target=3D"_blank">https://github.com/ohmrun/0install_direnv/raw/main/o/bi= ns/v2.32.2/gnu/amd64/direnv</a></span><o:p></o:p></p></div><div><p = class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p><= /o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Still = reading the docs but it's been confusing me the entire day so I thought = I'd sent a note in.<o:p></o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p><= /o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>regards,<o:p= ></o:p></p></div><div><p class=3DMsoNormal = style=3D'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Loz<o:p></o:= p></p></div></div></div></div></div></blockquote></div></div></body></htm= l> ------=_NextPart_000_0005_01D96D42.937BE620-- --===============2714879272240115849== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --===============2714879272240115849== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Zero-install-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/zero-install-devel --===============2714879272240115849==--