voidlinux - sfeed_tests - sfeed tests and RSS and Atom files
(HTM) git clone git://git.codemadness.org/sfeed_tests
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
voidlinux (77218B)
---
1 <?xml version="1.0" encoding="utf-8"?>
2 <feed xmlns="http://www.w3.org/2005/Atom">
3
4 <title>Void news</title>
5 <subtitle>Follow Void Linux news</subtitle>
6 <link href="https://voidlinux.org/"/>
7 <link type="application/atom+xml" rel="self" href="https://voidlinux.org/atom.xml"/>
8 <updated>2020-08-27T02:05:45+00:00</updated>
9 <author>
10 <name>Void Linux Team</name>
11 </author>
12 <id>https://voidlinux.org/</id>
13
14
15 <entry>
16 <title>Welcome New Contributors!</title>
17 <link href="https://voidlinux.org/news/2020/05/new-contributors.html"/>
18 <id>https://voidlinux.org/news/2020/05/new-contributors</id>
19 <published>2020-05-01T00:00:00+00:00</published>
20 <updated>2020-05-01T00:00:00+00:00</updated>
21 <content type="xhtml">
22 <div xmlns="http://www.w3.org/1999/xhtml">
23 <p><p>The Void project is pleased to welcome onboard 3 new members today.</p>
24
25 <p>Joining us to work on packages is <code class="language-plaintext highlighter-rouge">@abenson</code>.</p>
26
27 <p>Joining us to advance the docs site are <code class="language-plaintext highlighter-rouge">@flexibeast</code> and <code class="language-plaintext highlighter-rouge">@ericonr</code>.</p>
28
29 <p>Interested in seeing your name in a future update here? Read our
30 <a href="/contribute/">Contributing Page</a> and join us today!</p>
31 </p>
32 </div>
33 </content>
34 </entry>
35
36 <entry>
37 <title>Some Context for Recent Events</title>
38 <link href="https://voidlinux.org/news/2020/04/some-context.html"/>
39 <id>https://voidlinux.org/news/2020/04/some-context</id>
40 <published>2020-04-24T00:00:00+00:00</published>
41 <updated>2020-04-24T00:00:00+00:00</updated>
42 <content type="xhtml">
43 <div xmlns="http://www.w3.org/1999/xhtml">
44 <p><h3 id="notice">Notice</h3>
45
46 <p>This article is being actively edited and amended for both grammar and
47 to answer new questions as they come up.</p>
48
49 <ul>
50 <li>
51 <p>12:05 PST - Feedback from IRC for English, clarification of the
52 timeline of xtraeme’s resignation and subsequent ban.</p>
53 </li>
54 <li>
55 <p>12:17 PST - Correct innaccuracies in the musl section. My
56 understanding of the bug was incorrect (@the-maldridge).</p>
57 </li>
58 <li>
59 <p>2020-04-27 - Correct xtraeme’s pronouns, spelling/grammar cleanup</p>
60 </li>
61 </ul>
62
63 <hr />
64
65 <p>First a disclaimer. This is written from my point of view
66 (@the-maldridge), and while it may contain views and opinions of the
67 project, you should assume these are my views. This is posted here
68 and in the official name-space of Void Linux as questions have asked
69 that demand answers. I hope that in this post I can provide some
70 answers.</p>
71
72 <p>To answer the immediate question of the day, Juan RP (xtraeme) has
73 chosen to leave the Void Linux project.</p>
74
75 <p>There will be no noticeable disruption to users, and the project will
76 continue as before. We appreciate your support of Void and continuing
77 to advance the state of the void. To any maintainer or contributor
78 that was on the receiving end of one of xtraeme’s recent posts, I
79 would like to extend the my apologies for this and those of the
80 project. Void is a project we intend all to be involved in, and that
81 means treating others with respect.</p>
82
83 <p>I’d now like to answer a few questions that came to my mind as this
84 situation developed. I’m on the West coast of the US, so I woke up to
85 a lot of this already in progress, but I also have a lot more
86 historical context than what is easily find-able. Keep in mind that
87 out of respect for Juan’s privacy, I am deliberately not revealing
88 some information they chose to reveal to project maintainers. They
89 may have left a sour taste with me, but they still have a right to
90 privacy like anyone else, and if they wish to share details of their
91 personal life, that is their decision and theirs alone.</p>
92
93 <h2 id="how-will-the-project-survive-without-xtraeme">How will the project survive without xtraeme?</h2>
94
95 <p>Short: Like we have before.</p>
96
97 <p>Long: This is not the first time xtraeme has left Void. I wrote about
98 this on my personal site back in 2018, and you can read that full
99 <a href="https://michaelwashere.net/post/2018-11-28-enobdfl/">article</a> over
100 there. Running a project like Void means ensuring that there is no
101 single point of failure. We have a healthy pool of developers, and
102 short of perhaps some folks wanting to take some time off to recover
103 from the events of the day, I fully expect the project will continue
104 as it has.</p>
105
106 <h2 id="the-thread-on-github-mentioned-xtraeme-has-broken-things-in-the-past">The thread on GitHub mentioned xtraeme has broken things in the past?</h2>
107
108 <p>Being rolling release and not breaking things involves a lot of
109 coordination. Some of this coordination is baked into the software.
110 For example, you can’t update your system while large rebuilds are in
111 progress because that would install incompatible versions of some
112 libraries (we’re working on improving the user experience around this
113 though).</p>
114
115 <p>Some of the recent changes that come to mind in no particular order:</p>
116
117 <ul>
118 <li>
119 <p>Pushing a musl update with no coordination. For context around
120 the change, see <a href="http://musl.libc.org/time64.html">this link</a>.</p>
121
122 <p>This is something we’re planning a lot of work around because
123 updating the C library will involve recompiling almost everything
124 on musl against it. Normally there’s ABI compatibility, but for
125 reasons far beyond the scope of this article, musl is different.
126 There is an ongoing dialog in #musl on freenode with some Alpine
127 devs as well trying to determine the best way to do this upgrade.</p>
128
129 <p>Updated: The original version referenced 1.2 of musl. This was
130 incorrect as the interactions that caused this problem are not
131 unique to this version.</p>
132 </li>
133 <li>
134 <p>Pushing a glibc update with no coordination. We saw the trouble
135 that befell Arch when they did a glibc update that temporarily
136 broke bash. We’d hoped to avoid this same fate, but while
137 discussing the change, the package was merged without discussion.</p>
138 </li>
139 <li>
140 <p>General problems related to single points of failure. Though
141 this is not an issue now, there was a time where xtraeme was the
142 single point of failure. Through their personal inaction we lost
143 the voidlinux.eu domain. We had a lot of trouble getting the
144 project back into a stable state, but through a significant amount
145 of effort, we recovered. Though newer maintainers probably don’t
146 notice this, there are a lot of older developers and users who
147 remember when xtraeme was all that Void was. The project has
148 grown significantly since then, and this is a change I’m not sure
149 xtraeme ever fully adjusted to.</p>
150 </li>
151 </ul>
152
153 <h2 id="i-feel-like-youre-not-telling-a-lot-of-stuff-where-can-i-get-that-context">I feel like you’re not telling a lot of stuff, where can I get that context?</h2>
154
155 <p>For better or for worse, a lot of discussions happen behind closed
156 doors. We don’t feel it is our place as Void Linux to air the dirty
157 laundry of maintainers and contributors. What goes on in your
158 personal life outside of Void is not our concern, and we have no right
159 to tell others your secrets. That being said, all factors are
160 considered when evaluating granting or removing a commit bit. Note
161 that according to <a href="https://infradocs.voidlinux.org">InfraDocs</a> almost
162 all of the initial discussion of onboarding and offboarding
163 maintainers happens on private forums. These discussions are pretty
164 mundane, usually along the lines of “have they broken anything?” or
165 “wow, this person does a lot of work really fast”. The discussions
166 around xtraeme unfortunately have been of the form “their conduct
167 towards others really isn’t great, but I’m not comfortable approaching
168 them.”</p>
169
170 <h2 id="does-void-profit-from-xtraemes-work">Does Void profit from xtraeme’s work?</h2>
171
172 <p>While Void and its users <em>benefit</em> from the work of all developers,
173 including xtraeme, no profit is derived from this work.</p>
174
175 <p>Void is an Open Source project, it always has been and will continue
176 to be one. You are free to use the code within the confines of the
177 license. Since Void is permissively licensed, you are welcome to use
178 it commercially as well, though please be a good citizen of the FOSS
179 community and upstream your patches when practical.</p>
180
181 <p>Should xtraeme wish to change the license of their copy of XBPS, we
182 will evaluate the situation.</p>
183
184 <p>Void does not accept donations. We appreciate the efforts of those
185 that reach out from time to time wishing to support the project
186 financially, but our expenses are minimal. If you want to contribute,
187 you can help by updating packages, reviewing issues, or generally
188 being a part of the community. If an individual maintainer chooses to
189 solicit or accept a donation for their work, this is done separately
190 from the project. International tax law is a complicated beast, and
191 as a project we’re not comfortable accepting donations until we have
192 the infrastructure in place to show where the money goes, and provide
193 you with appropriate documentation.</p>
194
195 <h2 id="did-xtraeme-resign-or-were-they-banned">Did xtraeme resign, or were they banned?</h2>
196
197 <p>Timing is everything. The ticket which expressed xtraeme’s desire to
198 resign was opened first, then over the next hour they lashed out at
199 several project members. The resignation was processed per their
200 wishes, and per their conduct torwards others, a ban was applied at
201 the organization level.</p>
202
203 <h2 id="i-want-to-talk-to-someone-about-this">I want to talk to someone about this.</h2>
204
205 <p>Sure, we live in interesting times, and talking to others is a great
206 way to cope with unexpected change. Feel free to chat on Void’s
207 official IRC channel <code class="language-plaintext highlighter-rouge">#voidlinux</code> on freenode. You can also find us
208 at <code class="language-plaintext highlighter-rouge">r/voidlinux</code> on Reddit. We also maintain a mailing list which you
209 can find on the website.</p>
210
211 <h1 id="what-happens-now">What happens now?</h1>
212
213 <p>Remember these are my words (@the-maldridge) not necessarily those of
214 the project.</p>
215
216 <p>This is a really uncomfortable place to be in. None of us want to
217 start a Twitter war, and at the end of the day, Void is about working
218 on software we all believe in.</p>
219
220 <p>Void will continue. We do appreciate the work that xtraeme did to get
221 us here, projects like Void need someone to have an idea and run with
222 it, then convince others to join you. xtraeme was that early person
223 with an idea, there’s no denying this. It’s sad that this
224 collaboration had to end this way. I would be lying if I said this
225 was a surprise to me, but I truly did not in my wildest imagination
226 expect it to play out like this.</p>
227
228 <h3 id="enough-of-politics-diplomacy-and-speaking-as-a-project-what-do-you-think-about-all-this">Enough of Politics, Diplomacy, and speaking as a project, what do YOU think about all this?</h3>
229
230 <p>The last 8 months since xtraeme showed up again have been a roller
231 coaster. It’s been a stressful time and I’ve come very close to
232 leaving the project several times. I’m one of a handful of people who
233 directly maintain the day to day infrastructure that builds and serves
234 Void, and that made me the receiving end of more than one rant. I’m
235 going to take a step back and think about if I want to continue this
236 project or work on one of my own more. When I started working on Void
237 I was in college and employed by a university that was running Void
238 internally (sadly, they no longer do). I had a lot more free time
239 then, and Void was a lot less stressful to work on.</p>
240
241 <p>xtraeme is a talented C developer; there is no denying this, and I
242 respect their work on XBPS. It is certainly not without bugs, but
243 no one’s code is. I am personally upset that this is how this had to
244 end. I expected at some point xtraeme would part ways with the
245 project, as their goals and those of the project have diverged. I am
246 upset that they felt the need to take out their frustration on
247 contributors and maintainers, and that is why the decision was made to
248 ban them from the organization.</p>
249 </p>
250 </div>
251 </content>
252 </entry>
253
254 <entry>
255 <title>OpenSSH 8.2 update requires restart of sshd</title>
256 <link href="https://voidlinux.org/news/2020/02/openssh-8.2.html"/>
257 <id>https://voidlinux.org/news/2020/02/openssh-8.2</id>
258 <published>2020-02-20T00:00:00+00:00</published>
259 <updated>2020-02-20T00:00:00+00:00</updated>
260 <content type="xhtml">
261 <div xmlns="http://www.w3.org/1999/xhtml">
262 <p><p>With the OpenSSH update to 8.2 you <em>must</em> restart the
263 <code class="language-plaintext highlighter-rouge">sshd</code> service, or it will not accept new ssh connections.</p>
264
265 <p>XBPS will print a notice about this when updating OpenSSH,
266 but we hope by posting this notice we will reach the
267 users who don’t read the output of regular updates
268 and avoid or minimize complications due to the update.</p>
269
270 <p>We considered restarting sshd automatically on update,
271 but the policy of not restarting, enabling or otherwise
272 interact with services during updates stands.</p>
273 </p>
274 </div>
275 </content>
276 </entry>
277
278 <entry>
279 <title>News about XBPS</title>
280 <link href="https://voidlinux.org/news/2020/01/xbps-news.html"/>
281 <id>https://voidlinux.org/news/2020/01/xbps-news</id>
282 <published>2020-01-30T00:00:00+00:00</published>
283 <updated>2020-01-30T00:00:00+00:00</updated>
284 <content type="xhtml">
285 <div xmlns="http://www.w3.org/1999/xhtml">
286 <p><p>XBPS 0.58 was just released, with many new features and a lot of improvements.
287 Since the last post was for 0.54, this post includes all changes and some highlights since the last post.</p>
288
289 <h2 id="highlights">Highlights</h2>
290
291 <h3 id="performance-improvements">Performance improvements</h3>
292
293 <p>Some users might have noticed that removing the <code class="language-plaintext highlighter-rouge">plasma-desktop</code> was very time consuming because of dependency cycles.
294 The dependency resolution algorithm has been completely rewritten and is now able to resolve the dependencies of <code class="language-plaintext highlighter-rouge">plasma-desktop</code> within seconds.</p>
295
296 <p>See the <a href="https://github.com/void-linux/xbps/pull/78">pull request void-linux/xbps#78</a> if you are interested in what changed.</p>
297
298 <p>The <code class="language-plaintext highlighter-rouge">--fulldeptree</code> flag of <a href="https://man.voidlinux.org/xbps-query.1">xbps-query(1)</a> in combination with <code class="language-plaintext highlighter-rouge">-x</code> or <code class="language-plaintext highlighter-rouge">-X</code> for dependencies and reverse dependencies respectively has been improved and will now be 50x faster in the worst case scenario.</p>
299
300 <h3 id="ignorepkg-configuration-option"><code class="language-plaintext highlighter-rouge">ignorepkg</code> configuration option</h3>
301
302 <p>Many users tried to get rid of the default kernel or some other <code class="language-plaintext highlighter-rouge">base-system</code> requirement.
303 For this we’ve added a new configuration keyword: <code class="language-plaintext highlighter-rouge">ignorepkg</code>.</p>
304
305 <p>With this new keyword you can ignore packages that are pulled in by other packages as runtime dependencies.</p>
306
307 <p>As example you can add <code class="language-plaintext highlighter-rouge">linux-firmware-amd</code> as ignored package and then uninstall the package:</p>
308
309 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># echo "ignorepkg=linux-firmware-amd" > /etc/xbps.d/10-ignore.conf
310 # xbps-remove linux-firmware-amd
311 </code></pre></div></div>
312
313 <p>This works for any package, i.e. being able to remove <code class="language-plaintext highlighter-rouge">linux4.19</code> while keeping the <code class="language-plaintext highlighter-rouge">linux</code> meta package.
314 Or removing the <code class="language-plaintext highlighter-rouge">linux</code> meta package itself and installing only the kernel series you like to use yourself.</p>
315
316 <h3 id="noextract-configuration-option"><code class="language-plaintext highlighter-rouge">noextract</code> configuration option</h3>
317
318 <p>Another useful new feature is the new <code class="language-plaintext highlighter-rouge">noextract</code>, it allows to specify patterns of
319 files that should not be extracted when installing or updating packages.</p>
320
321 <p>This allows as example to skip extracting translations the users are not interesting in,
322 allowing to reduce the installation size.</p>
323
324 <p>We plan to make use of it in <code class="language-plaintext highlighter-rouge">xbps-src</code> to cut down the time required to install build dependencies.</p>
325
326 <h2 id="download-only-flag">Download only flag</h2>
327
328 <p>A new flag was added to <a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a> which allows to
329 download packages and its dependencies without installing them.</p>
330
331 <h2 id="changelog">Changelog</h2>
332
333 <h3 id="xbps-058-2020-01-30">xbps-0.58 (2020-01-30):</h3>
334
335 <ul>
336 <li>
337 <p>libfetch: fix <a href="https://www.freebsd.org/security/advisories/FreeBSD-SA-20:01.libfetch.asc">CVE-2020-7450</a>; from FreeBSD. <a href="https://github.com/Duncaen">[duncaen]</a></p>
338 </li>
339 <li>
340 <p><a href="https://man.voidlinux.org/xbps-query.1">xbps-query(1)</a>, <a href="https://man.voidlinux.org/xbps-remove.1">xbps-remove(1)</a>: improved detection
341 of orphans, needing multiple iterations to collect
342 all of them in a single transaction. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
343 </li>
344 <li>
345 <p><a href="https://man.voidlinux.org/xbps-checkvers.1">xbps-checkvers(1)</a>: added <code class="language-plaintext highlighter-rouge">-e, --removed</code>.
346 To list removed templates in srcpkgs. <a href="https://github.com/Chocimier">[Chocimier]</a></p>
347 </li>
348 <li>
349 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: improved <code class="language-plaintext highlighter-rouge">-D, --download-only</code>.
350 This now can be used to download all required
351 binary packages of the target pkg without the need
352 to have write permission to the <code class="language-plaintext highlighter-rouge">rootdir</code>.</p>
353
354 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ xbps-install -c $PWD/cachedir -Dy xbps
355 </code></pre></div> </div>
356
357 <p>NOTE: <code class="language-plaintext highlighter-rouge">-c, --cachedir</code> must be specified as absolute
358 pathname, otherwise it will treat it as relative to
359 rootdir. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
360 </li>
361 <li>
362 <p><a href="https://man.voidlinux.org/xbps-fetch.1">xbps-fetch(1)</a>: added <code class="language-plaintext highlighter-rouge">-s</code> to print sha256sums of
363 downloaded files. <a href="https://github.com/Duncaen">[duncaen]</a></p>
364 </li>
365 <li>
366 <p>configure: re-add <code class="language-plaintext highlighter-rouge">--enable-debug</code> and enable it
367 by default. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
368 </li>
369 <li>
370 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: ignore indirect reverse dependencies
371 while updating xbps. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
372 </li>
373 <li>
374 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: added <code class="language-plaintext highlighter-rouge">--reproducible</code> long option.
375 If set, enables reproducible mode in pkgdb. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
376 </li>
377 <li>
378 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: don’t prompt if all packages in
379 the transaction are on hold. [Mohamad Barbar]</p>
380 </li>
381 <li>
382 <p><a href="https://man.voidlinux.org/xbps-rindex.1">xbps-rindex(1)</a>: stop adding the “build-date” pkg obj.
383 Contained wrong info and did not provide enough value
384 to be useful; another step towards reproducibility.
385 <a href="https://github.com/xtraeme">[xtraeme]</a></p>
386 </li>
387 <li>
388 <p><a href="https://man.voidlinux.org/xbps-create.1">xbps-create(1)</a>: always sanitize gathered symlinks. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
389 </li>
390 <li>
391 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: do not silently update <code class="language-plaintext highlighter-rouge">xbps</code> on
392 any install/update transaction. If there’s a new update
393 for the <code class="language-plaintext highlighter-rouge">xbps</code> package, this needs to be explicitely
394 declared as a single transaction, i.e:</p>
395
396 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ xbps-install -u xbps
397 </code></pre></div> </div>
398
399 <p>Otherwise it will return <code class="language-plaintext highlighter-rouge">EBUSY</code> (16), making this a proper
400 error code to diagnose what failed. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
401 </li>
402 <li>
403 <p><a href="https://man.voidlinux.org/xbps.d.5">xbps.d(5)</a>: new ‘noextract’ configuration option,
404 to skip extracting files matching a pattern. <a href="https://github.com/Duncaen">[duncaen]</a></p>
405 </li>
406 <li>
407 <p><a href="https://man.voidlinux.org/xbps.d.5">xbps.d(5)</a>: autodetected ‘architecture’ (glibc or musl)
408 at compile-time on linux systems. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
409 </li>
410 <li>
411 <p>configure: added <code class="language-plaintext highlighter-rouge">--enable-lto</code> and don’t enable it
412 by default. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
413 </li>
414 <li>
415 <p>Multiple bugs with packages on hold were fixed. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
416 </li>
417 <li>
418 <p><a href="https://man.voidlinux.org/xbps-uchroot.1">xbps-uchroot(1)</a>, <a href="https://man.voidlinux.org/xbps-uunshare.1">xbps-uunshare(1)</a>: document end of
419 options argument. <a href="https://github.com/sgn">[Doan Tran Cong Danh]</a></p>
420 </li>
421 <li>
422 <p><a href="https://man.voidlinux.org/xbps-alternatives.1">xbps-alternatives(1)</a>: prune obsolete alternatives groups. <a href="https://github.com/q66">[q66]</a></p>
423 </li>
424 </ul>
425
426 <p>17 new test cases were added in this release, 6 people
427 were involved: Juan RP, Piotr Wójcik, Duncan Overbruck,
428 Doan Tran Cong Danh, Mohamad Barbar, q66.</p>
429
430 <h3 id="xbps-0571-2019-10-27">xbps-0.57.1 (2019-10-27):</h3>
431
432 <ul>
433 <li>
434 <p>Multiple changes and improvements to the transaction
435 fetch code. <a href="https://github.com/Duncaen">[duncaen]</a></p>
436 </li>
437 <li>
438 <p>Verify revision in <code class="language-plaintext highlighter-rouge">xbps_pkg_{version,revision,name}</code>,
439 to handle properly package names that use <code class="language-plaintext highlighter-rouge">_</code>.
440 <a href="https://github.com/Chocimier">[Chocimier]</a></p>
441 </li>
442 <li>
443 <p><a href="https://man.voidlinux.org/xbps-checkvers.1">xbps-checkvers(1)</a>: fixed a compile-time warning with glibc.
444 <a href="https://github.com/xtraeme">[xtraeme]</a></p>
445 </li>
446 <li>
447 <p><a href="https://man.voidlinux.org/xbps-alternatives.1">xbps-alternatives(1)</a>: check if alternative is a
448 symlink before removing it. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
449 </li>
450 <li>
451 <p>Try to find a usable shell instead of using <code class="language-plaintext highlighter-rouge">/bin/sh</code>
452 when executing package scripts. <a href="https://github.com/Gottox">[Gottox]</a></p>
453 </li>
454 <li>
455 <p><a href="https://man.voidlinux.org/xbps-rindex.1">xbps-rindex(1)</a>: better error handling for writing repodata
456 archives. <a href="https://github.com/Chocimier">[Chocimier]</a></p>
457 </li>
458 <li>
459 <p><a href="https://man.voidlinux.org/xbps-create.1">xbps-create(1)</a>: better error handling for writing archives.
460 <a href="https://github.com/Chocimier">[Chocimier]</a></p>
461 </li>
462 </ul>
463
464 <h3 id="xbps-057-2019-08-06">xbps-0.57 (2019-08-06):</h3>
465
466 <ul>
467 <li>
468 <p>xbps now builds with tcc and pcc. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
469 </li>
470 <li>
471 <p>xbps now uses the transactional file checks for package removals,
472 this fixes issues where xbps removes wrong files, if a package
473 replaces another packages with the same files. <a href="https://github.com/Duncaen">[duncaen]</a></p>
474 </li>
475 <li>
476 <p><a href="https://man.voidlinux.org/xbps-remove.1">xbps-remove(1)</a>: skip the transaction if no packages are found.
477 This restores the behaviour of xbps prior to 0.54. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
478 </li>
479 <li>
480 <p><a href="https://man.voidlinux.org/xbps-remove.1">xbps-remove(1)</a>: fix <code class="language-plaintext highlighter-rouge">-o, --remove-orphans</code> not removing
481 all orphaned packages. <a href="https://github.com/Duncaen">[duncaen]</a></p>
482 </li>
483 <li>
484 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: if specified packages with <code class="language-plaintext highlighter-rouge">-u, --update</code> are
485 up to date return EEXIST. <a href="https://github.com/jnbr">[jnbr]</a></p>
486 </li>
487 <li>
488 <p><a href="https://man.voidlinux.org/xbps-query.1">xbps-query(1)</a>: restores old behaviour of <code class="language-plaintext highlighter-rouge">--fulldeptree</code>,
489 to not list the package itself. <a href="https://github.com/Duncaen">[duncaen]</a></p>
490 </li>
491 <li>
492 <p>Updated zsh completions. <a href="https://github.com/leah2">[leah2]</a></p>
493 </li>
494 </ul>
495
496 <h3 id="xbps-056-2019-06-24">xbps-0.56 (2019-06-24):</h3>
497
498 <ul>
499 <li>
500 <p>Fixed <code class="language-plaintext highlighter-rouge">xbps_transaction_prepare()</code> always returning
501 ENXIO because the transaction dictionary wasn’t
502 initialized before first use. Regression from 0.54. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
503 </li>
504 <li>
505 <p>Fixed unlocking the pkgdb via <code class="language-plaintext highlighter-rouge">xbps_end()</code>. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
506 </li>
507 <li>
508 <p>Fixed flushing pkgdb to storage and re-reading it unnecessarily,
509 this affected <a href="https://man.voidlinux.org/xbps-alternatives.1">xbps-alternatives(1)</a>,
510 <a href="https://man.voidlinux.org/xbps-pkgdb.1">xbps-pkgdb(1)</a> and
511 <a href="https://man.voidlinux.org/xbps-reconfigure.1">xbps-reconfigure(1)</a>.
512 <a href="https://github.com/xtraeme">[xtraeme]</a></p>
513 </li>
514 <li>
515 <p>xbps now allows to remove an installed package that was
516 added to the ignored packages list with <code class="language-plaintext highlighter-rouge">ignorepkg</code> from
517 <a href="https://man.voidlinux.org/xbps.d.5">xbps.d(5)</a>. <a href="https://github.com/Duncaen">[duncaen]</a></p>
518 </li>
519 <li>
520 <p>Fixed an issue with multi threaded for each loops
521 processing the first slicecount*maxthreads entries twice. <a href="https://github.com/Duncaen">[duncaen]</a></p>
522 </li>
523 <li>
524 <p>Fixed an issue with happy eyeballs, where when a socket
525 fails within the connection delay it aborts with the error
526 instead of continuing with the next address. <a href="https://github.com/jnbr">[jnbr]</a></p>
527 </li>
528 </ul>
529
530 <h3 id="xbps-055-2019-06-21">xbps-0.55 (2019-06-21):</h3>
531
532 <ul>
533 <li>
534 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: Added <code class="language-plaintext highlighter-rouge">-D, --download-only</code> flag to allow
535 downloading packages to the cache without attempting to
536 install them. <a href="https://github.com/Vaelatern">[Vaelatern]</a></p>
537 </li>
538 <li>
539 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: added <code class="language-plaintext highlighter-rouge">-I, --ignore-file-conflicts</code> to not abort
540 the transaction even if file conflicts were detected. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
541 </li>
542 <li>
543 <p><a href="https://man.voidlinux.org/xbps-install.1">xbps-install(1)</a>: return 0 if package is already installed,
544 or up-to-date if updating, not <code class="language-plaintext highlighter-rouge">EEXIST</code>. <code class="language-plaintext highlighter-rouge">EEXIST</code> now is only
545 returned if there are file conflicts in transaction. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
546 </li>
547 <li>
548 <p><a href="https://man.voidlinux.org/xbps-checkvers.1">xbps-checkvers(1)</a>: fixed a segfault with <code class="language-plaintext highlighter-rouge">--format</code>. <a href="https://github.com/Duncaen">[duncaen]</a></p>
549 </li>
550 <li>
551 <p>Fixed a build failure on ppc64. <a href="https://github.com/q66">[q66]</a></p>
552 </li>
553 <li>
554 <p>Fixed a build failure on x86. <a href="https://github.com/Duncaen">[duncaen]</a></p>
555 </li>
556 <li>
557 <p>Fixed cross compilation with <code class="language-plaintext highlighter-rouge">--enable-static</code>. <a href="https://github.com/xtraeme">[xtraeme]</a></p>
558 </li>
559 </ul>
560 </p>
561 </div>
562 </content>
563 </entry>
564
565 <entry>
566 <title>New images and new verification keys</title>
567 <link href="https://voidlinux.org/news/2020/01/new-images.html"/>
568 <id>https://voidlinux.org/news/2020/01/new-images</id>
569 <published>2020-01-19T00:00:00+00:00</published>
570 <updated>2020-01-19T00:00:00+00:00</updated>
571 <content type="xhtml">
572 <div xmlns="http://www.w3.org/1999/xhtml">
573 <p><p>We’re pleased to announce that the 20191109 image set has been
574 promoted to current and is now generally available.</p>
575
576 <p>A change that comes along with these new images is the adoption of
577 <code class="language-plaintext highlighter-rouge">signify(1)</code> to verify images. We’re saying goodbye to PGP due to the
578 complexity involved, the relative difficulty in verifying the
579 resulting signature, and the questionable state of PGP key
580 distribution right now.</p>
581
582 <p>The downloads page has been updated with instructions for how you can
583 validate new images, and we hope you’ll find this process easier and
584 faster than in previous releases.</p>
585 </p>
586 </div>
587 </content>
588 </entry>
589
590 <entry>
591 <title>xbps bug results in missing /bin/sh</title>
592 <link href="https://voidlinux.org/news/2019/08/xbps-bug-results-in-missing-bin-sh.html"/>
593 <id>https://voidlinux.org/news/2019/08/xbps-bug-results-in-missing-bin-sh</id>
594 <published>2019-08-13T00:00:00+00:00</published>
595 <updated>2019-08-13T00:00:00+00:00</updated>
596 <content type="xhtml">
597 <div xmlns="http://www.w3.org/1999/xhtml">
598 <p><p>Due to a bug in xbps there was an issue this morning where /bin/sh disappeared after an update.</p>
599
600 <p>The bug was fixed quickly, but there’s a 2h window where an update may have resulted in a broken system.</p>
601
602 <p>If you’re affected by this issue you may experience error messages like these during boot:</p>
603
604 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>runit: fatal: unable to start child: /etc/runit/1 file does not exist
605 </code></pre></div></div>
606
607 <p>These are the steps to recover your system:</p>
608
609 <h4 id="case-1-system-is-still-running-and-you-have-a-working-shell-open">Case 1: System is still running and you have a working shell open</h4>
610
611 <p>Run the following command as root:</p>
612
613 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># xbps-install -Su
614 </code></pre></div></div>
615
616 <p>Afterwards your system should update xbps and recreate <code class="language-plaintext highlighter-rouge">/bin/sh</code></p>
617
618 <h4 id="case-2-system-has-rebooted-or-no-shell-is-opened-anymore">Case 2: System has rebooted or no shell is opened anymore</h4>
619
620 <p>Restart your system</p>
621
622 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
623 GNU GRUB version 2.02
624
625 ┌────────────────────────────────────────────────────────────────────────────┐
626 │*Void GNU/Linux │
627 │ Advanced options for Void GNU/Linux │
628 │ │
629 │ │
630 │ │
631 │ │
632 │ │
633 │ │
634 │ │
635 │ │
636 │ │
637 │ │
638 │ │
639 └────────────────────────────────────────────────────────────────────────────┘
640
641 Use the ↑ and ↓ keys to select which entry is highlighted.
642 Press enter to boot the selected OS, `e' to edit the commands
643 before booting or `c' for a command-line.
644
645
646 </code></pre></div></div>
647 <p>Once grub comes up, select the kernel you want to boot and press <code class="language-plaintext highlighter-rouge">E</code>.</p>
648
649 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
650 GNU GRUB version 2.02
651
652 ┌────────────────────────────────────────────────────────────────────────────┐
653 │ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --\│↑
654 │hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXXXXXX-XXXX-XXXX-XXXX-\│
655 │XXXXXXXXXXXX │
656 │ else │
657 │ search --no-floppy --fs-uuid --set=root XXXXXXXX-XXXX-XXXX-XXXX-X\│
658 │XXXXXXXXXXX │
659 │ fi │
660 │ echo 'Loading Linux 4.19.15_1 ...' │
661 │ linux /boot/vmlinuz-4.19.15_1 ro loglevel=4 slub_debug=P pa\│
662 │ge_poison=1 rd.break │
663 │ echo 'Loading initial ramdisk ...' │
664 │ initrd /boot/initramfs-4.19.15_1.img │
665 │ │
666 └────────────────────────────────────────────────────────────────────────────┘
667
668 Minimum Emacs-like screen editing is supported. TAB lists
669 completions. Press Ctrl-x or F10 to boot, Ctrl-c or F2 for
670 a command-line or ESC to discard edits and return to the GRUB menu.
671
672
673 </code></pre></div></div>
674 <p>find the line that starts with <code class="language-plaintext highlighter-rouge">linux /boot/...</code> and add <code class="language-plaintext highlighter-rouge">rd.break</code> at the end of the line.
675 Make sure it is seperated with a space from the rest of the line</p>
676
677 <p>Afterwards Press <code class="language-plaintext highlighter-rouge">Ctrl</code> + <code class="language-plaintext highlighter-rouge">X</code> to boot the configuration.</p>
678
679 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> Dropping to debug shell.
680
681 dracut:/#
682 </code></pre></div></div>
683 <p>Once you’ve got a shell execute the following commands:</p>
684
685 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> dracut:/# mount -o remount,rw /sysroot
686 dracut:/# chroot /sysroot xbps-alternatives -s bash
687 dracut:/# exit
688 </code></pre></div></div>
689
690 <p>Afterwards the system should work as expected.</p>
691
692 <p>Please use <code class="language-plaintext highlighter-rouge">xbps-install -Su</code> to fetch the newest xbps version that fixes this bug.</p>
693
694 <h3 id="if-it-doesnt-help">If it doesn’t help</h3>
695
696 <p>Join over on #voidlinux in freenode or <a href="https://www.reddit.com/r/voidlinux/comments/cpslmr/xbps_bug_results_in_missing_binsh/">ask on reddit</a>.</p>
697 </p>
698 </div>
699 </content>
700 </entry>
701
702 <entry>
703 <title>XBPS 0.54 Released</title>
704 <link href="https://voidlinux.org/news/2019/06/xbps-0.54.html"/>
705 <id>https://voidlinux.org/news/2019/06/xbps-0.54</id>
706 <published>2019-06-20T00:00:00+00:00</published>
707 <updated>2019-06-20T00:00:00+00:00</updated>
708 <content type="xhtml">
709 <div xmlns="http://www.w3.org/1999/xhtml">
710 <p><p>XBPS 0.54 is released. This release includes many new features and a
711 plethora of bug fixes. Some notable fixes include:</p>
712
713 <ul>
714 <li>Improved conflict checking</li>
715 <li>Additional compression formats including zstd</li>
716 <li>Fixes to the alternatives system</li>
717 <li>New binaries replacing portions of xbps-uhelper</li>
718 <li>Over 30 new test cases</li>
719 </ul>
720
721 <p>New binaries have also been uploaded to the static/ directories of all
722 mirrors.</p>
723
724 <p>As always you can read the complete changelog on GitHub and file
725 issues at
726 <a href="https://github.com/void-linux/xbps/issues">https://github.com/void-linux/xbps/issues</a>.</p>
727 </p>
728 </div>
729 </content>
730 </entry>
731
732 <entry>
733 <title>New Homepage</title>
734 <link href="https://voidlinux.org/news/2019/04/homepage-redesign.html"/>
735 <id>https://voidlinux.org/news/2019/04/homepage-redesign</id>
736 <published>2019-04-01T00:00:00+00:00</published>
737 <updated>2019-04-01T00:00:00+00:00</updated>
738 <content type="xhtml">
739 <div xmlns="http://www.w3.org/1999/xhtml">
740 <p><p>After years of development and beta testing in various focus groups, we’re
741 pleased to announce the new homepage design. No animals were harmed during
742 development.</p>
743
744 <p><a href="/assets/screenshots/void-1st-april-2019.png"><img src="/assets/screenshots/void-1st-april-2019.png" alt="" /></a></p>
745 </p>
746 </div>
747 </content>
748 </entry>
749
750 <entry>
751 <title>VoidLinux.eu Is Not Ours</title>
752 <link href="https://voidlinux.org/news/2019/02/voidlinux-eu-gone.html"/>
753 <id>https://voidlinux.org/news/2019/02/voidlinux-eu-gone</id>
754 <published>2019-02-12T00:00:00+00:00</published>
755 <updated>2019-02-12T00:00:00+00:00</updated>
756 <content type="xhtml">
757 <div xmlns="http://www.w3.org/1999/xhtml">
758 <p><p>We would like to warn people of a domain name that is no longer under Void
759 Linux control. <code class="language-plaintext highlighter-rouge">voidlinux.eu</code> lapsed in its original registration, and was
760 purchased by an unknown 3rd party before Void Linux could regain ownership. At
761 this time, please assume that anything involving <code class="language-plaintext highlighter-rouge">voidlinux.eu</code> is not related
762 to Void Linux, and should be considered potentially malicious. Of course, if
763 the person who owns the domain now would like to transfer it to our control,
764 we’d be grateful, and will update voidlinux.org to indicate if this happens.</p>
765
766 <p>Our official domain is VoidLinux.org.</p>
767 </p>
768 </div>
769 </content>
770 </entry>
771
772 <entry>
773 <title>Cross compilation support for gobject typelibs</title>
774 <link href="https://voidlinux.org/news/2019/02/cross-gobject.html"/>
775 <id>https://voidlinux.org/news/2019/02/cross-gobject</id>
776 <published>2019-02-03T00:00:00+00:00</published>
777 <updated>2019-02-03T00:00:00+00:00</updated>
778 <content type="xhtml">
779 <div xmlns="http://www.w3.org/1999/xhtml">
780 <p><p>Thanks to the work of <a href="https://maxice8.github.io/">maxice8</a> we’re pleased to
781 announce cross compiling support for gobject-introspection and packages that
782 depend on this tool. This is a big step forward to support more packages
783 through cross compiling and stay future proof for glib development.</p>
784
785 <p>maxice8 put together a comprehensive <a href="https://maxice8.github.io/8-cross-the-gir/">post about his
786 work</a>. This article will be
787 higher level overview of our work in this field.</p>
788
789 <h3 id="what-are-gobject-and-typelibs">What are gobject and typelibs?</h3>
790
791 <p>gobject is an abstract description of types defined in glib. Glib is used on a
792 wide range of application and libraries, most notably <a href="https://gtk.org">gtk</a>.
793 Glib itself is written in C but it’s possible to provide dynamic language
794 bindings to other languages such as <a href="https://python.org">python</a>.</p>
795
796 <p>This mechanism is not builtin into glib, but instead is provided by the
797 gobject-introspection tool. This tool scans both the source and the binary blob
798 of a library and creates a metadata file that is used to provide type information
799 for other language bindings. For a deeper dive into gobject-introspection please
800 consider the <a href="https://gi.readthedocs.io/en/latest/">docs at readthedocs.io</a></p>
801
802 <h3 id="the-problem">The problem</h3>
803
804 <p>When it comes to Void, we have high demands on portability of applications. Our
805 armv6l, armv7l and aarch64 platforms a completely and exclusively cross
806 compiled, meaning they are built on an x86_64 host. This leads to an
807 interesting problem with gobject-introspection which by design needs to run on
808 the same platform as the produced binaries are targeted.</p>
809
810 <p>Unfortunately, as already stated this has been a design decision of this
811 software and we can’t do anything to change this constraint itself.</p>
812
813 <p>Furthermore, during the last few years the Gnome community drifted towards
814 extensively using gobject-introspection in their products. This led to the
815 breakage of more and more applications in the gnome-ecosystem.</p>
816
817 <h3 id="the-solution">The solution</h3>
818
819 <p>During the last few months we considered different solutions to this problem.
820 This first proposal to not support gir through cross compilation and only allow
821 it through native build became more and more unsatisfying as the number of
822 packages using this mechanism increased over time.</p>
823
824 <p>The second approach which was the followup to the one described above was to
825 add native builders to the system and build those packages on those native
826 builders. The issue was here that this would require a lot of infrastructure
827 work and added a lot of complexity.</p>
828
829 <p>The third solution and the one we chose was to use the userspace emulation
830 features of <a href="http://qemu.org">Qemu</a> to emulate the target system only for
831 those calls that needed to be on the target platform. The <a href="https://yoctoproject.org/">yocto
832 project</a> is already using this approach to cross
833 compile Gnome Applications to other platform. We reused many of their tooling
834 for void-packages. Nontheless, we hit many porting issues - our tooling must run
835 on musl, too - , new bugs were triggered in void-packages - see for example
836 <a href="https://maxice8.github.io/1-void-cpython3-cross-pt1/">these</a>
837 <a href="https://maxice8.github.io/2-void-cpython3-cross-pt2/">two</a> posts at maxice8’s
838 blog, and many other small issues needed to be resolved.</p>
839
840 <p>Basic support for cross compilation has already landed in void-packages, the
841 musl port is not yet finished, but we expect it to work soon(tm).</p>
842
843 <p>maxice8 also prepared a blog post about his porting work on
844 <a href="https://maxice8.github.io/9-libgusb-meson-gir-cross/">libgusb</a>.</p>
845 </p>
846 </div>
847 </content>
848 </entry>
849
850 <entry>
851 <title>The Life of a Pull Request & Where Commit Bits Come From</title>
852 <link href="https://voidlinux.org/news/2019/02/commit-bits.html"/>
853 <id>https://voidlinux.org/news/2019/02/commit-bits</id>
854 <published>2019-02-03T00:00:00+00:00</published>
855 <updated>2019-02-03T00:00:00+00:00</updated>
856 <content type="xhtml">
857 <div xmlns="http://www.w3.org/1999/xhtml">
858 <p><p>Sometimes people will join into <code class="language-plaintext highlighter-rouge">#voidlinux</code> and ask why changes are
859 taking so long to get merged. This is an interesting question, and it
860 boils down into a few parts. In this article we’ll take a look at the
861 life of a pull request and how it gets from idea to package.</p>
862
863 <p>For any package to exist, someone first has to want it. This want is
864 often expressed as someone in IRC saying “I want to use Void, but I
865 need package <code class="language-plaintext highlighter-rouge">foo</code>” and someone looks at it and decides they will
866 package and maintain <code class="language-plaintext highlighter-rouge">foo</code>. Sometimes this want will manifest as an
867 issue filled to the void-packages repository on GitHub, and sometimes
868 it manifests as a “blind” PR showing up for a new package. This last
869 one is what we’ll follow as it’s where things get interesting.</p>
870
871 <h2 id="a-call-to-action">A Call to Action</h2>
872
873 <p>When a PR is created, this triggers GitHub to notify people according
874 to its settings. For some members of the project this will trigger an
875 email, for some people this will trigger other automation via API, and
876 up until very recently, the <code class="language-plaintext highlighter-rouge">#xbps</code> channel on freenode was NOTICE’d
877 (this last one is gone as GitHub has removed this functionality with
878 no clear replacement path).</p>
879
880 <p>This notification will hopefully grab the eye of at least one
881 reviewer, who will then open the link to view the PR on GitHub, or
882 will otherwise begin reviewing by their preferred means. Many of our
883 reviewers prefer to pull the PR locally and view it in their editor of
884 choice, or build it locally on more powerful boxes than Travis CI
885 provides.</p>
886
887 <h2 id="changes-requested">Changes Requested</h2>
888
889 <p>This is usually the slow part of getting something accepted to
890 void-packages. This is the part that involves going back and forth on
891 what changes need to be made or what improvements are requested and
892 often involves discussion of potential changes to package policy.</p>
893
894 <p>For folks in IRC this often will be a rapid fire exchange of comments
895 in channel or query, and often ends with something like this:</p>
896
897 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>15:30 <bobertlo> i'm making the suggested changes [...]
898 15:31 <maldridge> bobertlo: ping me when you're ready for review+merge
899 </code></pre></div></div>
900
901 <p>At this point the ball is back in the author’s court, and the
902 committer is waiting for changes to be made. At this point it’s also
903 considered that a committer is tenuously “assigned” to a PR.</p>
904
905 <p>In a good flow, the next thing that happens is another message from
906 the author:</p>
907
908 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>15:53 <bobertlo> maldridge: i pushed those changes
909 </code></pre></div></div>
910
911 <h2 id="the-reviewer-follows-up">The Reviewer Follows Up</h2>
912
913 <p>When a reviewer is “assigned” to the PR, it doesn’t really mean that
914 they own it, but there is some expectation that they will follow the
915 work through to merge unless they explicitly state otherwise.
916 Sometimes this looks like a comment on a PR, and other times it looks
917 like a poke in IRC to see if the author is still working on the
918 changes.</p>
919
920 <p>At the end of this phase, the reviewer will either approve or dismiss
921 the PR. Usually dismissing a PR is only done if the package is
922 completely unworkable and the author and reviewer have come to an
923 agreement that it won’t be accepted for some concrete reason, but
924 other reasons exist.</p>
925
926 <h2 id="merged">Merged</h2>
927
928 <p>When a package is accepted the reviewer will merge it, and then our
929 automated build infrastructure will kick into action. A webhook from
930 GitHub will signal to our infrastructure that a new change is to be
931 built, and the systems will pull down the changes via git. After it
932 has been ascertained what needs to be rebuilt, the change is
933 dispatched to our builders to begin compiling the new or updated
934 package.</p>
935
936 <p>After compilation, the built package is copied back to the build
937 master and is signed, then indexed into the repository for interested
938 users to download. Past this point is a complicated web of rsync that
939 is beyond the scope of this article.</p>
940
941 <h1 id="why-does-it-take-so-long">Why does it take so long?</h1>
942
943 <p>First of all, it doesn’t. When you compare Void’s process to other
944 distributions, the process of getting a package included can be as
945 short as an hour from initial request to installable globally.</p>
946
947 <p>The slightly longer answer is that there are bottlenecks. One of the
948 easiest to understand is that there are only so many servers we can
949 build on, and the time it takes to compile packages (especially large
950 ones) has to be taken into account.</p>
951
952 <p>The single largest bottleneck though is reviewer loading. In the
953 process that’s described above, reviewers are loosely connected to
954 PRs, and follow them through. While our reviewers are very fast in
955 many cases, they are still human and can only hold so many things at
956 once.</p>
957
958 <p>So if the reviewers are the bottleneck, the question logically
959 follows: where do reviewers come from and how do they get their
960 special powers?</p>
961
962 <h2 id="special-powers">Special Powers</h2>
963
964 <p>Within the Void vernacular, people who can merge changes are referred
965 to generally as people with a commit bit. For those who are curious,
966 this term comes from privileged users on a BSD system often having a
967 “wheel bit”. At the time of this writing, there are 13 people with a
968 commit bit. These people can merge to almost any repository in the
969 organization, but there are a few exceptions. Having a commit bit can
970 also come with other powers, like the ability to op up in IRC, but
971 such additional powers are not automatic, and are beyond the scope of
972 this article.</p>
973
974 <p>So how does one get these special powers?</p>
975
976 <p>The astute Void follower may already know this answer, as has been
977 documented for some time now on
978 <a href="https://infradocs.voidlinux.org">InfraDocs</a>.</p>
979
980 <p>The full documentation can be found in the <a href="https://infradocs.voidlinux.org/org/onboarding.html">onboarding
981 documentation</a>.
982 But to save the effort of going to that page, we’ll briefly recap it
983 here.</p>
984
985 <p>First a person has to be noticed within the project as a good fit for
986 having the ability to merge changes on their own. Usually this means
987 that they’ve been an active contributor continuously for some time and
988 have a history of submitting high quality work.</p>
989
990 <p>After an existing committer thinks they’ve found a good candidate,
991 they’ll propose the membership change to the project owners in
992 private. This allows the project owners time to discuss the proposal
993 with the proposer and exchange information without needing to talk
994 publicly. Sometimes there are circumstances that a proposer might not
995 be aware of that may affect if they wish to continue suggesting
996 someone, and this initial conversation gives a time to discuss that.</p>
997
998 <p>After this discussion has happened a final decision is made to either
999 accept or reject the proposal. In the event it has been accepted, the
1000 candidate is informed and has the final choice to accept.</p>
1001
1002 <h2 id="ive-got-a-bit-now-what">I’ve Got a Bit, Now What?</h2>
1003
1004 <p>Just getting the powers though isn’t enough. People who hold a commit
1005 bit have to justify that they have them. This means means either
1006 reviewing changes, commenting on PRs, or otherwise advancing the state
1007 of the Void. In the past when people have left the project either by
1008 explicitly stating they’ve left, or by just not being a part of it for
1009 a while, we revoke powers. This helps us keep Void reasonably secure
1010 by knowing exactly who all has the ability to push changes to our
1011 repositories.</p>
1012
1013 <p>Of course if any of these people were to come back, they’d be welcome
1014 to once again demonstrate their skill and again earn the special
1015 powers as they did before. Just having had the power at one point is
1016 not sufficient cause to be handed it again.</p>
1017
1018 <hr />
1019
1020 <p>In summary the life of a PR is part of a much larger process of
1021 getting and maintaining a pool of contributors and qualified
1022 reviewers. This process is quite involved, and this post only just
1023 scratches the surface. Interested persons are always encouraged to
1024 reach out to us in <code class="language-plaintext highlighter-rouge">#voidlinux</code> on freenode. The author of this post
1025 can always be contacted in <code class="language-plaintext highlighter-rouge">#voidlinux</code> as <code class="language-plaintext highlighter-rouge">maldridge</code>.</p>
1026 </p>
1027 </div>
1028 </content>
1029 </entry>
1030
1031 <entry>
1032 <title>The curious case of Python and global variables</title>
1033 <link href="https://voidlinux.org/news/2019/01/python3-debugging.html"/>
1034 <id>https://voidlinux.org/news/2019/01/python3-debugging</id>
1035 <published>2019-01-31T00:00:00+00:00</published>
1036 <updated>2019-01-31T00:00:00+00:00</updated>
1037 <content type="xhtml">
1038 <div xmlns="http://www.w3.org/1999/xhtml">
1039 <p><p>Void isn’t all smooth sailing. Sometimes things break in obscure and
1040 difficult to troubleshoot ways. This was recently the case when one
1041 of our maintainers noticed that certain Python packages weren’t
1042 behaving as expected. If you’re curious about how this kind of
1043 troubleshooting happens, [maxice8]’s blog post is highly recommended
1044 as its a good intro into what its like to troubleshoot things from the
1045 perspective of a Void maintainer.</p>
1046
1047 <p>Read the troubleshooting process <a href="https://maxice8.github.io/1-void-cpython3-cross-pt1/">here</a>.</p>
1048 </p>
1049 </div>
1050 </content>
1051 </entry>
1052
1053 <entry>
1054 <title>dhcpcd>=7.1.0 update may require manual intervention</title>
1055 <link href="https://voidlinux.org/news/2019/01/dhcpcd-7.1.0.html"/>
1056 <id>https://voidlinux.org/news/2019/01/dhcpcd-7.1.0</id>
1057 <published>2019-01-23T00:00:00+00:00</published>
1058 <updated>2019-01-23T00:00:00+00:00</updated>
1059 <content type="xhtml">
1060 <div xmlns="http://www.w3.org/1999/xhtml">
1061 <p><p>Starting with 7.1.0, the <a href="https://man.voidlinux.org/dhcpcd.8">dhcpcd(8)</a> package is dropping the <code class="language-plaintext highlighter-rouge">10-wpa_supplicant</code> hook.
1062 Instead of the hook, upstream suggests to build <a href="https://man.voidlinux.org/wpa_supplicant.8">wpa_supplicant(8)</a> with
1063 <code class="language-plaintext highlighter-rouge">CONFIG_MATCH_IFACE</code> enabled, this is done in the <code class="language-plaintext highlighter-rouge">wpa_supplicant</code> package since version <code class="language-plaintext highlighter-rouge">2.6_14</code>.</p>
1064
1065 <p>Users of the <code class="language-plaintext highlighter-rouge">10-wpa_supplicant</code> hook will need to adjust their systems to guarantee
1066 that their wireless connection keeps working.</p>
1067
1068 <p>The following actions are required when <a href="https://man.voidlinux.org/dhcpcd.8">dhcpcd(8)</a> is updated to 7.1.0 for users of the 10-supplicant hook.</p>
1069
1070 <ol>
1071 <li>Make sure <a href="https://man.voidlinux.org/wpa_supplicant.8">wpa_supplicant(8)</a> is at least 2.6_14</li>
1072 <li><a href="https://docs.voidlinux.org/config/services/index.html">Enable</a> the <a href="https://man.voidlinux.org/wpa_supplicant.8">wpa_supplicant(8)</a> service.</li>
1073 </ol>
1074
1075 <hr />
1076
1077 <p>Other users should be on the lookout as -M is now used to match all interfaces, using for configuration
1078 the <code class="language-plaintext highlighter-rouge">CONF_FILE</code> variable. Setting an specific <code class="language-plaintext highlighter-rouge">WPA_INTERFACE</code> is now optional.</p>
1079 </p>
1080 </div>
1081 </content>
1082 </entry>
1083
1084 <entry>
1085 <title>The Advent of Void: Day 24: 'Twas the Night Before Christmas</title>
1086 <link href="https://voidlinux.org/news/2018/12/02-advent-closing.html"/>
1087 <id>https://voidlinux.org/news/2018/12/02-advent-closing</id>
1088 <published>2018-12-24T00:00:00+00:00</published>
1089 <updated>2018-12-24T00:00:00+00:00</updated>
1090 <content type="xhtml">
1091 <div xmlns="http://www.w3.org/1999/xhtml">
1092 <p><p>‘Twas the Night Before Christmas,</p>
1093
1094 <p>When all through the cluster, not a build was running, not even a
1095 revbump. The packages were all signed by the server with care, in
1096 hopes that an upgrade soon would be there.</p>
1097
1098 <p>The maintainers were nestled all snug at their desks, while visions of
1099 waterfalls danced in their heads; and Gottox in his home and I in
1100 mine, had just settled our brains for a long winter break; when out on
1101 the frontends there arose such a clatter, I sprang to my terminal to
1102 see what was the matter.</p>
1103
1104 <p>Away to my console I flew like a flash, called for my tmux and threw
1105 open the logstash. The status page on my screen lent a luster of
1106 midday to errors below, when what to my wondering eyes should appear,
1107 but a stuck qt5 build and 8 staged SONAMEs.</p>
1108
1109 <p>With a large webengine so slow and so massive, I knew in an instant it
1110 must be chromium. More rapid than runit my commands to the system:
1111 “Now Ansible! now Grafana! now buildbot and xbulk! On rindex! on
1112 snooze! on, ext4 and repo-cleaner! To the top of the graph to the top
1113 of the stack now build, build away, build away all!</p>
1114
1115 <p>As disk platters that before the online scrub fly, when they meet with
1116 an obstacle always retry, so up to the servers the tasks they all
1117 flew, with their mirror of toys and BDFL, too.</p>
1118
1119 <p>And then in a twinkling, I saw in reply the server starting and
1120 launching of each single build. As I drew in my buffers, and was
1121 closing up shop, down the pipe the json came with a stop. It was
1122 padded with null bytes from its start to its end, and its braces were
1123 all tarnished with codepages and parity bits; a slice of package it
1124 contained in its body, and it looked like a startup just opening its
1125 reply. The descriptors how they twinkled, the keys how merry!</p>
1126
1127 <p>A close of a brace and a retcode of 0 soon gave me to know I had
1128 nothing to dread. Buildbot said not a word but went straight to its
1129 work, and filled the mirrors with packages. Waiting for but a moment
1130 before confirming my intent, the BuildBot went on its way; indexes
1131 sprang to their clients, and to the fleet I did signal and away they
1132 all built like the sight seldom seen. But before I <code class="language-plaintext highlighter-rouge">C-b d</code> I exclaim
1133 to all users:</p>
1134
1135 <p>Happy Christmas to all, and to all a Good Night!</p>
1136
1137 <p>–maldridge</p>
1138
1139 <hr />
1140
1141 <p>We hope you’ve enjoyed the Advent of Void. This is a fun project that
1142 we’ve done now for two years to try and shed some light on lesser
1143 known packages. We’ve got a few honorable mentions that may make
1144 their way to the feed over the next few days, but this post concludes
1145 the series. Void is a volunteer effort that we enjoy sharing with
1146 you, and hopefully you’ve learned some neat new tips and tricks these
1147 last 24 days. Our volunteers don’t just make packages and manage
1148 infrastructure, we also write fun posts like these (though I recognize
1149 I’m a quite poor poet). If you want to become involved and help us
1150 keep Void going, join us in #xbps on freenode, but maybe wait until
1151 after the holidays to do so.</p>
1152
1153 <p>Enjoy the winter season and the updates that just keep rolling!</p>
1154 </p>
1155 </div>
1156 </content>
1157 </entry>
1158
1159 <entry>
1160 <title>The Advent of Void: Day 24: gromit-mpx</title>
1161 <link href="https://voidlinux.org/news/2018/12/01-advent-gromit-mpx.html"/>
1162 <id>https://voidlinux.org/news/2018/12/01-advent-gromit-mpx</id>
1163 <published>2018-12-24T00:00:00+00:00</published>
1164 <updated>2018-12-24T00:00:00+00:00</updated>
1165 <content type="xhtml">
1166 <div xmlns="http://www.w3.org/1999/xhtml">
1167 <p><p>Have you ever wanted to doodle on a screenshot? Ever? Just a single underline,
1168 or an arrow, or something to help point out something about a screenshot? Or
1169 maybe during a presentation, on the fly, suddenly you want to point out
1170 a particular thing… wouldn’t it be nice to have a tool to help?</p>
1171
1172 <p>Turns out, there is one, a very simple tool to do this. I use it every
1173 month.</p>
1174
1175 <p>Gromit-mpx is simple. <code class="language-plaintext highlighter-rouge"><F9></code> to start being able to draw, <code class="language-plaintext highlighter-rouge">Shift-Ctrl-<F9></code> to
1176 clear everything you drew, and <code class="language-plaintext highlighter-rouge">Ctrl-<F9></code> to stop being able to draw (but
1177 leave everything on the screen). Just make sure <code class="language-plaintext highlighter-rouge">gromit-mpx</code> is running in the
1178 background, and you are set for all your drawing and annotating needs. Even
1179 people like me, who just run <code class="language-plaintext highlighter-rouge">dwm</code> and not with any compositor, I can annotate
1180 my screen quickly.</p>
1181
1182 <p><img src="https://i.imgur.com/Hw1dn0o.png" alt="ascii-table.com screenshot" /></p>
1183
1184 <p>But with just a few lines, I can clarify what I meant to share. I won’t be
1185 winning any art awards, but it works.</p>
1186
1187 <p><img src="https://i.imgur.com/65MDkPI.png" alt="ascii-table.com annotated screenshot, pointing out a v, o, i, d, and
1188 including most of the binary for those values" /></p>
1189
1190 <p>Do note that the annotations stick around, even after you scroll the window, or
1191 switch to a different screen entirely.</p>
1192
1193 <p><img src="https://i.imgur.com/RrGutNX.png" alt="example of a void linux chat room" /></p>
1194
1195 <p>So keep <code class="language-plaintext highlighter-rouge">gromit-mpx</code> around, it might be useful someday.</p>
1196
1197 <p>For more information, there is always the
1198 <a href="https://man.voidlinux.org/1/gromit-mpx">gromit-mpx(1) manpage</a>.</p>
1199 </p>
1200 </div>
1201 </content>
1202 </entry>
1203
1204 <entry>
1205 <title>Void Linux at 35c3</title>
1206 <link href="https://voidlinux.org/news/2018/12/00-35c3.html"/>
1207 <id>https://voidlinux.org/news/2018/12/00-35c3</id>
1208 <published>2018-12-24T00:00:00+00:00</published>
1209 <updated>2018-12-24T00:00:00+00:00</updated>
1210 <content type="xhtml">
1211 <div xmlns="http://www.w3.org/1999/xhtml">
1212 <p><p><img src="/assets/img/35c3-void.png" alt="35C3 Void" /></p>
1213
1214 <p>2018 has been an intense year for Void. There were many ups and downs.
1215 To wrap up the year we’re meeting at the <a href="https://events.ccc.de/category/congress/35c3/">35c3</a>.</p>
1216
1217 <p>To meet other Voiders and chat about related and unrelated topics there’s
1218 the
1219 <a href="https://signup.c3assemblies.de/assembly/cf15ba5d-5bb1-473d-827c-b83862de75a1"><strong>Void Linux Assembly</strong></a></p>
1220
1221 <p>Also, on day 1 (2018-12-27) 19:00, <a href="https://twitter.com/Gottox">@Gottox</a> is doing his
1222 annual talk about <a href="https://pretalx.35c3oio.freifunk.space/35c3oio/talk/XCU9PD/"><strong>The State Of the
1223 Void</strong></a>.</p>
1224
1225 <p>After the talk, around 20:00, Void is inviting you to a <strong>Void User Meetup</strong>. We’ll
1226 meet at the Open Infrastructure Orbit in front of the lecture area, find the
1227 nearest bar, grab a Beer or a Tschunk, and get into interesting conversations.</p>
1228
1229 <p>I’m looking forward to a great event with an awesome community!</p>
1230
1231 <p>–Gottox & the Void Linux Team</p>
1232 </p>
1233 </div>
1234 </content>
1235 </entry>
1236
1237 <entry>
1238 <title>The Advent of Void: Day 23: extrace</title>
1239 <link href="https://voidlinux.org/news/2018/12/advent-extrace.html"/>
1240 <id>https://voidlinux.org/news/2018/12/advent-extrace</id>
1241 <published>2018-12-23T00:00:00+00:00</published>
1242 <updated>2018-12-23T00:00:00+00:00</updated>
1243 <content type="xhtml">
1244 <div xmlns="http://www.w3.org/1999/xhtml">
1245 <p><p>Today’s tool is <a href="https://github.com/chneukirchen/extrace">extrace(1)</a>, a small, simple and powerful tool to trace program executions.
1246 By default <code class="language-plaintext highlighter-rouge">extrace(1)</code> will look at system wide executions, alternatively it can start a new process or start looking for executions in child processes of a specified pid.
1247 The output is a tree like structure including the process id, the command and its arguments, additional flags can add the environment of the process, the executing user or even the exit status and runtime duration.</p>
1248
1249 <p>The following example is the truncated <code class="language-plaintext highlighter-rouge">extrace(1)</code> output of checking the <code class="language-plaintext highlighter-rouge">dhcpcd(8)</code> man page and then executing <code class="language-plaintext highlighter-rouge">dhcpcd -k</code> to release all interfaces followed by executions from dhcpcd hooks.</p>
1250
1251 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ extrace
1252 911 man dhcpcd
1253 912 less -T /tmp/man.XXXXH357hT /tmp/man.XXXXEOs5Na
1254 930 doas dhcpcd -k
1255 930 dhcpcd -k
1256 932 /bin/sh /usr/libexec/dhcpcd-run-hooks
1257 933 rm -f /run/dhcpcd/resolv.conf/br0.ra
1258 936 sed -n 's/^domain //p' br0.dhcp
1259 938 sed -n 's/^search //p' br0.dhcp
1260 941 sed -n 's/^nameserver //p' br0.dhcp
1261 943 cat /etc/resolv.conf.head
1262 944 cmp -s /etc/resolv.conf /run/dhcpcd/resolv.conf.br0.ra
1263 945 cat /run/dhcpcd/resolv.conf.br0.ra
1264 946 rm -f /run/dhcpcd/resolv.conf.br0.ra
1265 947 chmod 644 /etc/resolv.conf
1266 948 rm -f /run/dhcpcd/resolv.conf.br0.ra
1267 950 sed '/^# Generated by dhcpcd/,/^# End of dhcpcd/d' /etc/ntpd.conf
1268 951 cmp -s /etc/ntpd.conf /run/dhcpcd/ntp.conf.br0.ra
1269 952 rm -f /run/dhcpcd/ntp.conf.br0.ra
1270 ...
1271 </code></pre></div></div>
1272
1273 <p>Here is another example where we trace the executions by make into a file, with the <code class="language-plaintext highlighter-rouge">-t</code> flag <code class="language-plaintext highlighter-rouge">extrace(1)</code> adds the exit status and the duration.</p>
1274
1275 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mblaze$ extrace -t -o make.extrace make
1276 cc -Wall -Wno-switch -Wextra -g -O2 -fstack-protector-strong -D_FORTIFY_SOURCE=2 -c -o msed.o msed.c
1277 cc msed.o blaze822.o mymemmem.o mytimegm.o seq.o slurp.o -lrt -o msed
1278 mblaze$ cat make.extrace
1279 1992+ make
1280 1993+ uname
1281 1993- uname exited status=0 time=0.000s
1282 1994+ cc -Wall -Wno-switch -Wextra -g -O2 -fstack-protector-strong '-D_FORTIFY_SOURCE=2' -c -o msed.o msed.c
1283 1995+ /usr/lib/gcc/x86_64-unknown-linux-gnu/8.2.0/cc1 -quiet -D '_FORTIFY_SOURCE=2' msed.c -quiet -dumpbase msed.c '-mtune=generic' '-march=x86-64' -auxbase-strip msed.o -g -O2 -Wall -Wno-switch -Wextra -fstack-protector-strong -o /tmp/ccDnNZ91.s
1284 1995- /usr/lib/gcc/x86_64-unknown-lin exited status=0 time=0.212s
1285 1996+ as --64 -o msed.o /tmp/ccDnNZ91.s
1286 1996- as exited status=0 time=0.019s
1287 1994- cc exited status=0 time=0.234s
1288 1997+ cc msed.o blaze822.o mymemmem.o mytimegm.o seq.o slurp.o -lrt -o msed
1289 1998+ /usr/lib/gcc/x86_64-unknown-linux-gnu/8.2.0/collect2 [...]
1290 1999- /usr/bin/ld exited status=0 time=0.027s
1291 1998- /usr/lib/gcc/x86_64-unknown-lin exited status=0 time=0.029s
1292 1997- cc exited status=0 time=0.031s
1293 2000+ /bin/sh -c 'test -n "$SOURCE_DATE_EPOCH" || BUILDDATE=$(date '\''+ (%Y-%m-%d)'\''); \'$'\n'' printf '\''#!/bin/sh\nprintf "User-Agent: mblaze/%s%s\\n"\n'\'' \'$'\n'' "$({ git describe --always --dirty 2>/dev/null || cat VERSION; } | sed '\''s/^v//'\'')" \'$'\n'' "$BUILDDATE" >museragent'
1294 2001+ date '+ (%Y-%m-%d)'
1295 2001- date exited status=0 time=0.000s
1296 2004+ sed 's/^v//'
1297 2005+ git describe --always --dirty
1298 2005- git exited status=0 time=0.008s
1299 2004- sed exited status=0 time=0.009s
1300 2000- /bin/sh exited status=0 time=0.012s
1301 2006+ chmod +x museragent
1302 2006- chmod exited status=0 time=0.001s
1303 1992- make exited status=0 time=0.286s
1304 </code></pre></div></div>
1305 </p>
1306 </div>
1307 </content>
1308 </entry>
1309
1310 <entry>
1311 <title>The Advent of Void: Day 22: autossh</title>
1312 <link href="https://voidlinux.org/news/2018/12/advent-autossh.html"/>
1313 <id>https://voidlinux.org/news/2018/12/advent-autossh</id>
1314 <published>2018-12-22T00:00:00+00:00</published>
1315 <updated>2018-12-22T00:00:00+00:00</updated>
1316 <content type="xhtml">
1317 <div xmlns="http://www.w3.org/1999/xhtml">
1318 <p><p>SSH. The very use of the acronym screams “Knows which end of the computer
1319 needs to be plugged in.” It can be used to confirm your computers are working,
1320 to transfer files (two ways!), as a SOCKS proxy (didn’t know this? Go read the
1321 man page, option <code class="language-plaintext highlighter-rouge">-D</code>, it’s brilliant), and even as a poor man’s VPN.</p>
1322
1323 <p>Poor man’s VPN?</p>
1324
1325 <p>Well, I have a computer that lives behind a firewall. I can’t adjust the
1326 firewall. But I want to use that computer. Legally, mark you, I have permission
1327 from the network owners, it’s just not practical to adjust the firewall.</p>
1328
1329 <p>What to do?</p>
1330
1331 <p>Well, set up an ssh tunnel of course! In this case, <code class="language-plaintext highlighter-rouge">localhost</code> is the target
1332 computer, and the other hostname is a place I can access more readily than
1333 <code class="language-plaintext highlighter-rouge">localhost</code>.</p>
1334
1335 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh -NR $portA:localhost:22 nbis.gov
1336 </code></pre></div></div>
1337
1338 <p>But problems. My local network isn’t the best, and sometimes when there is a
1339 power outage my computer comes up first. I could just create a runit service
1340 to make sure the ssh connection is running…. and I did, for a while, but
1341 when it failed it failed very badly. Finally, I settled on <code class="language-plaintext highlighter-rouge">autossh</code>. What
1342 does <code class="language-plaintext highlighter-rouge">autossh</code> do? Automatically runs an SSH command. You can configure a lot
1343 about how it does this, how many times it tries, how long it waits between
1344 tries, what the backoffs are, everything like that. So, I combined the best
1345 of both worlds: autossh (which should never crash) wrapped in a user service
1346 with runit (which should always remember to start autossh)</p>
1347
1348 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/bin/sh
1349 [ -r ./conf ] && . ./conf
1350 : ${portA:=2222}
1351 : ${targetHost:=localhost}
1352 exec autossh -M 0 -NR ${portA}:localhost:22 $targetHost
1353 </code></pre></div></div>
1354
1355 <p>And my problem is (mostly) solved! So, in summary: SSH is an amazing tool, and
1356 <code class="language-plaintext highlighter-rouge">autossh</code> helps you keep your ssh tunnels alive.</p>
1357
1358 <p>One point about configuration, from the manpage:</p>
1359
1360 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Other than the flag to set the connection monitoring port, autossh uses
1361 environment variables to control features. ssh seems to be still
1362 collecting letters for options, and this seems the easiest way to avoid
1363 collisions.
1364 </code></pre></div></div>
1365
1366 <p>and there are 13 environment variables right now, so plenty you can choose to
1367 configure.</p>
1368
1369 <p>For more information, examples, and to see the list of relevant environment
1370 variables, please read the
1371 <a href="https://man.voidlinux.org/1/autossh">autossh(1) manpage</a>.</p>
1372 </p>
1373 </div>
1374 </content>
1375 </entry>
1376
1377 <entry>
1378 <title>The Advent of Void: Day 21: fex</title>
1379 <link href="https://voidlinux.org/news/2018/12/advent-fex.html"/>
1380 <id>https://voidlinux.org/news/2018/12/advent-fex</id>
1381 <published>2018-12-21T00:00:00+00:00</published>
1382 <updated>2018-12-21T00:00:00+00:00</updated>
1383 <content type="xhtml">
1384 <div xmlns="http://www.w3.org/1999/xhtml">
1385 <p><p><a href="https://www.semicomplete.com/projects/fex/">fex</a> is a simple yet
1386 powerful field extraction tool for working with text.</p>
1387
1388 <p>If you spend enough time in a shell fiddling with code or data, you
1389 inevitably want to pull fields out of some text you have. For example,
1390 say you want the hex sha256sum of a file, minus the name:</p>
1391
1392 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sha256sum launch-codes
1393 a0cd7db7343bed89416660b4f92c43fe7b556439daa2e26e9844ce82491191c6 launch-codes
1394 </code></pre></div></div>
1395
1396 <p>You could write this output to a file and remove the filename from it
1397 with a text editor, or use cut or awk. However, fex can save you a bit
1398 of time by extracting the first field containing the checksum for you:</p>
1399
1400 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sha256sum launch-codes | fex 1
1401 a0cd7db7343bed89416660b4f92c43fe7b556439daa2e26e9844ce82491191c6
1402 </code></pre></div></div>
1403
1404 <p>Or, say you want a list of all home directories from passwd. To do this,
1405 we ask fex to split by colon and select the sixth field:</p>
1406
1407 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ fex </etc/passwd :6
1408 /root
1409 /dev/null
1410 /var/lib/colord
1411 /var/empty
1412 ...
1413 </code></pre></div></div>
1414
1415 <p>Or maybe we want <code class="language-plaintext highlighter-rouge">gid:login</code> pairs to work with:</p>
1416
1417 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ fex </etc/passwd ':{4,1}'
1418 0:root
1419 99:nobody
1420 999:colord
1421 22:dbus
1422 ...
1423 </code></pre></div></div>
1424
1425 <p>Here we can see that fex will keep the separator we split by, letting us
1426 reduce the data to only what we want while maintaining its format. And,
1427 it allows us to rearrange fields using <code class="language-plaintext highlighter-rouge">{N,M,...}</code> selectors.</p>
1428
1429 <p>You can alse use fex to pluck fields by narrowing the selection with
1430 different split characters. So let’s say we want to get an idea of what
1431 the most common pairs of ‘subject: verb’ are in commit messages for
1432 <a href="https://github.com/void-linux/void-packages">void-packages</a> – maybe to
1433 see which packages receive the most updates.</p>
1434
1435 <p>To do this, we’ll use git to search for commit message subjects with
1436 a colon and pipe that to fex. Using fex, we’ll write our first selector
1437 (<code class="language-plaintext highlighter-rouge">:1</code>) to take the first field behind the colon. We’ll then use a second
1438 selector (<code class="language-plaintext highlighter-rouge">:2 1</code>) to take the text after the colon, split that by
1439 spaces, and select the first word from that. With this, we get a list of
1440 subjects and verbs we can sort and count:</p>
1441
1442 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git log --pretty=%s --grep ':' | fex ':1' ':2 1' | sort | uniq -c | sort -rh | head
1443 328 youtube-dl update
1444 206 xbps-git bump
1445 160 git update
1446 151 Adapta update
1447 149 ImageMagick update
1448 143 exiftool update
1449 142 firefox update
1450 136 kernel update
1451 133 rpi-kernel update
1452 129 python-setuptools update
1453 </code></pre></div></div>
1454
1455 <p>From that, we can see that updates make up all but one of the top ten
1456 pairs, with xbps-git bumps being the second in line after youtube-dl
1457 updates. This only covers basic use of fex, too – you can also select
1458 field ranges, fields matching a regular expression, and combine all of
1459 these.</p>
1460
1461 <p>There are lots of ways to use fex in day to day data munging,
1462 programming, and writing your own tools. For many field extraction
1463 tasks, fex allows you to easily get the data you want without writing
1464 small awk programs or messing with cut. Plus, it’s just fun to use.</p>
1465
1466 <p>For more information and examples, please read the <a href="https://man.voidlinux.org/1/fex">fex(1)
1467 manpage</a>.</p>
1468 </p>
1469 </div>
1470 </content>
1471 </entry>
1472
1473 <entry>
1474 <title>The Advent of Void: Day 20: xsnow</title>
1475 <link href="https://voidlinux.org/news/2018/12/advent-xsnow.html"/>
1476 <id>https://voidlinux.org/news/2018/12/advent-xsnow</id>
1477 <published>2018-12-20T00:00:00+00:00</published>
1478 <updated>2018-12-20T00:00:00+00:00</updated>
1479 <content type="xhtml">
1480 <div xmlns="http://www.w3.org/1999/xhtml">
1481 <p><p>If you’re dreaming of a white christmas, dream no more with the quick
1482 and easy installation of xsnow!</p>
1483
1484 <p>This small utility is best suited to window manager environments that
1485 do not tile, and will cause snow to fall on your desktop. The snow
1486 will collect on top of your windows and you’ll even have periodic
1487 visits from Santa flying across your desktop.</p>
1488
1489 <p>Its a quick and fun utility, and worth a bit of Christmas cheer as we
1490 go into the final days of the Void Advent.</p>
1491 </p>
1492 </div>
1493 </content>
1494 </entry>
1495
1496
1497 </feed>