<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://neic.dk/feed.xml" rel="self" type="application/atom+xml" /><link href="https://neic.dk/" rel="alternate" type="text/html" /><updated>2026-02-14T17:15:22+00:00</updated><id>https://neic.dk/feed.xml</id><title type="html">Mathias Dannesbo</title><entry><title type="html">Headless Windows 10 VM and Guacamole</title><link href="https://neic.dk/2020/04/05/Headless-Windows-10-VM-and-Guacamole.html" rel="alternate" type="text/html" title="Headless Windows 10 VM and Guacamole" /><published>2020-04-05T00:00:00+00:00</published><updated>2020-04-05T00:00:00+00:00</updated><id>https://neic.dk/2020/04/05/Headless-Windows-10-VM-and-Guacamole</id><content type="html" xml:base="https://neic.dk/2020/04/05/Headless-Windows-10-VM-and-Guacamole.html"><![CDATA[<p>I had need for a Windows installation to process some old Outlook mail
archives. The archive is quite large, so instead of moving the archives to a VM
on my laptop, I decided to create a Windows 10 VM on the Ubuntu 18.04 server
where the archives reside. I wanted to try to install the machine headless to
VirtualBox and setup Guacamole to access it over a web server. This is the first
time I have installed an OS that require a GUI installation process to
VirtualBox without having direct access to the VirtualBox GUI.</p>

<h3 id="preparing-the-vm">Preparing the VM</h3>

<p>I start by installing VirtualBox. We also need the VirtualBox Extension Pack to
enable RDP access. And finally we need the VirtualBox Guest Additions ISO.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">apt-get <span class="nb">install </span>virtualbox virtualbox-ext-pack virtualbox-guest-additions-iso</code></pre></figure>

<p>We <a href="https://www.virtualbox.org/manual/ch08.html#vboxmanage-createvm">create</a> a
VM definition with a name and an ostype. We also
<a href="https://www.virtualbox.org/manual/ch08.html#vboxmanage-registervm">register</a> it
with VirtualBox right away.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage createvm <span class="se">\</span>
<span class="nt">--name</span> <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--ostype</span> Windows10_64 <span class="se">\</span>
<span class="nt">--register</span></code></pre></figure>

<p>We then set all the settings for the VM. Please refer to the <a href="https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm">VirtualBox
manual</a> to get
a complete description of all the settings. Remember to update the ‘–memory’
and ‘–cpus’. Some especially interesting settings here are the network setup:
‘–nic1 bridge’ and ‘–bridgeadapter1 eno1’ adds a bridged network to the hosts
network adapter ‘eno1’. You’ll likely need to change that to the correct name
for your network adapter. (Try running ‘ip addr’ to get a list of all network
adapters.)</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage modifyvm <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--memory</span> 16384 <span class="se">\</span>
<span class="nt">--cpus</span> 4 <span class="se">\</span>
<span class="nt">--acpi</span> on <span class="se">\</span>
<span class="nt">--pae</span> on <span class="se">\</span>
<span class="nt">--hwvirtex</span> on <span class="se">\</span>
<span class="nt">--nestedpaging</span> on <span class="se">\</span>
<span class="nt">--boot1</span> dvd <span class="se">\</span>
<span class="nt">--boot2</span> disk <span class="se">\</span>
<span class="nt">--nic1</span> bridged <span class="se">\</span>
<span class="nt">--bridgeadapter1</span> eno1</code></pre></figure>

<p>To access the VMs over RDP, we also enable the VirtualBox Remote Desktop
Extension with ‘–vrde on’. It needs some authentication backend. We use
‘VBoxAuthSimple’. It is enabled with ‘–vrdeauthtype external –vrdeauthlibrary
VBoxAuthSimple’. ‘VBoxAuthSimple’ allow us to write RDP usernames and
password hashes to the ‘extradata’ section of each VM instead of relying on an
external service. See the <a href="https://www.virtualbox.org/manual/ch07.html#vbox-auth">RDP
Authentication</a> section
of the VirtualBox manual for an in-depth explanation.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage modifyvm <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--vrde</span> on <span class="se">\</span>
<span class="nt">--vrdeauthtype</span> external <span class="se">\</span>
<span class="nt">--vrdeauthlibrary</span> VBoxAuthSimple</code></pre></figure>

