<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technology &#8211; Tomas&#039; log of stuff</title>
	<atom:link href="https://blog.fjetland.com/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.fjetland.com</link>
	<description>Notes from the sysadmin trenches, on hobby photography, and anything else that comes to mind</description>
	<lastBuildDate>Thu, 29 Jan 2026 22:16:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Migrating My Digital Life Away From American Tech. Part 2 &#8211; The Rules</title>
		<link>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-2-the-rules/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migrating-my-digital-life-away-from-american-tech-part-2-the-rules</link>
					<comments>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-2-the-rules/#comments</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Thu, 29 Jan 2026 22:07:04 +0000</pubDate>
				<category><![CDATA[Internet Services]]></category>
		<guid isPermaLink="false">https://blog.fjetland.com/?p=1584</guid>

					<description><![CDATA[What Counts as “American” in a Global Internet? After deciding to move away from US-based services, a problem becomes apparent: the internet doesn’t divide neatly along national lines. Ownership, hosting, infrastructure, and governance rarely&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="576" src="https://blog.fjetland.com/wp-content/uploads/2026/01/Part2_DefiningTheRules1920-1024x576.jpg" alt="" class="wp-image-1588" srcset="https://blog.fjetland.com/wp-content/uploads/2026/01/Part2_DefiningTheRules1920-1024x576.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2026/01/Part2_DefiningTheRules1920-300x169.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2026/01/Part2_DefiningTheRules1920-768x432.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2026/01/Part2_DefiningTheRules1920-1536x864.jpg 1536w, https://blog.fjetland.com/wp-content/uploads/2026/01/Part2_DefiningTheRules1920.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">What Counts as “American” in a Global Internet?</h2>



<p>After <a href="https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-1-the-why/">deciding to move away from US-based services</a>, a problem becomes apparent: the internet doesn’t divide neatly along national lines.</p>



<p>Ownership, hosting, infrastructure, and governance rarely live in the same place. A service can look European, be American in ownership, and global in infrastructure, while still being subject to US law.</p>



<p>So before replacing anything, I needed a simple way to decide what actually matters to me.</p>



<p>What counts isn’t branding or geography. It’s control.</p>



<p>Who owns the company? Which laws apply? Where the data is hosted. How hard it is to leave?</p>



<p>That’s where risk comes from.</p>



<p>One distinction I think is too often ignored is the difference between&nbsp;<strong>hosted services and local software</strong>.</p>



<p>Hosted services store data on their own servers and operate under their own legal jurisdiction. Email providers, cloud platforms, SaaS tools, and social networks create direct jurisdictional exposure because your data lives inside someone else’s legal system.</p>



<p>Local software runs on your own devices and stores data locally, or only on services you explicitly choose. In those cases, the software provider doesn’t control the data; you do. Jurisdiction is defined by where you host, not who wrote the code.</p>



<p>That difference keeps the focus on where risk actually lives.</p>



<h2 class="wp-block-heading">Risk Assessment Map</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><th>Factor</th><th>Low Risk</th><th>Medium Risk</th><th>High Risk</th></tr><tr><td>Ownership</td><td>EU-owned</td><td>Mixed ownership</td><td>US-owned</td></tr><tr><td>Jurisdiction</td><td>EU law</td><td>Mixed / multiple</td><td>US law</td></tr><tr><td>Infrastructure</td><td>EU-hosted</td><td>Hybrid hosting</td><td>US-hosted</td></tr><tr><td>Dependency</td><td>Open standards, portable, federated</td><td>Partial lock-in</td><td>Closed ecosystem, strong lock-in</td></tr></tbody></table></figure>



<p>I&#8217;m not trying to achieve some sort of privacy nirvana. The goal here is&nbsp;<strong>risk reduction</strong>.</p>



<p>The point of laying down some rules around this is to be deliberate about how I identify what should be migrated. Convenience creeps back in, and decisions drift back to habit instead of intent.</p>



<p>A simple framework creates consistency. It turns unease into structure.</p>



<p>The goal isn’t isolation or ideological separation. It’s diversification, resilience, and control — avoiding single points of legal, political, and infrastructural failure.</p>



<p>In the next post, I’ll start the audit and try to map out my current digital services and identify which of these risks apply to them and see what I can do about it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-2-the-rules/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Migrating My Digital Life Away From American Tech. Part 1 &#8211; The why</title>
		<link>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-1-the-why/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migrating-my-digital-life-away-from-american-tech-part-1-the-why</link>
					<comments>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-1-the-why/#comments</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Sun, 25 Jan 2026 00:44:31 +0000</pubDate>
				<category><![CDATA[Internet Services]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[services]]></category>
		<guid isPermaLink="false">https://blog.fjetland.com/?p=1571</guid>

					<description><![CDATA[The why This project didn’t start as a technical experiment. It started as a gradual loss of trust. For too long, I tolerated the current realities of modern digital life, such as the idea&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-1024x576.jpg" alt="Migrating from american services part 1 header" class="wp-image-1572" srcset="https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-1024x576.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-300x169.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-768x432.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-1536x864.jpg 1536w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h1 class="wp-block-heading">The why</h1>



<p>This project didn’t start as a technical experiment. It started as a gradual loss of trust.</p>



<p>For too long, I tolerated the current realities of modern digital life, such as the idea that big platforms were unavoidable. I hoped that regulation would improve over time, and that privacy violations would eventually be constrained by oversight and law, and if not, that consumers would get fed up and move to alternative solutions. The problems were obvious, such as surveillance capitalism, data extraction, and platform monopolies, but they felt distant and abstract, more theoretical than personal.</p>



<p>That changed.</p>



<p>Not because of one scandal or one breach, but because of a pattern: repeated violations, symbolic fines, and no meaningful structural change. The same companies collect the data, control the infrastructure, shape the standards, and influence the regulations meant to constrain them. At some point, convenience stopped feeling neutral and started feeling like dependency.</p>



<p>It also became impossible to ignore the political layer.</p>



<p>American tech companies operate inside American law, American surveillance frameworks, and American political power structures. Oversight is weak. Enforcement is inconsistent. Lobbying power is massive. Privacy protections exist, but they are fragile and easily subordinated to national security and political priorities.</p>



<p>Recently, this stopped being abstract for me.</p>



<p>When the US president publicly dismisses democratic principles, mocks European countries, portrays them as adversaries, and frames allies as enemies, as he recently did during the World Economic Forum in Davos, that rhetoric becomes a risk factor when your data, identity, communication, and work are hosted inside that jurisdiction.</p>



<p>This is a structural problem; because data lives in legal systems, infrastructure, and jurisdiction.</p>



<p>Where your data lives determines which laws apply, who can access it, who can compel disclosure, what rights you actually have, and what recourse exists.</p>



<p>For Europeans, this has already been tested.</p>



<p>The <a href="https://en.wikipedia.org/wiki/International_Safe_Harbor_Privacy_Principles" target="_blank" rel="noopener">Safe Harbour</a> agreement failed.<br>The <a href="https://en.wikipedia.org/wiki/EU%E2%80%93US_Privacy_Shield" target="_blank" rel="noopener">Privacy Shield </a>agreement failed.</p>



<p>Both were political compromises that promised protection while leaving US surveillance law untouched.</p>



<p>The <a href="https://en.wikipedia.org/wiki/CLOUD_Act" target="_blank" rel="noopener">CLOUD Act</a> made the reality explicit: US companies can be compelled to provide access to data regardless of where it is physically stored.</p>



<p>And the <a href="https://en.wikipedia.org/wiki/Max_Schrems" target="_blank" rel="noopener">Schrems I</a> and <a href="https://en.wikipedia.org/wiki/Schrems_II" target="_blank" rel="noopener">Schrems II</a> rulings confirmed what many suspected — that high-level agreements between the EU and the US are not sufficient to protect European citizens’ data when the underlying legal systems are incompatible.</p>



<p>In other words, diplomatic agreements don’t override legal architecture.</p>



<p>It also isn’t abstract.</p>



<p>Over time, I&#8217;ve realised how much of my life is effectively hosted by a foreign jurisdiction.</p>



<p>My communication.<br>My identity.<br>My files.<br>My work.<br>My memories.</p>



<p>All dependent on companies I can’t vote for, governments I can’t influence, and legal systems where I have limited standing.</p>



<p>That’s not paranoia. It’s infrastructure.</p>



<p>Most large platforms are not neutral services. They are extraction systems. Data is the product. Behaviour is the product. Prediction is the product. Privacy violations aren’t accidents; they are business logic.</p>



<p>This series isn’t about purity or total disconnection. It’s not about digital isolation or ideological statements.</p>



<p>It’s about reducing structural risk, limiting jurisdictional exposure, breaking dependency, diversifying infrastructure, and regaining control.</p>



<p>Over the following posts, I’ll try to document the process of auditing my digital life, identifying jurisdictional risks, migrating services, replacing platforms, and accepting the trade-offs that come with that.</p>



<p>I&#8217;m not really writing this series as a guide for others, but mostly as a log for myself, and hopefully someone else can find it useful. If not, at least I have somewhere to point to when someone asks, &#8220;Why the heck are you putting yourself through all this hassle!?&#8221; <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>An honest record of what it actually takes to reclaim some digital autonomy and what it costs in convenience to do it, if you will.</p>



<p>Phew, let&#8217;s get on with it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-1-the-why/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Migrating My Digital Life Away From American Tech. Introduction</title>
		<link>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-introduction/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migrating-my-digital-life-away-from-american-tech-introduction</link>
					<comments>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-introduction/#respond</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 20:44:02 +0000</pubDate>
				<category><![CDATA[Internet Services]]></category>
		<guid isPermaLink="false">https://blog.fjetland.com/?p=1581</guid>

					<description><![CDATA[Series Introduction This blog series will document my attempt to migrate as much as practically possible of my digital life away from services owned by American companies or governed by US jurisdiction. It’s a&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Series Introduction</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-1024x576.jpg" alt="Migrating from american services part 1 header" class="wp-image-1572" srcset="https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-1024x576.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-300x169.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-768x432.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header-1536x864.jpg 1536w, https://blog.fjetland.com/wp-content/uploads/2026/01/migration1header.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>This blog series will document my attempt to migrate as much as practically possible of my digital life away from services owned by American companies or governed by US jurisdiction. It’s a record about trust, data safety, legal exposure, and long-term digital risk. I’m writing this as a practical, personal record of what it actually takes to reduce dependency on US tech infrastructure as a European citizen.</p>



<ol class="wp-block-list">
<li><a href="https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-1-the-why/" data-type="link" data-id="https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-1-the-why/">The Why</a></li>



<li><a href="https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-part-2-the-rules/">The Rules</a></li>



<li></li>
</ol>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2026/01/migrating-my-digital-life-away-from-american-tech-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Finally rid of Network Solutions</title>
		<link>https://blog.fjetland.com/2023/07/finally-rid-of-network-solutions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=finally-rid-of-network-solutions</link>
					<comments>https://blog.fjetland.com/2023/07/finally-rid-of-network-solutions/#comments</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Sun, 16 Jul 2023 01:57:15 +0000</pubDate>
				<category><![CDATA[Internet Services]]></category>
		<category><![CDATA[system administration]]></category>
		<guid isPermaLink="false">https://blog.fjetland.com/?p=1506</guid>

					<description><![CDATA[After 26 years of being a customer without any major issues other than being overcharged, it's odd that the end of my customer relationship comes with such a strong sense of relief and freedom. ]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://blog.fjetland.com/wp-content/uploads/2023/07/proalias_chased_by_the_internet._restrained_by_network_cables_f_8b3f5d9f-319d-49ae-8f60-d6a31922bc97.png" alt="" class="wp-image-1507"/></figure>



<p>After 26 years of being a customer without any major issues other than being overcharged, it&#8217;s odd that the end of my customer relationship comes with such a strong sense of relief and freedom. </p>



<p>I registered my first domain (this one) in 1997 and my second one only shortly after. At the time, there weren&#8217;t a lot of options around. Actually, the only option for most was the semi-official <a href="https://en.wikipedia.org/wiki/InterNIC" target="_blank" rel="noreferrer noopener">Internic</a>. Since then, of course, there&#8217;s been many and different kinds of revisions to how domain name assignments have been handled. Internic itself was replaced, and the domain registration was contracted to <a href="https://en.wikipedia.org/wiki/Network_Solutions" target="_blank" rel="noreferrer noopener">Network Solutions</a>, and later to a myriad of different registrars. Through all these changes, I decided to just stay with Network Solutions simply because I viewed it as trustworthy and reliable, while I heard lots of stories, including of losing their domains from friends. This was despite the fact that I knew I was increasingly paying a higher premium for this basic service.</p>



<h2 class="wp-block-heading">An unwelcome gift</h2>



<p>Fast forward to June 2022, and while I&#8217;m off travelling, Network Solutions sends me a mail. They&#8217;ve decided to give me a glorious gift. A domain loosely similar to my primary domain, using an obscure and presumably cheap TLD. Hidden far down in the message, they note that if I don&#8217;t want this domain that I didn&#8217;t request, I would have to let them know within 7 days. It was summer, I was travelling and only skimmed through my mail. This was around the time of renewal for my other domains, which I had already paid for, but they were still spamming me about, so I assumed it was related to these.</p>



<p>Shortly after, this new domain showed up in my account. I got annoyed. No, I got angry. A domain isn&#8217;t just any product; this isn&#8217;t like giving you a free tube of toothpaste on the way out of the store. A domain is something that comes with possible implications both in association if people look at which domains are registered to you, but more dangerously, a domain can land you in trademark and copyright disputes. So simply automatically attaching a domain to you with a shrouded opt-out possibility is dodgy. Heck, I&#8217;d say it&#8217;s pretty close to a scam. After all, the obvious motivation for this is to hope you don&#8217;t pay attention and automatically renew it once the first year has passed.</p>



<h2 class="wp-block-heading">The escape</h2>



<p>Any remaining trust in Network Solutions was immediately lost. I started looking for a better and cheaper registrar. That wasn&#8217;t hard, and I immediately proceeded to move my two domains to the new provider. As a bonus, I got access to a number of innovative and useful features. For free.</p>



<p>Next, I contacted Network Solutions to cancel my account, including the unwanted domain. Then things got really bad. And Network Solutions turned me from a customer who was annoyed and moved away but could possibly come back if the situation changed to someone that was so fed up and genuinely disgusted with them that I will never consider coming back. Or use them in any professional capacity where I have a say.</p>



<p>First of all, dealing with Network Solutions customer care is not easy. They really want you to call them on the phone (I&#8217;m not paying for transatlantic calls for support) but reluctantly offer a chat service with significant limitations. I get through on chat and tell them I want the domain deleted and my account closed.</p>



<h2 class="wp-block-heading">The empire strikes back</h2>



<p>They&#8217;re sorry, but they can&#8217;t delete a domain registered to me; I&#8217;ll have to let it expire. WTH&#8230; OK, at least remove my credit card info, so I don&#8217;t get charged with renewal by &#8220;accident&#8221;, then. They&#8217;re sorry, but they can&#8217;t remove the last method of payment from an account with an active product. Well, at least I get them to remove all sorts of renewal and automatic functions. Then I have to wait&#8230; for nearly a year&#8230;</p>



<p>As soon as the domain expires, I&#8217;m back with chat to have the domain deleted from my account. The chat agents don&#8217;t have permission for this, so they have to refer it to &#8220;admins&#8221;, and I need to send a confirmation reply to an e-mail. The mail reply-to is to the wrong address. I only notice by chance.</p>



<p>Finally, the domain is gone; I log in and can delete my credit card info. Then contact them again to have the account deleted. I don&#8217;t want unused accounts hanging around; they&#8217;re a security risk. No, they can&#8217;t do that. I have to call (on the phone, transatlantic) their customer loyalty team for this. I explain how this is unacceptable. Then they suddenly come up with a URL to a support site while stressing that this is ONLY to be used by non-US customers. I file a ticket.</p>



<p>Someone gets back to me and tells me they can&#8217;t delete the account. It will be deleted automatically after &#8220;a period of inactivity&#8221;. They can&#8217;t tell me what the period is. They can&#8217;t tell me if trying to log in to see if it has been deleted will count as activity and resetting the countdown to the unknown time.</p>



<p>And so I&#8217;ve decided to leave it there. But I&#8217;m so pissed off. It&#8217;s quite amazing how easily a company managed to turn me from an indifferent, overpaying, loyal customer for nearly 30 years to a <em>very </em>annoyed ex-customer with a strong feeling of having been exploited and attempted scammed.</p>



<p>Good riddance!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2023/07/finally-rid-of-network-solutions/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Nesting level error in containerized Nextcloud &#8211; Fix Circles</title>
		<link>https://blog.fjetland.com/2023/01/nesting-level-error-in-containerized-nextcloud-disable-circles/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nesting-level-error-in-containerized-nextcloud-disable-circles</link>
					<comments>https://blog.fjetland.com/2023/01/nesting-level-error-in-containerized-nextcloud-disable-circles/#respond</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Sun, 22 Jan 2023 22:32:04 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Containers]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[nextcloud]]></category>
		<guid isPermaLink="false">https://blog.fjetland.com/?p=1485</guid>

					<description><![CDATA[One of the first apps I set up on my Photon Docker host was Nextcloud. It&#8217;s an excellent solution for synchronizing and sharing files and comes as an official docker image. However, since I&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.fjetland.com/wp-content/uploads/2023/01/ProAlias_enable_circles_7d2f049d-337a-469c-b56c-8be372f9f80e-gigapixel-art-scale-4_00x.jpg" alt="Circles illustration generated by MidJourney" class="wp-image-1486" width="1024" height="1024"/><figcaption class="wp-element-caption">Circles illustration generated by MidJourney</figcaption></figure>



<p>One of the first apps I set up on my <a href="https://blog.fjetland.com/2022/05/setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7/">Photon Docker host</a> was <a href="https://nextcloud.com/" target="_blank" rel="noopener">Nextcloud</a>. It&#8217;s an excellent solution for synchronizing and sharing files and comes as an official docker image. However, since I first set it up, I&#8217;ve been troubled that the clients start getting disconnected from the server after a short while (hours, a couple of days). The web UI works fine, but the clients on desktop and mobile show up grey with a 500 error.</p>



<p>Checking the logs on the container, I get something like this:</p>



<pre class="wp-block-code"><code>PHP Fatal error: Nesting level too deep - recursive dependency? in /var/www/html/lib/private/Log/ExceptionSerializer.php on line 215</code></pre>



<p>Unfortunately, even after several new builds, this error seems to persist, so I guess I&#8217;ll record the workaround here, so I know how to reapply it if it&#8217;s overwritten in the future.</p>



<p>I&#8217;ll probably do this from within Portainer. If so, change the command to open the console to </p>



<pre class="wp-block-code"><code>/bin/bash -u 33</code></pre>



<p>Then run this as a workaround in Circles:</p>



<pre class="wp-block-code"><code>./occ config:app:set circles route_to_circle --value ''</code></pre>



<p>Then if needed, enable Circles again</p>



<pre class="wp-block-code"><code>./occ app:enable circles</code></pre>



<p>This seems to have fixed the problem for me. At least it&#8217;s been working so far.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2023/01/nesting-level-error-in-containerized-nextcloud-disable-circles/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Connecting VS Code directly to Photon OS 4</title>
		<link>https://blog.fjetland.com/2022/06/connecting-vs-code-directly-to-photon-os-4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=connecting-vs-code-directly-to-photon-os-4</link>
					<comments>https://blog.fjetland.com/2022/06/connecting-vs-code-directly-to-photon-os-4/#respond</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Wed, 15 Jun 2022 19:05:52 +0000</pubDate>
				<category><![CDATA[Containers]]></category>
		<category><![CDATA[Windows Software]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[photon os]]></category>
		<category><![CDATA[system administration]]></category>
		<category><![CDATA[vs code]]></category>
		<guid isPermaLink="false">http://blog.fjetland.com/?p=1441</guid>

					<description><![CDATA[Tweaking Photon OS to allow VS Code to connect to it over ssh]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="536" src="http://blog.fjetland.com/wp-content/uploads/2022/06/vscode-1024x536.png" alt="" class="wp-image-1442" srcset="https://blog.fjetland.com/wp-content/uploads/2022/06/vscode-1024x536.png 1024w, https://blog.fjetland.com/wp-content/uploads/2022/06/vscode-300x157.png 300w, https://blog.fjetland.com/wp-content/uploads/2022/06/vscode-768x402.png 768w, https://blog.fjetland.com/wp-content/uploads/2022/06/vscode.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>This is just a quick update to <a href="http://blog.fjetland.com/2022/05/setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7/" data-type="post" data-id="1401">my setting up Photon OS as a docker host</a> post. I use <a href="https://code.visualstudio.com/" data-type="URL" data-id="https://code.visualstudio.com/" target="_blank" rel="noopener">VS Code</a> to both (try to) write code and edit configuration files, such as YAML files for Docker Compose. So to make configuring containers faster and easier, I&#8217;d like to be able to edit the files directly on the Photon VM using VS Code with the <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack" target="_blank" rel="noopener">Remote Development pack</a> on my desktop.</p>



<p>To do this, VS Code wants to deploy a small component on the destination server, and that doesn&#8217;t run entirely smoothly on Photon OS minimal out of the box due to its small footprint. So here&#8217;s what I need to adjust.</p>



<p>First, it needs tar to untar the addon, so</p>



<pre class="wp-block-code"><code>tdnf -y install tar</code></pre>



<p>Next, the sshd demon needs to allow TCP forwarding, which it doesn&#8217;t out of the box.</p>



<pre class="wp-block-code"><code>sed -i "s/AllowTcpForwarding no/AllowTcpForwarding yes/g" /etc/ssh/sshd_config</code></pre>



<p>Then restart the sshd, and we&#8217;re good to go!</p>



<pre class="wp-block-code"><code>systemctl restart sshd</code></pre>



<p>And then VS Code is ready to connect straight to the Photon OS VM! If you remembered to install the extensions, obviously&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2022/06/connecting-vs-code-directly-to-photon-os-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Adding easy container management to Photon OS with Portainer</title>
		<link>https://blog.fjetland.com/2022/05/adding-easy-container-management-to-photon-os-with-portainer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adding-easy-container-management-to-photon-os-with-portainer</link>
					<comments>https://blog.fjetland.com/2022/05/adding-easy-container-management-to-photon-os-with-portainer/#comments</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Thu, 26 May 2022 23:46:14 +0000</pubDate>
				<category><![CDATA[Containers]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker compose]]></category>
		<category><![CDATA[photon os]]></category>
		<category><![CDATA[portainer]]></category>
		<category><![CDATA[system administration]]></category>
		<guid isPermaLink="false">http://blog.fjetland.com/?p=1424</guid>

					<description><![CDATA[Configuring Portainer Community Edition on a newly set up Photon OS install with configuration data stored on an NFS share]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image is-style-default">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="536" src="http://blog.fjetland.com/wp-content/uploads/2022/05/Portainer_Illustrations_Crane20-20Hero20copy1-1024x536.png" alt="" class="wp-image-1431" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/Portainer_Illustrations_Crane20-20Hero20copy1-1024x536.png 1024w, https://blog.fjetland.com/wp-content/uploads/2022/05/Portainer_Illustrations_Crane20-20Hero20copy1-300x157.png 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/Portainer_Illustrations_Crane20-20Hero20copy1-768x402.png 768w, https://blog.fjetland.com/wp-content/uploads/2022/05/Portainer_Illustrations_Crane20-20Hero20copy1.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>This is a follow-up to <a href="http://blog.fjetland.com/2022/05/setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7/" data-type="post" data-id="1401">my post</a> on setting up Photon OS on vSphere as a lightweight VM to run containers on. By the end of that post, I have the OS up and running with Docker Engine in place and enabled. This post will add simple, graphical container management to the host through <a href="https://www.portainer.io/" target="_blank" rel="noopener">Portainer</a>.</p>



<p>You might ask, &#8220;Isn&#8217;t the point of containerized workloads, infrastructure as code, etc., that you can use the command line to manage your workloads?&#8221;. And you might be right. But right now, I&#8217;m not building dev environments; I&#8217;m bringing up relatively static components, prepackaged containers, that will deliver some sort of service in my network. And I won&#8217;t be deploying, destroying and redeploying these daily. And since my memory has always been terrible, and I have more than enough I need to remember from my actual work, I&#8217;d have to be looking up these things all the time. So sometimes, a friendly, intuitive GUI is just a better option. The nice thing here, of course, is that I can still do both, choosing whatever works best for me at any given time.</p>



<p>Portainer comes in two different flavours, the free <a href="https://hub.docker.com/r/portainer/portainer-ce" target="_blank" rel="noopener">Community Edition</a>, and the commercial <a href="https://hub.docker.com/r/portainer/portainer-ee" target="_blank" rel="noopener">Business Edition</a>. The Business Edition is available for <a href="https://www.portainer.io/pricing/take5" target="_blank" rel="noopener">free for fewer than 5 nodes</a>; for now, I&#8217;m installing Community Edition, but I might look at the BE too eventually.</p>



<p>Because I want the host VM to be &#8220;disposable&#8221; so I can rebuild it and the contents for whatever reason, I needed somewhere to put the persistent data of the containers, including the Portainer management container. So I made an NFS share on my NAS called conda because it&#8217;s for container data, but I&#8217;m too lazy to type it out.</p>



<p>Since the minimal install of Photon OS that you get when deploying the OVA doesn&#8217;t include the nfs-utils package that I need to mount the share, the first step is to install that using tdnf:</p>



<pre class="wp-block-code"><code>tdnf install nfs-utils</code></pre>



<p>With that done, I can make somewhere to mount the NFS share; mkdir<em>/var/conda</em> ought to do the trick. If my NAS has IP 198.51.0.10, this will accomplish what I want:</p>



<pre class="wp-block-code"><code>mount -t nfs 198.51.0.10:/conda /var/conda</code></pre>



<p>Now we have somewhere persistent to store the configuration or user data of the containers, it&#8217;s time to deploy Portainer. </p>



<pre class="wp-block-code"><code>docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/conda/portainer_data:/data portainer/portainer-ce:latest</code></pre>



<p>This will pull the latest community edition of Portainer, and store the config data in /portainer_data on my NAS share, mounted in /var/conda on the VM. Once done, it should be accessible on port 9443 on the IP I assigned to the Photon OS instance. Set a password, and you&#8217;re up and running:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="381" src="http://blog.fjetland.com/wp-content/uploads/2022/05/image-3-1024x381.png" alt="" class="wp-image-1427" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/image-3-1024x381.png 1024w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-3-300x112.png 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-3-768x286.png 768w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-3.png 1466w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>The home screen of my fresh Portainer install</figcaption></figure>



<p>From here, you can deploy and manage both single containers, and you can do Docker Compose installs using what Portainer calls stacks. I&#8217;m not going to do an in-depth discussion on Portainer features, mainly since I just started using it, but <a href="https://www.youtube.com/c/PortainerIO/videos" target="_blank" rel="noopener">their Youtube channel</a> is an excellent source of info. Once I have stuff to discuss, I might do another post.</p>



<p>I&#8217;d like to highlight the Stacks feature, which is basically a UI for Docker Compose, where you can type your YAML right in their web editor, upload it as a file, or connect to a repository.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="http://blog.fjetland.com/wp-content/uploads/2022/05/image-4-1024x1024.png" alt="" class="wp-image-1430" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/image-4-1024x1024.png 1024w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-4-300x300.png 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-4-150x150.png 150w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-4-768x769.png 768w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-4-80x80.png 80w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-4-320x320.png 320w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-4.png 1244w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>The Stacks feature of Portainer</figcaption></figure>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2022/05/adding-easy-container-management-to-photon-os-with-portainer/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Setting up Photon OS 4 as a docker host vm on vSphere 7</title>
		<link>https://blog.fjetland.com/2022/05/setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7</link>
					<comments>https://blog.fjetland.com/2022/05/setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7/#comments</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Fri, 20 May 2022 18:21:17 +0000</pubDate>
				<category><![CDATA[Containers]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[system administration]]></category>
		<category><![CDATA[virtualisation]]></category>
		<category><![CDATA[vpshere]]></category>
		<guid isPermaLink="false">http://blog.fjetland.com/?p=1401</guid>

					<description><![CDATA[Simple walkthrough on getting up and running with Photon OS 4 as a host VM on VMware vSphere 7 to run Docker containers]]></description>
										<content:encoded><![CDATA[
<p>So I needed to set up a <a href="https://www.docker.com/" target="_blank" rel="noopener">Docker</a> environment. The background is explained in <a href="http://blog.fjetland.com/2022/05/contain-your-enthusiasm/" data-type="post" data-id="1396">my previous post</a> if you&#8217;re bored. I wanted something that could run on my small vSphere environment and which would have as little overhead as possible, both in terms of resources and management. So ideally not a full-blown traditional OS like RHEL, etc.</p>



<p>No one will believe me, but I was pretty surprised to find that <a href="https://vmware.github.io/photon/" target="_blank" rel="noopener">VMware&#8217;s Photon OS</a> seemed to be the perfect fit. Of course, we have it as the base of many VMware appliances, and it&#8217;s also commonly used as the OS inside the containers deployed in <a href="https://tanzu.vmware.com/kubernetes-grid/" target="_blank" rel="noopener">Tanzu Kubernetes Grid</a>, such as the supervisor nodes. That it also comes as a standalone OS with the Docker Engine in place and ready to go hadn&#8217;t registered with me before. And, of course, it&#8217;s already optimized to run on a hypervisor with as small a footprint as possible.</p>



<p>This is primarily for my own reference to know what I did when I need to redo this; here&#8217;s the process.</p>



<p>First, go to the <a href="https://github.com/vmware/photon/wiki/Downloading-Photon-OS" target="_blank" rel="noopener">download page</a> and grab the latest version. Since I&#8217;m deploying this on ESXi, I&#8217;m getting the OVA with virtual HW version 13, which VMware describes as a <em>&#8220;Pre-installed minimal environment, customized for VMware hypervisor environments. These customizations include a highly sanitized and optimized kernel to give improved boot and runtime performance for containers and Linux applications.&#8221;</em>. There&#8217;s also an ISO installer and images for other hypervisors and clouds. Some of the stuff here is covered in the <a href="https://vmware.github.io/photon/docs/installation-guide/" target="_blank" rel="noopener">installation docs</a>, but some of it is not. Surprisingly.</p>



<p>Deploy the OVA as you would any other OVF/OVA. There&#8217;s not much to decide on during the deployment, but I make sure to set the disk to thin-provisioned as I&#8217;m starting to run out of space on my SSD datastore.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="528" src="http://blog.fjetland.com/wp-content/uploads/2022/05/image-1-1024x528.png" alt="" class="wp-image-1408" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/image-1-1024x528.png 1024w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-1-300x155.png 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-1-768x396.png 768w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-1.png 1141w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Once deployed, it&#8217;s set up with 1 vCPU and 2GB RAM. The disk footprint with thin provisioning is an impressive 670MB. I increase this to 2 CPUs and 4GB RAM and fire it up. As instructed, you need to change the root password from &#8220;changeme&#8221; on the first login.</p>



<pre class="wp-block-code"><code>Welcome to Photon 4.0 (x86_64) - Kernel 5.10.83-6.ph4-esx (ttyl)
photon-machine login: root
Password :
You are required to change your password immediately (administrator enforced). 
</code></pre>



<p>The next step is to set a static IP address. Find the name of your Ethernet interface:</p>



<pre class="wp-block-code"><code>root@photon-machine &#91;~]# networkctl
IDX LINK TYPE     OPERATIONAL SETUP
1   lo   loopback carrier     unmanaged
2   ethO ether    routable    configured
2 links 1isted.</code></pre>



<p>Then create a network configuration file and fill out the info for the name of the Ethernet interface:</p>



<pre class="wp-block-code"><code>root@photon-machine &#91;~]# cat &gt; /etc/systemd/network/10-static-en.network &lt;&lt; "EOF"

&gt;&#91;Match]
&gt;Name=eth0

&gt;
&gt;&#91;Network]
&gt;Address=198.51.0.2/24
&gt;Gateway=198.51.0.1
&gt;EOF</code></pre>



<p>Change the permissions of the file</p>



<pre class="wp-block-code"><code>chmod 644 10-static-en.network</code></pre>



<p>And apply the new network config</p>



<pre class="wp-block-code"><code>systemctl restart systemd-networkd</code></pre>



<p>While we&#8217;re at it, we might as well set the hostname to keep things nice and tidy and help identify resources on the network:</p>



<pre class="wp-block-code"><code>hostnamectl set-hostname MyComputerName</code></pre>



<p>Check that your VM has the static IP. Now it&#8217;s time to get it up to date and secure. First, see which packages are available:</p>



<pre class="wp-block-code"><code>tdnf check-update</code></pre>



<p>Or, if you&#8217;re curious about the relevant security advisories:</p>



<pre class="wp-block-code"><code>tdnf updateinfo info</code></pre>



<p>Then run the upgrade command to apply the patches</p>



<pre class="wp-block-code"><code>tdnf upgrade</code></pre>



<p>OK, so the OS is running, connected to the internet and up to date. Let&#8217;s get Docker up and running. I initialize the docker engine:</p>



<pre class="wp-block-code"><code> systemctl start docker</code></pre>



<p>And then make sure it&#8217;ll run on boot:</p>



<pre class="wp-block-code"><code> systemctl enable docker</code></pre>



<p>Let&#8217;s check out what the status is</p>



<pre class="wp-block-code"><code>docker version</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="551" src="http://blog.fjetland.com/wp-content/uploads/2022/05/image-2.png" alt="" class="wp-image-1415" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/image-2.png 821w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-2-300x201.png 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/image-2-768x515.png 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<p>Looks great! I could start to deploy containers right now. But let&#8217;s get some management functionality up and running to make things easier. I think that&#8217;s suitable for a separate post; <a href="http://blog.fjetland.com/2022/05/adding-easy-container-management-to-photon-os-with-portainer/" data-type="post" data-id="1424">read on here</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2022/05/setting-up-photon-os-4-as-a-docker-host-vm-on-vsphere-7/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Contain your enthusiasm</title>
		<link>https://blog.fjetland.com/2022/05/contain-your-enthusiasm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=contain-your-enthusiasm</link>
					<comments>https://blog.fjetland.com/2022/05/contain-your-enthusiasm/#comments</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Wed, 18 May 2022 21:13:21 +0000</pubDate>
				<category><![CDATA[Containers]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[system administration]]></category>
		<guid isPermaLink="false">http://blog.fjetland.com/?p=1396</guid>

					<description><![CDATA[At work, I&#8217;ve been involved in projects over the last few years to deliver a private cloud experience to our users. One of the cornerstones in the latest endeavour has been to provide a&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="534" src="http://blog.fjetland.com/wp-content/uploads/2022/05/20161122-0840-0418_DhowMeetsShip-1024x534.jpg" alt="Dhow meets ship" class="wp-image-1397" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/20161122-0840-0418_DhowMeetsShip-1024x534.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2022/05/20161122-0840-0418_DhowMeetsShip-300x157.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/20161122-0840-0418_DhowMeetsShip-768x401.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2022/05/20161122-0840-0418_DhowMeetsShip-1536x801.jpg 1536w, https://blog.fjetland.com/wp-content/uploads/2022/05/20161122-0840-0418_DhowMeetsShip-2048x1069.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>At work, I&#8217;ve been involved in projects over the last few years to deliver a private cloud experience to our users. One of the cornerstones in the latest endeavour has been to provide a solid container platform based on Kubernetes. This is quite a challenging adjustment for someone who has done primarily IT operations around traditional workloads, first physical servers and later virtual machines but still running conventional operating systems like Linux and Windows.</p>



<p>Kubernetes and software-defined infrastructure require a different approach to IT operations and blur lines between traditional roles. It requires developers to take greater responsibility for security and infrastructure elements and network, storage and server admins to better understand how code is built, delivered, and updated. While I&#8217;ve written some basic web applications through the years, I certainly don&#8217;t consider myself a developer, and I&#8217;m struggling to fully grasp some of the concepts and ideas.</p>



<p>I&#8217;m a practical guy; I need to try stuff, really use it, to fully understand something genuinely new and different. So, therefore, I decided to bring containers into my home lab and bring up a Kubernetes environment that I can test stuff on.</p>



<p>Running a bunch of QNAP NASes at home, the easiest and quickest way to start tinkering with containers was to deploy them using the included <a href="https://www.qnap.com/en/software/container-station" target="_blank" rel="noopener">Container Station</a>, which offers the Docker engine underneath. The first application I brought up here was a <a href="https://www.crashplan.com/en-us/small-business/" target="_blank" rel="noopener">Crashplan cloud backup</a> application. The person who had been building QNAP native packages of Crashplan was retiring the project, and to back up the NAS content directly, the docker image was the best-supported option. This has been running for at least a year and works very well.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="http://blog.fjetland.com/wp-content/uploads/2022/05/2022-05-19_ContainerStation-1024x576.jpg" alt="" class="wp-image-1404" srcset="https://blog.fjetland.com/wp-content/uploads/2022/05/2022-05-19_ContainerStation-1024x576.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2022/05/2022-05-19_ContainerStation-300x169.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2022/05/2022-05-19_ContainerStation-768x432.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2022/05/2022-05-19_ContainerStation.jpg 1288w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Since then, I&#8217;ve added two more docker containers to Containers Station on my primary NAS. But running all sorts of containers is not what I want to use the NAS for, so I&#8217;m looking for a more suitable platform even though it&#8217;s a reasonably well-specced unit with 4 cores and 32GB RAM.</p>



<p>So instead of the next natural step, which would be to get something to run Docker on, I took a leap and started looking for a way to run Kubernetes. Since we&#8217;re using <a href="https://tanzu.vmware.com/kubernetes-grid/" target="_blank" rel="noopener">Tanzu Kubernetes Grid</a> on top of a vSphere platform at work, I tried to find something similar, but without all the requirements of TKGs, which would massively complicate my little lab. After <em>a lot</em> of tinkering, I managed to bring up a management cluster using <a href="https://tanzucommunityedition.io/" target="_blank" rel="noopener">Tanzu Community Edition</a>. Then I realized I really needed some infrastructure components up before proceeding with a workload cluster, so I had to return to planning for a Docker environment after all.</p>



<p>Which probably qualifies for its own post&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2022/05/contain-your-enthusiasm/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>NAS stories &#8211; prologue</title>
		<link>https://blog.fjetland.com/2019/09/nas-stories-prologue/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nas-stories-prologue</link>
					<comments>https://blog.fjetland.com/2019/09/nas-stories-prologue/#respond</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Thu, 12 Sep 2019 17:54:50 +0000</pubDate>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[Photo Management]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[system administration]]></category>
		<guid isPermaLink="false">http://blog.fjetland.com/?p=1167</guid>

					<description><![CDATA[Recently my trusty old main NAS, Teletraan1, started experiencing some problems. I figured I&#8217;d write down the issues and the process of choosing and setting up a replacement, to use as a background for&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<p>Recently my trusty old main NAS, Teletraan1, started experiencing some problems. I figured I&#8217;d write down the issues and the process of choosing and setting up a replacement, to use as a background for another post on backing up your data, and also to remind myself of my considerations should I need to do a similar choice in the future.</p>



<h2 class="wp-block-heading">The demise of my digital brain</h2>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="http://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-1024x1024.jpg" alt="Press photo of the QNAP TS 1079 Pro 10-bay NAS" class="wp-image-1185" width="542" height="542" srcset="https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-1024x1024.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-150x150.jpg 150w, https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-300x300.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-768x768.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-160x160.jpg 160w, https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro-320x320.jpg 320w, https://blog.fjetland.com/wp-content/uploads/2019/09/ts-1079pro.jpg 1500w" sizes="auto, (max-width: 542px) 100vw, 542px" /><figcaption>The trusty old QNAP TS-1079 Pro. Photo © QNAP</figcaption></figure>



<p>A little while ago my <a href="https://www.qnap.com/en/product/ts-1079%20pro" target="_blank" rel="noopener">QNAP TS-1079 Pro</a> which has served me faithfully for nearly a decade as my main NAS, started complaining that it had lost the disk in bay 7. This would be the first time a disk in this unit died since I set it up, and it&#8217;s been running 24/7 without spindown for the whole time (I ran my vSphere virtual servers using it as shared storage). A tribute to the lovely HGST 4TBs, I suppose. No worries, since I fairly early on had swapped out one of the 10 disks for a SSD to use as a cache drive, I had a spare disk in a drawer. So I replaced the drive, and it rebuilt the raid to that drive and all seemed well. For about a day. Then I got the same error. Hmmm&#8230; well, the disk *had* been used for a while, then left in a drawer for 8 years or so. Some HDDs don&#8217;t like that. So I bought a 4TB WD Red, mounted it to the caddy and inserted it. Same error.</p>



<p>So I used the excellent Helpdesk app on the QNAP to open a support ticket, and after a bit back and forth the support tech said it was most likely a problem with the backplane &#8211; possibly the motherboard. I inquired about a replacement backplane, but while I didn&#8217;t get a clear answer, it seemed none were available to purchase. After a brief look at eBay, AliExpress, etc, I started accepting that the safest option with the least downtime was probably to replace it.</p>



<p>I had already started thinking about this, but of course, the timing wasn&#8217;t ideal. It never is, is it? However, since this is my main storage for everything in my digital life, I couldn&#8217;t risk running it in this degraded state for too long either. With RAID6 I could only afford to lose one more drive.</p>



<h2 class="wp-block-heading">The requirements</h2>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="http://blog.fjetland.com/wp-content/uploads/2019/09/digital-354.png" alt="" class="wp-image-1170" width="654" height="324" srcset="https://blog.fjetland.com/wp-content/uploads/2019/09/digital-354.png 994w, https://blog.fjetland.com/wp-content/uploads/2019/09/digital-354-300x149.png 300w, https://blog.fjetland.com/wp-content/uploads/2019/09/digital-354-768x381.png 768w" sizes="auto, (max-width: 654px) 100vw, 654px" /></figure>



<p>My needs for my main NAS are quite simple, but unfortunately also quite diverse. On one side it needs to hold large volumes of data: Various backup sets from my client computers, backups of my VMs, some repositories of various rubbish, media files including my ripped Bluray and CD collection, and of course personal files, photos, etc.</p>



<p>On the other, it has to serve as shared storage for my running VMs in my home lab. This demands some IO performance, but it doesn&#8217;t make up a lot of data. maybe around 500GB currently.</p>



<p>For a while, I considered a separate unit for the high-performance stuff but I already have more than enough units spinning away in my computer room, generating both heat and noise.</p>



<h2 class="wp-block-heading">Narrowing down the options</h2>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="http://blog.fjetland.com/wp-content/uploads/2019/09/20180303-1659-0588-1024x683.jpg" alt="Photo of my server and storage rack" class="wp-image-1187" width="653" height="436" srcset="https://blog.fjetland.com/wp-content/uploads/2019/09/20180303-1659-0588-1024x683.jpg 1024w, https://blog.fjetland.com/wp-content/uploads/2019/09/20180303-1659-0588-300x200.jpg 300w, https://blog.fjetland.com/wp-content/uploads/2019/09/20180303-1659-0588-768x512.jpg 768w, https://blog.fjetland.com/wp-content/uploads/2019/09/20180303-1659-0588.jpg 1920w" sizes="auto, (max-width: 653px) 100vw, 653px" /></figure>



<p>A long time ago I used to run my own fileservers with assorted types of software- or hardware raids, but after failures of different kinds and the headaches of trying to sort them out and recover data, I decided this was not what I wanted. At the time I also did enterprise storage at work and felt I had enough of dealing with storage there <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>When the first types of SOHO-style NASes as we know them today appeared, I figured this would be the perfect solution for me. A standardized, tested and verified hardware and software combination that is being run by hundreds or thousands of others and with a support organisation to lean on. Since then I&#8217;ve been through units from Infrant (later Netgear), Synology and QNAP and have generally been very happy with this approach. </p>



<p>

So when looking to replace the TS-1079 Pro, it was natural to look at the offerings from Synology and QNAP.

</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2019/09/nas-stories-prologue/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
