<?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>Tomas&#039; log of stuff</title>
	<atom:link href="https://blog.fjetland.com/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>About photo books. And how to organize them</title>
		<link>https://blog.fjetland.com/2024/03/about-photo-books-and-how-to-organize-them/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=about-photo-books-and-how-to-organize-them</link>
					<comments>https://blog.fjetland.com/2024/03/about-photo-books-and-how-to-organize-them/#respond</comments>
		
		<dc:creator><![CDATA[tomasf]]></dc:creator>
		<pubDate>Fri, 15 Mar 2024 22:47:25 +0000</pubDate>
				<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[photography]]></category>
		<guid isPermaLink="false">https://blog.fjetland.com/?p=1527</guid>

					<description><![CDATA[A couple of years ago, I started buying a few photo books. I enjoy viewing the work of photographers of various genres and generations. After too long of mostly enjoying these works only on&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1612" height="694" src="https://blog.fjetland.com/wp-content/uploads/2024/03/LibraryInPhone.jpg" alt="A photo of a library inside a smartphone" class="wp-image-1528"/><figcaption class="wp-element-caption">An image of a library inside a smartphone &#8211; Generated by pitting Ideogram and Midjourney against each other and letting the carnage unfold.</figcaption></figure>



<p>A couple of years ago, I started buying a few photo books. I enjoy viewing the work of photographers of various genres and generations. After too long of mostly enjoying these works only on the web or at the (very rare) exhibition, I decided to get a few books. Photo books come in different types and forms, from those made by the photographer him- or herself, which have been carefully curated and laid out to present the work as the artist wants us to see it, to collections that put the artist&#8217;s work in the context of other artists. As well as many other types.</p>



<p>I enjoyed this experience so much that I started buying books quite frequently, eventually reaching one a month and, lately, even more. This leads to some challenges. Firstly, I&#8217;m running out of bookshelf space. I&#8217;m already considering remediating this, but that&#8217;s a more significant project. Secondly, how to keep track of the books you have, the books you want, the ones you lent out to friends, and where you left off each one. Photo books aren&#8217;t like novels; you might start on several in parallel and leave each for periods as your mood and focus change.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://tmp.bluntobject.org/img/20240308-1423-0152_BookshelfB.jpg" alt="One of my photo book shelves"/></figure>



<p>I accidentally stumbled across a personal library management program for desktops, which got me thinking this was something I wanted. But it was old-fashioned, clunky, and not very inspirational at all. I&#8217;m an old guy with old habits, so I tend to think of computing solutions from a desktop-first perspective, but in this case, I thought something with a mobile client might be more suitable. When I started looking into this, the options weren&#8217;t plentiful, but I found one that seemed to have the features I needed, and it was good-looking and effortless to use.</p>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:33% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="886" height="1920" src="https://blog.fjetland.com/wp-content/uploads/2024/03/20240315-0151_HandyLibShelves.jpg" alt="" class="wp-image-1535 size-full"/></figure><div class="wp-block-media-text__content">
<p><a href="https://www.handylibrary.com/" target="_blank" rel="noopener">Handy Library</a> is a well-designed Android app that&#8217;s really easy to use in terms of intuitive UI and effortless functionality. You can add a book simply by scanning its ISBN barcode or entering the ISBN number by hand. It will then try to look up information about the book online, on sites such as Goodreads, and then fill that in for you. It also provides really quick and easy ways of finding and adding book covers. You might need or want to correct or supplement that information (we all know that data quality on the internet isn&#8217;t always the best), but it&#8217;s usually pretty good off the bat, and it&#8217;s always a great starting point.</p>



<p>You can do various organisational actions, such as registering each book on which shelf it&#8217;s located, reading progress, whether it&#8217;s lent out and to whom, etc.</p>



<p></p>
</div></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:33% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="886" height="1920" src="https://blog.fjetland.com/wp-content/uploads/2024/03/20240315-0151_HandyLibBooks.jpg" alt="" class="wp-image-1537 size-full"/></figure><div class="wp-block-media-text__content">
<p>If you have a substantial library, going through and registering all your books is not a small task, despite the time-saving features of the app. That&#8217;s why it&#8217;s essential that the app also offers solid export options. Handy Library will let you export to XLS, CSV, or a zip file containing the SQLite database file. This means that even if the developer stops supporting the app, you move to an unsupported platform, or you find a different product that you like better, you can at the very least export the information you&#8217;ve added in a standard format and maybe even be able to import it into another program. You may even create your own projects using the data like I have. But more on that later.<br>With anything requiring a significant investment of your time, always ensure there&#8217;s a way to get that data out again.</p>



<p>One small caveat here is that the XLS export contains a bug. I believe it&#8217;s an unescaped / in the Lend/Borrow sheet that causes Excel and some other programs to see it as corrupt. The developer seems reluctant to fix this for some reason, but it can be fixed and worked around, so it&#8217;s not a dealbreaker.</p>
</div></div>



<p>To be able to share the contents of my library with others, I decided to use the export feature to import the data into an SQL Server database and then create a simple web page that lists the books, displays the covers, and includes a bit of the book description. Frontend web stuff is my kryptonite, so, for now, it&#8217;s mostly a proof of concept, but I hope to improve it to something half-decent in the not-too-distant future. But you can check out <a href="https://www.fjetland.com/bookshelf/" target="_blank" rel="noopener">my online bookshelf</a> already <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>If you&#8217;re interested, you can try it out for free, up to 100 books, and then upgrade if you want to keep using it beyond that. Also, you might need to pay a small fee for the Google API requests it uses to look up the covers. Always make sure you read the current conditions in the app or in Google Play.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://play.google.com/store/apps/details?id=com.handylibrary.main" target="_blank" rel="noopener"><img loading="lazy" decoding="async" width="646" height="250" src="https://blog.fjetland.com/wp-content/uploads/2024/03/google-play-badge.png" alt="" class="wp-image-1541" style="width:320px;height:auto"/></a></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.fjetland.com/2024/03/about-photo-books-and-how-to-organize-them/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>
	</channel>
</rss>