<p>To generate a hash of the password, run the following, where you substitute
‘secret’ with a proper password. I generate a random password with ‘pwgen’. Save
the password for later. It needs to be entered in the Guacamole GUI. Tip you’ll
properly want to prefix the following two commands with a space to <a href="https://stackoverflow.com/questions/6475524/how-do-i-prevent-commands-from-showing-up-in-bash-history">prevent them
from being saved to you bash
history</a>.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage internalcommands passwordhash <span class="s2">"secret"</span></code></pre></figure>

<p>Take the output from the above command and replace the hash below. It will write
a key-value pair in ‘extradata’ of the username ‘guacamole-service-account’ and
password for ‘VBoxAuthSimple’ to read.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage setextradata <span class="s2">"Windows 10 mail"</span> <span class="s2">"VBoxAuthSimple/users/guacamole-service-account"</span> <span class="se">\</span>
2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</code></pre></figure>

<p>Create a storage controller, a virtual system disk and add the disk to the
controller. Remember to change the path and maybe adjust the size.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage storagectl <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--name</span> <span class="s2">"SATA"</span> <span class="se">\</span>
<span class="nt">--add</span> sata
VBoxManage createhd <span class="se">\</span>
<span class="nt">--filename</span> /my/path/windows-10-mail.vdi <span class="se">\</span>
<span class="nt">--size</span> 200000
VBoxManage storageattach <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--storagectl</span> <span class="s2">"SATA"</span> <span class="se">\</span>
<span class="nt">--port</span> 0 <span class="se">\</span>
<span class="nt">--device</span> 0 <span class="se">\</span>
<span class="nt">--type</span> hdd <span class="se">\</span>
<span class="nt">--medium</span> /my/path/windows-10-mail.vdi</code></pre></figure>

<p><a href="https://www.microsoft.com/software-download/windows10ISO">Download the Windows iso from
Microsoft</a> and place
it somewhere on the host. Attach it to the VM with the following.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage storageattach <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--storagectl</span> <span class="s2">"SATA"</span> <span class="se">\</span>
<span class="nt">--port</span> 1 <span class="se">\</span>
<span class="nt">--device</span> 0 <span class="se">\</span>
<span class="nt">--type</span> dvddrive <span class="se">\</span>
<span class="nt">--medium</span> /my/path/Win10_1909_EnglishInternational_x64.iso</code></pre></figure>

<p>Also attach the VirtualBox Guest Additions ISO.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage storageattach <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--storagectl</span> <span class="s2">"SATA"</span> <span class="se">\</span>
<span class="nt">--port</span> 2 <span class="se">\</span>
<span class="nt">--device</span> 0 <span class="se">\</span>
<span class="nt">--type</span> dvddrive <span class="se">\</span>
<span class="nt">--medium</span> /usr/share/virtualbox/VBoxGuestAdditions.iso</code></pre></figure>

<p>If you are not already doing so, you’ll properly want to use ‘screen’ or ‘tmux’
for the next part as the command keeps running in the foreground and you don’t
want it to exit if you lose your ‘ssh’ connection.</p>

<p>Start the VM in the foreground, so we can see the output:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxHeadless <span class="nt">--startvm</span> <span class="s2">"Windows 10 mail"</span></code></pre></figure>

<p>If you see ‘VRDE server is listening on port 3389.’ in the output, it works as
expected.</p>

<h3 id="installing-guacamole">Installing Guacamole</h3>

<p>I run Guacamole in Docker. Refer to the <a href="https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository">Docker
documentation</a>
for an installation instruction.</p>

<p>Due to the <a href="https://issues.apache.org/jira/browse/GUACAMOLE-962">GUACAMOLE-962</a>
bug in ‘1.1.0’. I run version ‘1.0.0’. It should be fixed in the upcoming
‘1.2.0’ release.</p>

<p>Create a ‘docker-compose.yml’ file somewhere on your system containing the
following:</p>

<figure class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="na">version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">3'</span>

<span class="na">services</span><span class="pi">:</span>
<span class="na">guacamole-guacd</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s">guacamole/guacd:1.0.0</span>
<span class="na">restart</span><span class="pi">:</span> <span class="s">unless-stopped</span>

<span class="na">guacamole-db</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s">postgres:12</span>
<span class="na">env_file</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">guacamole-db.env</span>
<span class="na">restart</span><span class="pi">:</span> <span class="s">unless-stopped</span>
<span class="na">volumes</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">./10-init.sql:/docker-entrypoint-initdb.d/10-init.sql:ro</span>
<span class="pi">-</span> <span class="s">guacamole-db:/var/lib/postgresql/data:rw</span>

