<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Devops - 标签 - Gene.Tech</title>
        <link>https://geneliu.itaghome.win/zh-cn/tags/devops/</link>
        <description>Devops - 标签 - Gene.Tech</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-CN</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/zh-cn/tags/devops/" rel="self" type="application/rss+xml" /><item>
    <title>在华硕路由器 (AC56U) 上安装 AdGuardHome</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2022-2-12-asus-adguard-home/</guid>
    <description><![CDATA[<h3 id="下载并刷入-asuswrt-merlin-固件-v3846">下载并刷入 Asuswrt-Merlin 固件 (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="准备-usb-驱动器">准备 USB 驱动器</h3>
<ol>
<li>通过 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="启用-jffs-自定义脚本和配置">启用 JFFS 自定义脚本和配置</h3>
<p>Administration -&gt; System -&gt; Persistent JFFS2 partition -&gt; Enable JFFS custom scripts and configs (&lsquo;yes&rsquo;)</p>
<h3 id="执行-entware-setup-以在-usb-驱动器上启用-opt-挂载">执行 Entware-Setup 以在 USB 驱动器上启用 /opt 挂载</h3>
<p>新刷入的固件 (v384.6) 已经包含 <code>entware-setup.sh</code>。
供参考：https://github.com/RMerl/asuswrt-merlin/blob/master/release/src/router/others/entware-setup.sh</p>]]></description>
</item>
<item>
    <title>vsftpd 访问 NFS 共享目录</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2022-2-8-vsftpd/</guid>
    <description><![CDATA[<h3 id="问题">问题</h3>
<p>当将文件放入 NFS 共享目录时，出现 &ldquo;Access failed: 553 Could not create file.&rdquo; 错误。</p>
<h3 id="解决方案">解决方案</h3>
<ol>
<li><code>setsebool -P ftpd_full_access 1</code></li>
<li>确保挂载的目录具有正确的所有权。</li>
</ol>]]></description>
</item>
<item>
    <title>添加 GitLab CI Runner</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2022-1-20-gitlab-ci/</guid>
    <description><![CDATA[<h3 id="设置标准的-rhelalmalinux-85-vm">设置标准的 RHEL/AlmaLinux 8.5 VM</h3>
<ol>
<li>
<p>Docker 代理设置：</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="复制到剪贴板"><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>不安全（私有）注册表：</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="复制到剪贴板"><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="安装-gitlab-runner">安装 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="复制到剪贴板"><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-注册">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="复制到剪贴板"><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>配置示例：</p>]]></description>
</item>
<item>
    <title>使用 wget 下载文件列表</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2022-1-19-wget/</guid>
    <description><![CDATA[<p>使用 <code>wget</code> 下载文件列表：</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="复制到剪贴板"><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>关于 SELinux</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2022-1-16-selinux/</guid>
    <description><![CDATA[<p>来自互联网的一些阅读材料。</p>
<h2 id="docker-默认安全选项">Docker 默认安全选项</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="复制到剪贴板"><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 过滤器</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2021-01-28-ansible-fromyaml/</guid>
    <description><![CDATA[<p>Ansible <code>from_yaml</code> 过滤器可用于简化带有格式的数据操作。</p>
<p>列表数据类型的示例：</p>
<h3 id="没有过滤器">没有过滤器</h3>
<p>我必须同时使用 <code>strip</code> 和 <code>split</code> 函数，这很容易出错。</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="复制到剪贴板"><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 在探测对等点时需要唯一的主机名或节点名，这里 glusterfs_node_hostname </span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">## 存储所有 glusterfs 节点的主机名以用于验证目的</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="使用-from_yaml-过滤器">使用 <code>from_yaml</code> 过滤器</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="复制到剪贴板"><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 在探测对等点时需要唯一的主机名或节点名，这里 glusterfs_node_hostname </span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">## 存储所有 glusterfs 节点的主机名以用于验证目的</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>重置/清理 Debian/Ubuntu 软件包的示例</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2021-1-27-remove-deb/</guid>
    <description><![CDATA[<h3 id="通过-deb-包安装">通过 .deb 包安装</h3>
<p>添加 Rancher Desktop 仓库并安装 Rancher Desktop：</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="复制到剪贴板"><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="卸载-deb-包">卸载 .deb 包</h3>
<p>您可以使用以下命令删除软件包、仓库和密钥：</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="复制到剪贴板"><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>其中 <code>keyid</code> 是运行 <code>apt-key list</code> 时包含 <code>isv:Rancher:stable</code> 的行上方的行。因此，如果我有以下 Rancher Desktop Key 块：</p>]]></description>
</item>
<item>
    <title>Ceph 地理复制模型</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2020-02-18-ceph-geo-replication-models/</guid>
    <description><![CDATA[<p><strong>概述</strong></p>
<ol>
<li>
<p>Ceph 根据复制因子在 OSD 之间实现强一致性，并根据放置组 (CRUSH MAP) 实现可靠性/可用性。</p>
</li>
<li>
<p>跨站点 (异)步同步的集群将受到性能影响，并且需要高带宽且低延迟的管道，这强烈影响 Ceph RADOS 协议（在 RBD 和对象存储上）。</p>]]></description>
</item>
<item>
    <title>重置 Linux Root 密码</title>
    <link>https://geneliu.itaghome.win/zh-cn/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/zh-cn/2020-02-13-reset-root-pwd/</guid>
    <description><![CDATA[<p></p>
<p>系统管理员可以轻松地为忘记密码的用户重置密码。但是如果系统管理员忘记了 root 密码会发生什么？本指南将向您展示如何在 Red Hat 兼容系统上重置丢失或忘记的 root 密码。</p>]]></description>
</item>
</channel>
</rss>
