<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: tetractius</title>
    <description>The latest articles on Forem by tetractius (@tetractius).</description>
    <link>https://forem.com/tetractius</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F353943%2F73083511-2167-453a-b343-45058cf90589.png</url>
      <title>Forem: tetractius</title>
      <link>https://forem.com/tetractius</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tetractius"/>
    <language>en</language>
    <item>
      <title>TetraQuicky09: Get back autocomplete in a Docker container</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Sat, 09 May 2020 15:30:09 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky09-get-back-autocomplete-in-a-docker-container-gob</link>
      <guid>https://forem.com/tetractius/tetraquicky09-get-back-autocomplete-in-a-docker-container-gob</guid>
      <description>&lt;p&gt;How many time you shouted as crazy because you could get autocomplete in an ubuntu docker container...&lt;/p&gt;

&lt;p&gt;Well: that's life; it is like this by design for a gazillion of very good reasons. Never the less if you are not a genius that can manage to get a container working at the first untested write of the &lt;code&gt;Dockerfile&lt;/code&gt;, chances are that you need to &lt;code&gt;-it /bin/bash&lt;/code&gt; in a container to understand what the hell it's going on. &lt;/p&gt;

&lt;p&gt;And it is there where you understand that life has been unfair with you. You don't have the auto-complete. &lt;/p&gt;

&lt;p&gt;But, getting it back, is very easy...&lt;/p&gt;

&lt;p&gt;Just install the bash autocompletion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;bash-completion
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;and remove one file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; /etc/apt/apt.conf.d/docker-clean
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;then you have to exit from there...&lt;br&gt;
The container will die. Again: that's life.&lt;br&gt;
But if you &lt;code&gt;docker ps -a&lt;/code&gt; you get the &lt;code&gt;id&lt;/code&gt; of the container you just kill it and you restart it and you attach to it...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker start &amp;lt;last container&amp;gt;
docker attach &amp;lt;last container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;a couple of ENTER keys and... Voila'!! &lt;/p&gt;

&lt;p&gt;You can TAB ... TAB all your life that has been wasted so far in cmd.com not tab tabbing. :)&lt;/p&gt;

&lt;p&gt;Peach, stay home and stay safe!!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>ubuntu</category>
      <category>bash</category>
    </item>
    <item>
      <title>TetraQuicky08: Install hamachi on Windows 10</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Thu, 23 Apr 2020 09:35:44 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky08-install-hamachi-on-windows-10-5f5p</link>
      <guid>https://forem.com/tetractius/tetraquicky08-install-hamachi-on-windows-10-5f5p</guid>
      <description>&lt;p&gt;Well apparently while LogMeIn hamachi is kept on getting been bought here and there and it risks the filing of Chapter 11 basically every 10 minutes,&lt;br&gt;
they don't manage to create a reliable installer for hamachi in Windows 10.&lt;/p&gt;

&lt;p&gt;Don't get it bad... there are tons of better solution nowadays but let's face it, if you, like me, need to have a virtual private network not for browsing safely the web, but only for connecting easily to computers over the internet in the world, from Linux, Windows Max, on arm and so on, independently from the platform. Only &lt;a href="https://www.vpn.net/"&gt;Hamachi&lt;/a&gt; gives you a decent solution for a decent price (That is free up to 5 peers... if you want a network with more than 5 the price is still not a lot every year).&lt;/p&gt;

&lt;p&gt;It is only a pity that the product is left on its own and unmaintained by Logmein that apparently is trying all their best to bankrupt.&lt;/p&gt;

&lt;p&gt;(P.S. I might even have tried to help them for that once, by trying to apply for a position, but luckily (for them) the recruiter at that time was just about that incompetent to not find a match of my profile with the role - He thought I was an Android-only developer and I am still wondering where he might have read that - but I still remember with sweet empathy how rude he was in telling me that)&lt;/p&gt;

&lt;p&gt;Try to imagine how great, a service like this, could be if only there would an API to create and dispose of quickly VPN on demand... so sorry &lt;a href="https://community.logmein.com/t5/LogMeIn-Hamachi-Discussions/Hamachi-API/td-p/138910"&gt;jtodorov&lt;/a&gt; but better not hold your breath.&lt;/p&gt;

&lt;p&gt;I mean, of course, you could do that with AWS VPC and their powerful API... it would probably take me 5 minutes to get a terraform script to do that... but only the burden of dealing with AWS billing and the other 20 million settings that you don't probably need.&lt;/p&gt;