<span class="na">guacamole-app</span><span class="pi">:</span>
<span class="na">image</span><span class="pi">:</span> <span class="s">guacamole/guacamole:1.0.0</span>
<span class="na">environment</span><span class="pi">:</span>
<span class="na">GUACD_HOSTNAME</span><span class="pi">:</span> <span class="s">guacamole-guacd</span>
<span class="na">POSTGRES_HOSTNAME</span><span class="pi">:</span> <span class="s">guacamole-db</span>
<span class="na">env_file</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">guacamole-db.env</span>
<span class="na">depends_on</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">guacamole-guacd</span>
<span class="pi">-</span> <span class="s">guacamole-db</span>
<span class="c1"># ports:</span>
<span class="c1"># - 8080:8080</span>
<span class="na">restart</span><span class="pi">:</span> <span class="s">unless-stopped</span>

<span class="na">volumes</span><span class="pi">:</span>
<span class="na">guacamole-db</span><span class="pi">:</span></code></pre></figure>

<p>Unfortunately, the official Guacamole docker images does not support <a href="http://guacamole.apache.org/doc/gug/configuring-guacamole.html#basic-auth">Guacamoles
default
authentication</a>.
We are forced to use a database as the authentication backend. I use the
<a href="http://guacamole.apache.org/doc/gug/guacamole-docker.html#guacamole-docker-postgresql">PostgreSQL
authentication</a>.
To connect the application to the database make a ‘guacamole-db.env’ file with
the following content. You should update the password to something unique. Use
‘pwgen’ again.</p>

<figure class="highlight"><pre><code class="language-env" data-lang="env">POSTGRES_USER=guacamole_user
POSTGRES_PASSWORD=secret
POSTGRES_DATABASE=guacamole_db
POSTGRES_DB=guacamole_db</code></pre></figure>

<p>‘POSTGRES_{USER,PASSWORD,DATABASE}’ is used by the guacamole docker image.
‘POSTGRES_{USER,PASSWORD,DB}’ is used by the <a href="https://hub.docker.com/_/postgres">postgres docker
image</a>. Beware that the role defined in
‘POSTGRES_USER’ created by the postgres docker image gets the ‘SUPERUSER’ <a href="https://www.postgresql.org/docs/12/role-attributes.html">role
attribute</a>. This is a
potential security issue. The proper way to do it is to create a non-‘SUPERUSER’
role and grant it the privileges it needs.</p>

<p>The initialization of the database tables is a bit cumbersome. Unfortunately,
the Guacamole docker image does not do it by itself. You need to run the
following to get a script.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">docker run <span class="nt">--rm</span> guacamole/guacamole:1.0.0 /opt/guacamole/bin/initdb.sh <span class="nt">--postgres</span> <span class="o">&gt;</span> 10-initdb.sql</code></pre></figure>

<p>This script can then be mounted into the ‘postgres’ container.</p>

<p>You’ll likely want this behind a reverse proxy. Refer to the <a href="https://guacamole.apache.org/doc/gug/proxying-guacamole.html">Proxying
Guacamole</a> section
in the Guacamole documentation. I use <a href="https://traefik.io/">Traefik</a>. You can
also uncomment ‘ports: - 8080:8080’ in ‘docker-compose.yml’ to bind it to port
8080 of the host.</p>

<p>When you have the parts in place, you can run</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">docker-compose up <span class="nt">-d</span></code></pre></figure>

<p>to start the services.</p>

