<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps on Infinite Script</title><link>https://www.infinitescript.com/categories/devops/</link><description>Recent content in DevOps on Infinite Script</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 26 Sep 2026 20:00:00 -0700</lastBuildDate><atom:link href="https://www.infinitescript.com/categories/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>A Shared GPU Cluster with Slurm and BeeGFS</title><link>https://www.infinitescript.com/2026/09/a-shared-gpu-cluster-with-slurm-and-beegfs/</link><pubDate>Sat, 26 Sep 2026 20:00:00 -0700</pubDate><guid>https://www.infinitescript.com/2026/09/a-shared-gpu-cluster-with-slurm-and-beegfs/</guid><description>&lt;p&gt;A handful of GPU servers shared by a team tends to go through the same stages. At first people SSH into whichever machine looks idle. Then someone&amp;rsquo;s job gets killed because two people picked the same GPU. Then datasets end up copied onto every machine, each copy slightly different.&lt;/p&gt;&#10;&lt;p&gt;A job scheduler fixes the first two; a shared filesystem fixes the third. This post walks through the setup I use: one login node plus a few GPU servers, with &lt;strong&gt;Slurm&lt;/strong&gt; for scheduling, &lt;strong&gt;BeeGFS&lt;/strong&gt; for a shared &lt;code&gt;/home&lt;/code&gt;, &lt;strong&gt;UFW&lt;/strong&gt; as the host firewall, and &lt;strong&gt;Ansible&lt;/strong&gt; to keep every node consistent.&lt;/p&gt;</description></item><item><title>Migrating from WordPress to Hugo</title><link>https://www.infinitescript.com/2024/01/migrate-from-wordpress-to-hugo/</link><pubDate>Sat, 20 Jan 2024 07:45:45 +0800</pubDate><guid>https://www.infinitescript.com/2024/01/migrate-from-wordpress-to-hugo/</guid><description>&lt;p&gt;I recently switched from WordPress to Hugo. This post outlines the reasons behind my migration and provides a step-by-step guide on how to make the transition.&lt;/p&gt;&#10;&lt;h2 id="rethinking-why-use-wordpress"&gt;Rethinking Why Use WordPress&lt;/h2&gt;&#10;&lt;p&gt;I began using WordPress in 2009 when static site generators were not prevalent, and WordPress was the go-to CMS for nearly everyone.&#10;However, since my blog had infrequent updates but high readership, I started reconsidering the use of WordPress.&#10;&lt;a href="https://www.infinitescript.com/2019/06/accelerate-wordpress-with-cdn-and-cache-servers/"&gt;Five years ago&lt;/a&gt;, I decided to convert the WordPress site into static HTML and uploaded it to a CDN to accelerate access speed for users in mainland China.&lt;/p&gt;</description></item><item><title>Signing commits using GPG in Git</title><link>https://www.infinitescript.com/2016/02/signing-commits-using-gpg-in-git/</link><pubDate>Mon, 29 Feb 2016 14:06:31 +0000</pubDate><guid>https://www.infinitescript.com/2016/02/signing-commits-using-gpg-in-git/</guid><description>&lt;p&gt;Git is cryptographically secure, but it&amp;rsquo;s not foolproof. If you take work from others on the internet and want to verify that commits are actually from a trusted source, Git can sign and verify work with GPG.&lt;/p&gt;&#10;&lt;h2 id="generate-a-gpg-key"&gt;Generate a GPG Key&lt;/h2&gt;&#10;&lt;p&gt;To sign anything, you first need GPG installed and a personal key. Check whether you already have one:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gpg --list-keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/hzxie/.gnupg/pubring.gpg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pub 4096R/3DBF9592 2016-02-15&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uid Haozhe Xie (GPG key for GitHub) &amp;lt;noreply@haozhexie.com&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sub 4096R/BFEB9969 2016-02-15&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the list is empty, generate a key. On GPG 2.1 and later, &lt;code&gt;--full-generate-key&lt;/code&gt; lets you choose the algorithm and a 4096-bit RSA key, which GitHub recommends:&lt;/p&gt;</description></item><item><title>Build Tengine, MariaDB and PHP on Ubuntu 14.04</title><link>https://www.infinitescript.com/2014/11/build-tengine-mariadb-and-php-on-ubuntu-14-04/</link><pubDate>Sat, 22 Nov 2014 03:40:35 +0000</pubDate><guid>https://www.infinitescript.com/2014/11/build-tengine-mariadb-and-php-on-ubuntu-14-04/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;Nginx is one of the most popular web servers in the world and is responsible for hosting some of the largest and highest-traffic sites on the internet. Tengine is a branch of Nginx which is created by &lt;a href="http://www.alibaba.com"&gt;Alibaba Inc&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;MariaDB is a database server developed by some of the original authors of MySQL and offers drop-in replacement functionality.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This guide is from 2014 and builds every component from source on Ubuntu 14.04, which has long since reached end-of-life. On a current system you would install Tengine/Nginx, MariaDB, and PHP from the official APT repositories and manage them with &lt;code&gt;systemd&lt;/code&gt; instead of the SysV &lt;code&gt;init.d&lt;/code&gt; scripts shown below. It&amp;rsquo;s kept here as a historical walkthrough.&lt;/p&gt;</description></item><item><title>Getting Started with Hadoop 2.0</title><link>https://www.infinitescript.com/2014/08/getting-started-with-hadoop-2-0/</link><pubDate>Fri, 08 Aug 2014 13:30:34 +0000</pubDate><guid>https://www.infinitescript.com/2014/08/getting-started-with-hadoop-2-0/</guid><description>&lt;p&gt;Apache™ &lt;strong&gt;Hadoop&lt;/strong&gt;® is an open source software project that enables the distributed processing of large data sets across clusters of commodity servers. It is designed to scale up from a single server to thousands of machines, with a very high degree of fault tolerance. Rather than relying on high-end hardware, the resiliency of these clusters comes from the software’s ability to detect and handle failures at the application layer.&lt;/p&gt;&#10;&lt;p&gt;Hadoop 1 popularized MapReduce programming for batch jobs and demonstrated the potential value of large scale, distributed processing. MapReduce, as implemented in Hadoop 1, can be I/O intensive, not suitable for interactive analysis, and constrained in support for graph, machine learning and on other memory intensive algorithms. Hadoop developers rewrote major components of the file system to produce Hadoop 2. To get started with the new version, it helps to understand the major differences between Hadoop 1 and 2.&lt;/p&gt;</description></item><item><title>Jenkins Installation and Configuration with Maven and GitHub</title><link>https://www.infinitescript.com/2014/02/jenkins-installation-and-configuration-with-maven-and-github/</link><pubDate>Sat, 22 Feb 2014 03:24:39 +0000</pubDate><guid>https://www.infinitescript.com/2014/02/jenkins-installation-and-configuration-with-maven-and-github/</guid><description>&lt;p&gt;In this tutorial we install Jenkins and configure it to build a Maven project hosted on GitHub.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Jenkins 2.5x running on Java 21&lt;/strong&gt;. The original 2014 version deployed Jenkins as a WAR inside Tomcat 7 on Java 7 and walked through a UI that has since changed substantially. Modern Jenkins is self-contained, so you no longer need a separate servlet container, and Git/Maven support now ships with the suggested plugins. The setup below is therefore shorter than it used to be.&lt;/p&gt;</description></item><item><title>Building Vim from Source</title><link>https://www.infinitescript.com/2013/09/building-vim-from-source/</link><pubDate>Sun, 08 Sep 2013 14:45:38 +0000</pubDate><guid>https://www.infinitescript.com/2013/09/building-vim-from-source/</guid><description>&lt;p&gt;Most Linux distributions ship a stripped-down Vim — often without &lt;code&gt;+python3&lt;/code&gt;, &lt;code&gt;+clipboard&lt;/code&gt;, or GUI support, and rarely the newest release. Building Vim yourself fixes all of that: you decide exactly which language interpreters and features get compiled in, and you get whatever version is on Vim&amp;rsquo;s &lt;code&gt;master&lt;/code&gt; branch.&lt;/p&gt;&#10;&lt;p&gt;The process is straightforward. This guide walks through it on a Debian-based distro such as Ubuntu.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated from its original 2013 version&lt;/strong&gt; to match how Vim is built today. The source has moved from vim.org&amp;rsquo;s Mercurial repository to &lt;a href="https://github.com/vim/vim"&gt;GitHub&lt;/a&gt;, the Python 2 interpreter has been swapped for Python 3 and the GTK2 GUI for GTK3, and &lt;code&gt;configure&lt;/code&gt; flags that newer Vim removed (such as &lt;code&gt;--enable-sniff&lt;/code&gt; and the now-default &lt;code&gt;--enable-multibyte&lt;/code&gt;) have been dropped.&lt;/p&gt;</description></item><item><title>Install PHP and PHPUnit on Windows/Ubuntu</title><link>https://www.infinitescript.com/2013/08/install-php-and-phpunit-on-windows-ubuntu/</link><pubDate>Sun, 18 Aug 2013 12:20:05 +0000</pubDate><guid>https://www.infinitescript.com/2013/08/install-php-and-phpunit-on-windows-ubuntu/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for PHP 8.5 and PHPUnit 13&lt;/strong&gt;. The original 2013 version installed PHPUnit through PEAR (&lt;code&gt;go-pear&lt;/code&gt;, &lt;code&gt;pear channel-discover pear.phpunit.de&lt;/code&gt;), but PEAR has since been retired and PHPUnit no longer ships through it. The current approach is to install PHPUnit with &lt;a href="https://getcomposer.org/"&gt;Composer&lt;/a&gt; or as a standalone PHAR, both shown below.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;PHPUnit is the de-facto testing framework for PHP. This guide gets PHP and PHPUnit running on Windows and Ubuntu, then writes and runs a first test to confirm the setup works.&lt;/p&gt;</description></item><item><title>How to Setup and Use Github in Ubuntu</title><link>https://www.infinitescript.com/2013/06/how-to-setup-and-use-github-in-ubuntu/</link><pubDate>Sun, 30 Jun 2013 06:22:21 +0000</pubDate><guid>https://www.infinitescript.com/2013/06/how-to-setup-and-use-github-in-ubuntu/</guid><description>&lt;p&gt;If you are or want to be an open-source developer, you must try GitHub. It is a new hosted Git repository service that&amp;rsquo;s being called a &amp;ldquo;social network&amp;rdquo; for programmers. It is basically a distributed version control system designed to handle everything from small to very large projects with speed and efficiency.&lt;/p&gt;&#10;&lt;h2 id="setup-ssh-key"&gt;Setup SSH key&lt;/h2&gt;&#10;&lt;h3 id="generate-ssh-key"&gt;Generate SSH Key&lt;/h3&gt;&#10;&lt;p&gt;Suppose you have created your account at &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt; and now want to work with it from your terminal.&lt;/p&gt;</description></item><item><title>Running Hadoop 1.1.2 on Ubuntu Linux (Single-Node Cluster)</title><link>https://www.infinitescript.com/2013/06/running-hadoop-1-1-2-on-ubuntu-linux-single-node-cluster/</link><pubDate>Fri, 14 Jun 2013 13:15:21 +0000</pubDate><guid>https://www.infinitescript.com/2013/06/running-hadoop-1-1-2-on-ubuntu-linux-single-node-cluster/</guid><description>&lt;p&gt;In this tutorial I will describe the required steps for setting up a &lt;em&gt;pseudo-distributed, single-node&lt;/em&gt; Hadoop cluster backed by the Hadoop Distributed File System, running on Ubuntu Linux.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This walkthrough targets &lt;strong&gt;Hadoop 1.1.2&lt;/strong&gt; (2013) on Ubuntu 13.04, both long past end-of-life. Hadoop 1.x predates YARN, so the JobTracker/TaskTracker daemons, the &lt;code&gt;conf/&lt;/code&gt; layout, and config keys such as &lt;code&gt;fs.default.name&lt;/code&gt; and &lt;code&gt;mapred.job.tracker&lt;/code&gt; no longer apply to current releases (3.x uses &lt;code&gt;etc/hadoop/&lt;/code&gt;, &lt;code&gt;fs.defaultFS&lt;/code&gt;, and different web-UI ports). It is kept here as a historical reference; if you are setting up Hadoop today, follow the official &lt;a href="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html"&gt;Single Node Cluster&lt;/a&gt; guide instead.&lt;/p&gt;</description></item></channel></rss>