&lt;p&gt;However to get to my point... &lt;/p&gt;

&lt;h2&gt;
  
  
  How to get it working in Windows 10
&lt;/h2&gt;

&lt;p&gt;Well thanks to this Spanish wonder boy in &lt;a href="https://community.logmein.com/t5/LogMeIn-Hamachi-Discussions/Windows-10-Hamachi-Problem/td-p/132322"&gt;their blog&lt;/a&gt;, after the installation, or more importantly, after a Windows 10 update, you have to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Win key, type services and open: look for &lt;strong&gt;LogMeIn Hamachi Tunneling Service&lt;/strong&gt; and make it start
Then if you still have these annoying yellow triangles that complain about tunnelling problems&lt;/li&gt;
&lt;li&gt;Win key type Device Manage and logo for Network Adapters: if you don't see Hamachi adapter then you need to click on Menu &lt;strong&gt;Action &amp;gt; Add Legacy Hardware&lt;/strong&gt; then Next then &lt;strong&gt;Install Manually&lt;/strong&gt; Then look for ** Network Adapter ** and then look for &lt;strong&gt;LogMeIn Inc&lt;/strong&gt; and press &lt;strong&gt;Next&lt;/strong&gt; another dozen times.&lt;/li&gt;
&lt;li&gt;At this point is not finish yet because you have to go to &lt;code&gt;Control Panel\Network and Internet\Network Connections&lt;/code&gt; and look for the new Network Adapter and rename it (WTF!!! yes you have to do that otherwise the hamachi service won't recognise it and it won't use it... crazy, right?) to &lt;strong&gt;Hamachi&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Then you can simply restart the Hamachi UI (or click on that ugly old square button they don't dare to update a couple of times)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So finally you can now ssh into your server at home from you locked down windows computer at work... yay!!&lt;/p&gt;

</description>
      <category>windows</category>
      <category>vpn</category>
      <category>hamachi</category>
      <category>logmein</category>
    </item>
    <item>
      <title>TetraQuicky07: Ubuntu apt-get key errors</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Thu, 16 Apr 2020 08:40:11 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky07-ubuntu-apt-get-key-errors-35fa</link>
      <guid>https://forem.com/tetractius/tetraquicky07-ubuntu-apt-get-key-errors-35fa</guid>
      <description>&lt;p&gt;Every now and then in ubuntu, you might get this error while updating package with apt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
...
Err:6 https://apt.kitware.com/ubuntu bionic InRelease
  The following signatures couldn&lt;span class="s1"&gt;'t be verified because the public key is not available: NO_PUBKEY 291F9FF6FD385783
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This might be several causes of this issue. The GPG signature server could have been temporarily down so you can re-force it simply by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--keyserver&lt;/span&gt; keyserver.ubuntu.com &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 291F9FF6FD385783
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Using the same key that is normally causing you trouble (in this instance &lt;em&gt;291F9FF6FD385783&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;However recently I noticed that in some environment behind a strict proxy rules, and for example also under WSL in Windows, the access to the keyserver.ubuntu.com is actually blocked and cannot be reached.&lt;br&gt;
This, for example, will give you the following error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--keyserver&lt;/span&gt; keyserver.ubuntu.com &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 291
F9FF6FD385783
Executing: /tmp/apt-key-gpghome.nR1O15nnkM/gpg.1.sh &lt;span class="nt"&gt;--keyserver&lt;/span&gt; keyserver.ubuntu.com &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 291F9FF6FD385783
gpg: keyserver receive failed: Server indicated a failure
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I just discovered that you can use the port 80 for this. So, it is enough to just for something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--keyserver&lt;/span&gt; hkp://keyserver.ubuntu.com:80 &lt;span class="nt"&gt;--recv&lt;/span&gt;
  291F9FF6FD385783
Executing: /tmp/apt-key-gpghome.prdsQcWrls/gpg.1.sh &lt;span class="nt"&gt;--keyserver&lt;/span&gt; hkp://keyserver.ubuntu.com:80 &lt;span class="nt"&gt;--recv&lt;/span&gt; 291F9FF6FD385783
gpg: key A8E5EF3A02600268: public key &lt;span class="s2"&gt;"Kitware Apt Archive Automatic Signing Key (2020) &amp;lt;debian@kitware.com&amp;gt;"&lt;/span&gt; imported
gpg: Total number processed: 1
gpg:               imported: 1
Reading package lists... Done
Building dependency tree
Reading state information... Done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And puff the trick is done.&lt;/p&gt;

&lt;p&gt;P.S. ... yes use this kitware ppa to have always the latest cmake version available in ubuntu. I highly recommend it.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>wsl</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>TetraQuicky06: Everything you always wanted to know about the storage devices attached (in Linux)</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Mon, 06 Apr 2020 18:18:33 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky06-everything-you-always-wanted-to-know-about-the-storage-devices-attached-in-linux-11f8</link>
      <guid>https://forem.com/tetractius/tetraquicky06-everything-you-always-wanted-to-know-about-the-storage-devices-attached-in-linux-11f8</guid>
      <description>&lt;p&gt;Look no further... it's easy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;lsblk &lt;span class="nt"&gt;-o&lt;/span&gt; NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As usual, I recommend man pages to even get more of what you might need.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
    </item>
    <item>
      <title>TetraQuicky05: The right way of copying recursively a directory - the right flags of rsync</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Tue, 24 Mar 2020 09:06:34 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky05-the-right-way-of-copying-recursively-a-directory-the-right-flags-of-rsync-5d3o</link>
      <guid>https://forem.com/tetractius/tetraquicky05-the-right-way-of-copying-recursively-a-directory-the-right-flags-of-rsync-5d3o</guid>
      <description>&lt;h1&gt;
  
  
  TL;DR
&lt;/h1&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;rsync &lt;span class="nt"&gt;-avru&lt;/span&gt; &lt;span class="nt"&gt;--info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;progress2 &amp;lt;Source_Dir&amp;gt;/ &amp;lt;Destination_Dir&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  More on that
&lt;/h1&gt;

&lt;p&gt;I use the above so much that I still don't understand why I didn't set it as alias.&lt;/p&gt;

&lt;p&gt;The advantage over the normal &lt;code&gt;cp -rvf&lt;/code&gt; is that &lt;code&gt;rsync&lt;/code&gt; copies incrementally and it is able &lt;em&gt;to continue if it is interrupted&lt;/em&gt;.&lt;br&gt;
It works great also for copying over the network with samba and stuff like that (I use it most of the time over samba drive mounted with &lt;code&gt;cifs&lt;/code&gt; and I never had a problem)&lt;/p&gt;

&lt;p&gt;There are a gazillion of frags (have fun with &lt;code&gt;man rsync&lt;/code&gt;). &lt;br&gt;
Specifically I am always after:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-a&lt;/code&gt; a cumulative flags that enforce to preserver during the copy also symlinks, permission timestamps and all the things of the files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-v&lt;/code&gt; just to print what are you copying&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-r&lt;/code&gt; recursively&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-u&lt;/code&gt; important one; &lt;em&gt;update&lt;/em&gt; that means that if the is a difference between a file in source and destination the source will be always updates (usefull when a previous run, left some file incomplete and you want to make sure the correct version from the source is overwritten) but if the files are the same, just skip it - that actual make rsync the best incremental tool&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--info=progress2&lt;/code&gt; is "tries" to give you a progress status percentage of the files while you are copying (where there is a lot of stuff it might be wrong on the road, but hey... better than nothing right?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you will not use &lt;code&gt;cp -rvf&lt;/code&gt; any more after this post (also because rsync is basically included in every distro on planet).&lt;/p&gt;



&lt;p&gt;&lt;em&gt;NOTE:&lt;/em&gt;&lt;br&gt;
A remember to put the slash at the end of the directories you want to copy if you don't want &lt;code&gt;rsync&lt;/code&gt; to put a new directory under you destination directory. Otherwise if you don't do this...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;rsync &lt;span class="nt"&gt;-avru&lt;/span&gt; from/   to/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;you will end up with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;to/from/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;in the destination.&lt;/p&gt;




&lt;h1&gt;
  
  
  ...and for Powershell?
&lt;/h1&gt;

&lt;p&gt;I've read about &lt;code&gt;robocopy&lt;/code&gt; but it seems something bizantine at first touch. Personally in windows I still use&lt;code&gt;rsync&lt;/code&gt; via &lt;code&gt;WSL&lt;/code&gt;. I used to use it also via &lt;code&gt;cygwin&lt;/code&gt; although it was really slow (and the cygwin version was super out-of-date there there was not &lt;code&gt;--info=progress2&lt;/code&gt; flags)&lt;/p&gt;

&lt;h1&gt;
  
  
  Bonus
&lt;/h1&gt;

&lt;p&gt;You need to sync and mirror 2 directories (like... also deleted files from source to be deleted in destination)? Have a look at &lt;code&gt;--delete&lt;/code&gt; flags. Slow copy over the network? Give a try with &lt;code&gt;-z&lt;/code&gt; (although sometime compressing big file might waste more of your time if you computer is not like super powerful).&lt;/p&gt;

</description>
      <category>linux</category>
      <category>wsl</category>
      <category>rsync</category>
      <category>bash</category>
    </item>
    <item>
      <title>TetraQuicky04: Recover docker parameter used to run a container</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Mon, 23 Mar 2020 14:59:34 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky04-recover-docker-parameter-used-to-run-a-container-ia8</link>
      <guid>https://forem.com/tetractius/tetraquicky04-recover-docker-parameter-used-to-run-a-container-ia8</guid>
      <description>&lt;p&gt;How many time you managed to run a container with exactly the parameter and the configuration you needed but you for some reason your &lt;code&gt;Ctrl+r&lt;/code&gt; is not finding anymore in your history the exact flags you used... &lt;br&gt;
Damn it that was exactly what you need. I needed that so that I throw it at my Kubernetes/rancher/swarm/whatever orchestrator to finish this stuff and go home... &lt;/p&gt;

&lt;p&gt;Yes, you can start to &lt;code&gt;docker inspect&lt;/code&gt; the hell out of a container but you don't really want that. It's late and you just want to go home. Or you don't care because you are not one of those DevOps wizards that always fix everything and you only care in getting your container up and running.&lt;/p&gt;

&lt;p&gt;Well, this &lt;a href="https://github.com/lavie/runlike"&gt;guy&lt;/a&gt; has exactly the solution for you!!&lt;/p&gt;

&lt;p&gt;And I have been using it like a crazy guy because it just works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&lt;/span&gt;
    assaflavie/runlike YOUR-CONTAINER
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;then, as the author suggests, you can alias it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;runlike&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;so that you can easily stuff like that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;runlike &lt;span class="nt"&gt;-p&lt;/span&gt; redis

docker run &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;redis &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"REDIS_VERSION=2.8.9"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-2.8.9.tar.gz"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"REDIS_DOWNLOAD_SHA1=003ccdc175816e0a751919cf508f1318e54aac1e"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-p&lt;/span&gt; 0.0.0.0:6379:6379/tcp &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--detach&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    myrepo/redis:7860c450dbee9878d5215595b390b9be8fa94c89 &lt;span class="se"&gt;\&lt;/span&gt;
    redis-server &lt;span class="nt"&gt;--slaveof&lt;/span&gt; 172.31.17.84 6379
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Boom!!&lt;/p&gt;

&lt;p&gt;Job done... now I can go home (or in time of quarantine, I can just go to the kitchen to cook something).&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>linux</category>
      <category>bash</category>
    </item>
    <item>
      <title>TetraQuicky03: Resetting permissions in quarantine</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Mon, 23 Mar 2020 11:48:50 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky03-resetting-permissions-in-quarantine-4mib</link>
      <guid>https://forem.com/tetractius/tetraquicky03-resetting-permissions-in-quarantine-4mib</guid>
      <description>&lt;p&gt;Maybe my Linux system got offended by all the other bad things I've said about Linux photography tools in my previous &lt;a href="https://dev.to/tetractius/tetraquicky02-default-boot-os-or-kernel-in-grub2-24hc"&gt;post&lt;/a&gt;... but suddenly my home drive wouldn't allow me to write in my home directory... like this without any sort of explanation.&lt;/p&gt;

&lt;p&gt;And off course the usual drill: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;get upset because you cannot find a USB-stick in your home for the recovery drive. And it is a quarantine time. Not that you can go around to buy a new one to be added to the other 37 that are hidden in your home. Yes because every time you need to use a &lt;a href="http://www.system-rescue-cd.org/"&gt;RescueCD&lt;/a&gt; recovery disk or install another Linux distro somewhere, you look for a USB stick in your home and you end up in buy a new one (or order 25 of them on Amazon just to make sure this time is not wasted again). But not hope there... you will lose them all.&lt;/li&gt;
&lt;li&gt;Ok: you find a crappy 2.0 one... of only 8GB... that will do.&lt;/li&gt;
&lt;li&gt;you do a boot in it and you look for your ext4 hated ubuntu partition - this is while you put yourself at ease because all your important git repos are mirrored in your company bitbucket server (of course right?) and you other stuff important are on Dropbox (and you swear for all the money you are giving to them only because they are the only one to give decent support for Linux)&lt;/li&gt;
&lt;li&gt;and the onto the usual fix. Wait, what is the partition?
what is the partition to fix:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;lsblk &lt;span class="nt"&gt;-o&lt;/span&gt; NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,UUID | &lt;span class="nb"&gt;grep &lt;/span&gt;ext4
├─nvme0n1p6 ext4       453G /                                        26ee30c6-82a4-437d-9d85-da7a9a413e20

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;(more about the beauty of the &lt;code&gt;lsblk&lt;/code&gt; in another TechQuicky)&lt;/p&gt;

&lt;p&gt;cool: &lt;code&gt;nvme0n1p6&lt;/code&gt; is what you were looking for&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fsck &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /dev/nvme0n1p6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;and then you get some jibber-jabber... but no error... what?&lt;/p&gt;

&lt;p&gt;let me restart then... but no again... no $HOME write permission says Plasma (because, for how much you might hate KDE, you will never get a meaningful error from Gnome... so better keep a minimal plasma installation on aside)&lt;/p&gt;

&lt;p&gt;but let me check stuff with &lt;code&gt;root&lt;/code&gt; access. Wait, is working. WTF!!!&lt;/p&gt;

&lt;p&gt;ok let me re put all my home directory as owner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-Rv&lt;/span&gt; tetractius:tetractus /home/tetractius
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It take ages... and after that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;span class="nb"&gt;touch &lt;/span&gt;wtf
&lt;span class="nb"&gt;touch&lt;/span&gt;: cannot &lt;span class="nb"&gt;touch&lt;/span&gt; &lt;span class="s1"&gt;'wtf'&lt;/span&gt;: Permission denied
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;whaaaaaaaat???&lt;/p&gt;

&lt;p&gt;wait&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;span class="nb"&gt;sudo mkdir &lt;/span&gt;wtf
&lt;span class="nb"&gt;chown &lt;/span&gt;tetractius:tetractius wtf
&lt;span class="nb"&gt;cd &lt;/span&gt;wtf
&lt;span class="nb"&gt;touch &lt;/span&gt;wth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;no errors. Ok that is madness...&lt;/p&gt;

&lt;p&gt;you know what?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home
ll tetractius
drwxr--r-- 188 tetractius tetractius 20480 Mar 23 11:08 tetractius/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;permission looks right...&lt;br&gt;
so get this bastard!!!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;777 tetractius
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;...and finally I got my rights back... I can &lt;em&gt;touch&lt;/em&gt; whatever I want.&lt;/p&gt;

&lt;p&gt;but just for curiosity...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;744 tetractius
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;... and it's still working... WTF!!!&lt;/p&gt;

&lt;p&gt;I reboot... everything works fine. Even Gnome on Xorg is back to normal (because if you still have hope in the Open Source community to fix all the apps for &lt;code&gt;Wayland&lt;/code&gt; you can probably die in very old age already... let alone the support for WebRTC than in time of COVID-19 is essential).&lt;/p&gt;

&lt;p&gt;Do you have any idea of why you might have to reset permissions on a directory that had perfectly working partition?... If so please let me know...&lt;/p&gt;

&lt;p&gt;it was probably the dual booting karma.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>TetraQuicky02: Default boot OS or kernel in GRUB2</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Sun, 22 Mar 2020 15:52:53 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky02-default-boot-os-or-kernel-in-grub2-24hc</link>
      <guid>https://forem.com/tetractius/tetraquicky02-default-boot-os-or-kernel-in-grub2-24hc</guid>
      <description>&lt;p&gt;If you are a Linux user, chances are that you are dual booting; and not because you need Office 365 or because Win 10, after all, is not so bad nowadays. No, the real reason is that more than half of your steam library still does not work in tour Ubuntu. And yes: Gimp is great (only after you spent 2 days looking for the Crop menu Item) and while &lt;a href="https://www.darktable.org/"&gt;Darktable&lt;/a&gt; and &lt;a href="https://rawtherapee.com/"&gt;RawTherapee&lt;/a&gt; are really respectable (especially the latter), you will need sooner to pay Adobe a with a not neglectable part of your soul to use Lightroom because it is the only one that integrates decently with Nik Collection and it does not fry your CPU to run decently... or simply you need ACDSee to organize properly you pictures.&lt;/p&gt;

&lt;p&gt;Well in that case (phew thank god you don't need Visual Studio... or do you?) you are going to spend the rest of your life dual booting...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Grub&lt;/code&gt; was a mess; Grub2 they say is better; I don't know but if you, like me, end up with 30 different kernels with several patches for stuff you don't even remember or even worst you discover &lt;a href="https://github.com/teejee2008/ukuu"&gt;ukuu&lt;/a&gt; (yeah thanks Tony... you made all the kernel super easily installable on ubuntu and now I have 200 different kernels in GRUB)...&lt;/p&gt;

&lt;p&gt;Well, you are lost maybe you just need to set a default but then you need to change it again and then not and then again. Your life at that point is miserable. I understand you.&lt;/p&gt;

&lt;p&gt;But thanks to GRUB2 and to its impossible-to-find documentation &lt;strong&gt;you can now save your latest grub selection for the next boot&lt;/strong&gt; so &lt;em&gt;you can finally leave your PC booting un-attended&lt;/em&gt; (yes... in 2020 your dual boot computer can finally boot unattended!!)&lt;/p&gt;

&lt;p&gt;You just have to edit 2 lines of &lt;code&gt;/etc/default/grub&lt;/code&gt; with this 2 stupid variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GRUB_SAVEDEFAULT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;GRUB_DEFAULT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;saved
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;and then don't forget to run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo update-grub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And your life finally will change... for the better&lt;/p&gt;




&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;&lt;br&gt;
If you keep in booting in the wrong kernel, repeatedly, not even this will help you. It's too late by then.&lt;/p&gt;




</description>
      <category>grub</category>
      <category>linux</category>
      <category>dualboot</category>
    </item>
    <item>
      <title>TetraQuicky01: Transmission on Linux Server via Docker</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Sun, 22 Mar 2020 15:01:33 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky01-transmission-on-linux-server-via-docker-k1f</link>
      <guid>https://forem.com/tetractius/tetraquicky01-transmission-on-linux-server-via-docker-k1f</guid>
      <description>&lt;p&gt;How many time you wanted to have a quick torrent client running on an headless server instance, but you were put off by ... installing transmission... setting users, storage space... &lt;code&gt;initd&lt;/code&gt; or &lt;code&gt;systemd&lt;/code&gt; to start at boot... and then ending up with the usual terrible transmission web UI?&lt;br&gt;
Well if you know how to install docker, look no further...&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;transmission &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-v&lt;/span&gt; &amp;lt;important directory &lt;span class="k"&gt;for &lt;/span&gt;the config&amp;gt;:/config &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-v&lt;/span&gt; &amp;lt;important directory &lt;span class="k"&gt;for &lt;/span&gt;the downloads&amp;gt;:/downloads &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-v&lt;/span&gt; &amp;lt;I don&lt;span class="s1"&gt;'t really remember that&amp;gt;:/watch \
-e PGID=1000 -e PUID=1000 \
-e TZ=London \
-e TRANSMISSION_WEB_HOME=/combustion-release/ \
-p 9091:9091 \
-p 10411:10411 \
-p 10411:10411/udp \
--restart=unless-stopped \
linuxserver/transmission:latest
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Looking more specifically at all the arguments...
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--name=transmission&lt;/code&gt; or whatever name you prefer for your&lt;/li&gt;
&lt;li&gt;all the &lt;code&gt;-v&lt;/code&gt; are important pieces for mounting some directory into the container. Especially for the &lt;code&gt;downloads&lt;/code&gt; location, make sure to have enough space.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e PGID=1000 -e PUID=1000&lt;/code&gt;: this is probably the most important and overlooked; it makes sure that newly downloaded files are having the user and group permission so that you can read and write them freely. 1000 is the default &lt;code&gt;uid&lt;/code&gt; in most of the Linux installation but adjust accordingly if this is different (maybe you can check yours with &lt;code&gt;echo $UID $GROUPS&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e TZ=London&lt;/code&gt; so your files are saved with the correct timestamps... if you care about that stuff.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e TRANMISSION_WEB_HOME=/compustion-release/&lt;/code&gt; this trick will give a &lt;em&gt;reasonably&lt;/em&gt; more modern UI (that works really well with mobiles)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p 9091:9091&lt;/code&gt; you need this to access the web UI at &lt;code&gt;http://localhost:9091&lt;/code&gt; (you can redirect that port... I do usually)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p 10411:10411 -p 10411:10411/udp&lt;/code&gt; these are the port you need to open to have better download performance: 10411 is actually optional; you can choose which port you want. You remember to make sure this port is open also in your model, otherwise is pointless&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--restart=unless-stopped&lt;/code&gt; if you set the docker daemon to run at boot (like it does usually by default) this is making sure that your transmission headless client starts at boot as well... and in general... unless you don't specifically stop it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;linuxserver/transmission:latest&lt;/code&gt; the most important part; the docker image to start a new container from.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;NOTE:&lt;br&gt;
Although I usually don't endeavour the use of &lt;code&gt;latest&lt;/code&gt; version of the container, in this case, I think is not a bad idea... as this is probably running on your personal server, and if you keep the same directory volume mounted you can &lt;em&gt;upgrade&lt;/em&gt; to the latest version of transmission simply by stopping the container and re-running a new container (with a different name) using the same command line.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>torrent</category>
      <category>transmission</category>
    </item>
    <item>
      <title>
TetraQuicky00: Get your IP location from the command line</title>
      <dc:creator>tetractius</dc:creator>
      <pubDate>Sun, 22 Mar 2020 13:54:45 +0000</pubDate>
      <link>https://forem.com/tetractius/tetraquicky00-get-your-ip-location-from-the-command-line-2f09</link>
      <guid>https://forem.com/tetractius/tetraquicky00-get-your-ip-location-from-the-command-line-2f09</guid>
      <description>&lt;p&gt;Well if you are reading this probably, you are looking at bash solution.&lt;/p&gt;

&lt;h1&gt;
  
  
  Bash
&lt;/h1&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://ipinfo.io/json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;are you interested in specific information? By now you should now the easier way to parse JSON in the command line is &lt;code&gt;jq&lt;/code&gt;. I personally suggest you install it with &lt;code&gt;snap&lt;/code&gt; if you can.&lt;br&gt;
So then you can do fancy stuff like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://ipinfo.io/json | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.region'&lt;/span&gt;
Latium
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;/p&gt;
&lt;h1&gt;
  
  
  Powershell
&lt;/h1&gt;

&lt;p&gt;Oh my god, really? Kudos!! Well, the good news is that you can do basically the same (assuming you are on &lt;code&gt;pwsh&lt;/code&gt; 6 or 7):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nf"&gt;curl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://ipinfo.io/json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'.region'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nf"&gt;Latium&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;But if you don’t want to install an external tool like &lt;code&gt;jq&lt;/code&gt; in windows, you can go native with something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nf"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http://ipinfo.io/json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Which returns you one of these strange .NET objects you can also dissect easily and do something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http://ipinfo.io/json&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;region&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nf"&gt;Latium&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Special Tools if you want to avoid to go online too often
&lt;/h1&gt;

&lt;p&gt;Well, there are interesting tools out there. One I was looking at is &lt;code&gt;geoiplookup&lt;/code&gt;.&lt;br&gt;
You can get it via the package managers of the distro and also via &lt;code&gt;snap&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Via SNAP
&lt;/h2&gt;

&lt;p&gt;sudo snap install geoip-lookup&lt;/p&gt;
&lt;h2&gt;
  
  
  Via APT
&lt;/h2&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;geoip-bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and you can do fancy things with local DBs reducing the number of requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;geoiplookup &lt;span class="sb"&gt;`&lt;/span&gt;curl ifconfig.me&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And if you want to go more precise, without having to go and forth with external APIs you can do stuff like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
&lt;span class="nb"&gt;gunzip &lt;/span&gt;GeoLiteCity.dat.gz
&lt;span class="nb"&gt;mv&lt;/span&gt; ./GeoLiteCity.dat /usr/share/GeoIP/
geoiplookup &lt;span class="nt"&gt;-f&lt;/span&gt; /usr/share/GeoIP/GeoLiteCity.dat &lt;span class="sb"&gt;`&lt;/span&gt;curl ifconfig.me&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;So now you can quickly check if your encrypted delocalised VPN is working correctly by only doing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://ipinfo.io/json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;after all, isn’t that is what is all about?&lt;/p&gt;

</description>
      <category>bash</category>
      <category>iplocation</category>
      <category>powershell</category>
      <category>vpn</category>
    </item>
  </channel>
</rss>