<p>You should not be able to reach Guacamole at
‘http:<ip-of-your-server>:8080/guacamole' (depending on your reverse proxy
setup) and login with 'guacadmin:guacadmin'. See [Verifying the Guacamole
install(https://guacamole.apache.org/doc/gug/guacamole-docker.html#verifying-guacamole-docker).</ip-of-your-server></p>

<p>You should then change the password.</p>

<h3 id="connecting-guacamole-to-virtualbox">Connecting Guacamole to VirtualBox</h3>

<p>In the Guacamole web UI, navigate to ‘Settings’ -&gt; ‘Connections’ and press the
‘New connection’-button. Add a name like “Windows 10 mail VirtualBox”. Change
the protocol to ‘RDP’.</p>

<p>Fill out the following fields under ‘PARAMETERS’:</p>

<ul>
  <li>Network</li>
  <li>Hostname: the IP-address of your host machine where VirtualBox runs in the
‘Hostname’-field. (You cannot put ‘localhost’ here as it refers to the
‘guacd’-container.)</li>
  <li>Port: ‘3389’</li>
  <li>Authentication</li>
  <li>Username: ‘guacamole-service-account’</li>
  <li>Password: The password you put into ‘VBoxManage internalcommands
passwordhash’ above.</li>
</ul>

<p>Save the connection. Return to the Guacamole home screen and press the new
connection. The Windows installation should now appear on the screen.</p>

<h3 id="install-windows">Install Windows</h3>

<p>Complete the Windows installation. In this stage my mouse was not aligned
properly. You can use the keyboard or just keep an eye on the “Windows mouse”.</p>

<p>When you are done with the installation, open the disk drive containing the
VirtualBox Guest Additions. Install it and reboot. The mouse should now align properly.</p>

<h3 id="optional-connecting-guacamole-to-windows-directly">Optional: Connecting Guacamole to Windows directly</h3>

<p>While using the RDP from VitualBox works, you’ll have a better experience by
connecting from Guacamole to the Windows RDP server directly. The Windows RDP
server is only in Windows 10 Pro, not in Windows 10 Home.</p>

<p>First make sure the user account have a password set.
Second you’ll properly want to make sure the Windows VM have a static IP-address.</p>

<p>Third go to Settings-&gt;System-&gt;Remote Desktop and Enable Remote Desktop.</p>

<p>In Guacamole add a second connection. Add a name like “Windows 10 mail Windows”. Change
the protocol to ‘RDP’.</p>

<p>Fill out the following fields under ‘PARAMETERS’:</p>

<ul>
  <li>Network</li>
  <li>Hostname: the IP-address of the Windows VM</li>
  <li>Port: ‘3389’</li>
  <li>Authentication</li>
  <li>Username: Name of your Windows account</li>
  <li>Password: The password of your Windows account</li>
  <li>Security mode: ‘NLA’</li>
  <li>Ignore server certificate: Checked</li>
</ul>

<p>Save the connection. Return to the Guacamole home screen and press the new
connection. This connection should be faster and stretch to fill the whole
window.</p>

<h3 id="clean-up">Clean up</h3>

<p>Finally, there are some clean up needed.</p>

<p>Start by shutting down the Windows machine. The ‘VBoxHeadless’ should now exit
in the terminal.</p>

<p>Remove the Windows install ISO and the VirtualBox Guest Additions ISO.</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage storageattach <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--storagectl</span> <span class="s2">"SATA"</span> <span class="se">\</span>
<span class="nt">--port</span> 1 <span class="se">\</span>
<span class="nt">--device</span> 0 <span class="se">\</span>
<span class="nt">--medium</span> none
VBoxManage storageattach <span class="s2">"Windows 10 mail"</span> <span class="se">\</span>
<span class="nt">--storagectl</span> <span class="s2">"SATA"</span> <span class="se">\</span>
<span class="nt">--port</span> 2 <span class="se">\</span>
<span class="nt">--device</span> 0 <span class="se">\</span>
<span class="nt">--medium</span> none</code></pre></figure>

<p>At last start the VM in the background this time:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">VBoxManage startvm <span class="s2">"Windows 10 mail"</span> <span class="nt">--type</span> headless</code></pre></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[I had need for a Windows installation to process some old Outlook mail archives. The archive is quite large, so instead of moving the archives to a VM on my laptop, I decided to create a Windows 10 VM on the Ubuntu 18.04 server where the archives reside. I wanted to try to install the machine headless to VirtualBox and setup Guacamole to access it over a web server. This is the first time I have installed an OS that require a GUI installation process to VirtualBox without having direct access to the VirtualBox GUI.]]></summary></entry><entry><title type="html">XeLaTeX with microtype on TeX-Live 2012</title><link href="https://neic.dk/2012/09/03/XeLaTeX-with-microtype-on-TeX-Live-2012.html" rel="alternate" type="text/html" title="XeLaTeX with microtype on TeX-Live 2012" /><published>2012-09-03T00:00:00+00:00</published><updated>2012-09-03T00:00:00+00:00</updated><id>https://neic.dk/2012/09/03/XeLaTeX-with-microtype-on-TeX-Live-2012</id><content type="html" xml:base="https://neic.dk/2012/09/03/XeLaTeX-with-microtype-on-TeX-Live-2012.html"><![CDATA[<p>The current stable version, and the version shipped with TeX Live 2012, of the microtype package is 2.4. It is not compatible with XeLaTeX. To get it working with XeLaTeX toy need the latest beta version (as of writing version 2.5 (beta-08)). It is possible to obtain it from <a href="http://tlcontrib.metatex.org/cgi-bin/package.cgi/action=view/id=608">tlcontrib</a>.</p>

<p>After downloading the package and extracting it (<code class="language-plaintext highlighter-rouge">tar xvf microtype.tar.xz</code>) you need copy it to your TeX Live installation.</p>

<p>Instead of overwriting the current package in <code class="language-plaintext highlighter-rouge">texlive/2012/texmf-dist/</code> it is better to place it in its proper place at <code class="language-plaintext highlighter-rouge">texlive/texmf-local/</code>. That way when you update TeX Live it will not be overwritten.</p>

<p>After copying the package you need to run <code class="language-plaintext highlighter-rouge">texhash</code> to make TeX Live aware of it.</p>

<p>Now you should have microtype working with XeLaTeX.</p>

<p>This should also work with older versions of TeX Live, but I have not tested it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[The current stable version, and the version shipped with TeX Live 2012, of the microtype package is 2.4. It is not compatible with XeLaTeX. To get it working with XeLaTeX toy need the latest beta version (as of writing version 2.5 (beta-08)). It is possible to obtain it from tlcontrib.]]></summary></entry><entry><title type="html">Add terminfo entries on Linux</title><link href="https://neic.dk/2011/11/08/Add-terminfo-entries-on-Linux.html" rel="alternate" type="text/html" title="Add terminfo entries on Linux" /><published>2011-11-08T00:00:00+00:00</published><updated>2011-11-08T00:00:00+00:00</updated><id>https://neic.dk/2011/11/08/Add-terminfo-entries-on-Linux</id><content type="html" xml:base="https://neic.dk/2011/11/08/Add-terminfo-entries-on-Linux.html"><![CDATA[<p>I did SSH into my server running Ubuntu 10.10 from my laptop running Arch Linux with a rxvt-unicode terminal and received the following error when I tried to run <code class="language-plaintext highlighter-rouge">screen</code>: <code class="language-plaintext highlighter-rouge">Cannot find terminfo entry for 'rxvt-unicode-256color'.</code> or when i tried to do a <code class="language-plaintext highlighter-rouge">clear</code>: <code class="language-plaintext highlighter-rouge">'rxvt-unicode-256color': unknown terminal type.</code></p>

<p>To add the terminfo entry you can take the the terminfo from rxvt-unicode and add it to a file:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">   infocmp <span class="nt">-L</span> rxvt-unicode <span class="o">&gt;</span> rxvt-unicode-256color.terminfo</code></pre></figure>

<p>Change the following two lines in the <code class="language-plaintext highlighter-rouge">rxvt-unicode-256color.terminfo</code> file</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">    rxvt-unicode|rxvt-unicode terminal <span class="o">(</span>X Window System<span class="o">)</span>,
    <span class="o">[</span>...]
    lines_of_memory#0, max_colors#88, max_pairs#256,</code></pre></figure>

<p>to</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">    rxvt-unicode-256colors|rxvt-unicode terminal <span class="o">(</span>X Window System<span class="o">)</span>,
    <span class="o">[</span>...]
    lines_of_memory#0, max_colors#256, max_pairs#32767,</code></pre></figure>

<p>create a directory to hold your custom terminfo entries:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">   <span class="nb">mkdir</span> ~/.terminfo</code></pre></figure>

<p>build the terminfo entry:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">   tic <span class="nt">-o</span> ~/.terminfo/ rxvt-unicode-256color.terminfo</code></pre></figure>

<p>and finally cleanup:</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">   <span class="nb">rm </span>rxvt-unicode-256color.terminfo</code></pre></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[I did SSH into my server running Ubuntu 10.10 from my laptop running Arch Linux with a rxvt-unicode terminal and received the following error when I tried to run screen: Cannot find terminfo entry for 'rxvt-unicode-256color'. or when i tried to do a clear: 'rxvt-unicode-256color': unknown terminal type.]]></summary></entry><entry><title type="html">Hello World</title><link href="https://neic.dk/2010/12/22/Hello-world.html" rel="alternate" type="text/html" title="Hello World" /><published>2010-12-22T00:00:00+00:00</published><updated>2010-12-22T00:00:00+00:00</updated><id>https://neic.dk/2010/12/22/Hello-world</id><content type="html" xml:base="https://neic.dk/2010/12/22/Hello-world.html"><![CDATA[<p>My site is online. The site is firts and foremost set up so i can learn web coding and design. I will properly share some thoughts about, Linux, open source software, graphic design, photograpy, GIS and outdoor life.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[My site is online. The site is firts and foremost set up so i can learn web coding and design. I will properly share some thoughts about, Linux, open source software, graphic design, photograpy, GIS and outdoor life.]]></summary></entry></feed>