<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Linux on akky blog</title>
    <link>http://blog.akky.me/tags/linux/</link>
    <description>Recent content in Linux on akky blog</description>
    <generator>Hugo</generator>
    <language>jp-ja</language>
    <lastBuildDate>Fri, 08 Dec 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://blog.akky.me/tags/linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>激安中華miniPCでKubernetesクラスタを構築する</title>
      <link>http://blog.akky.me/blog/20231207-home-k8s-lab/</link>
      <pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate>
      <guid>http://blog.akky.me/blog/20231207-home-k8s-lab/</guid>
      <description>&lt;p&gt;この記事は &lt;a href=&#34;https://adventar.org/calendars/8553&#34;&gt;whywaita Advent Calendar 2023&lt;/a&gt; 7 日目の記事です。&lt;/p&gt;&#xA;&lt;p&gt;前日は &lt;a href=&#34;https://enoki.hatenablog.com/entry/2023/12/06/224550&#34;&gt;k_enoki さんの記事&lt;/a&gt; でした。&lt;/p&gt;&#xA;&lt;p&gt;whywaita さんといえば、インフラエンジニアのイメージがあります。&#xA;今どきのインフラエンジニアといえば、Kubernetes ですよね。そこで、今回は Kubernetes の勉強を兼ねて、自宅で Kubernetes を動かすための環境を構築してみました。&#xA;お金はあまりかけたくないが、クラウドでやっても面白くないので、激安中華 miniPC を使います。&lt;/p&gt;&#xA;&lt;h2 id=&#34;今回の環境&#34;&gt;今回の環境&lt;/h2&gt;&#xA;&lt;p&gt;Amazon で &lt;a href=&#34;https://www.amazon.co.jp/gp/product/B0C2HMDB74&#34;&gt;Beelink EQ12&lt;/a&gt; x 3 台と&lt;a href=&#34;https://www.amazon.co.jp/dp/B0BWMWFCSG&#34;&gt;Beelink S12 Pro&lt;/a&gt; x 1 台を購入しました。これを Kubernetes クラスタとして構築します。&#xA;スペックは CPU: Alder Lake 4 コア、メモリ: 16GB、SSD: 500GB NVME です。&#xA;これで 1 台 3 万円弱でした。激安ですね。&#xA;3 台の EQ12 は ワーカーノード、1 台の S12 Pro はコントロールプレーンとします。&lt;/p&gt;&#xA;&lt;h2 id=&#34;os-のインストール&#34;&gt;OS のインストール&lt;/h2&gt;&#xA;&lt;p&gt;まずは OS をインストールします。今回は Ubuntu Server 22.04 LTS をインストールしました。&#xA;PXE などでかっこよく自動インストールしたかったのですが、設定が大変そうだったので、手動で USB メモリを使ってインストールしました。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lock Gnome Screen via SSH</title>
      <link>http://blog.akky.me/blog/20220605-lock-gnome-screen-via-ssh/</link>
      <pubDate>Sun, 05 Jun 2022 02:30:43 +0900</pubDate>
      <guid>http://blog.akky.me/blog/20220605-lock-gnome-screen-via-ssh/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;I want to lock gnome-session(Desktop) with a user logged in via ssh.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script&#34;&gt;Script&lt;/h2&gt;&#xA;&lt;p&gt;Save below script and execute it.&lt;/p&gt;&#xA;&lt;script src=&#34;https://gist.github.com/akriaueno/b83963eb4ce320ea21945720ac877c3d.js&#34;&gt;&lt;/script&gt;&#xA;&#xA;&lt;p&gt;There are two key points at line 10.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-gnome-screensaver-command--l&#34;&gt;1. &lt;code&gt;gnome-screensaver-command -l&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Execute &lt;code&gt;gnome-screensaver-command&lt;/code&gt; as GNOME logged in user.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-dbus_session_bus_address&#34;&gt;2. &lt;code&gt;DBUS_SESSION_BUS_ADDRESS&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Set dbus environment varibale to execute &lt;code&gt;gnome-screensaver-command&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/7776/how-do-i-lock-the-desktop-screen-via-command-line&#34;&gt;https://askubuntu.com/questions/7776/how-do-i-lock-the-desktop-screen-via-command-line&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/707984/lock-screen-with-gnome-screensaver-command-as-root-from-etc-pm-sleep-d-script&#34;&gt;https://askubuntu.com/questions/707984/lock-screen-with-gnome-screensaver-command-as-root-from-etc-pm-sleep-d-script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>CloudflareのDNSを利用しているドメインの証明書をcertbotで発行する</title>
      <link>http://blog.akky.me/blog/20220109-certbot-cloudflare-dns/</link>
      <pubDate>Sun, 09 Jan 2022 05:49:06 +0000</pubDate>
      <guid>http://blog.akky.me/blog/20220109-certbot-cloudflare-dns/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;&#xA;&lt;p&gt;Cloudflare の DNS を利用しているドメインの証明書を certbot で発行する。&#xA;ワイルドカード証明書を発行する場合、certbot を使い DNS 認証(DNS-01)で DNS レコードを手で修正していたが、Cloudflare の API を利用すれば自動化できる。さらに&lt;code&gt;certbot-dns-cloudflare&lt;/code&gt;というプラグインにより簡単に設定できるので紹介する。&lt;/p&gt;&#xA;&lt;h2 id=&#34;api-トークンの取得と設定&#34;&gt;API トークンの取得と設定&lt;/h2&gt;&#xA;&lt;p&gt;Cloudflare の&lt;code&gt;My Profile&lt;/code&gt;の&lt;code&gt;APIトークン&lt;/code&gt;&amp;gt;&lt;code&gt;トークンを作成する&lt;/code&gt;&amp;gt;&lt;code&gt;ゾーン DNS を編集する&lt;/code&gt;を選択し API トークンを発行する。&#xA;以下は設定例。&#xA;&lt;img src=&#34;http://blog.akky.me/img/cloudflare_api_token.png&#34; alt=&#34;cloudflare-api.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;発行した API トークンを含むクレデンシャルファイルを適当な場所に作成する。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo mkdir /etc/letsencrypt/cloudflare&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo vim /etc/letsencrypt/cloudflare/akky.me.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dns_cloudflare_api_token&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;lt;発行したAPIトークン&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;700&lt;/span&gt; /etc/letsencrypt/cloudflare&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; /etc/letsencrypt/cloudflare/akky.me.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;certbot-のインストール&#34;&gt;certbot のインストール&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://certbot.eff.org/instructions/&#34;&gt;公式&lt;/a&gt;の手順に従う。&#xA;今回は Web サーバが Nginx，OS が Debian buster なので snap を使ってインストールする手順が表示された。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install snapd &lt;span style=&#34;color:#75715e&#34;&gt;# snapが入ってなければ&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo snap install core; sudo snap refresh core&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo snap install --classic certbot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ln -s /snap/bin/certbot /usr/bin/certbot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;プラグインのインストール&#34;&gt;プラグインのインストール&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;certbot-dns-cloudflare&lt;/code&gt;プラグインをインストールする。&lt;/p&gt;</description>
    </item>
    <item>
      <title>正規表現でマッチしたグループを複数抽出する</title>
      <link>http://blog.akky.me/blog/20210723-shell-extract-match/</link>
      <pubDate>Fri, 23 Jul 2021 19:14:19 +0000</pubDate>
      <guid>http://blog.akky.me/blog/20210723-shell-extract-match/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;&#xA;&lt;p&gt;正規表現でマッチしたグループを複数抽出する場合はsedを使うと良い．グループが1つの場合はgrepでも&lt;code&gt;-oP&lt;/code&gt;と&lt;code&gt;\K&lt;/code&gt;で抽出できるが，グループが複数あるとできない．&lt;/p&gt;&#xA;&lt;h2 id=&#34;コード&#34;&gt;コード&lt;/h2&gt;&#xA;&lt;p&gt;i番目のグループ(&lt;code&gt;()&lt;/code&gt;で囲まれた部分)を\iで置換する．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -r &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;s/&amp;lt;正規表現&amp;gt;/&lt;span style=&#34;color:#ae81ff&#34;&gt;\i&lt;/span&gt;/g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;例&#34;&gt;例&lt;/h2&gt;&#xA;&lt;p&gt;vncのポート番号とpidを抽出する例&lt;/p&gt;&#xA;&lt;h3 id=&#34;sed&#34;&gt;sed&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ss -ltp | grep vnc &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                  0.0.0.0:5901             0.0.0.0:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;3193,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;7&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                  0.0.0.0:5902             0.0.0.0:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4404,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;7&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                  0.0.0.0:5903             0.0.0.0:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4453,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;7&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                     &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:5901                &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;3193,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                     &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:5902                &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4404,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;                                            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LISTEN    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;                     &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:5903                &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;::&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:*        users:&lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Xtigervnc&amp;#34;&lt;/span&gt;,pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4453,fd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ss -ltp | grep vnc | sed -r &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/^.*:([0-9]+).*pid=([0-9]+).*$/\1 \2/&amp;#39;&lt;/span&gt; | sort -u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5901&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3193&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5902&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5903&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4453&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;うまくいく．&lt;/p&gt;&#xA;&lt;h3 id=&#34;grep&#34;&gt;grep&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ss -ltp | grep vnc | grep -oP &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:\K(\d+).*pid=\K(\d+)&amp;#39;&lt;/span&gt; | sort -u&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3193&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4453&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後にマッチした部分のみが抽出されてしまう．&lt;/p&gt;&#xA;&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/13466/can-grep-output-only-specified-groupings-that-match&#34;&gt;https://unix.stackexchange.com/questions/13466/can-grep-output-only-specified-groupings-that-match&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qiita.com/koara-local/items/2911bd81df2420a420ad&#34;&gt;https://qiita.com/koara-local/items/2911bd81df2420a420ad&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
