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" &gt; /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 &amp; 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 &lt;bobertlo&gt; i'm making the suggested changes [...]
          898 15:31 &lt;maldridge&gt; 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 &lt;bobertlo&gt; 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&gt;=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">&lt;F9&gt;</code> to start being able to draw, <code class="language-plaintext highlighter-rouge">Shift-Ctrl-&lt;F9&gt;</code> to
         1176 clear everything you drew, and <code class="language-plaintext highlighter-rouge">Ctrl-&lt;F9&gt;</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 &amp; 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&gt;/dev/null || cat VERSION; } | sed '\''s/^v//'\'')" \'$'\n''       "$BUILDDATE" &gt;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 ] &amp;&amp; . ./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 &lt;/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 &lt;/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>