<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Devops - Tag - Gene.Tech</title>
        <link>https://geneliu.itaghome.win/tags/devops/</link>
        <description>Devops - Tag - Gene.Tech</description>
        <generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>gene.liu@live.com (Gene Liu)</managingEditor>
            <webMaster>gene.liu@live.com (Gene Liu)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Sat, 12 Feb 2022 00:00:00 &#43;0000</lastBuildDate><atom:link href="https://geneliu.itaghome.win/tags/devops/" rel="self" type="application/rss+xml" /><item>
    <title>Install AdGuardHome on Asus Router (AC56U)</title>
    <link>https://geneliu.itaghome.win/2022-2-12-asus-adguard-home/</link>
    <pubDate>Sat, 12 Feb 2022 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2022-2-12-asus-adguard-home/</guid>
    <description><![CDATA[<h3 id="download-and-flash-asuswrt-merlin-firmware-v3846">Download and Flash Asuswrt-Merlin Firmware (v384.6)</h3>
<p><a href="https://www.asuswrt-merlin.net/" target="_blank" rel="noopener noreffer ">https://www.asuswrt-merlin.net/</a>
<a href="https://sourceforge.net/projects/asuswrt-merlin/files/RT-AC56U/Release/RT-AC56U_384.6_0.zip/download" target="_blank" rel="noopener noreffer ">https://sourceforge.net/projects/asuswrt-merlin/files/RT-AC56U/Release/RT-AC56U_384.6_0.zip/download</a></p>
<h3 id="prepare-usb-drive">Prepare USB Drive</h3>
<ol>
<li>Login to router via SSH (<code>ssh admin@router_ip</code>)</li>
<li><code>fdisk /dev/sda</code></li>
<li><code>mkfs.ext3 /dev/sda[1,2]</code></li>
</ol>
<h3 id="enable-jffs-custom-scripts-and-configs">Enable JFFS Custom Scripts and Configs</h3>
<p>Administration -&gt; System -&gt; Persistent JFFS2 partition -&gt; Enable JFFS custom scripts and configs (&lsquo;yes&rsquo;)</p>
<h3 id="execute-entware-setup-to-enable-opt-mount-on-usb-drive">Execute Entware-Setup to Enable /opt Mount on USB Drive</h3>
<p>The newly flashed firmware (v384.6) has <code>entware-setup.sh</code> included already.
FYI: <a href="https://github.com/RMerl/asuswrt-merlin/blob/master/release/src/router/others/entware-setup.sh" target="_blank" rel="noopener noreffer ">https://github.com/RMerl/asuswrt-merlin/blob/master/release/src/router/others/entware-setup.sh</a></p>
<h3 id="update-post-mount-script">Update Post-Mount Script</h3>
<p><code>/opt/etc/init.d/rc.unslung start</code> is the line added; not sure if it&rsquo;s necessary. :)</p>]]></description>
</item>
<item>
    <title>vsftpd Access NFS Shared Directory</title>
    <link>https://geneliu.itaghome.win/2022-2-8-vsftpd/</link>
    <pubDate>Tue, 08 Feb 2022 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2022-2-8-vsftpd/</guid>
    <description><![CDATA[<h3 id="issue">Issue</h3>
<p>When putting files into an NFS shared directory, I get an &ldquo;Access failed: 553 Could not create file.&rdquo; error.</p>
<h3 id="solution">Solution</h3>
<ol>
<li><code>setsebool -P ftpd_full_access 1</code></li>
<li>Make sure the mounted directory has the correct ownership.</li>
</ol>]]></description>
</item>
<item>
    <title>Add a GitLab CI Runner</title>
    <link>https://geneliu.itaghome.win/2022-1-20-gitlab-ci/</link>
    <pubDate>Thu, 20 Jan 2022 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2022-1-20-gitlab-ci/</guid>
    <description><![CDATA[<h3 id="setup-a-standard-rhelalmalinux-85-vm">Setup a Standard RHEL/AlmaLinux 8.5 VM</h3>
<ol>
<li>
<p>Docker proxy settings:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /etc/systemd/system/docker.service.d/http-proxy.conf 
</span></span><span class="line"><span class="cl"><span class="o">[</span>Service<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="nv">Environment</span><span class="o">=</span><span class="s2">&#34;HTTP_PROXY=http://proxy.lbs.alcatel-lucent.com:8000&#34;</span> <span class="s2">&#34;HTTPS_PROXY=http://proxy.lbs.alcatel-lucent.com:8000&#34;</span> <span class="s2">&#34;NO_PROXY=orbw-artifactory.ca.alcatel-lucent.com&#34;</span></span></span></code></pre></div></div>
</li>
<li>
<p>Insecure (private) registry:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-json">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="err">cat</span> <span class="err">/etc/docker/daemon.json</span> 
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;insecure-registries&#34;</span> <span class="p">:</span> <span class="p">[</span> <span class="s2">&#34;orbw-artifactory.ca.alcatel-lucent.com:8081&#34;</span> <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
</li>
</ol>
<h3 id="install-gitlab-runner">Install GitLab Runner</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker run -d --name gitlab-runner --restart always -v /home/cloud-user/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock orbw-artifactory.ca.alcatel-lucent.com:8081/nokia-nsp-docker-virtual/gitlab/gitlab-runner:latest</span></span></code></pre></div></div>
<h3 id="gitlab-runner-register">GitLab Runner Register</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker run --rm -it -v /home/cloud-user/config:/etc/gitlab-runner orbw-artifactory.ca.alcatel-lucent.com:8081/nokia-nsp-docker-virtual/gitlab/gitlab-runner:latest register</span></span></code></pre></div></div>
<p>Example config:</p>]]></description>
</item>
<item>
    <title>Use wget to Download a List of Files</title>
    <link>https://geneliu.itaghome.win/2022-1-19-wget/</link>
    <pubDate>Wed, 19 Jan 2022 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2022-1-19-wget/</guid>
    <description><![CDATA[<p>Use <code>wget</code> to download a list of files:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">wget -x -P /data/temp/files --no-host-directories -i /data/temp/file.txt</span></span></code></pre></div></div>]]></description>
</item>
<item>
    <title>About SELinux</title>
    <link>https://geneliu.itaghome.win/2022-1-16-selinux/</link>
    <pubDate>Mon, 17 Jan 2022 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2022-1-16-selinux/</guid>
    <description><![CDATA[<p>A few readings from the internet.</p>
<h2 id="docker-default-security-option">Docker Default Security Option</h2>
<p><a href="https://docs.docker.com/engine/security/seccomp/" target="_blank" rel="noopener noreffer ">https://docs.docker.com/engine/security/seccomp/</a></p>
<div class="code-block code-line-numbers" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># docker info</span>
</span></span><span class="line"><span class="cl">Client:
</span></span><span class="line"><span class="cl"> Context:    default
</span></span><span class="line"><span class="cl"> Debug Mode: <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> Plugins:
</span></span><span class="line"><span class="cl">  app: Docker App <span class="o">(</span>Docker Inc., v0.9.1-beta3<span class="o">)</span>
</span></span><span class="line"><span class="cl">  buildx: Build with BuildKit <span class="o">(</span>Docker Inc., v0.6.1-docker<span class="o">)</span>
</span></span><span class="line"><span class="cl">  scan: Docker Scan <span class="o">(</span>Docker Inc., v0.8.0<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Server:
</span></span><span class="line"><span class="cl"> Containers: <span class="m">17</span>
</span></span><span class="line"><span class="cl">  Running: <span class="m">15</span>
</span></span><span class="line"><span class="cl">  Paused: <span class="m">0</span>
</span></span><span class="line"><span class="cl">  Stopped: <span class="m">2</span>
</span></span><span class="line"><span class="cl"> Images: <span class="m">16</span>
</span></span><span class="line"><span class="cl"> Server Version: 20.10.8
</span></span><span class="line"><span class="cl"> Storage Driver: overlay2
</span></span><span class="line"><span class="cl">  Backing Filesystem: extfs
</span></span><span class="line"><span class="cl">  Supports d_type: <span class="nb">true</span>
</span></span><span class="line"><span class="cl">  Native Overlay Diff: <span class="nb">true</span>
</span></span><span class="line"><span class="cl">  userxattr: <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> Logging Driver: json-file
</span></span><span class="line"><span class="cl"> Cgroup Driver: systemd
</span></span><span class="line"><span class="cl"> Cgroup Version: <span class="m">1</span>
</span></span><span class="line"><span class="cl"> Plugins:
</span></span><span class="line"><span class="cl">  Volume: <span class="nb">local</span>
</span></span><span class="line"><span class="cl">  Network: bridge host ipvlan macvlan null overlay
</span></span><span class="line"><span class="cl">  Log: awslogs fluentd gcplogs gelf journald json-file <span class="nb">local</span> logentries splunk syslog
</span></span><span class="line"><span class="cl"> Swarm: inactive
</span></span><span class="line"><span class="cl"> Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
</span></span><span class="line"><span class="cl"> Default Runtime: runc
</span></span><span class="line"><span class="cl"> Init Binary: docker-init
</span></span><span class="line"><span class="cl"> containerd version: e25210fe30a0a703442421b0f60afac609f950a3
</span></span><span class="line"><span class="cl"> runc version: v1.0.1-0-g4144b63
</span></span><span class="line"><span class="cl"> init version: de40ad0
</span></span><span class="line"><span class="cl"> Security Options:
</span></span><span class="line"><span class="cl">  seccomp
</span></span><span class="line"><span class="cl">   Profile: default
</span></span><span class="line"><span class="cl"> Kernel Version: 3.10.0-1160.42.2.el7.x86_64
</span></span><span class="line"><span class="cl"> Operating System: Red Hat Enterprise Linux Server 7.9 <span class="o">(</span>Maipo<span class="o">)</span>
</span></span><span class="line"><span class="cl"> OSType: linux
</span></span><span class="line"><span class="cl"> Architecture: x86_64
</span></span><span class="line"><span class="cl"> CPUs: <span class="m">8</span>
</span></span><span class="line"><span class="cl"> Total Memory: 23.39GiB
</span></span><span class="line"><span class="cl"> Name: gene-k8s-k8sc-node1
</span></span><span class="line"><span class="cl"> ID: VGBN:P5LX:RTQG:OX67:INYM:ZUHD:W6NQ:FWWL:KUV5:NZ6N:2DKH:ZIYL
</span></span><span class="line"><span class="cl"> Docker Root Dir: /opt/nsp/docker
</span></span><span class="line"><span class="cl"> Debug Mode: <span class="nb">false</span>
</span></span><span class="line"><span class="cl">  Registry: https://index.docker.io/v1/
</span></span><span class="line"><span class="cl"> Labels:
</span></span><span class="line"><span class="cl"> Experimental: <span class="nb">false</span>
</span></span><span class="line"><span class="cl"> Insecure Registries:
</span></span><span class="line"><span class="cl">   127.0.0.0/8
</span></span><span class="line"><span class="cl"> Live Restore Enabled: <span class="nb">false</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
</span></span><span class="line"><span class="cl">         Access to the remote API is equivalent to root access on the host. Refer
</span></span><span class="line"><span class="cl">         to the <span class="s1">&#39;Docker daemon attack surface&#39;</span> section in the documentation <span class="k">for</span>
</span></span><span class="line"><span class="cl">         more information: https://docs.docker.com/go/attack-surface/
</span></span><span class="line"><span class="cl"><span class="o">[</span>root@gene-k8s-k8sc-node1 ~<span class="o">]</span><span class="c1"># sestatus </span>
</span></span><span class="line"><span class="cl">SELinux status:                 enabled
</span></span><span class="line"><span class="cl">SELinuxfs mount:                /sys/fs/selinux
</span></span><span class="line"><span class="cl">SELinux root directory:         /etc/selinux
</span></span><span class="line"><span class="cl">Loaded policy name:             targeted
</span></span><span class="line"><span class="cl">Current mode:                   permissive
</span></span><span class="line"><span class="cl">Mode from config file:          permissive
</span></span><span class="line"><span class="cl">Policy MLS status:              enabled
</span></span><span class="line"><span class="cl">Policy deny_unknown status:     allowed
</span></span><span class="line"><span class="cl">Max kernel policy version:      <span class="m">31</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>root@gene-k8s-k8sc-node1 ~<span class="o">]</span><span class="c1"># ps -eZ | grep docker</span>
</span></span><span class="line"><span class="cl">system_u:system_r:unconfined_service_t:s0 <span class="m">1254</span> ? 00:00:00 docker
</span></span><span class="line"><span class="cl">system_u:system_r:container_runtime_t:s0 <span class="m">30862</span> ? 00:02:10 dockerd
</span></span><span class="line"><span class="cl">system_u:system_r:container_runtime_t:s0 <span class="m">30976</span> ? 00:00:00 docker
</span></span><span class="line"><span class="cl"><span class="o">[</span>root@gene-k8s-k8sc-node1 ~<span class="o">]</span><span class="c1"># docker context ls</span>
</span></span><span class="line"><span class="cl">NAME        DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                ORCHESTRATOR
</span></span><span class="line"><span class="cl">default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://127.0.0.1:6443 <span class="o">(</span>default<span class="o">)</span>   swarm</span></span></code></pre></div></div>
<p><a href="https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html" target="_blank" rel="noopener noreffer ">https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html</a></p>]]></description>
</item>
<item>
    <title>Ansible from_yaml Filter</title>
    <link>https://geneliu.itaghome.win/2021-01-28-ansible-fromyaml/</link>
    <pubDate>Thu, 28 Jan 2021 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2021-01-28-ansible-fromyaml/</guid>
    <description><![CDATA[<p>The Ansible <code>from_yaml</code> filter can be used to simplify data manipulation with formatted data.</p>
<p>An example of the list data type:</p>
<h3 id="without-a-filter">Without a filter</h3>
<p>I have to use both <code>strip</code> and <code>split</code> functions, which is error-prone.</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-yaml">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">glusterfs_node_hostname_base</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">  {% for item in glusterfs_node|unique %}
</span></span></span><span class="line"><span class="cl"><span class="sd">  {{ hostvars[item].get(&#39;ansible_hostname&#39;) }}
</span></span></span><span class="line"><span class="cl"><span class="sd">  {% endfor %}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">## gluster requires unique hostname or nodename while probing peers, here glusterfs_node_hostname </span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">## stores all glusterfs node&#39;s hostname for a validation purpose</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">glusterfs_node_hostname</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ glusterfs_node_hostname_base.strip().split(&#39;\n&#39;) | default([]) }}&#34;</span></span></span></code></pre></div></div>
<h3 id="with-from_yaml-filter">With <code>from_yaml</code> filter</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-yaml">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">glusterfs_node_hostname_base</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">  ---
</span></span></span><span class="line"><span class="cl"><span class="sd">  {% for item in glusterfs_node|unique %}
</span></span></span><span class="line"><span class="cl"><span class="sd">  - {{ hostvars[item].get(&#39;ansible_hostname&#39;) }}
</span></span></span><span class="line"><span class="cl"><span class="sd">  {% endfor %}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">## gluster requires unique hostname or nodename while probing peers, here glusterfs_node_hostname </span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">## stores all glusterfs node&#39;s hostname for a validation purpose</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">glusterfs_node_hostname</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ glusterfs_node_hostname_base | from_yaml }}&#34;</span></span></span></code></pre></div></div>]]></description>
</item>
<item>
    <title>Example of Reset/Cleanup Debian/Ubuntu Packages</title>
    <link>https://geneliu.itaghome.win/2021-1-27-remove-deb/</link>
    <pubDate>Wed, 27 Jan 2021 00:00:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2021-1-27-remove-deb/</guid>
    <description><![CDATA[<h3 id="installation-via-deb-package">Installation via .deb Package</h3>
<p>Add the Rancher Desktop repository and install Rancher Desktop with:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/Release.key <span class="p">|</span> sudo apt-key add -
</span></span><span class="line"><span class="cl">sudo add-apt-repository <span class="s1">&#39;deb https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ ./&#39;</span>
</span></span><span class="line"><span class="cl">sudo apt update
</span></span><span class="line"><span class="cl">sudo apt install rancher-desktop</span></span></code></pre></div></div>
<h3 id="uninstalling-deb-package">Uninstalling .deb Package</h3>
<p>You can remove the package, repository, and key with:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt remove --autoremove rancher-desktop
</span></span><span class="line"><span class="cl">sudo add-apt-repository -r <span class="s1">&#39;deb https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ ./&#39;</span>
</span></span><span class="line"><span class="cl">sudo apt-key del &lt;keyid&gt;</span></span></code></pre></div></div>
<p>Where <code>keyid</code> is the line above the one containing <code>isv:Rancher:stable</code> when you run <code>apt-key list</code>. So if I have the following block for the Rancher Desktop Key:</p>]]></description>
</item>
<item>
    <title>Ceph Geo-Replication Models</title>
    <link>https://geneliu.itaghome.win/2020-02-18-ceph-geo-replication-models/</link>
    <pubDate>Tue, 18 Feb 2020 13:57:57 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2020-02-18-ceph-geo-replication-models/</guid>
    <description><![CDATA[<p><strong>Overview</strong></p>
<ol>
<li>
<p>Ceph implements strong consistency between OSDs according to the replication factor, and reliability/availability according to the placement group (CRUSH MAP).</p>
</li>
<li>
<p>Clusters utilizing cross-site (a)sync will be performance-compromised and require fat, low-latency pipes, which strongly affects the Ceph RADOS protocol (both on RBD and object storage).</p>
</li>
<li>
<p>There is no recommendation/solution statement from Ceph upstream (or Red Hat) yet - <a href="https://tracker.ceph.com/projects/ceph/wiki/Can_Ceph_Support_Multiple_Data_Centers" target="_blank" rel="noopener noreffer ">https://tracker.ceph.com/projects/ceph/wiki/Can_Ceph_Support_Multiple_Data_Centers</a></p>
</li>
<li>
<p>It sounds like the team is developing/enhancing a &lsquo;real&rsquo; stretch Ceph cluster. (Attachment 2)</p>]]></description>
</item>
<item>
    <title>Reset Your Linux Root Password</title>
    <link>https://geneliu.itaghome.win/2020-02-13-reset-root-pwd/</link>
    <pubDate>Thu, 13 Feb 2020 06:02:00 &#43;0000</pubDate>
    <author>gene.liu@live.com (Gene Liu)</author>
    <guid>https://geneliu.itaghome.win/2020-02-13-reset-root-pwd/</guid>
    <description><![CDATA[<p></p>
<p>A system administrator can easily reset passwords for users who have forgotten theirs. But what happens if the system administrator forgets the root password? This guide will show you how to reset a lost or forgotten root password on a Red Hat-compatible system.</p>
<br/>
<h3 id="overview">Overview</h3>
<p>Please note, if the entire system hard disk has been encrypted with LUKS, you will need to provide the LUKS password when prompted. Also, this procedure is applicable to systems running systemd, which has been the default init system since Fedora 15, CentOS 7, and RHEL 7.</p>]]></description>
</item>
</channel>
</rss>
