tag:crieit.net,2005:https://crieit.net/users/kawai_mizugorou/feed kawai_mizugorouの投稿 - Crieit Crieitでユーザーkawai_mizugorouによる最近の投稿 2024-02-15T04:38:13+09:00 https://crieit.net/users/kawai_mizugorou/feed tag:crieit.net,2005:PublicArticle/18750 2024-02-15T04:38:13+09:00 2024-02-15T04:38:13+09:00 https://crieit.net/posts/Selenium-bot Seleniumを用いて自動チケット購入botを作ろう <pre><code class="python">import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Chrome WebDriverのパスを指定 driver_path = R"./chromedriver.exe" # Chrome WebDriverのオプションを指定 options = webdriver.ChromeOptions() # options.add_argument(&quot;--headless&quot;) # ブラウザを表示しない場合はコメントアウト ## WebDriverを起動 # webdriverの作成 service = Service(executable_path=driver_path) driver = webdriver.Chrome(service=service) driver.maximize_window() # URLを指定してページを開く url = "https://www.tokyodisneyresort.jp/hotel" driver.get(url) time.sleep(1) browser_gmenu_tdr = driver.find_element(By.XPATH, '//*[@id="js-header-globalmenu"]/ul/li[1]') browser_gmenu_tdr.click() time.sleep(2) # WebDriverを終了します driver.quit() </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/18620 2023-10-19T03:48:51+09:00 2023-12-07T02:31:44+09:00 https://crieit.net/posts/GitHub-653028931b200 GitHubの操作メモ <h1 id="1. 準備"><a href="#1.+%E6%BA%96%E5%82%99">1. 準備</a></h1> <h2 id="1-1. インストール"><a href="#1-1.+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1. インストール</a></h2> <p>【Git】<br /> Gitのインストールはインターネットで「git for windows」と検索して一番上に出てきたところをクリック<br /> ※ https://gitforwindows.org/</p> <p>【VS Code】<br /> VS Codeのインストールは下記から<br /> <a target="_blank" rel="nofollow noopener" href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a></p> <p>Gitbashに利用するエディタを登録する。<br /> 今回はVS Codeを利用するので、ダウンロード時のパスを記載して登録</p> <pre><code>git config --global core.editor "'C:\Users\<ユーザ名>\AppData\Local\Programs\Microsoft VS Code\bin\code' --wait" </code></pre> <p>【treeコマンド】<br /> ホームディレクトリ直下に<code>.bashrc</code>ファイルを作成。そのファイルに下記を記載。</p> <pre><code>alias tree='cmd //c tree //A //F' </code></pre> <p>GitBashを再起動で反映。</p> <h2 id="1-2. Gitの初期設定"><a href="#1-2.+Git%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A">1-2. Gitの初期設定</a></h2> <p>【ユーザ名登録、確認】</p> <pre><code>git config --global user.name "<GitHubに登録したユーザ名>" git config user.name </code></pre> <p>【emailの登録、確認】</p> <pre><code>git config --global user.email <GitHubに登録しているEmailアドレス> git config user.email </code></pre> <p>【editorの登録、確認】</p> <pre><code>git config --global core.editor "'C:\Users\<ユーザ名>\AppData\Local\Programs\Microsoft VS Code\bin\code' --wait" git config core.editor </code></pre> <p>【登録情報をすべての項目確認】</p> <pre><code>git config --list </code></pre> <p>設定ファイルの確認の場合は</p> <pre><code>pwd cat ~/.gitconfig </code></pre> <h2 id="1-3. ローカルリポジトリの作成"><a href="#1-3.+%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E4%BD%9C%E6%88%90">1-3. ローカルリポジトリの作成</a></h2> <h3 id="1-3-1. プロジェクトを新規作成する場合"><a href="#1-3-1.+%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88">1-3-1. プロジェクトを新規作成する場合</a></h3> <p>GitBashを開き、プロジェクトのディレクトリに移動する。そして、下記コマンドを実行。</p> <pre><code>$ git init Initialized empty Git repository in C:/Users/<ユーザ名>/GitHub/<プロジェクト名>/.git/ </code></pre> <p>すると、<code>.git</code>ディレクトリが作成される。</p> <pre><code>***@DESKTOP-M7K4QV7 MINGW64 ~/test1 (master) $ ls -al total 8 drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 ./ drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 ../ drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 .git/ $ ls -al .git total 11 drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 ./ drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 ../ -rw-r--r-- 1 toshi 197609 23 Oct 18 19:28 HEAD -rw-r--r-- 1 toshi 197609 130 Oct 18 19:28 config -rw-r--r-- 1 toshi 197609 73 Oct 18 19:28 description drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 hooks/ drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 info/ drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 objects/ drwxr-xr-x 1 toshi 197609 0 Oct 18 19:28 refs/ </code></pre> <h3 id="1-3-2. 既存プロジェクトをコピーする場合"><a href="#1-3-2.+%E6%97%A2%E5%AD%98%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88">1-3-2. 既存プロジェクトをコピーする場合</a></h3> <p>下記実行することでリモートリポジトリからローカルにワークツリーとローカルリポジトリをコピーされる。</p> <pre><code>$ git clone <リポジトリ名> </code></pre> <p>では、実際にやってみる。<br /> まずは、GitHubからコピーしたいRepositoryを選んで、クローンのURLをコピー<br /> 例</p> <pre><code>[https://github.com/<User.name>/<リポジトリ名>.git](https://github.com/<User.name>/<リポジトリ名>.git) </code></pre> <p>ローカルに新規にディレクトリを作成して、移動する。</p> <pre><code>$ pwd /c/Users/<ユーザ名>/GitHub/keisan_response </code></pre> <p>さきほどGitHub上でコピーしたURLを張り付ける</p> <pre><code>$ git clone https://github.com/<ユーザ名>/<リポジトリ名>.git Cloning into 'keisan_response'... remote: Enumerating objects: 80, done. remote: Counting objects: 100% (40/40), done. remote: Compressing objects: 100% (40/40), done. remote: Total 80 (delta 15), reused 0 (delta 0), pack-reused 40 Receiving objects: 100% (80/80), 1.30 MiB | 10.49 MiB/s, done. Resolving deltas: 100% (29/29), done. </code></pre> <h1 id="2. 基本的なコマンド"><a href="#2.+%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">2. 基本的なコマンド</a></h1> <h2 id="2-1. ステージに追加"><a href="#2-1.+%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8%E3%81%AB%E8%BF%BD%E5%8A%A0">2-1. ステージに追加</a></h2> <pre><code>$ git add <ファイル名> $ git add <ディレクトリ名> $ git add .  ←全部追加する場合 </code></pre> <h2 id="2-2. リポジトリへコミット"><a href="#2-2.+%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%B8%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88">2-2. リポジトリへコミット</a></h2> <p>ステージの内容をスナップショットでリポジトリに記録する場合</p> <pre><code>$ git commit $ git commit -m "<メッセージ>"   ←エディタを立ち上げない場合 $ git commit -v          ←ファイルへの変更内容を見てからコミットしたい場合 </code></pre> <p><code>git commit</code>とターミナルに打つと、エディタが立ち上がるので、変更理由を記載して保存&エディタを閉じる。<br /> そしてターミナルに戻ると、下記のように変更された旨が記載されている。(今回は変更理由を「initial commit」をした」</p> <pre><code>$ git commit [master (root-commit) a2605d6] initial commit  ←エディタに記載した変更理由 1 file changed, 1 insertion(+)   ←1ファイルと1行が追加された旨 create mode 100644 index.html </code></pre> <h2 id="2-3. 変更状況を確認する"><a href="#2-3.+%E5%A4%89%E6%9B%B4%E7%8A%B6%E6%B3%81%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B">2-3. 変更状況を確認する</a></h2> <p>コマンドは<code>git status</code>を打つ。<br /> ①ステージのインデックスとワークツリーの情報を比較することで、前回ステージに追加してからローカルで変更した差分が確認できる。<br /> ②リポジトリとステージのインデックスを比較することで、前回コミットしてからステージに追加されたファイルの差分を確認できる。</p> <p>【何も変更が無い場合】</p> <pre><code>MINGW64 ~/test1 (master) $ git status On branch master nothing to commit, working tree clean </code></pre> <p>【ワークツリーで編集】<br /> エディタを開いてindex.htmlを編集して保存した後に差分を確認する。</p> <pre><code>$ git status On branch master Changes not staged for commit:  ←ステージに追加されていない変更がある旨が記載されている。 (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.html  ←変更があったファイル名 no changes added to commit (use "git add" and/or "git commit -a") </code></pre> <p>【ステージに追加】</p> <pre><code>$ git add index.html $ git status On branch master Changes to be committed:  ←commitすべき変更がある旨が記載されている (use "git restore --staged <file>..." to unstage) modified: index.html ←変更があったファイル名 </code></pre> <p>【commit】</p> <pre><code>$ git commit [master 4e3e8ce] git statusコマンドを追記 1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working tree clean </code></pre> <p>commitしたので、commitすべき変更が無い旨が記載されている。</p> <h2 id="2-4. 変更差分を確認する"><a href="#2-4.+%E5%A4%89%E6%9B%B4%E5%B7%AE%E5%88%86%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B">2-4. 変更差分を確認する</a></h2> <h3 id="2-4-1. 差分確認コマンド"><a href="#2-4-1.+%E5%B7%AE%E5%88%86%E7%A2%BA%E8%AA%8D%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">2-4-1. 差分確認コマンド</a></h3> <p>【git add する前の変更分】<br /> ワークツリーとステージのインデックスとの差分</p> <pre><code>$ git diff $ git diff <ファイル名> </code></pre> <p>【git add した後の変更分】<br /> ステージとリポジトリとの差分</p> <pre><code>$ git diff --staged </code></pre> <h3 id="2-4-2. 差分確認の実施例"><a href="#2-4-2.+%E5%B7%AE%E5%88%86%E7%A2%BA%E8%AA%8D%E3%81%AE%E5%AE%9F%E6%96%BD%E4%BE%8B">2-4-2. 差分確認の実施例</a></h3> <p>【git addする前の変更差分】<br /> index.htmlファイルをエディタで編集して保存した状態から下記を実行</p> <pre><code>$ git diff diff --git a/index.html b/index.html index 306985e..c99fae3 100644 --- a/index.html +++ b/index.html @@ -1,2 +1,3 @@ <h1>Gitチュートリアル</h1>h1> <p>git status</p> +<p>git diff</p>  ←変更差分 </code></pre> <p>【git addした後の変更分】</p> <pre><code>$ git add index.html $ git diff </code></pre> <p>何も表示されない。git diffコマンドはワークツリーとステージとの差分確認するコマンドだから。<br /> ステージとリポジトリとの差分確認は下記の<code>--staged</code>オプションをつけて実行する。</p> <pre><code>$ git diff --staged diff --git a/index.html b/index.html index 306985e..c99fae3 100644 --- a/index.html +++ b/index.html @@ -1,2 +1,3 @@ <h1>Gitチュートリアル</h1>h1> <p>git status</p> +<p>git diff</p>   ←変更差分の箇所が記載されている </code></pre> <p>commitした後に<code>git diff</code>と<code>git diff --stafed</code>を実行しても何も表示されない</p> <pre><code>$ git commit [master 64d26f1] git diffを追記 1 file changed, 1 insertion(+) ****@DESKTOP-M7K4QV7 MINGW64 ~/test1 (master) $ git diff ***@DESKTOP-M7K4QV7 MINGW64 ~/test1 (master) $ git diff --staged </code></pre> <p>ステージに追加したり、commitしたりする場合は事前に変更差分を確認する癖をつけよう。</p> <h2 id="2-5. 変更履歴を確認する"><a href="#2-5.+%E5%A4%89%E6%9B%B4%E5%B1%A5%E6%AD%B4%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B">2-5. 変更履歴を確認する</a></h2> <h3 id="2-5-1. 変更履歴確認の基本コマンド"><a href="#2-5-1.+%E5%A4%89%E6%9B%B4%E5%B1%A5%E6%AD%B4%E7%A2%BA%E8%AA%8D%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">2-5-1. 変更履歴確認の基本コマンド</a></h3> <pre><code>$ git log #1行で表示する場合 $ git log --oneline #ファイルの変更差分を表示する $ git log -p <ファイル名> #表示するコミット数を制限する $ git log -n <コミット数> </code></pre> <h3 id="2-5-2. 変更履歴確認の実施例"><a href="#2-5-2.+%E5%A4%89%E6%9B%B4%E5%B1%A5%E6%AD%B4%E7%A2%BA%E8%AA%8D%E3%81%AE%E5%AE%9F%E6%96%BD%E4%BE%8B">2-5-2. 変更履歴確認の実施例</a></h3> <pre><code>$ git log commit 64d26f180b110c76a8e5647fa6a233f9ab8c0abe (HEAD -> master) Author: <ユーザ名> <***********@gmail.com> Date: Thu Oct 19 00:33:41 2023 +0900 git diffを追記 commit 4e3e8ce45e3d41e34222613eda7750dec8a850c7 Author: <ユーザ名> <***********@gmail.com> Date: Thu Oct 19 00:21:29 2023 +0900 git statusコマンドを追記 commit a2605d66d64815b94ff3a1d0955cfdf81723b515 Author: <ユーザ名> <***********@gmail.com> Date: Wed Oct 18 23:08:43 2023 +0900 initial commit </code></pre> <h2 id="2-6. ファイル削除の記録"><a href="#2-6.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%89%8A%E9%99%A4%E3%81%AE%E8%A8%98%E9%8C%B2">2-6. ファイル削除の記録</a></h2> <h3 id="2-6-1. ファイル削除の基本コマンド"><a href="#2-6-1.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%89%8A%E9%99%A4%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">2-6-1. ファイル削除の基本コマンド</a></h3> <p>【ファイルごと削除する場合】<br /> commitされたGitから削除されるとともに、ワークツリーのファイルも消える。</p> <pre><code>$ git rm <ファイル名> $ git rm -r <ディレクトリ名> </code></pre> <p>【ファイルを残したい場合】<br /> commitされたGitから削除するが、ワークツリーのファイルは残したい場合には下記を実行する。</p> <pre><code>$ git rm --cached <ファイル名> </code></pre> <h3 id="2-6-2. ファイル削除の実行例"><a href="#2-6-2.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%89%8A%E9%99%A4%E3%81%AE%E5%AE%9F%E8%A1%8C%E4%BE%8B">2-6-2. ファイル削除の実行例</a></h3> <h4 id="2-6-2-1. ファイルごと削除する場合"><a href="#2-6-2-1.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%94%E3%81%A8%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88">2-6-2-1. ファイルごと削除する場合</a></h4> <p>ommitされたGitから削除されるとともに、ワークツリーのファイルも削除したい場合</p> <p>【ワークツリー上のファイルを削除する】</p> <pre><code>$ ls index.html $ git rm index.html rm 'index.html' $ ls ←ワークツリーから削除されている。 $ git status On branch master Changes to be committed: ←commitすべき情報がある旨 (use "git restore --staged <file>..." to unstage) deleted: index.html ←変更差分 </code></pre> <p>削除された情報がステージにあげられている。</p> <p>【元に戻す方法】<br /> 削除されたファイルをもとに戻す方法</p> <pre><code>$ git reset HEAD index.html Unstaged changes after reset: D index.html $ ls ←ワークツリーから削除されている $ git status On branch master Changes not staged for commit:   ←ステージからも削除されている (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) deleted: index.html no changes added to commit (use "git add" and/or "git commit -a") $ git checkout index.html Updated 1 path from the index $ ls index.html    ←復活 $ git status On branch master nothing to commit, working tree clean </code></pre> <h4 id="2-6-2-2. ファイルを残したい場合"><a href="#2-6-2-2.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%AE%8B%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88">2-6-2-2. ファイルを残したい場合</a></h4> <p>commitされたGitから削除するが、ワークツリーのファイルは残したい場合<br /> 【削除する変更をステージに追加する】</p> <pre><code>$ git rm --cached index.html rm 'index.html' $ ls index.html ←ワークツリーには存在している $ git status On branch master Changes to be committed:   ←commitする変更がある旨 (use "git restore --staged <file>..." to unstage) deleted: index.html ←削除する変更がステージに追加されている Untracked files:     ←リポジトリに削除されたのでワークツリーに新規ファイル(追跡されていない)ファイルが存在している旨 (use "git add <file>..." to include in what will be committed) index.html </code></pre> <p>【元に戻す】</p> <pre><code>$ git reset HEAD index.html $ git status On branch master nothing to commit, working tree clean $ ls index.html </code></pre> <h2 id="2.7. ファイルの移動を記録する"><a href="#2.7.+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%A7%BB%E5%8B%95%E3%82%92%E8%A8%98%E9%8C%B2%E3%81%99%E3%82%8B">2.7. ファイルの移動を記録する</a></h2> <h3 id="2.7.1 ファイル移動の基本コマンド"><a href="#2.7.1+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E7%A7%BB%E5%8B%95%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">2.7.1 ファイル移動の基本コマンド</a></h3> <pre><code>$ git mv <旧ファイル> <新ファイル> </code></pre> <h3 id="2.7.3 ファイル移動の実行例"><a href="#2.7.3+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E7%A7%BB%E5%8B%95%E3%81%AE%E5%AE%9F%E8%A1%8C%E4%BE%8B">2.7.3 ファイル移動の実行例</a></h3> <pre><code>$ git mv index.html index2.html $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) renamed: index.html -> index2.html $ git mv index2.html index.html $ git status On branch master nothing to commit, working tree clean </code></pre> <h2 id="2.8. GitHubにプッシュ"><a href="#2.8.+GitHub%E3%81%AB%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5">2.8. GitHubにプッシュ</a></h2> <p>自分が開発したコードをチームのメンバと共有したいときや、ローカルの内容をGitHubに保存したいときに、commitしてからGitHubにプッシュする。</p> <h3 id="2.8.1. プッシュする基本コマンド"><a href="#2.8.1.+%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B%E5%9F%BA%E6%9C%AC%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">2.8.1. プッシュする基本コマンド</a></h3> <p>【リモートリポジトリを新規追加する】</p> <pre><code>$ git remote add origin <URL> </code></pre> <p>originというショートカットでurlのリモートリポジトリに登録する、という意味。<br /> これをすることで、毎回URLを記載しなくてもこの名前で登録することが簡単になる。<br /> ※originは、リモートリポジトリからクローンしてきた際に元ファイルを慣例的にoriginとされている。</p> <p>【リモートリポジトリへ送信する】</p> <pre><code>$ git push <リモート名> <ブランチ名> $ git push origin master </code></pre> <h3 id="2.8.2 新規リポジトリ作成"><a href="#2.8.2+%E6%96%B0%E8%A6%8F%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E4%BD%9C%E6%88%90">2.8.2 新規リポジトリ作成</a></h3> <p>「Settings」 > 「Developer Settings」 > 「Personal access tokens」<br /> から、各種項目に情報を入力するとトークンが発行される。<br /> 発行されたトークンはメモする。(流出しないように)</p> <p>「Your profile」 > 「Repositories」から新規作成<br /> 作成されたら、画面に「.. or push an exisiting repository from command line」と記載された欄にあるコマンドをコピーし<br /> GitBashに貼り付け実行する。下記のようになっているはず。</p> <pre><code>$ git remote add origin <URL> $ git branch -M main $ git push -u origin master </code></pre> <h3 id="2.8.3 バージョイン管理から除外したいファイル"><a href="#2.8.3+%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%82%A4%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%8B%E3%82%89%E9%99%A4%E5%A4%96%E3%81%97%E3%81%9F%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB">2.8.3 バージョイン管理から除外したいファイル</a></h3> <p><strong>.gitignore</strong>ファイルに指定する。<br /> 書き方は下記</p> <pre><code>#ファイル指定 index.html #ルートディレクトリを指定 /root.html #ディレクトリ以下を除外 dir / #/以外の文字列にマッチ /*/*.css </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/18307 2022-10-17T01:50:47+09:00 2022-12-03T04:13:34+09:00 https://crieit.net/posts/Docker-634c36677647a Docker練習メモ <p>Docklerのダウンロード</p> <pre><code># yum -y install docker # 1.Dockerコマンドの基礎 ## 1-1.imageの管理 ### imageのダウンロード </code></pre> <p>[opc@publicpc1 ~]$ docker pull nginx<br /> Using default tag: latest<br /> latest: Pulling from library/nginx<br /> 214ca5fb9032: Pull complete<br /> f0156b83954c: Pull complete<br /> 5c4340f87b72: Pull complete<br /> 9de84a6a72f5: Pull complete<br /> 63f91b232fe3: Pull complete<br /> 860d24db679a: Pull complete<br /> Digest: sha256:2c72b42c3679c1c819d46296c4e79e69b2616fa28bea92e61d358980e18c9751<br /> Status: Downloaded newer image for nginx:latest<br /> docker.io/library/nginx:latest</p> <pre><code><br />### ローカルにあるdockerイメージの一覧を表示 </code></pre> <p>[opc@publicpc1 ~]$ docker images<br /> REPOSITORY TAG IMAGE ID CREATED SIZE<br /> nginx latest 7425d3a7c478 4 days ago 141MB<br /> hello-world latest feb5d9fea6a5 7 months ago 13.3kB<br /> ```</p> <pre><code>[opc@publicpc1 ~]$ docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT 7425d3a7c478 4 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B 4 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B 4 days ago /bin/sh -c #(nop) EXPOSE 80 0B 4 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B 4 days ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB 4 days ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB 4 days ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB 4 days ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB 4 days ago /bin/sh -c set -x && addgroup --system -… 61.1MB 4 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B 4 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.2 0B 4 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.6 0B 4 days ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B 4 days ago /bin/sh -c #(nop) CMD ["bash"] 0B 4 days ago /bin/sh -c #(nop) ADD file:4a0bb88956083aa56… 80.4MB </code></pre> <h3 id="ローカルにあるイメージの削除"><a href="#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AB%E3%81%82%E3%82%8B%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E5%89%8A%E9%99%A4">ローカルにあるイメージの削除</a></h3> <pre><code>[opc@publicpc1 ~]$ docker rmi nginx Untagged: nginx:latest Untagged: nginx@sha256:2c72b42c3679c1c819d46296c4e79e69b2616fa28bea92e61d358980e18c9751 Deleted: sha256:7425d3a7c478efbeb75f0937060117343a9a510f72f5f7ad9f14b1501a36940c Deleted: sha256:c263493a5dc62ebefab0486e0019affdd5f663aad79cb5cf67f1ef21b2aba3c4 Deleted: sha256:c0a19d1cdcd1bebfd81765ad4971708d177b06a1cb0eaf0bb721745fd8d7f055 Deleted: sha256:c953b0422ec13844d8700eaf0159a800fba90fa6321f6ce1adc57f7f8566a0f1 Deleted: sha256:f121c2b08c669e9bb8e37bdc4ca0f32047d1b37f3ca3e3e302d9d1350301ad0b Deleted: sha256:138bdf299d05c844ac8833a0a2227499678214d264c3f6dde62cd4c9fb134932 Deleted: sha256:fd95118eade99a75b949f634a0994e0f0732ff18c2573fabdfc8d4f95b092f0e </code></pre> <h2 id="1-2.コンテナの操作"><a href="#1-2.%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E6%93%8D%E4%BD%9C">1-2.コンテナの操作</a></h2> <h3 id="dockerの起動"><a href="#docker%E3%81%AE%E8%B5%B7%E5%8B%95">dockerの起動</a></h3> <p>docker run <イメージ名> [:タグ名] コマンド</p> <pre><code># docker run centos:6 cat /etc/redhat-release Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. CentOS release 6.10 (Final) </code></pre> <p>そのほかにも、nginxというコンテナ名で起動。その場合は「--name」オプションをつける。</p> <pre><code>[opc@publicpc1 ~]$ docker run --publish 80:80 --name nginx nginx #--publishは「-p」でもよい。 #80:80は、ホスト側のポートが80で、コンテナ側が80ということ #host側はなんでもよい #nginはデフォルトで80番ポートをオープンにしている </code></pre> <p>バックグラウンドで起動したい場合は以下<br /> <code>detach</code>することでターミナルからコンテナプロセスから切断することでアウトプットが返ってこなくなる。</p> <pre><code>docker run -p 80:80 --detach nginx </code></pre> <h3 id="起動中のコンテナ一覧"><a href="#%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E4%B8%80%E8%A6%A7">起動中のコンテナ一覧</a></h3> <pre><code>[opc@publicpc1 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES af082867c083 nginx "/docker-entrypoint.…" 33 seconds ago Up 31 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx </code></pre> <p>動作終了したコンテナも含めて表示する場合は「-a」おオプションをつける。</p> <h3 id="コンテナの停止"><a href="#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E5%81%9C%E6%AD%A2">コンテナの停止</a></h3> <pre><code>docker stop <コンテナid> </code></pre> <p>停止したコンテナも含めてコンテナの一覧を表示したい場合は</p> <pre><code>[opc@publicpc1 ~]$ docker ps -all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES af082867c083 nginx "/docker-entrypoint.…" 5 minutes ago Exited (0) 6 seconds ago nginx [opc@publicpc1 ~]$ </code></pre> <h3 id="コンテナの削除"><a href="#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E5%89%8A%E9%99%A4">コンテナの削除</a></h3> <pre><code>[opc@publicpc1 ~]$ docker rm <コンテナid> </code></pre> <h3 id="dockerのコンテナ内のシェルを操作"><a href="#docker%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%86%85%E3%81%AE%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%92%E6%93%8D%E4%BD%9C">dockerのコンテナ内のシェルを操作</a></h3> <pre><code>$ docker exec --interractive --tty <コンテナid> bash </code></pre> <p>でコンテナ内のシェルの中に入ることができる。<br /> <code>bash</code>じゃなくても<code>sh</code>でもよい。<br /> <code>--interractive</code>と<code>--tty</code>をまとめて<code>-it</code>と表記してもよい。</p> <pre><code>[opc@publicpc1 ~]$ docker exec -it c7822718378e bash root@c7822718378e:/# pwd / root@c7822718378e:/# whoami root root@c7822718378e:/# cd /home/ /home root@c7822718378e:~# exit exit </code></pre> <p>下記で、CentOS6のコンテナ内のシェルでコマンドを実行。</p> <pre><code># docker run -it --name centosA centos:6 /bin/bash </code></pre> <p>コンテナから一時的に抜けるには、[Ctrl+P]+[Ctrl+Q]を実行する。この状態ではバックグラウンドではコンテナが実行中なので<br /> 再接続するためには、 docker attach</p> <pre><code># docker attach centosA1 Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. [root@b6067546d2da /]# </code></pre> <p>コンテナを抜けて終了するためにはexitする。</p> <pre><code>[root@b6067546d2da /]# exit exit [root@webpractice ~]# docker ps Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES </code></pre> <p>コンテナの再開には「docker start コンテナ名またはコンテナID」を実行する。</p> <h2 id="1-3.コンテナイメージの作成"><a href="#1-3.%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%9C%E6%88%90">1-3.コンテナイメージの作成</a></h2> <p>まずは上書きしたいコンテナを調べる</p> <pre><code>[root@publicpc1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c7822718378e nginx "/docker-entrypoint.…" 6 days ago Up 6 days 0.0.0.0:80->80/tcp, :::80->80/tcp modest_bassi </code></pre> <p>続いて、上書きしたいコンテナの中に入ってindex.htmlファイルを上書く。</p> <pre><code>[root@publicpc1 ~]# docker exec -it c7822718378e bash root@c7822718378e:/# echo "Hello Taro">/usr/share/nginx/html/index.html root@c7822718378e:/# exit exit </code></pre> <p>上書きしたコンテナを新規にイメージを作成</p> <pre><code>[root@publicpc1 ~]# docker commit c7822718378e hello_Taro sha256:ddb0b29808eb56539258060046bf06fdd12587a0057648f8d0714a4e40c11643 </code></pre> <p>上書きした元のコンテナを停止。</p> <pre><code>[root@publicpc1 ~]# docker stop c7822718378e c7822718378e </code></pre> <p>新規に作成したイメージからコンテナを起動。<br /> 注意点として、ローカル側のポートは使われていないポートにすること。<br /> 今回は8080番ポートを使用する。</p> <pre><code>[root@publicpc1 ~]# docker run -p 8080:80 -d --name hello_Taro hello_Taro 0931b542971f319c69eff05962efd69618a147064520b59396596f38df85b786 </code></pre> <p>ちゃんと接続できる確認。</p> <pre><code>[root@publicpc1 ~]# curl localhost:8080 Hello Taro </code></pre> <p>できました。</p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/18285 2022-08-21T03:02:03+09:00 2023-02-28T06:38:46+09:00 https://crieit.net/posts/OCI-Linux OCIでディスク追加&Linuxのパーティション/LVM拡張 <h1 id="1.ディスク追加"><a href="#1.%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E8%BF%BD%E5%8A%A0">1.ディスク追加</a></h1> <h2 id="1.1. 新規ブロックボリュームを作成"><a href="#1.1.+%E6%96%B0%E8%A6%8F%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E6%88%90">1.1. 新規ブロックボリュームを作成</a></h2> <p>Webコンソールで、<br /> 「ストレージ」>「ブロックボリューム」<br /> から新規ディスク作成。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fa3e8f18f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fa3e8f18f.png?mw=700" alt="image.png" /></a></p> <h2 id="1.2. インスタンスにアタッチ"><a href="#1.2.+%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AB%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81">1.2. インスタンスにアタッチ</a></h2> <p>対象インスタンスに移動し、<br /> 「アタッチされたブロックボリューム」>「ブロックボリュームのアタッチ」<br /> アタッチメントタイプはiSCSIを選択。</p> <p><a href="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fd8f44d6e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fd8f44d6e.png?mw=700" alt="image.png" /></a></p> <h2 id="1.3. アタッチされたディスクをOSに認識させる"><a href="#1.3.+%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81%E3%81%95%E3%82%8C%E3%81%9F%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%82%92OS%E3%81%AB%E8%AA%8D%E8%AD%98%E3%81%95%E3%81%9B%E3%82%8B">1.3. アタッチされたディスクをOSに認識させる</a></h2> <p>コンソール上で「アタッチ済」になっていてもOSではまだ認識していない。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fea2a6373.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fea2a6373.png?mw=700" alt="image.png" /></a></p> <pre><code class="shell-session">$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk tqsda1 8:1 0 100M 0 part /boot/efi tqsda2 8:2 0 1G 0 part /boot mqsda3 8:3 0 45.5G 0 part tqocivolume-root 252:0 0 35.5G 0 lvm / mqocivolume-oled 252:1 0 10G 0 lvm /var/oled </code></pre> <p>iSCSIコマンドを新規ディスクのアタッチ対象サーバで実行する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fef18739f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046300fef18739f.png?mw=700" alt="image.png" /></a><br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046301004fe916c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046301004fe916c.png?mw=700" alt="image.png" /></a></p> <p>記載されているコマンドを1行ずつ、実行結果を確認しながら実行していく。<br /> 3行実行後に見てみると認識されている。</p> <pre><code class="shell"># lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk tqsda1 8:1 0 100M 0 part /boot/efi tqsda2 8:2 0 1G 0 part /boot mqsda3 8:3 0 45.5G 0 part tqocivolume-root 252:0 0 35.5G 0 lvm / mqocivolume-oled 252:1 0 10G 0 lvm /var/oled sdb 8:16 0 50G 0 disk </code></pre> <p>MOUNTPOINTに何も記載されていないので、まだ新規追加されたディスクをOSは認識しているがマウントされていないので、このディスクに操作を行えない。</p> <h1 id="2. パーティショニング"><a href="#2.+%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0">2. パーティショニング</a></h1> <p>パーティションテーブルの表示</p> <pre><code class="shell"># parted /dev/sda print Model: ORACLE BlockVolume (scsi) Disk /dev/sda: 53.7GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 106MB 105MB fat16 EFI System Partition boot, esp 2 106MB 1180MB 1074MB xfs 3 1180MB 50.0GB 48.8GB lvm </code></pre> <h2 id="2.1 ①partedコマンドでパーティション作成"><a href="#2.1+%E2%91%A0parted%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%9C%E6%88%90">2.1 ①partedコマンドでパーティション作成</a></h2> <p>partedコマンドを使用して新しいパーティション作成。<br /> fdiskコマンドは2TB以下の場合に利用。2TB以上の場合はpartedコマンド,gdiskコマンド。</p> <pre><code class="shell"># parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel New disk label type? msdos (parted) mkpart Partition name? []? userdata File system type? [ext2]? xfs Start? 2048s End? 10GB (parted) quit Information: You may need to update /etc/fstab. </code></pre> <p>2個目のパーティションを作成</p> <pre><code class="shell"># parted /dev/sdc GNU Parted 3.2 Using /dev/sdc Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mkpart Partition type? primary/extended? primary File system type? [ext2]? xfs Start? 10GB End? 30GB (parted) q Information: You may need to update /etc/fstab. </code></pre> <p>ファイルシステムは以下が参考になる。<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/sion_cojp/items/c8e015db39ddbf43012e">https://qiita.com/sion_cojp/items/c8e015db39ddbf43012e</a></p> <pre><code class="shell"># udevadm settle </code></pre> <p>状況把握</p> <pre><code class="shell"># parted /dev/sdc print Model: ORACLE BlockVolume (scsi) Disk /dev/sdc: 53.7GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 10.0GB 9999MB primary 2 10.0GB 30.0GB 20.0GB primary </code></pre> <p>partedコマンドで作成したパーティションは以下の手順でファイルシステムを作成する。</p> <pre><code class="shell"># mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=610304 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=2441216, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 </code></pre> <p>もしファイルシステムがext4の場合は</p> <pre><code>mkfs.ext4 </code></pre> <p>状況把握</p> <pre><code class="shell"># parted /dev/sdc print Model: ORACLE BlockVolume (scsi) Disk /dev/sdc: 53.7GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 10.0GB 9999MB primary xfs 2 10.0GB 30.0GB 20.0GB primary xfs 3 30.0GB 53.7GB 23.7GB extended </code></pre> <p>partedコマンドで状況把握</p> <pre><code class="shell"># parted /dev/sdc print Model: ORACLE BlockVolume (scsi) Disk /dev/sdc: 53.7GB Sector size (logical/physical): 512B/4096B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 10.0GB 9999MB primary 2 10.0GB 30.0GB 20.0GB primary 3 30.0GB 53.7GB 23.7GB extended </code></pre> <h2 id="2.2 ②fdiskコマンドでパーティション作成"><a href="#2.2+%E2%91%A1fdisk%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E4%BD%9C%E6%88%90">2.2 ②fdiskコマンドでパーティション作成</a></h2> <p>2個目のパーティション作成。<br /> fdiskコマンドは2TB以下の場合に利用。2TB以上の場合はgdiskコマンドやartedコマンド。</p> <pre><code class="shell"># fdisk /dev/sdc Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-104857599, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): 54857599 Created a new partition 1 of type 'Linux' and of size 26.2 GiB. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (2-4, default 2): First sector (54857600-104857599, default 54857728): Last sector, +sectors or +size{K,M,G,T,P} (54857728-104857599, default 104857599): Created a new partition 2 of type 'Linux' and of size 23.9 GiB. Command (m for help): t Partition number (1,2, default 2): Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'. Command (m for help): w    ←書き込み The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. </code></pre> <p>fdiskコマンドで状況把握</p> <pre><code class="shell"># fdisk -l /dev/sdc Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 1048576 bytes Disklabel type: dos Disk identifier: 0x538e2757 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 54857599 54855552 26.2G 8e Linux LVM /dev/sdb2 54857728 104857599 49999872 23.9G 8e Linux LVM </code></pre> <h2 id="2.3 LVM作成"><a href="#2.3+LVM%E4%BD%9C%E6%88%90">2.3 LVM作成</a></h2> <p>LVを作成していく。</p> <h3 id="2.3.1 Physical Volume作成"><a href="#2.3.1+Physical+Volume%E4%BD%9C%E6%88%90">2.3.1 Physical Volume作成</a></h3> <p>対象を確認。</p> <pre><code class="shell"># lsblk sdb 8:16 0 50G 0 disk ├─sdb1 8:17 0 26.2G 0 part ├─sdb2 8:18 0 23.9G 0 part </code></pre> <p>対象に対して作成</p> <pre><code class="shell-session"># pvcreate /dev/sdb1 /dev/sdb2 Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdb2" successfully created. </code></pre> <p>確認。</p> <pre><code class="shell"># pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- <26.16g <26.16g /dev/sdb2 lvm2 --- 23.84g 23.84g </code></pre> <h3 id="2.3.2 Volume Group作成"><a href="#2.3.2+Volume+Group%E4%BD%9C%E6%88%90">2.3.2 Volume Group作成</a></h3> <p>作成。</p> <pre><code class="shell"># vgcreate vg01 /dev/sdb1 Volume group "vg01" successfully created # vgcreate vg02 /dev/sdb2 Volume group "vg02" successfully created </code></pre> <p>確認。</p> <pre><code class="shell"># vgs VG #PV #LV #SN Attr VSize VFree vg01 1 0 0 wz--n- 26.15g 26.15g vg02 1 0 0 wz--n- <23.84g <23.84g </code></pre> <h3 id="2.3.3 Logical Volume作成"><a href="#2.3.3+Logical+Volume%E4%BD%9C%E6%88%90">2.3.3 Logical Volume作成</a></h3> <p>作成</p> <pre><code class="shell"># lvcreate -n lv01 -l +100%FREE vg01 Logical volume "lv01" created. # lvcreate -n lv02 -l +100%FREE vg02 Logical volume "lv02" created. </code></pre> <p>確認</p> <pre><code class="shell"># lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-a----- 26.15g lv02 vg02 -wi-a----- <23.84g </code></pre> <h2 id="2.4 ファイルシステムの作成&マウント"><a href="#2.4+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E4%BD%9C%E6%88%90%EF%BC%86%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88">2.4 ファイルシステムの作成&マウント</a></h2> <p>作成したブロックデバイスにファイルシステムを作成する。<br /> ファイルシステムがxfsの場合は以下。</p> <pre><code class="shell"># mkfs.xfs /dev/vg01/lv01 meta-data=/dev/vg01/lv01 isize=512 agcount=4, agsize=1713920 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=6855680, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=3347, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # mkfs.xfs /dev/vg02/lv02 meta-data=/dev/vg02/lv02 isize=512 agcount=4, agsize=1562368 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=6249472, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=3051, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 </code></pre> <p>もしファイルシステムがext4の場合は</p> <pre><code>mkfs.ext4 </code></pre> <p>ファイルシステムの手動マウント。</p> <pre><code class="shell"># mount /dev/vg01/lv01 /mnt/newspace1 # mount /dev/vg02/lv02 /mnt/newspace2 </code></pre> <p>または</p> <pre><code class="shell"># mount /dev/sdb1 /mnt/newspace </code></pre> <p>現在マウントされてるファイルシステム、マウントポイントを表示。</p> <pre><code class="shell"># mount|grep sdb1 /dev/sdb1 on /mnt/newspace type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) </code></pre> <h3 id="2.4.1 ファイルシステムの永続マウント"><a href="#2.4.1+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E6%B0%B8%E7%B6%9A%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88">2.4.1 ファイルシステムの永続マウント</a></h3> <p>今のままだとOS再起動時にマウントされない。<br /> /etc/fstabにエントリーを追加。</p> <p>まずは情報確認。</p> <pre><code class="shell"># lsblk -fp NAME FSTYPE LABEL UUID MOUNTPOINT /dev/sda tq/dev/sda1 vfat 2314-8847 /boot/efi tq/dev/sda2 xfs a619a666-d067-48a1-84c0-597037623f97 /boot mq/dev/sda3 LVM2_member 5QtWJg-49vg-4Ces-2Iv3-MRP5-dNdG-nLQwgd tq/dev/mapper/ocivolume-root xfs b74c7d6e-a842-4ab7-a47e-2ac332edaa3d / mq/dev/mapper/ocivolume-oled xfs 0950a10f-ab7a-4ade-81df-abfe0b973620 /var/oled /dev/sdb /dev/sdb1 xfs 1f50f554-f853-4ca1-84a3-f478a42a8b5e /mnt/newspace /dev/sdb2 xfs 5a6d9dcc-ab9f-4dc0-a9a1-08f596d7b7a0 /mnt/newspace2 </code></pre> <p>/etc/fstabに追加する。</p> <pre><code class="shell">#### UUID=1f50f554-f853-4ca1-84a3-f478a42a8b5e /mnt/newspace xfs defaults 0 0 </code></pre> <p>第1フィールド UUID<br /> 第2フィールド マウントポイント<br /> 第3フィールド ファイルシステム(xfsやext4)<br /> 第4フィールド オプションをカンマ区切りで記入。なければ「defaults」<br /> 第5フィールド 0<br /> 第6フィールド xfsファイルシステムの場合は0。ext4ファイルシステムの場合、ルートファイルシステムには1を、その他は2を。</p> <h1 id="3.ディスク拡張"><a href="#3.%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E6%8B%A1%E5%BC%B5">3.ディスク拡張</a></h1> <h2 id="3.1.パーティション拡張"><a href="#3.1.%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E6%8B%A1%E5%BC%B5">3.1.パーティション拡張</a></h2> <h3 id="3.1.1 OCIコンソールからオンラインディスク拡張とOS認識"><a href="#3.1.1+OCI%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%8B%E3%82%89%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E6%8B%A1%E5%BC%B5%E3%81%A8OS%E8%AA%8D%E8%AD%98">3.1.1 OCIコンソールからオンラインディスク拡張とOS認識</a></h3> <p>コンソールからオンラインでディスク拡張可能。今回は50GBから65GBに拡張した。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b15633467219304630cd5cec81a6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b15633467219304630cd5cec81a6.png?mw=700" alt="image.png" /></a></p> <p>まずは現在OSが認識しているディスクサイズ。</p> <pre><code class="shell"># fdisk -l /dev/sdb Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors  ←50ギビバイト Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 1048576 bytes Disklabel type: gpt Disk identifier: 921F02F5-8639-4525-9738-B75553F5F587 Device Start End Sectors Size Type /dev/sdb1 2048 19531775 19529728 9.3G Linux filesystem  ←9.3ギビバイト /dev/sdb2 19531776 104857566 85325791 40.7G Linux filesystem  ←40.7ギビバイト </code></pre> <p>まだ50ギビバイトしかOSに認識されていないので、拡張した65ギビバイトまで認識されるように再スキャンさせる。</p> <pre><code class="shell"># echo 1&gt;/sys/class/block/sdb/device/rescan   ←sdbの部分は場合による。ブートボリュームの場合はsda </code></pre> <p>再度、確認する。</p> <pre><code class="shell"># fdisk -l /dev/sdb GPT PMBR size mismatch (104857599 != 136314879) will be corrected by write.  ←余白ができた事が記載されている The backup GPT table is not on the end of the device. This problem will be corrected by write. Disk /dev/sdb: 65 GiB, 69793218560 bytes, 136314880 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 1048576 bytes Disklabel type: gpt Disk identifier: 921F02F5-8639-4525-9738-B75553F5F587 Device Start End Sectors Size Type /dev/sdb1 2048 19531775 19529728 9.3G Linux filesystem /dev/sdb2 19531776 104857566 85325791 40.7G Linux filesystem </code></pre> <h3 id="3.1.2 パーティションを再定義"><a href="#3.1.2+%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%86%8D%E5%AE%9A%E7%BE%A9">3.1.2 パーティションを再定義</a></h3> <p>拡張させるパーティションは最後尾にいるパーティション。<br /> パーティション拡張させる前にまずは既存のパーティション定義を削除する。</p> <pre><code class="shell"># fdisk -/dev/sdb Command (m for help): p Disk /dev/sdb: 55 GiB, 59055800320 bytes, 115343360 sectors ~ Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 54857599 54855552 26.2G 8e Linux LVM /dev/sdb2 54857728 104857599 49999872 23.9G 8e Linux LVM ~ Command (m for help): d Partition number (1,2, default 2): 2 Command (m for help): p Disk /dev/sdb: 55 GiB, 59055800320 bytes, 115343360 sectors ~ Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 54857599 54855552 26.2G 8e Linux LVM </code></pre> <p>2個目のパーティションが削除され、1個しかパーティションがないことがわかる。<br /> 2個目のパーティションを再定義する。</p> <pre><code class="shell">Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (54857600-115343359, default 54857728): Last sector, +sectors or +size{K,M,G,T,P} (54857728-115343359, default 115343359):  Created a new partition 2 of type 'Linux' and of size 28.9 GiB.  Partition #2 contains a LVM2_member signature. Do you want to remove the signature? [Y]es/[N]o: N Command (m for help): p  Disk /dev/sdb: 55 GiB, 59055800320 bytes, 115343360 sectors Device Boot Start End Sectors Size Id Type  /dev/sdb1 2048 54857599 54855552 26.2G 8e Linux LVM  /dev/sdb2 54857728 115343359 60485632 28.9G 83 Linux Command (m for help): t Partition number (1,2, default 2): Hex code (type L to list all codes): 8e  Changed type of partition 'Linux' to 'Linux LVM'. Command (m for help): p  Disk /dev/sdb: 55 GiB, 59055800320 bytes, 115343360 sectors ~ Device Boot Start End Sectors Size Id Type  /dev/sdb1 2048 54857599 54855552 26.2G 8e Linux LVM  /dev/sdb2 54857728 115343359 60485632 28.9G 8e Linux LVM </code></pre> <p>現在の状態を確認</p> <pre><code class="shell"># df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg02-lv02 24G 203M 24G 1% /mnt/newspace2 /dev/mapper/vg01-lv01 27G 219M 26G 1% /mnt/newspace1 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk tqsda1 8:1 0 100M 0 part /boot/efi tqsda2 8:2 0 1G 0 part /boot mqsda3 8:3 0 45.5G 0 part tqocivolume-root 252:0 0 35.5G 0 lvm / mqocivolume-oled 252:1 0 10G 0 lvm /var/oled sdb 8:16 0 65G 0 disk tqsdb1 8:17 0 9.3G 0 part /mnt/newspace mqsdb2 8:18 0 47.9G 0 part /mnt/newspace2 </code></pre> <p>比べてみると、lsblkでは拡張が認識されているものの、「df -h」の方はまだ認識されていない。<br /> 読み込ませる。</p> <p>ここでリブート</p> <h2 id="3.2 LVM拡張"><a href="#3.2+LVM%E6%8B%A1%E5%BC%B5">3.2 LVM拡張</a></h2> <h3 id="3.2.1 pvresize"><a href="#3.2.1+pvresize">3.2.1 pvresize</a></h3> <p>Physical Volume<br /> まずは確認。</p> <pre><code class="shell"># pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg01 lvm2 a-- 26.15g 0 /dev/sdb2 vg02 lvm2 a-- <23.84g 0 </code></pre> <p>リサイズする。</p> <pre><code class="shell"># pvresize /dev/sdb2 Physical volume "/dev/sdb2" changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized </code></pre> <p>5GB拡張が反映されていることを確認。</p> <pre><code class="shell"># pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg01 lvm2 a-- 26.15g 0 /dev/sdb2 vg02 lvm2 a-- <28.84g 5.00g  ←5GB空きが反映されてる。 </code></pre> <h3 id="3.2.2 LVの拡張"><a href="#3.2.2+LV%E3%81%AE%E6%8B%A1%E5%BC%B5">3.2.2 LVの拡張</a></h3> <p>まずは事前確認。</p> <pre><code class="shell"># vgs VG #PV #LV #SN Attr VSize VFree vg01 1 1 0 wz--n- 26.15g 0 vg02 1 1 0 wz--n- <28.84g 5.00g # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-ao---- 26.15g lv02 vg02 -wi-ao---- <23.84g  ←まだ拡張されてない </code></pre> <p>拡張する。</p> <pre><code class="shell"># lvextend -l +100%FREE /dev/vg02/lv02 Size of logical volume vg02/lv02 changed from <23.84 GiB (6103 extents) to <28.84 GiB (7383 extents). Logical volume vg02/lv02 successfully resized. </code></pre> <p>拡張されたことを確認。</p> <pre><code class="shell"># lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-ao---- 26.15g lv02 vg02 -wi-ao---- <28.84g  ←5GB拡張された </code></pre> <h2 id="3.3 ファイルシステムの拡張"><a href="#3.3+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E6%8B%A1%E5%BC%B5">3.3 ファイルシステムの拡張</a></h2> <p>まだこの状態だとマウントポイントは拡張されていない。</p> <pre><code class="shell"># df -hT Filesystem Type Size Used Avail Use% Mounted on ~ /dev/mapper/vg02-lv02 xfs 24G 203M 24G 1% /mnt/newspace2 </code></pre> <p>ファイルシステムを拡張する。この際、マウントポイントを引数にすることに注意する。</p> <pre><code class="shell"># xfs_growfs /mnt/newspace2 meta-data=/dev/mapper/vg02-lv02 isize=512 agcount=4, agsize=1562368 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=6249472, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=3051, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 6249472 to 7560192 </code></pre> <p>マウントポイントが拡張されたことを確認。</p> <pre><code class="shell"># df -hT Filesystem Type Size Used Avail Use% Mounted on ~ /dev/mapper/vg02-lv02 xfs 24G 203M 24G 1% /mnt/newspace2 </code></pre> <pre><code class="shell"># xfs_growfs /mnt/newspace2 # df -hT /mnt/newspace2 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg02-lv02 xfs 29G 239M 29G 1% /mnt/newspace2  ←拡張された </code></pre> <p>ちなみに、ファイルシステムがext4の場合は</p> <pre><code class="shell"># resize2fs </code></pre> <h1 id="4. ディスク追加"><a href="#4.+%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E8%BF%BD%E5%8A%A0">4. ディスク追加</a></h1> <p>/dev/sdb1と/dev/sdb2と/dev/sdb3のうち、/dev/sdb1と/dev/sdb3を統合する。つまり、/dev/vg01/lv01に/dev/sdb3を追加する。</p> <pre><code class="shell"># lsblk ~ vg01-lv01 253:1 0 26.2G 0 lvm /mnt/newspace1 ~ </code></pre> <p>下記手順で実行。</p> <h2 id="4.1 pv"><a href="#4.1+pv">4.1 pv</a></h2> <pre><code class="shell"># pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg01 lvm2 a-- 26.15g 0 /dev/sdb2 vg02 lvm2 a-- <28.84g 0 # pvcreate /dev/sdb3 Physical volume "/dev/sdb3" successfully created. # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg01 lvm2 a-- 26.15g 0 /dev/sdb2 vg02 lvm2 a-- <28.84g 0 /dev/sdb3 lvm2 --- 5.00g 5.00g </code></pre> <h2 id="4.2 vg"><a href="#4.2+vg">4.2 vg</a></h2> <pre><code class="shell"># vgs VG #PV #LV #SN Attr VSize VFree vg01 1 1 0 wz--n- 26.15g 0 vg02 1 1 0 wz--n- <28.84g 0 # vgextend vg01 /dev/sdb3 Volume group "vg01" successfully extended # vgs VG #PV #LV #SN Attr VSize VFree vg01 2 1 0 wz--n- <31.15g <5.00g vg02 1 1 0 wz--n- <28.84g 0 </code></pre> <h2 id="4.3 lv"><a href="#4.3+lv">4.3 lv</a></h2> <pre><code class="shell"># lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-ao---- 26.15g lv02 vg02 -wi-ao---- <28.84g # lvextend -l +100%FREE /dev/vg01/lv01 Size of logical volume vg01/lv01 changed from 26.15 GiB (6695 extents) to <31.15 GiB (7974 extents). Logical volume vg01/lv01 successfully resized. # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-ao---- <31.15g lv02 vg02 -wi-ao---- <28.84g </code></pre> <h2 id="4.4 ファイルシステムの拡張"><a href="#4.4+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E6%8B%A1%E5%BC%B5">4.4 ファイルシステムの拡張</a></h2> <pre><code class="shell"># df -hT Filesystem Type Size Used Avail Use% Mounted on ~ /dev/mapper/vg01-lv01 xfs 27G 219M 26G 1% /mnt/newspace1 </code></pre> <p>ファイルシステムを拡張する。この際、マウントポイントを引数にすることに注意する。</p> <pre><code class="shell"># xfs_growfs /mnt/newspace1 meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=4, agsize=1713920 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=6855680, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=3347, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 6855680 to 8165376 </code></pre> <p>マウントポイントが拡張されたことを確認。</p> <pre><code class="shell"># df -hT Filesystem Type Size Used Avail Use% Mounted on ~ /dev/mapper/vg01-lv01 xfs 32G 255M 31G 1% /mnt/newspace1 </code></pre> <p>メモ</p> <pre><code class="shell">物理ボリュームとしてラベルづけ # pvcreate /dev/sdb1 /dev/sdb3 WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y Wiping xfs signature on /dev/sdb1. WARNING: xfs signature detected on /dev/sdb3 at offset 0. Wipe it? [y/n]: y Wiping xfs signature on /dev/sdb3. Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdb3" successfully created. ボリュームグループ名を「vg01」として作成 # vgcreate vg01 /dev/sdb1 /dev/sdb3 Volume group "vg01" successfully created 論理ボリューム名を「lv01」として作成 # lvcreate -n lv01 -l +100%FREE vg01 Logical volume "lv01" created. ファイルシステム追加 # mkfs -t xfs /dev/vg01/lv01 マウント # mount /dev/vg01/lv01 /mnt/newspace </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/18264 2022-07-28T02:01:52+09:00 2022-08-08T04:48:35+09:00 https://crieit.net/posts/MySQL-Linux MySQLでDBサーバ構築してレプリケーションさせる <p>参考<br /> ① https://videohub.oracle.com/media/MySQL%208.0%20入門セミナー%20~インストール編%20for%20Linux%20&%20アーキテクチャ編~%20%282022年6月16日%29/1_ph7s6hxj<br /> ②MySQL公式ドキュメント:https://dev.mysql.com/doc/refman/8.0/ja/linux-installation.html</p> <h1 id="1. MySQLを開始"><a href="#1.+MySQL%E3%82%92%E9%96%8B%E5%A7%8B">1. MySQLを開始</a></h1> <h2 id="1.1. リポジトリをダウンロード"><a href="#1.1.+%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">1.1. リポジトリをダウンロード</a></h2> <p>この記事では、Oracle Linuxを使用している。</p> <pre><code>[opc@mysql-master1 ~]$ cat /etc/oracle-release Oracle Linux Server release 8.6 </code></pre> <p>yumリポジトリを利用する。<br /> <a target="_blank" rel="nofollow noopener" href="https://dev.mysql.com/">https://dev.mysql.com/</a><br /> から、MySQLサーバのOSバージョンと合致したリポジトリをネットに接続可能な端末にダウンロードし、MySQLサーバに配置する。</p> <p>画面左部の「<code>Downloads</code>」タブをクリックし切り替わった画面の<code>MySQL Yum Repository</code>をクリック。<br /> すると、複数種類のリポジトリが表示されるので、利用するMySQLサーバのOSバージョンと合致したリポジトリを選択する必要がある。</p> <pre><code>[opc@mysql-master1 ~]$ cat /etc/oracle-release Oracle Linux Server release 8.6 </code></pre> <p>ダウンロードしたら、利用予定のMySQLサーバに転送する。</p> <pre><code>[root@mysql-master1 tmp]# ll total 16 -rw-r--r--. 1 kiban kiban 14432 Jul 23 15:12 mysql80-community-release-el8-4.noarch.rpm drwx------. 3 root root 17 Jul 23 15:05 systemd-private-e967423d4c9e455a88d0cd2ee0f307be-chronyd.service-2MooXe drwx------. 3 root root 17 Jul 23 15:05 systemd-private-e967423d4c9e455a88d0cd2ee0f307be-unified-monitoring-agent.service-RX6Cai drwxr-xr-x. 2 root root 6 Jul 21 17:08 unified-monitoring-agent </code></pre> <p>以上</p> <h2 id="1.2. MySQLのインストール"><a href="#1.2.+MySQL%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1.2. MySQLのインストール</a></h2> <p>先述の1.1節で配置したインストーラーを用いてインストール開始する。</p> <p>まずはインストーラを解凍し、解凍が無事に完了したらちゃんと解凍されていることを確認も行う。</p> <pre><code>[root@mysql-master1 tmp]# rpm -Uvh mysql80-community-release-el8-4.noarch.rpm warning: mysql80-community-release-el8-4.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:mysql80-community-release-el8-4 ################################# [100%] [root@mysql-master1 tmp]# yum repolist enabled |grep 'mysql' mysql-connectors-community MySQL Connectors Community mysql-tools-community MySQL Tools Community mysql80-community MySQL 8.0 Community Server </code></pre> <p>RHEL8などLinux8ベースのOSの場合のみ同梱されているMySQLの無効化を行う。</p> <pre><code>[root@mysql-master1 tmp]# yum module disable mysql MySQL 8.0 Community Server 70 MB/s | 2.3 MB 00:00 MySQL Connectors Community 5.8 MB/s | 74 kB 00:00 MySQL Tools Community 26 MB/s | 459 kB 00:00 Dependencies resolved. ===================================================================================================================== Package Architecture Version Repository Size ===================================================================================================================== Disabling modules: mysql Transaction Summary ===================================================================================================================== Is this ok [y/N]: y Complete! </code></pre> <p>MySQLのインストールを実施。</p> <pre><code>[root@mysql-master1 tmp]# yum install mysql-community-server Last metadata expiration check: 0:02:03 ago on Sat 23 Jul 2022 03:22:37 PM GMT. Dependencies resolved. ===================================================================================================================== Package Architecture Version Repository Size ===================================================================================================================== Installing: mysql-community-server x86_64 8.0.29-1.el8 mysql80-community 53 M Installing dependencies: mysql-community-client x86_64 8.0.29-1.el8 mysql80-community 14 M mysql-community-client-plugins x86_64 8.0.29-1.el8 mysql80-community 2.4 M mysql-community-common x86_64 8.0.29-1.el8 mysql80-community 636 k mysql-community-icu-data-files x86_64 8.0.29-1.el8 mysql80-community 2.1 M mysql-community-libs x86_64 8.0.29-1.el8 mysql80-community 1.5 M Transaction Summary ===================================================================================================================== Install 6 Packages Total download size: 74 M Installed size: 347 M Is this ok [y/N]: y Downloading Packages: (1/6): mysql-community-common-8.0.29-1.el8.x86_64.rpm 25 MB/s | 636 kB 00:00 (2/6): mysql-community-client-plugins-8.0.29-1.el8.x86_64.rpm 62 MB/s | 2.4 MB 00:00 (3/6): mysql-community-icu-data-files-8.0.29-1.el8.x86_64.rpm 76 MB/s | 2.1 MB 00:00 (4/6): mysql-community-libs-8.0.29-1.el8.x86_64.rpm 64 MB/s | 1.5 MB 00:00 (5/6): mysql-community-client-8.0.29-1.el8.x86_64.rpm 95 MB/s | 14 MB 00:00 (6/6): mysql-community-server-8.0.29-1.el8.x86_64.rpm 98 MB/s | 53 MB 00:00 --------------------------------------------------------------------------------------------------------------------- Total 123 MB/s | 74 MB 00:00 MySQL 8.0 Community Server 3.0 MB/s | 3.1 kB 00:00 Importing GPG key 0x3A79BD29: Userid : "MySQL Release Engineering <[email protected]>" Fingerprint: 859B E8D7 C586 F538 430B 19C2 467B 942D 3A79 BD29 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 Is this ok [y/N]: y Key imported successfully MySQL 8.0 Community Server 1.9 MB/s | 1.9 kB 00:00 Importing GPG key 0x5072E1F5: Userid : "MySQL Release Engineering <[email protected]>" Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql Is this ok [y/N]: y Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : mysql-community-common-8.0.29-1.el8.x86_64 1/6 Installing : mysql-community-client-plugins-8.0.29-1.el8.x86_64 2/6 Installing : mysql-community-libs-8.0.29-1.el8.x86_64 3/6 Running scriptlet: mysql-community-libs-8.0.29-1.el8.x86_64 3/6 Installing : mysql-community-client-8.0.29-1.el8.x86_64 4/6 Installing : mysql-community-icu-data-files-8.0.29-1.el8.x86_64 5/6 Running scriptlet: mysql-community-server-8.0.29-1.el8.x86_64 6/6 Installing : mysql-community-server-8.0.29-1.el8.x86_64 6/6 Running scriptlet: mysql-community-server-8.0.29-1.el8.x86_64 6/6 Verifying : mysql-community-client-8.0.29-1.el8.x86_64 1/6 Verifying : mysql-community-client-plugins-8.0.29-1.el8.x86_64 2/6 Verifying : mysql-community-common-8.0.29-1.el8.x86_64 3/6 Verifying : mysql-community-icu-data-files-8.0.29-1.el8.x86_64 4/6 Verifying : mysql-community-libs-8.0.29-1.el8.x86_64 5/6 Verifying : mysql-community-server-8.0.29-1.el8.x86_64 6/6 Installed: mysql-community-client-8.0.29-1.el8.x86_64 mysql-community-client-plugins-8.0.29-1.el8.x86_64 mysql-community-common-8.0.29-1.el8.x86_64 mysql-community-icu-data-files-8.0.29-1.el8.x86_64 mysql-community-libs-8.0.29-1.el8.x86_64 mysql-community-server-8.0.29-1.el8.x86_64 Complete! </code></pre> <p>最後まで進んでインストール完了したら、MySQLを起動させる。<br /> まずはステータスの確認から。</p> <pre><code>[root@mysql-master1 tmp]# systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: inactive (dead) Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html </code></pre> <p>インストールされており、サービスとしてenableとなっていることがわかる。<br /> それでは起動させる。</p> <pre><code>[root@mysql-master1 tmp]# systemctl start mysqld [root@mysql-master1 tmp]# systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2022-07-23 15:45:02 GMT; 1min 29s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 11752 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 11834 (mysqld) Status: "Server is operational" Tasks: 37 (limit: 22765) Memory: 495.4M CGroup: /system.slice/mysqld.service mq11834 /usr/sbin/mysqld Jul 23 15:44:56 mysql-master1 systemd[1]: Starting MySQL Server... Jul 23 15:45:02 mysql-master1 systemd[1]: Started MySQL Server. </code></pre> <p>スタートさせた後は必ずステータスを確認して、起動していることを確認すること。</p> <h2 id="1.3 ログインしてパスワードを変更"><a href="#1.3+%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%A4%89%E6%9B%B4">1.3 ログインしてパスワードを変更</a></h2> <p>rootユーザの初期パスワードはログに記載されているのでそこで確認し、自分の覚えやすいパスワードに変更していく。その後、他のユーザを作成してパスワード設定、権限設定を順次行う。</p> <p>まずはrootユーザのパスワードを変更する。<code>/var/log/mysql.log</code>に記載されていることを確認。</p> <pre><code>[root@mysql-master1 log]# cat /var/log/mysqld.log ~ 2022-07-23T15:44:59.597480Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: xCkVmf#Yd2ci ~ </code></pre> <p>上記をみると、<code>xCkVmf#Yd2ci</code>が初期パスワードとして設定されていることがわかる。<br /> ではログインして変更する。</p> <pre><code>[root@mysql-master1 log]# mysql -u root -p Enter password:  ←ここにxCkVmf#Yd2ciを入力。表示はされないよ ~ mysql> alter user root@localhost identified by 'MyNewPass1!'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye </code></pre> <p>これでrootユーザのパスワードがMyNewPass4!に変更された。<br /> 再ログインしてみて、パスワード変更されたかを確認しておこう。<br /> パスワード変更コマンドはいくつかあるので紹介する。</p> <pre><code>> set password for ユーザ名@ホスト名='任意password`; 現在ログインしてるユーザのパスワードを変更するには > set password='任意passwword`; </code></pre> <p>ちなみに、パスワードポリシーはパスワード検証コンポーネントによって定義されている。これはデフォルトで有効になってる。内容は</p> <pre><code>mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.01 sec) </code></pre> <p>パスワード検証コンポーネントを無効化させるには</p> <pre><code>mysql> uninstall component 'file://component_validate_password'; Query OK, 0 rows affected (0.00 sec) </code></pre> <p>逆に有効化させるには<code>install component 'file://component_validate_password';</code>を入力する。</p> <h1 id="2. MySQLアーキテクチャ"><a href="#2.+MySQL%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3">2. MySQLアーキテクチャ</a></h1> <p><a href="https://crieit.now.sh/upload_images/cd28e3ad239066b2c265d44ba4be8d2062e1794497278.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cd28e3ad239066b2c265d44ba4be8d2062e1794497278.png?mw=700" alt="innodb-architecture.png" /></a></p> <h2 id="2.1 sampleデータ"><a href="#2.1+sample%E3%83%87%E3%83%BC%E3%82%BF">2.1 sampleデータ</a></h2> <p>サンプルデータをインストールする。<br /> <a target="_blank" rel="nofollow noopener" href="https://dev.mysql.com/doc/index-other.html">https://dev.mysql.com/doc/index-other.html</a><br /> 今回はworld databaseのzipファイルをローカルにダウンロードし、DBサーバに転送。zipファイルを解凍してからmysqlへインポートした。</p> <pre><code>$ unzip world-db.zip $ cd world-db/ $ mysql -uroot -proomysqld < world.sql </code></pre> <p>これでインポート完了したので中身の確認をしてみる。</p> <pre><code>mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | world | +--------------------+ 5 rows in set (0.00 sec) mysql> use world Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-----------------+ | Tables_in_world | +-----------------+ | city | | country | | countrylanguage | +-----------------+ 3 rows in set (0.01 sec) </code></pre> <p>そのほかにも自分でテーブルを作成してみる。</p> <pre><code>mysql> create table `sample1` ( -> `code` char(3) not null default '', `population` int(11) not null default '0', primary key (`code`)) -> engine=InnoDB; Query OK, 0 rows affected, 1 warning (0.02 sec) </code></pre> <p>インポートしたデータはデフォルトでは/var/lib/mysqlに配置される。</p> <pre><code>[root@mysql-master1 mysql]# ll total 189584 -rw-r-----. 1 mysql mysql 56 Jul 23 15:44 auto.cnf -rw-r-----. 1 mysql mysql 736313 Jul 27 15:29 binlog.000001 -rw-r-----. 1 mysql mysql 16 Jul 23 15:45 binlog.index -rw-------. 1 mysql mysql 1680 Jul 23 15:44 ca-key.pem -rw-r--r--. 1 mysql mysql 1112 Jul 23 15:44 ca.pem -rw-r--r--. 1 mysql mysql 1112 Jul 23 15:44 client-cert.pem -rw-------. 1 mysql mysql 1676 Jul 23 15:44 client-key.pem -rw-r-----. 1 mysql mysql 196608 Jul 27 15:31 '#ib_16384_0.dblwr' -rw-r-----. 1 mysql mysql 8585216 Jul 23 15:44 '#ib_16384_1.dblwr' -rw-r-----. 1 mysql mysql 5942 Jul 23 15:45 ib_buffer_pool -rw-r-----. 1 mysql mysql 12582912 Jul 27 15:29 ibdata1 ←システムtableスペース -rw-r-----. 1 mysql mysql 50331648 Jul 27 15:31 ib_logfile0 ←REDOログデータ -rw-r-----. 1 mysql mysql 50331648 Jul 23 15:44 ib_logfile1 ←REDOログデータ -rw-r-----. 1 mysql mysql 12582912 Jul 23 15:45 ibtmp1 drwxr-x---. 2 mysql mysql 187 Jul 23 15:45 '#innodb_temp' drwxr-x---. 2 mysql mysql 143 Jul 23 15:44 mysql  ←この配下に一般ログやslowログがある -rw-r-----. 1 mysql mysql 25165824 Jul 27 15:29 mysql.ibd srwxrwxrwx. 1 mysql mysql 0 Jul 23 15:45 mysql.sock -rw-------. 1 mysql mysql 6 Jul 23 15:45 mysql.sock.lock drwxr-x---. 2 mysql mysql 8192 Jul 23 15:44 performance_schema -rw-------. 1 mysql mysql 1680 Jul 23 15:44 private_key.pem -rw-r--r--. 1 mysql mysql 452 Jul 23 15:44 public_key.pem -rw-r--r--. 1 mysql mysql 1112 Jul 23 15:44 server-cert.pem -rw-------. 1 mysql mysql 1676 Jul 23 15:44 server-key.pem drwxr-x---. 2 mysql mysql 28 Jul 23 15:45 sys -rw-r-----. 1 mysql mysql 16777216 Jul 27 15:29 undo_001 -rw-r-----. 1 mysql mysql 16777216 Jul 27 15:31 undo_002 drwxr-x---. 2 mysql mysql 87 Jul 27 15:29 world  ←インポートしたデータ </code></pre> <h2 id="2.2 システム変数設定"><a href="#2.2+%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%A4%89%E6%95%B0%E8%A8%AD%E5%AE%9A">2.2 システム変数設定</a></h2> <p>MySQLサーバの設定はシステム変数で設定する。設定方法は、①my.cnfで設定した後に再起動を行う、②一時的な設定を行う(一部の変数しか設定変更できない)。</p> <h3 id="2.2.1 my.cnfで設定"><a href="#2.2.1+my.cnf%E3%81%A7%E8%A8%AD%E5%AE%9A">2.2.1 my.cnfで設定</a></h3> <p>設定ファイルは/etc/my.cnfが読み込まれることになっている。デフォルト設定を変更して任意のディレクトリに配置したmy.cnfを読み込ませたかったら以下を実施。複数ファイルを読み込んだら後勝ちになる。</p> <pre><code>$ mysqld --verbose --help $ mysqld --defaults-file=/usr/local/mysql/date/my.cnf & </code></pre> <p>設定ファイルを変更したら基本的にはmysqlの再起動を行う。</p> <h3 id="2.2.2 一時的な設定"><a href="#2.2.2+%E4%B8%80%E6%99%82%E7%9A%84%E3%81%AA%E8%A8%AD%E5%AE%9A">2.2.2 一時的な設定</a></h3> <p>参考:https://dev.mysql.com/doc/refman/8.0/ja/server-system-variables.html</p> <p>MySQLを再起動かけられないときなどは、my.cnfの編集なしに設定値を変更できる変数がある。ただし、一時的に設定変更しても、再起動やmy.cnfのリロードを行うと一時的な設定が元に戻る点に注意。</p> <p>設定方法は以下で行える。設定はセッション単位(LOCAL)、サーバ全体(GLOBAL)での変更が可能。</p> <pre><code>> set [global|sesison] <変数> =<値>; </code></pre> <p>設定した値の確認方法は以下。</p> <pre><code>show [global|session] variables like '%<システム変数名>%'; </code></pre> <p>実際に設定されてるシステム変数を一括で確認するには</p> <pre><code>$ mysqld --verbose --help </code></pre> <p>で確認できる。</p> <p>一時的な設定変更を永続化させることができる。その場合は設定する際にpersistを付け加えればよい。</p> <pre><code>> set persist max_connections = 500; </code></pre> <p>システム変数を永続化オプションをつけて設定した場合はmy.cnfとの設定に差異がでる。そういった場合に設定変更履歴を確認するにはperformance_schemaを参照すること。</p> <pre><code>mysql> select * from performance_schema.variables_info where variable_source='persisted'; Empty set (0.00 sec) </code></pre> <h3 id="2.2.3 システム変数例"><a href="#2.2.3+%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%A4%89%E6%95%B0%E4%BE%8B">2.2.3 システム変数例</a></h3> <p>nnodb_buffer_pool_sizeInno:DBバッファプールサイズ<br /> innodb_log_buffer_sizeInno:DBログバッファのサイズ(メモリ上)<br /> innodb_log_file_size:ログファイルのサイズ(ディスク上)<br /> innodb_log_files_in_groups:ログファイルの数(デフォルト2)<br /> binlog_expire_logs_seconds:バイナリログを削除するまでの期間を秒単位で指定。デフォルトは30日。</p> <h1 id="3. レプリケーション設定"><a href="#3.+%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%AD%E5%AE%9A">3. レプリケーション設定</a></h1> <p>レプリケーションの設定は4手順ある。<br /> ①レプリケーション用のパラメータを設定、<br /> ②マスター側にレプリケーションユーザ作成、<br /> ③マスター側のバックアップを取得し、スレーブ側にリストアする。そして、<br /> ④スレーブ側でレプリケーションのためにマスター情報やポジション情報を設定しレプリケーションをスタートさせる。</p> <h2 id="3.1 レプリケーション用のパラメータ設定"><a href="#3.1+%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E7%94%A8%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E8%A8%AD%E5%AE%9A">3.1 レプリケーション用のパラメータ設定</a></h2> <p>マスター側で設定するパラメータ</p> <pre><code>server-id log_bin datedir gtid-mode enforce-gtid-consistency = on log-slave-updates </code></pre> <h2 id="3.2 ソースサーバにレプリケーションユーザ作成"><a href="#3.2+%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AB%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%A6%E3%83%BC%E3%82%B6%E4%BD%9C%E6%88%90">3.2 ソースサーバにレプリケーションユーザ作成</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://dev.mysql.com/doc/refman/8.0/ja/replication-howto-repuser.html">https://dev.mysql.com/doc/refman/8.0/ja/replication-howto-repuser.html</a><br /> ソースサーバにレプリケーション用のユーザを作成して、そのユーザにレプリケーションスレーブ権限を付与させる。</p> <pre><code>mysql> create user repl@'10.1.%' identified by 'password'; Query OK, 0 rows affected (0.01 sec) mysql> grant replication slave on *.* to repl@'10.1.%'; Query OK, 0 rows affected (0.00 sec) </code></pre> <p>replユーザがどこから接続可能にしたいのかによって、<code>repl@'10.1.%'</code>の書き方は変わってくる。localhostにするとほかのサーバがreplユーザでアクセスできないので注意。ユーザを作成したらパスワードの設定も忘れずに。<br /> 設定が完了したら、想定通りの挙動になっているかの確認を行う。<br /> まずはマスター側でユーザの確認。</p> <pre><code>mysql> SELECT user, host, plugin FROM mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | repl | 10.1.% | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+ 5 rows in set (0.00 sec) </code></pre> <p>replユーザのhostが<code>10.1.%</code>になっていることを確認。つまり、localhostに設定されていないので、①マスター側で接続を試みてもログインできないが②スレーブサーバからはログインできるということになる。確認しよう。<br /> ①</p> <pre><code>[kiban@mysql-master1 ~]$ mysql -urepl -p Enter password: ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES) </code></pre> <p>②</p> <pre><code>mysql -h10.1.2.148 -urepl -p Enter password: mysql> </code></pre> <p>①②を通じて、想定通りの設定が行われたことが確認できた。</p> <h2 id="3.3 dump出力"><a href="#3.3+dump%E5%87%BA%E5%8A%9B">3.3 dump出力</a></h2> <p>元から入ってるデータベース(システムデータベース)はレプリケーションされないので、それ以外(今回でいえばworld)だけエクスポートする。</p> <pre><code>mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | world |   ←これが出力対象 +--------------------+ </code></pre> <p>以下でエクスポートする。</p> <pre><code>mysqldump -uroot -p<パスワード入力> --master-data=2 --socket=/var/lib/mysql/mysql.sock --hex-blob --flush-logs --default-character-set=utf8mb4 --databases world --single-transaction --triggers --routines --events > mysql_bkup_dump_20220807.sql </code></pre> <p>出力されたダンプをレプリカサーバに転送して、インポートさせる。</p> <pre><code>mysql -hlocalhost -uroot -roomysqld < mysql_bkup_dump_20220807.sql </code></pre> <p>インポート完了したらm、mysqlサーバにログインしてworldデータベースが存在することを確認する。</p> <pre><code>mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | world | +--------------------+ 5 rows in set (0.00 sec) </code></pre> <p>あることがわかった。</p> <p>【重要】<br /> レプリカサーバ側で。datedir配下にあるauto.cnfを削除する。</p> <h2 id="3.4 レプリケーション情報のセット"><a href="#3.4+%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88">3.4 レプリケーション情報のセット</a></h2> <p>レプリカサーバ側でレプリケーションを行うための情報として、ソースサーバの情報をセットする。</p> <p>まずはマスター側の情報を取得する。</p> <pre><code>mysql> show master status; +-------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------------+----------+--------------+------------------+-------------------+ | master-mysql-bin.000006 | 157 | | | | +-------------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) </code></pre> <p>続いて、上記の情報をもとにスレーブ側で情報をセット。</p> <pre><code>mysql> change master to master_host='<マスターサーバのIPアドレス>', -> master_user='repl', -> master_password='<replユーザのpassword>', -> master_log_file='master-mysql-bin.000006', -> master_log_pos=157; Query OK, 0 rows affected, 8 warnings (0.02 sec) </code></pre> <p>セットが完了したら、想定通りの設定がされているかをスレーブ側で確認。</p> <pre><code>mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Master_Host: <マスターサーバのIPアドレス> Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-mysql-bin.000006 Read_Master_Log_Pos: 157 Relay_Log_File: mysql-slave1-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: master-mysql-bin.000006 Slave_IO_Running: No Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 157 Relay_Log_Space: 157 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0 Master_UUID: Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row in set, 1 warning (0.00 sec) </code></pre> <p>設定が想定通りになっていることが確認できたので、いよいよレプリケーションを始める。</p> <pre><code>mysql> start slave; Query OK, 0 rows affected, 1 warning (0.01 sec) </code></pre> <p>レプリケーションを開始すると、slaveのステータスを再度確認する。</p> <pre><code>mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Connecting to source Master_Host: 10.1.2.148 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-mysql-bin.000006 Read_Master_Log_Pos: 157 Relay_Log_File: mysql-slave1-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: master-mysql-bin.000006 Slave_IO_Running: Connecting Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 157 Relay_Log_Space: 157 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 2003 Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60 retries: 1 message: Can't connect to MySQL server on '10.1.2.148:3306' (110) Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0 Master_UUID: Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: 220806 21:33:27 Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row in set, 1 warning (0.00 sec) </code></pre> <p>本来なら、マスターサーバのバイナリログを取り込んでリレーログにする<code>Slave_IO_Running</code>と、取り込まれたリレーログからイベントを取り出してデータベースに反映させる<code>Slave_SQL_Running</code>のステータスがともに<code>YES</code>になるはずである。しかし、<code>Slave_IO_Running</code>が<code>Connecting</code>になっている。</p> <p>そこで、スレーブサーバからマスターサーバの3306番ポートへ接続できるか確認するために<code>nc -vz マスターのIP 3306</code>を実行したところ、接続できなかった。</p> <pre><code>$ nc -vz 10.1.2.58 3306 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: No route to host. </code></pre> <p>ネットワーク設定に問題がないことは確認済みなので、サーバのfierwall設定を行う。</p> <pre><code># firewall-cmd --zone=public --add-port=3306/tcp --permanet # firewall-cmd --reload # nc -vz 10.1.2.58 3306 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 10.1.2.58:3306. Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds. </code></pre> <p>3306番ポートへ接続できることを確認。</p> <p>スレーブのステータスを確認すると、</p> <pre><code>Slave_IO_Running: Yes </code></pre> <p>となってた。<br /> レプリケーションされてることが確認できたので、マスター側で変更したデータがスレーブ側に連携されるかテストする。<br /> まずはマスター側でスキーマ作成。</p> <pre><code>mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | world | +--------------------+ 5 rows in set (0.01 sec) mysql> create database test1; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test1 | | world | +--------------------+ 6 rows in set (0.00 sec) </code></pre> <p>続いて、スレーブ側でtest1スキーマが作成されていることを確認。</p> <pre><code>mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test1 | | world | +--------------------+ 6 rows in set (0.00 sec) </code></pre> <p>ちゃんと作成されていた。<br /> これでレプリケーションが正常にされていることがわかった。</p> <h1 id="4.MySQLチューニング"><a href="#4.MySQL%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0">4.MySQLチューニング</a></h1> <h2 id="4.1"><a href="#4.1">4.1</a></h2> <p><code>innodb_log_file_size</code>ログファイルのサイズ(ディスク上)。<code>innodb_buffer_pool_size</code>の25~100%ぐらい。</p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/18184 2022-05-04T05:16:16+09:00 2022-05-15T23:54:05+09:00 https://crieit.net/posts/Docker-Kubernetes-gitLab DockerとKubernetes <h1 id="0 前提"><a href="#0+%E5%89%8D%E6%8F%90">0 前提</a></h1> <p>Oracle LinuxとWindows</p> <h1 id="1 環境構築"><a href="#1+%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89">1 環境構築</a></h1> <p>準備</p> <h2 id="1-1 Dockerオフラインインストール"><a href="#1-1+Docker%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1 Dockerオフラインインストール</a></h2> <p>参考にしたURLは<code>https://qiita.com/kod314/items/e574ac12c23598e0d903</code>。<br /> オンラインインストールの場合は、<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/kichise/items/f8e56c6d2d08eaf4a6a0">https://qiita.com/kichise/items/f8e56c6d2d08eaf4a6a0</a><br /> の手順に従えば可能。</p> <p>今回はオフラインインストールを実行しようと思う。社内規則によりDockerをインストールするサーバがインターネット接続できない場合がある。その場合、インターネット接続できる自席端末からネットに接続してDockerのインストーラーをダウンロード。それをDockerをインストールしたいサーバに転送して実行させる。</p> <h3 id="1-1-1 OS確認"><a href="#1-1-1+OS%E7%A2%BA%E8%AA%8D">1-1-1 OS確認</a></h3> <p>まずはOSのversionを確認。</p> <pre><code>$ uname -a Linux publicpc1 5.4.17-2136.305.5.3.el8uek.x86_64 #2 SMP Thu Mar 17 10:45:33 PDT 2022 x86_64 x86_64 x86_64 GNU/Linux </code></pre> <p>より詳細</p> <pre><code>#cat /etc/os-release NAME="Oracle Linux Server" VERSION="8.5" ID="ol" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="8.5" PLATFORM_ID="platform:el8" PRETTY_NAME="Oracle Linux Server 8.5" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:oracle:linux:8:5:server" HOME_URL="https://linux.oracle.com/" BUG_REPORT_URL="https://bugzilla.oracle.com/" ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8" ORACLE_BUGZILLA_PRODUCT_VERSION=8.5 ORACLE_SUPPORT_PRODUCT="Oracle Linux" ORACLE_SUPPORT_PRODUCT_VERSION=8.5 </code></pre> <p>Linuxカーネルの確認</p> <pre><code>$ hostnamectl Static hostname: publicpc1 Icon name: computer-vm Chassis: vm Machine ID: 4c3dc5bfa43b47b8b66789ce778a0711 Boot ID: 226a196eedc746e2848a6f15e9afeb0b Virtualization: kvm Operating System: Oracle Linux Server 8.5 CPE OS Name: cpe:/o:oracle:linux:8:5:server Kernel: Linux 5.4.17-2136.305.5.3.el8uek.x86_64 Architecture: x86-64 </code></pre> <p>x86_64と記載されているので、Intel(AMD)の64bitオペレーティングシステムであることがわかる。</p> <h3 id="1-1-2 Docker engineをインストール"><a href="#1-1-2+Docker+engine%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1-2 Docker engineをインストール</a></h3> <p>Docker本体であるDocker Engineと、同時に複数のコンテナを操作するツールであるDocker Composeをダウンロードする。<br /> 参考にした公式:https://docs.docker.com/engine/install/binaries/</p> <p>まずはdocker本体<br /> <a target="_blank" rel="nofollow noopener" href="https://download.docker.com/linux/static/stable/x86_64/">https://download.docker.com/linux/static/stable/x86_64/</a><br /> →バージョンがいろいろあるので、最新のdocker-20.10.9.tgz をダウンロードしてみた。<br /> 自分の端末(クライアント側にダウンロードしたファイルをLinuxサーバに転送してから解凍する。</p> <pre><code>$ ls -al /home/opc/docker-20.10.9.tgz -rw-r--r--. 1 opc opc 63350495 May 4 04:23 /home/opc/docker-20.10.9.tgz </code></pre> <p>展開</p> <pre><code>$ tar zxvf docker-20.10.9.tgz </code></pre> <p>すると、カレントディレクトリにdockerディレクトリが作成される。<br /> dockerディレクトリの中身を<code>/usr/bin/</code>配下にコピーする。</p> <pre><code>$ sudo cp docker/* /usr/bin/ </code></pre> <p>試しに起動するには</p> <pre><code>$ sudo dockerd & </code></pre> <h3 id="1-1-3 Docker Composeをインストール"><a href="#1-1-3+Docker+Compose%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1-3 Docker Composeをインストール</a></h3> <p>続いてはdocker-compose<br /> インストール手順は以下に記載されているので以降この指示に従う。<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/docker/compose/blob/v2/README.md">https://github.com/docker/compose/blob/v2/README.md</a></p> <p>さきほど(1-1-1節)でOSとCPUを確認したので、<br /> それに従って<code>docker-compose-linux-x86_64</code>をダウンロードする。<br /> <a target="_blank" rel="nofollow noopener" href="https://github.com/docker/compose/releases">https://github.com/docker/compose/releases</a></p> <p>自分のwindows端末(クライアント側)にダウンロードした<code>docker-compose-linux-x86_64</code>をdockerをインストールしたLinuxサーバに転送。<br /> 転送したら、バイナリファイルの名前を<code>docker-compose</code>にリネーム。</p> <pre><code>$ mv docker-compose-linux-x86_64 docker-compose </code></pre> <p>docker-composeをいどうする。移動する先は目的に応じて移動先が異なる。<br /> 今回は</p> <pre><code>$ sudo mv docker-compose /usr/local/bin/ $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose -v Docker Compose version v2.5.0 </code></pre> <h3 id="1-1-4 Docker イメージのオフラインで利用する"><a href="#1-1-4+Docker+%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B">1-1-4 Docker イメージのオフラインで利用する</a></h3> <pre><code>$ tar zxvf helloworld_img.tar.gz $ docker load < helloworld_img # dockerイメージをload $ docker images # hello-worldイメージが存在することを確認 </code></pre> <h3 id="1-1-5 Dockerグループ作成"><a href="#1-1-5+Docker%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E4%BD%9C%E6%88%90">1-1-5 Dockerグループ作成</a></h3> <p>Docker daemonはrootユーザで実行しなければならず、毎回sudoを使うのは面倒である。<br /> その場合、dockerグループを作成してそこに任意のユーザを所属させてあげる。</p> <pre><code>groupadd docker usermod -aG docker opc </code></pre> <h3 id="1-1-6 トラブルシュート"><a href="#1-1-6+%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%88">1-1-6 トラブルシュート</a></h3> <p>docklerをサービスでenebleにしようと思ったができなかった。</p> <pre><code>[root@publicpc1 system]# systemctl enable docker Failed to enable unit: Unit file docker.service does not exist. </code></pre> <p>以下のサイトを参考に対応してみた。<br /> <a target="_blank" rel="nofollow noopener" href="https://jhooq.com/docker-daemon-centos/">https://jhooq.com/docker-daemon-centos/</a></p> <p>/usr/lib/systemd/system配下にdocker.socketファイルを作成し以下の内容を記載した。</p> <pre><code>[Unit] Description=Docker Socket for the API [Socket] ListenStream=/var/run/docker.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target </code></pre> <p>続いて、/usr/lib/systemd/system/配下に<code>docker.service</code>を作成する。</p> <pre><code>[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target docker.socket firewalld.service containerd.service Wants=network-online.target Requires=docker.socket containerd.service [Service] Type=notify #the default is not to use systemd for cgroups because the delegate issues still #exists and systemd currently does not support the cgroup feature set required #for containers run by docker ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always #Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229. #Both the old, and new location are accepted by systemd 229 and up, so using the old location #to make them work for either version of systemd. StartLimitBurst=3 #Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230. #Both the old, and new name are accepted by systemd 230 and up, so using the old name to make #this option work for either version of systemd. StartLimitInterval=60s #Having non-zero Limit*s causes performance problems due to accounting overhead #in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity #Comment TasksMax if your systemd version does not support it. #Only systemd 226 and above support this option. TasksMax=infinity #set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes #kill only the docker process, not all processes in the cgroup KillMode=process OOMScoreAdjust=-500 [Install] WantedBy=multi-user.target </code></pre> <p>この中身をみると<code>Requires=docker.socket containerd.service</code>と記載されている通り、containerd.serviceが必要。なので/usr/lib/systemd/system配下にcontainerd.serviceサービスを作成する必要がある。</p> <pre><code>#Copyright The containerd Authors. #Licensed under the Apache License, Version 2.0 (the "License"); #you may not use this file except in compliance with the License. #You may obtain a copy of the License at #http://www.apache.org/licenses/LICENSE-2.0 #Unless required by applicable law or agreed to in writing, software #distributed under the License is distributed on an "AS IS" BASIS, #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #See the License for the specific language governing permissions and #limitations under the License. [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target [Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/bin/containerd Type=notify Delegate=yes KillMode=process Restart=always RestartSec=5 #Having non-zero Limit*s causes performance problems due to accounting overhead #in the kernel. We recommend using cgroups to do container-local accounting. LimitNPROC=infinity LimitCORE=infinity LimitNOFILE=infinity #Comment TasksMax if your systemd version does not supports it. #Only systemd 226 and above support this version. TasksMax=infinity OOMScoreAdjust=-999 [Install] WantedBy=multi-user.target </code></pre> <p>上記を作成する。</p> <p>ちゃんとリロードしとく。</p> <pre><code>systemctl daemon-reload </code></pre> <h2 id="1-2.Kubernetesの準備"><a href="#1-2.Kubernetes%E3%81%AE%E6%BA%96%E5%82%99">1-2.Kubernetesの準備</a></h2> <h3 id="1-2-1. インストール"><a href="#1-2-1.+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-2-1. インストール</a></h3> <p>オフライン環境でKubernetesを構築する手順。<br /> 手順の参考にしたのは以下<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.genesys.com/Documentation/GCXI/latest/Dep/DockerOffline">https://docs.genesys.com/Documentation/GCXI/latest/Dep/DockerOffline</a></p> <p>まずはネットにつながる端末から</p> <pre><code>$ pwd /etc/yum.repos.d $ cat kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg </code></pre> <p>以下のコマンドを実行してファイルをダウンロード。<br /> <code><your_rpm_dir></code>の部分は自分で適当なディレクトリを作成して<br /> そこのパスを指定。</p> <pre><code>yumdownloader --assumeyes --destdir= --resolve yum-utils kubeadm-1.21.* kubelet-1.21.* kubectl-1.21.* ebtables </code></pre> <p>続いて、ダウンロードしたファイルをインストールしていく。</p> <pre><code>yum install -y --cacheonly --disablerepo=* /*.rpm </code></pre> <p>インストールする際、バージョンが異なるファイルが存在してインストールエラーになるかもしれない。<br /> その場合は、必要のないバージョンのファイルは削除してから<br /> 再度インストールするとうまくいく。<br /> うまくいくと以下のようになる。</p> <pre><code>Complete! </code></pre> <p>必要なイメージが揃っているか確認してみよう。</p> <pre><code>$ kubeadm config images list I0504 23:15:36.977910 309762 version.go:254] remote version is much newer: v1.24.0; falling back to: stable-1.21 k8s.gcr.io/kube-apiserver:v1.21.12 k8s.gcr.io/kube-controller-manager:v1.21.12 k8s.gcr.io/kube-scheduler:v1.21.12 k8s.gcr.io/kube-proxy:v1.21.12 k8s.gcr.io/pause:3.4.1 k8s.gcr.io/etcd:3.4.13-0 k8s.gcr.io/coredns/coredns:v1.8.0 </code></pre> <h3 id="1-2-2. kubectlの概要"><a href="#1-2-2.+kubectl%E3%81%AE%E6%A6%82%E8%A6%81">1-2-2. kubectlの概要</a></h3> <p>参考URL:https://kubernetes.io/ja/docs/reference/kubectl/_print/<br /> Kubernetesクラスタを操作するコマンド</p> <h1 id="2.Docker入門"><a href="#2.Docker%E5%85%A5%E9%96%80">2.Docker入門</a></h1> kawai_mizugorou tag:crieit.net,2005:PublicArticle/18055 2022-02-12T05:57:59+09:00 2022-02-12T06:17:14+09:00 https://crieit.net/posts/SSH-TeraTerm SSHログイン用のTeraTermマクロ作成 <p>TeraTermを利用してパブリッククラウド上のサーバにSSH接続する際、<br /> セキュリティの観点から公開鍵認証方式を採用しているのですが、<br /> 接続する度にIPや鍵が格納されてるパスを入力するのが面倒なので<br /> TeraTermMacroを作成してログインの手間を省こうと思います。</p> <h1 id="目次"><a href="#%E7%9B%AE%E6%AC%A1">目次</a></h1> <p>1.使い方<br /> 2.パスワード認証ログイン<br /> 3.公開鍵認証ログイン<br /> 4.サーバを選択してログイン<br /> 5.踏み台経由してサーバログイン</p> <h1 id="1.使い方"><a href="#1.%E4%BD%BF%E3%81%84%E6%96%B9">1.使い方</a></h1> <p>TeraTermマクロは、拡張子がttlのファイルに記述されている実行内容を、そのttlファイルを実行するだけで自動で一連の処理が行われる。<br /> ttlファイルの実行方法は主に2つ。1つは、TeraTermからttlファイルを選択して実行する方法。他方は、ttlファイルをダブルクリックして実行する方法。後者の方法では、Teratermインストール時にttlファイルの関連付けを行わなかった場合、事前にttlファイルをTeraTermマクロで実行するように関連付け設定を行う必要がある。</p> <h2 id="1.1TeraTermから実行"><a href="#1.1TeraTerm%E3%81%8B%E3%82%89%E5%AE%9F%E8%A1%8C">1.1TeraTermから実行</a></h2> <p>TeraTermアイコンをクリックすると、下図のような画面になるので<br /> 新しい接続先を入力する画面を「×」で消した後、上部のメニューから「コントロール」を選択し、「マクロ(M)」をクリック。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462069d6b75c0f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462069d6b75c0f.png?mw=700" alt="image.png" /></a></p> <p>すると、teratermのフォルダ(C:\Program Files (x86)\teraterm)が表示されるので、そこに事前に配置しておいた実行したいttlファイルをクリックするか、もしくは別のファルダまで移動して所望のttlファイルをダブルクリック。</p> <h2 id="1.2ttlファイルをダブルクリック実行"><a href="#1.2ttl%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%83%96%E3%83%AB%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E5%AE%9F%E8%A1%8C">1.2ttlファイルをダブルクリック実行</a></h2> <p>まずは、どれか一つ実行したいttlファイルを右クリックして「プロパティ」を開く。「全般」の「変更」をクリックし、ttlファイルを開く方法としてアプリが表示されるので、「このPCで別のアプリを探す」を選択。<a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462069f6c48407.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462069f6c48407.png?mw=700" alt="image.png" /></a></p> <p>TeraTermのフォルダ(C:\Program Files (x86)\teraterm)まで移動し、「ttpmacro.exe」をダブルクリックし、プロパティの「適用」を押して「OK」をする。</p> <p><a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462069fa107d69.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462069fa107d69.png?mw=700" alt="image.png" /></a></p> <p>以上の関連付け設定を無事完了させると、ttlファイルをダブルクリックするだけでTeraTermマクロを実行できるようになる。</p> <h1 id="2.パスワード認証ログイン"><a href="#2.%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%AA%8D%E8%A8%BC%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3">2.パスワード認証ログイン</a></h1> <pre><code>timeout=5 ;------------------------------------------------------- ;ログイン情報 HOSTIP = 'a.a.a.a' USERNAME = 'hoge' PASSWORD = 'hoge' ;------------------------------------------------------- ;------------------------------------------------------- ;SSHログイン msg = HOSTIP strconcat msg ':22 /ssh /auth=password /user=' strconcat msg USERNAME strconcat msg ' /passwd=' strconcat msg PASSWORD connect msg end </code></pre> <h1 id="3.公開鍵認証ログイン"><a href="#3.%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3">3.公開鍵認証ログイン</a></h1> <p>公開鍵認証方式の場合は、パスワード認証方式で<code>/auth=password</code>としていたところを、<code>/auth=publickey</code>に書き換え、鍵のパスを指定するだけ。</p> <pre><code>timeout=5 ;------------------------------------------------------- ;ログイン情報 HOSTIP = 'a.a.a.a' USERNAME = 'hoge' PASSWORD = 'hoge' KEYFILE = 'C:/XXX/YYY.key' ;------------------------------------------------------- ;------------------------------------------------------- ;SSHログイン msg = HOSTIP strconcat msg ':22 /ssh /auth=publickey /user=' strconcat msg USERNAME strconcat msg ' /keyfile=' strconcat msg KEYFILE connect msg end </code></pre> <h1 id="4.サーバを選択してログイン"><a href="#4.%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3">4.サーバを選択してログイン</a></h1> <p>SSH接続したいサーバごとにTeraTermマクロを作成するのは面倒。<br /> ということで、マクロを実行する際に接続先サーバを指定してログインできるようにする。下図のように選択画面を出す。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046206ca0d92b38.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b156334672193046206ca0d92b38.png?mw=700" alt="image.png" /></a></p> <pre><code>timeout=5 ;------------------------------------------------------- ;接続先ホスト別情報 HOSTIP1 = 'a.a.a.a' USERNAME1 = 'hoge' PASSWORD1 = 'hoge' KEYFILE1 = 'C:/XXX/YYY.key' HOSTNAME1 = 'サーバ1' HOSTIP2 = 'b.b.b.b' USERNAME2 = 'hoge' PASSWORD2 = 'hoge' KEYFILE2 = 'C:/XXX/YYY.key' HOSTNAME2 = 'サーバ2' ;------------------------------------------------------- ;------------------------------------------------------- ;選択画面 sprintf '【1】:%s %s【2】:%s %s' HOSTNAME1 #10 HOSTNAME2 #10 inputbox inputstr 'SSH接続対象を選択:' str2int INPUTINT inputstr if INPUTINT = 1 then HOSTIP = HOSTIP1 USERNAME = USERNAME1 KEYFILE = KEYFILE1 elseif INPUTINT = 2 then HOSTIP = HOSTIP2 USERNAME = USERNAME2 KEYFILE = KEYFILE2 else messagebox '選択肢外が入力されました' '入力エラー' endif ;------------------------------------------------------- ;------------------------------------------------------- ;SSHログイン msg = HOSTIP strconcat msg ':22 /ssh /auth=publickey /user=' strconcat msg USERNAME strconcat msg ' /keyfile=' strconcat msg KEYFILE connect msg end </code></pre> <h1 id="5.踏み台経由してサーバログイン"><a href="#5.%E8%B8%8F%E3%81%BF%E5%8F%B0%E7%B5%8C%E7%94%B1%E3%81%97%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%90%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3">5.踏み台経由してサーバログイン</a></h1> <p>パブリックサブネット内に配置されているサーバを踏み台にして、プライベートサブネット内にあるサーバへssh接続する方法。</p> <pre><code>timeout=5 ;------------------------------------------------------- ;接続先ホスト別情報 HOSTIP1 = 'a.a.a.a' USERNAME1 = 'hoge' PASSWORD1 = 'hoge' KEYFILE1 = 'C:/XXX/YYY.key' HOSTNAME1 = 'サーバ1' HOSTIP2 = 'b.b.b.b' USERNAME2 = 'hoge' PASSWORD2 = 'hoge' KEYFILE2 = 'C:/XXX/YYY.key' HOSTNAME2 = 'サーバ2' ;------------------------------------------------------- ;------------------------------------------------------- ;選択画面 sprintf '【1】:%s %s【2】:%s %s' HOSTNAME1 #10 HOSTNAME2 #10 inputbox inputstr 'SSH接続対象を選択:' str2int INPUTINT inputstr ;------------------------------------------------------- ;------------------------------------------------------- ;SSHログイン if INPUTINT = 1 then msg = HOSTIP1 strconcat msg ':22 /ssh /auth=publickey /user=' strconcat msg USERNAME1 strconcat msg ' /keyfile=' strconcat msg KEYFILE1 connect msg elseif INPUTINT = 2 then msg = HOSTIP1 strconcat msg ':22 /ssh /auth=publickey /user=' strconcat msg USERNAME1 strconcat msg ' /keyfile=' strconcat msg KEYFILE1 connect msg wait '$' ;プロンプトを待つ msg = 'ssh ' strconcat msg USERNAME2 strconcat msg '@' strconcat msg HOSTIP2 sendln msg wait 'password' sendln PASSWORD2 else messagebox '選択肢外が入力されました' '入力エラー' end endif end </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/17726 2021-10-28T00:38:36+09:00 2022-12-01T02:35:10+09:00 https://crieit.net/posts/Port Port関連 <h1 id="開いているPort確認"><a href="#%E9%96%8B%E3%81%84%E3%81%A6%E3%81%84%E3%82%8BPort%E7%A2%BA%E8%AA%8D">開いているPort確認</a></h1> <h2 id="自分自身を確認"><a href="#%E8%87%AA%E5%88%86%E8%87%AA%E8%BA%AB%E3%82%92%E7%A2%BA%E8%AA%8D">自分自身を確認</a></h2> <p>netstatuコマンドで、開いているTCP/UDPポートを表示する。</p> <pre><code>$# netstat -lut Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp6 0 0 [::]:mysql [::]:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 localhost:323 0.0.0.0:* udp6 0 0 localhost:323 [::]:* </code></pre> <p>netstatコマンドでもよいが、CentOS7からはssコマンドが推奨されているらしい(一次情報にはあたっていない)。<br /> ssコマンドでも実施する。sshやapacheと書かれており、具体的に何番ポートかわからない場合は「-n」オプションを利用する。</p> <pre><code># ss -ltu|grep -e ssh -e http tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* tcp LISTEN 0 511 *:http *:* tcp LISTEN 0 128 [::]:ssh [::]:* # ss -ltun # ss -ltun|grep -e 128 -e 511 tcp LISTEN 0 128 0.0.0.0:111 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 [::]:111 [::]:* tcp LISTEN 0 511 *:80 *:* tcp LISTEN 0 128 [::]:22 [::]:* </code></pre> <p>接続待ちをしているポートも含めて表示</p> <pre><code># ss -atu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* udp UNCONN 0 0 [::1]:323 [::]:* tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* tcp LISTEN 0 4096 [::ffff:127.0.0.1]:32768 *:* tcp LISTEN 0 511 *:http *:* tcp LISTEN 0 128 [::]:ssh [::]:* tcp TIME-WAIT 0 0 10.1.2.194:36384 169.254.169.254:http tcp CLOSE-WAIT 32 0 10.1.2.194:53958 140.204.8.149:https tcp ESTAB 0 0 [::ffff:127.0.0.1]:32768 [::ffff:127.0.0.1]:49598 </code></pre> <p>接続確立してるポート確認</p> <pre><code>>ss -t </code></pre> <p>netstat/ssコマンドのオプション</p> <p>| TH | TH |<br /> | オプション | 説明 |<br /> | -a | すべて表示(接続待ちも) |<br /> |-l|Listenしているポートのみ表示|<br /> |-t|TCPを表示|<br /> |-u|UDPを表示|<br /> |-n|ポートやホストを数値で表示|<br /> |-p|ポートを開いているプロセスを表示|</p> <p>PIDやFDも含めて、特定のポートの状況を確認する場合</p> <pre><code># lsof -i:3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 297221 mysql 24u IPv6 915253 0t0 TCP *:mysql (LISTEN) </code></pre> <h2 id="外部からポートを確認"><a href="#%E5%A4%96%E9%83%A8%E3%81%8B%E3%82%89%E3%83%9D%E3%83%BC%E3%83%88%E3%82%92%E7%A2%BA%E8%AA%8D">外部からポートを確認</a></h2> <p>外部からどのポートが開いているか確認.</p> <pre><code class="Linux">> yum install nmap > nmap [IPアドレス] </code></pre> <p>自分自身をスキャンする時は</p> <pre><code>> nmap localhost PORT STATE SERVICE 22/tcp open ssh > > > nmap -p 1-1000 localhost PORT STATE SERVICE 22/tcp open ssh > > >nmap -p 3128 localhost PORT STATE SERVICE 3128/tcp closed squid-http </code></pre> <h2 id="サービスのPort番号確認"><a href="#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AEPort%E7%95%AA%E5%8F%B7%E7%A2%BA%E8%AA%8D">サービスのPort番号確認</a></h2> <pre><code># view /etc/services </code></pre> <h1 id="Port指定疎通確認"><a href="#Port%E6%8C%87%E5%AE%9A%E7%96%8E%E9%80%9A%E7%A2%BA%E8%AA%8D">Port指定疎通確認</a></h1> <p>まずは適当なPortをListenさせる</p> <pre><code># nc -l 12345 </code></pre> <h2 id="Windowsの場合"><a href="#Windows%E3%81%AE%E5%A0%B4%E5%90%88">Windowsの場合</a></h2> <pre><code>>Test-NetConnection IPアドレス  -Port Port番号 </code></pre> <h2 id="Linuxの場合"><a href="#Linux%E3%81%AE%E5%A0%B4%E5%90%88">Linuxの場合</a></h2> <pre><code>> nc -vz localhost 12345 </code></pre> <h2 id="Curl"><a href="#Curl">Curl</a></h2> <pre><code>$ curl google.com $ curl -v telnet://10.1.2.194:22 * Rebuilt URL to: telnet://10.1.2.194:22/ * Trying 10.1.2.194... * TCP_NODELAY set * Connected to 10.1.2.194 (10.1.2.194) port 22 (#0) SSH-2.0-OpenSSH_8.0 </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/17717 2021-10-20T03:32:37+09:00 2022-08-15T02:03:36+09:00 https://crieit.net/posts/OCI-AWS OCIやAWS上のサーバの環境構築 <h1 id="1.公開鍵認証方式でssh接続"><a href="#1%EF%BC%8E%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E6%96%B9%E5%BC%8F%E3%81%A7ssh%E6%8E%A5%E7%B6%9A">1.公開鍵認証方式でssh接続</a></h1> <h2 id="1-1.キーの作成(おまけ)"><a href="#1-1%EF%BC%8E%E3%82%AD%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90%28%E3%81%8A%E3%81%BE%E3%81%91%29">1-1.キーの作成(おまけ)</a></h2> <p>Windowsのコマンドプロンプトで,</p> <pre><code>>ssh-keygen -b 4096 </code></pre> <p>(4096は任意鍵長)と打つと,<code>~/.ssh</code>に公開鍵と秘密鍵が作成される.例えばユーザー名がTanakaさんなら.<code>C:\Users\Tanaka\.ssh</code>に作成される.<br /> 秘密鍵のファイル名が<code>id_rsa</code>で,公開鍵が<code>id_rsa.pub</code>となる.</p> <p>以降の話ではこの節はあまり関係ない.</p> <h2 id="1-2.OCIでインスタンス作成"><a href="#1-2%EF%BC%8EOCI%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E4%BD%9C%E6%88%90">1-2.OCIでインスタンス作成</a></h2> <p>sshキーにスポットをあてて話を進める.<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b15633467219304616f061fd5cf3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b15633467219304616f061fd5cf3.png?mw=700" alt="image.png" /></a></p> <h3 id="1-2-1.キーペアを持っていない場合"><a href="#1-2-1%EF%BC%8E%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88">1-2-1.キーペアを持っていない場合</a></h3> <p>[ SSHキーの追加 ]欄で,[キー・ペアを自動で生成 ]を選択し,<br /> [公開キーの保存]→[秘密キーの保存]をクリックすることでキーペア取得できる.<br /> この2つのファイルは大切に保管しましょう.(今後も使いまわせるので)</p> <p>保存された2つのファイルは,<br /> 公開鍵が<code>~.key.pub</code><br /> 秘密鍵が<code>~.key</code><br /> となっている.</p> <p>この2つのファイルはどこか好きなディレクトリに格納しとこう.<br /> 例:<code>C:\Users\Tanaka\Documents\Oracle</code></p> <p>インスタンスを作成.</p> <h3 id="1-2-2.キーペアを持っている場合"><a href="#1-2-2%EF%BC%8E%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88">1-2-2.キーペアを持っている場合</a></h3> <p>OCIでインスタンスを作成する際,[sshキーの追加]欄がある.<br /> ここで,[公開キー・ファイル(.pub)のアップロード]を選択し,<br /> 自身の公開鍵のファイル(~.key.pub)をドラッグ&ドロップでアップロード.<br /> インスタンスを作成.</p> <h2 id="1-3.ssh接続"><a href="#1-3%EF%BC%8Essh%E6%8E%A5%E7%B6%9A">1-3.ssh接続</a></h2> <p>sshクライアントを起動してssh接続を試みる.</p> <h3 id="1-3-1.TeraTermの場合"><a href="#1-3-1%EF%BC%8ETeraTerm%E3%81%AE%E5%A0%B4%E5%90%88">1-3-1.TeraTermの場合</a></h3> <p>TeraTermを起動させたら[ ホスト(T) ]にIPアドレスを書いて,<br /> その下の[ TCPポート ]欄に「22」と書く※1.<br /> [ ok ]ボタンを押す.</p> <p>[ ユーザ名 ]に指定されたユーザ名を記入.<br /> OCIのCentOSの初期ユーザ名は「opc」※2.</p> <p>[ 認証方式 ]で,[ RSA/DSA/ECDSA/ED25119鍵を使う]を選択し,<br /> 1-1節で作成した秘密鍵のパスを指定.<br /> 例:</p> <pre><code>C:\Users\Tanaka\Documents\Oracle\~.key </code></pre> <p>これで接続できる.</p> <p>※1:sshのデフォルトのport番号が22.これは後で利用できるport番号内で任意番号に変更可能<br /> ※2:AWSのRHEL8の場合は「ec2-user」</p> <h3 id="1-3-2.PowerShellの場合"><a href="#1-3-2%EF%BC%8EPowerShell%E3%81%AE%E5%A0%B4%E5%90%88">1-3-2.PowerShellの場合</a></h3> <p>これだけ.</p> <pre><code>> ssh -i [秘密鍵のパス] [ユーザ名]@[IPアドレス] </code></pre> <p>以上。</p> <h1 id="2. 環境設定"><a href="#%EF%BC%92.+%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A">2. 環境設定</a></h1> <h2 id="2-1.パスワード設定"><a href="#2-1%EF%BC%8E%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%A8%AD%E5%AE%9A">2-1.パスワード設定</a></h2> <p>ログインできたら,rootユーザとログインユーザ(今回であればopc)のPassを任意に設定しとく.<br /> まずはroot</p> <pre><code>$sudo passwd root (パスワード聞かれるので適当に打つ) (切り替わるか確かめる) $ su - </code></pre> <p>次は別のユーザ</p> <pre><code>#passwd opc </code></pre> <h2 id="2-2.ssh接続のconfファイル書き換え"><a href="#2-2%EF%BC%8Essh%E6%8E%A5%E7%B6%9A%E3%81%AEconf%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88">2-2.ssh接続のconfファイル書き換え</a></h2> <p>セキュリティの観点から,ssh接続のconfigファイルを書き換える.</p> <pre><code>$ sudo vi /etc/ssh/sshd_config </code></pre> <p>とやるといろいろ書き換えられる.<br /> 英語読めば何の設定なのか想像つくと思うのでてきとーにやっとく.</p> <pre><code>Port 11326 (←port番号を22から変更) PermitRootLogin no (←Rootユーザでログインできないようにする) PubkeyAuthentication yes (←公開鍵認証方式) PasswordAuthentication no (←パスワード認証を無効化) などなど </code></pre> <p>これではまだ反映されないので,reloadしてメモリの設定を読み込ませる.<br /> (restartじゃないよ)</p> <pre><code>$ sudo systemctl reload sshd.service </code></pre> <h2 id="2-3.タイムゾーンを変更"><a href="#2-3%EF%BC%8E%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%82%92%E5%A4%89%E6%9B%B4">2-3.タイムゾーンを変更</a></h2> <p>タイムゾーンを東京に変更しとく.</p> <pre><code>$ sudo timedatectl set-timezone Asia/Tokyo </code></pre> <h2 id="2-4.変更確かめ"><a href="#2-4%EF%BC%8E%E5%A4%89%E6%9B%B4%E7%A2%BA%E3%81%8B%E3%82%81">2-4.変更確かめ</a></h2> <p>Windows端末のPowerShellでPortして疎通確認.</p> <pre><code>> Test-NetConnection [ IPアドレス ] -Port [ Port番号 ] </code></pre> <h1 id="3.yum"><a href="#3%EF%BC%8Eyum">3.yum</a></h1> <p>参考:https://access.redhat.com/ja/articles/3221791</p> <p>/etc/yum.confと/etc/yum.repos.dの二つの領域に分かれる。<br /> ※rhel8からはyumは廃止されdnfに置き換わっている。使い方はほぼ同じ。<br /> 実際、/etc/をみてみると、</p> <pre><code>[root@publicpc1 etc]# ll|grep yum drwxr-xr-x. 2 root root 57 Mar 24 12:32 yum lrwxrwxrwx. 1 root root 12 Nov 12 00:18 yum.conf -> dnf/dnf.conf drwxr-xr-x. 2 root root 217 Mar 24 12:39 yum.repos.d [root@publicpc1 yum]# pwd /etc/yum [root@publicpc1 yum]# ll total 0 lrwxrwxrwx. 1 root root 14 Nov 12 00:18 pluginconf.d -> ../dnf/plugins lrwxrwxrwx. 1 root root 18 Nov 12 00:18 protected.d -> ../dnf/protected.d lrwxrwxrwx. 1 root root 11 Nov 12 00:18 vars -> ../dnf/vars </code></pre> <p>となっている。</p> <h2 id="3-1. yum.conf(dnf.conf)"><a href="#3-1.+yum.conf%28dnf.conf%29">3-1. yum.conf(dnf.conf)</a></h2> <pre><code>[root@publicpc1 etc]# cat yum.conf [main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True best=True skip_if_unavailable=False </code></pre> <p>[main]はセクション名で、ここに記載されているのはyumのグローバルな設定。</p> <pre><code>gpgcheck </code></pre> <p>は署名チェック。1が有効で、0が無効。</p> <h2 id="3-2. yum.repos.d"><a href="#3-2.+yum.repos.d">3-2. yum.repos.d</a></h2> <pre><code>[root@publicpc1 yum.repos.d]# ll total 32 -rw-r--r--. 1 root root 495 May 5 2021 ksplice-ol8.repo -rw-r--r--. 1 root root 759 Apr 13 2021 mysql-ol8.repo -rw-r--r--. 1 root root 253 Mar 20 2021 oci-included-ol8.repo -rw-r--r--. 1 root root 252 Mar 24 12:39 oracle-epel-ol8.repo -rw-r--r--. 1 root root 694 Mar 24 12:39 oraclelinux-developer-ol8.repo -rw-r--r--. 1 root root 2740 Mar 24 12:39 oracle-linux-ol8.repo -rw-r--r--. 1 root root 470 Mar 11 01:09 uek-ol8.repo -rw-r--r--. 1 root root 243 Mar 11 01:09 virt-ol8.repo </code></pre> <p>oracle-linux-ol8.repoの中身を見てみると、ダウンロードする際に参照するURLが記載されている。<br /> ここが間違っていると適切にインストールできなくなる。<br /> ただ、ここを編集することはなさそう。</p> <p>もし社内にあるレポジトリサーバを利用したい場合、対応は2つある。<br /> 1つは、 yum.repos.d配下に~.repoファイルを追加する。<br /> 2つ目は、<code>yum -y install ~</code>で追加する方法。</p> <p>1つ目の場合</p> <pre><code># vim /etc/ yum.repos.d/test.repo [test] name=test baseurl=http://xxx.xxx/xxx.xxx/xxx gpgcheck=0 </code></pre> <p>など。</p> <h1 id="4.踏み台サーバの準備"><a href="#4%EF%BC%8E%E8%B8%8F%E3%81%BF%E5%8F%B0%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%BA%96%E5%82%99">4.踏み台サーバの準備</a></h1> <h2 id="4-1.キーペアの準備"><a href="#4-1%EF%BC%8E%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%81%AE%E6%BA%96%E5%82%99">4-1.キーペアの準備</a></h2> <h2 id="4-2.scpでファイル転送"><a href="#4-2%EF%BC%8Escp%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%BB%A2%E9%80%81">4-2.scpでファイル転送</a></h2> <h2 id="4-3.公開鍵認証の読み込みパス指定"><a href="#4-3%EF%BC%8E%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%83%91%E3%82%B9%E6%8C%87%E5%AE%9A">4-3.公開鍵認証の読み込みパス指定</a></h2> <p><a href="https://crieit.net/posts/OCI-CentOS">https://crieit.net/posts/OCI-CentOS</a></p> <h1 id="5. Port ForwardingでRDP接続"><a href="#5.+Port+Forwarding%E3%81%A7RDP%E6%8E%A5%E7%B6%9A">5. Port ForwardingでRDP接続</a></h1> <h2 id="5.1 sshトンネリング"><a href="#5.1+ssh%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AA%E3%83%B3%E3%82%B0">5.1 sshトンネリング</a></h2> <h1 id="6.Pythonインストール"><a href="#6%EF%BC%8EPython%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">6.Pythonインストール</a></h1> <h1 id="7.OCI CLIの利用方法"><a href="#7%EF%BC%8EOCI+CLI%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95">7.OCI CLIの利用方法</a></h1> <p>公式ドキュメントを参考に進めていくとインストールできる。</p> <h2 id="7.1 Oracle Linux8でオンラインインストール"><a href="#7.1+Oracle+Linux8%E3%81%A7%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">7.1 Oracle Linux8でオンラインインストール</a></h2> <p>参考<br /> OCIのクイックインストール:https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__linux_and_unix</p> <h3 id="7.1.1 dnfでインストール"><a href="#7.1.1+dnf%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">7.1.1 dnfでインストール</a></h3> <p>dnfを使用してCLIをインストール</p> <pre><code>$ sudo dnf -y install oraclelinux-developer-release-el8 We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for opc: Ksplice for Oracle Linux 8 (x86_64) 16 MB/s | 1.2 MB 00:00 MySQL 8.0 for Oracle Linux 8 (x86_64) 9.1 MB/s | 2.4 MB 00:00 MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64) 5.2 MB/s | 308 kB 00:00 MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64) 214 kB/s | 23 kB 00:00 Oracle Software for OCI users on Oracle Linux 8 (x86_64) 38 MB/s | 46 MB 00:01 Oracle Linux 8 BaseOS Latest (x86_64) 62 MB/s | 49 MB 00:00 Oracle Linux 8 Application Stream (x86_64) 48 MB/s | 37 MB 00:00 Oracle Linux 8 Addons (x86_64) 21 MB/s | 4.9 MB 00:00 Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linu 63 MB/s | 53 MB 00:00 Package oraclelinux-developer-release-el8-1.0-7.el8.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete! </code></pre> <p>続いて、cliをインストール</p> <pre><code>$ sudo dnf install python36-oci-cli Last metadata expiration check: 0:00:34 ago on Sat 13 Aug 2022 03:23:12 PM GMT. Dependencies resolved. =============================================================================================== Package Arch Version Repository Size =============================================================================================== Installing: python36-oci-cli noarch 3.14.0-1.el8 ol8_oci_included 14 M Upgrading: python36-oci-sdk x86_64 2.78.0-1.el8 ol8_oci_included 23 M Installing dependencies: python3-arrow noarch 1.1.1-1.el8 ol8_oci_included 119 k python3-jmespath noarch 0.10.0-1.el8 ol8_oci_included 48 k python3-prompt-toolkit noarch 3.0.29-1.0.2.el8 ol8_oci_included 669 k python3-terminaltables noarch 3.1.0-1.0.1.el8 ol8_oci_included 31 k python3-typing-extensions noarch 3.7.4.2-1.el8 ol8_oci_included 47 k python3-wcwidth noarch 0.2.5-3.el8 ol8_oci_included 48 k Transaction Summary =============================================================================================== Install 7 Packages Upgrade 1 Package Total download size: 38 M Is this ok [y/N]: y Downloading Packages: (1/8): python3-jmespath-0.10.0-1.el8.noarch.rpm 520 kB/s | 48 kB 00:00 (2/8): python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch.rpm 4.2 MB/s | 669 kB 00:00 (3/8): python3-arrow-1.1.1-1.el8.noarch.rpm 740 kB/s | 119 kB 00:00 (4/8): python3-terminaltables-3.1.0-1.0.1.el8.noarch.rpm 298 kB/s | 31 kB 00:00 (5/8): python3-typing-extensions-3.7.4.2-1.el8.noarch.rpm 739 kB/s | 47 kB 00:00 (6/8): python3-wcwidth-0.2.5-3.el8.noarch.rpm 711 kB/s | 48 kB 00:00 (7/8): python36-oci-cli-3.14.0-1.el8.noarch.rpm 46 MB/s | 14 MB 00:00 (8/8): python36-oci-sdk-2.78.0-1.el8.x86_64.rpm 37 MB/s | 23 MB 00:00 ----------------------------------------------------------------------------------------------- Total 45 MB/s | 38 MB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Upgrading : python36-oci-sdk-2.78.0-1.el8.x86_64 1/9 Installing : python3-wcwidth-0.2.5-3.el8.noarch 2/9 Installing : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 3/9 Installing : python3-typing-extensions-3.7.4.2-1.el8.noarch 4/9 Installing : python3-arrow-1.1.1-1.el8.noarch 5/9 Installing : python3-terminaltables-3.1.0-1.0.1.el8.noarch 6/9 Installing : python3-jmespath-0.10.0-1.el8.noarch 7/9 Installing : python36-oci-cli-3.14.0-1.el8.noarch 8/9 Cleanup : python36-oci-sdk-2.75.1-1.el8.x86_64 9/9 Running scriptlet: python36-oci-sdk-2.75.1-1.el8.x86_64 9/9 Verifying : python3-arrow-1.1.1-1.el8.noarch 1/9 Verifying : python3-jmespath-0.10.0-1.el8.noarch 2/9 Verifying : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 3/9 Verifying : python3-terminaltables-3.1.0-1.0.1.el8.noarch 4/9 Verifying : python3-typing-extensions-3.7.4.2-1.el8.noarch 5/9 Verifying : python3-wcwidth-0.2.5-3.el8.noarch 6/9 Verifying : python36-oci-cli-3.14.0-1.el8.noarch 7/9 Verifying : python36-oci-sdk-2.78.0-1.el8.x86_64 8/9 Verifying : python36-oci-sdk-2.75.1-1.el8.x86_64 9/9 Upgraded: python36-oci-sdk-2.78.0-1.el8.x86_64 Installed: python3-arrow-1.1.1-1.el8.noarch python3-jmespath-0.10.0-1.el8.noarch python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch python3-terminaltables-3.1.0-1.0.1.el8.noarch python3-typing-extensions-3.7.4.2-1.el8.noarch python3-wcwidth-0.2.5-3.el8.noarch python36-oci-cli-3.14.0-1.el8.noarch Complete! </code></pre> <p>インストール完了したらバージョン確認。</p> <pre><code>$ oci --version 3.14.0 </code></pre> <h3 id="7.1.2 構成ファイルの設定"><a href="#7.1.2+%E6%A7%8B%E6%88%90%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A">7.1.2 構成ファイルの設定</a></h3> <pre><code>$ oci setup config This command provides a walkthrough of creating a valid CLI config file. The following links explain where to find the information required by this script: User API Signing Key, OCID and Tenancy OCID: https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other Region: https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm General config documentation: https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm Enter a location for your config [/home/opc/.oci/config]:特に指定しなくてok Enter a user OCID: OCIコンソールよりユーザのOCIDをコピペ Enter a tenancy OCID: OCIコンソールよりコピペ Enter a region by index or name(e.g. 1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1, 6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1, 11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1, 16: eu-amsterdam-1, 17: eu-frankfurt-1, 18: eu-marseille-1, 19: eu-milan-1, 20: eu-paris-1, 21: eu-stockholm-1, 22: eu-zurich-1, 23: il-jerusalem-1, 24: me-abudhabi-1, 25: me-dcc-muscat-1, 26: me-dubai-1, 27: me-jeddah-1, 28: mx-queretaro-1, 29: sa-santiago-1, 30: sa-saopaulo-1, 31: sa-vinhedo-1, 32: uk-cardiff-1, 33: uk-gov-cardiff-1, 34: uk-gov-london-1, 35: uk-london-1, 36: us-ashburn-1, 37: us-gov-ashburn-1, 38: us-gov-chicago-1, 39: us-gov-phoenix-1, 40: us-langley-1, 41: us-luke-1, 42: us-phoenix-1, 43: us-sanjose-1): 13(OCIコンソールをブラウザで開いてURLを見るとわかる Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y Enter a directory for your keys to be created [/home/opc/.oci]: Enter a name for your key [oci_api_key]: Public key written to: /home/opc/.oci/oci_api_key_public.pem Enter a passphrase for your private key (empty for no passphrase): Private key written to: /home/opc/.oci/oci_api_key.pem Fingerprint: ~なんか記載されている~ Config written to /home/opc/.oci/config </code></pre> <p>完了すると、~/.oci配下にoci_api_key_public.pemが作成されているはず。このキーをOCIコンソールで<br /> アイデンティティ>ユーザー>ユーザーの詳細<br /> に行くと、画面サブに「APIキー」があるのでクリックし、oci_api_key_public.pemの中身を張り付ける。</p> <p>試しに実行してみる。</p> <pre><code>$ oci compute instance list --all Usage: oci compute instance list [OPTIONS] Error: Missing option(s) --compartment-id. </code></pre> <p>コンパートメントIDをオプションで追記しろとのこと。</p> <pre><code>$ oci compute instance list --compartment-id <OCID貼り付け> いっぱい表示された </code></pre> <p>ただ、毎回コンパートメントIDを打ち込むのは面倒なので、oci_cli_rcファイルに書き込むことでコマンド入力時にオプション付ける必要がないようにする。</p> <pre><code>$ vi ~/.oci/oci_cli_rc [DEFAULT] compartment-id=<コンパートメントID> </code></pre> <h3 id="7.1.3 プライベートサブネットからOCI CLIを実行する方法"><a href="#7.1.3+%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E3%81%8B%E3%82%89OCI+CLI%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">7.1.3 プライベートサブネットからOCI CLIを実行する方法</a></h3> <p>OCI CLIでコマンドを実行するとAPIエンドポイントと通信を行う。そのため、プライベートサブネットからAPIを発行してエンドポイントへ到達させるにはいくつかの設定が必要になる。方法は以下3つ。<br /> ①NATゲートウェイを利用してインターネットに出ていく。②サービスゲートウェイを使用して、OCI環境内に閉じた通信を行う。③プロキシを使用してインターネットへ出ていくルートを作る。</p> <p>なずは何も設定しない状態でプライベートサブネットからコマンドを実行してみる。その際、APIの実行履歴を出力させるためにデバックオプション--debug(または-d)をつけて実行する。</p> <pre><code>$ oci compute instance list --all -d ~省略~ DEBUG:oci.base_client.140243454499864:Endpoint: https://iaas.ap-tokyo-1.oraclecloud.com/20160918 INFO:oci.base_client.140243454499864: 2022-08-14 15:05:12.072064: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances INFO:oci.base_client.140243454499864: 2022-08-14 15:05:23.487363: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances ~つづく~ </code></pre> <p>となり、エンドポイントへの接続を所定の回数試行して失敗すると、以下のようなエラーが返ってくる。</p> <pre><code>oci.exceptions.ConnectTimeout: (MaxRetryError("OCIConnectionPool(host='iaas.ap-tokyo-1.oraclecloud.com', port=443): Max retries exceeded with url: /20160918/instances?compartmentId=ocid1.compartment.oc1..aaaaaaaantybfae5pn7h77jmgcwgzg2hm27gv6whsiwhmo54ycefc3sxyiwa (Caused by ConnectTimeoutError(<oci.base_client.OCIConnection object at 0x7f8cf8e2f2b0>, 'Connection to iaas.ap-tokyo-1.oraclecloud.com timed out. (connect timeout=10.0)'))",), 'Request Endpoint: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances See https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_troubleshooting.htm for help troubleshooting this error, or contact support and provide this full error message.') </code></pre> <p>実際、エンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打っても返ってこない。</p> <h4 id="7.1.3.1 NATゲートウェイの利用"><a href="#7.1.3.1+NAT%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E5%88%A9%E7%94%A8">7.1.3.1 NATゲートウェイの利用</a></h4> <p>NATゲートウェイを作成して、プライベートサブネットのルート表に追加させる。</p> <p>まずは、<br /> ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>NATゲートウェイ<br /> から「NATゲートウェイの作成」を行う。作成したNATゲートウェイをルート表のルート・ルールに追加する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9118f303fa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9118f303fa.png?mw=700" alt="image.png" /></a></p> <p>追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。<br /> エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。</p> <pre><code>$ oci compute instance list --all -d </code></pre> <p>インスタンス情報が出力されたと思う。</p> <h4 id="7.1.3.2 サービスゲートウェイの利用"><a href="#7.1.3.2+%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E5%88%A9%E7%94%A8">7.1.3.2 サービスゲートウェイの利用</a></h4> <p>社内ルールで、むやみにインターネットに出ていける設定をしてはいけない場合もあるはず。そういった場合には、OCIのVCN内に閉じた環境でエンドポイントへの通信できるサービスゲートウェイを利用するといい。<br /> ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>サービス・ゲートウェイ<br /> からサービスゲートウェイを作成する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f914cd84d54.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f914cd84d54.png?mw=700" alt="image.png" /></a></p> <p>作成したら、さきほどと同じようにプライベートサブネットのルート表のルート・ルールに追加する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9151e5f6a7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9151e5f6a7.png?mw=700" alt="image.png" /></a></p> <p>追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。<br /> エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。</p> <pre><code>$ oci compute instance list --all -d </code></pre> <p>インスタンス情報が出力されたと思う。</p> <h4 id="7.1.3.3 プロキシを使用してインターネット経由のルーティング"><a href="#7.1.3.3+%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E7%B5%8C%E7%94%B1%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0">7.1.3.3 プロキシを使用してインターネット経由のルーティング</a></h4> <p>https通信を行う際にプロキシ経由するように設定をするだけでよい。</p> <pre><code>$ export HTTPS_PROXY=http://10.1.1.45:3128 </code></pre> <p>設定した後はOCI CLIコマンドを実行すると成功するはずだ。</p> <h3 id="7.1.4 インスタンスプリンシパルの設定"><a href="#7.1.4+%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%91%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A">7.1.4 インスタンスプリンシパルの設定</a></h3> <h2 id="7.2 インスタンスプリンシパルの設定"><a href="#7.2+%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%91%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A">7.2 インスタンスプリンシパルの設定</a></h2> <p>さきほどまではAPIを用いてユーザ認証を実行してきた。それとは別に、インスタンスに対して実行権限を付与させる方法がある。それがインスタンスプリンシパル。プリンシパルは操作の実行主体を指す。</p> <h3 id="7.2.1 別ユーザで実行する"><a href="#7.2.1+%E5%88%A5%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">7.2.1 別ユーザで実行する</a></h3> <h2 id="7.3 仮想環境の作成"><a href="#7.3+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%9C%E6%88%90">7.3 仮想環境の作成</a></h2> <p>システム全体にCLIをインストールするのは非推奨。</p> <h3 id="7.3.1 仮想環境を構成するディレクトリ作成"><a href="#7.3.1+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E6%88%90%E3%81%99%E3%82%8B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E4%BD%9C%E6%88%90">7.3.1 仮想環境を構成するディレクトリ作成</a></h3> <p>仮想環境を構成するディレクトリを作成する。<br /> このディレクトリは、仮想環境をアクティブ化する際に打つパスになるので<br /> よく考えてディレクトリ名はつけるように。</p> <pre><code>[root@publicpc oci]# pwd /opt/oci </code></pre> <h3 id="7.3.2 仮想環境作成"><a href="#7.3.2+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E4%BD%9C%E6%88%90">7.3.2 仮想環境作成</a></h3> <p>まずはPythonのバージョンを確認する。</p> <pre><code>[opc@publicpc ~]$ python --version Python 3.6.8 </code></pre> <p>バージョンに応じた仮想環境作成のコマンドを打つ。</p> <pre><code>python<Pythonのバージョン> -m venv <仮想環境名> [root@publicpc oci]# python3.6 -m venv venv1 </code></pre> <p>/opt/oci配下にvenv1という仮想環境が作成される。</p> <h3 id="7.3.3 仮想環境をアクティブ化"><a href="#7.3.3+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E5%8C%96">7.3.3 仮想環境をアクティブ化</a></h3> <p>OCI CLIのコマンドを打つときは、仮想環境をアクティブ化したうえで実行させる。<br /> アクティブ化させるコマンドは以下の通り。</p> <pre><code>[root@publicpc oci]# source /opt/oci/venv1/bin/activate (venv1) [root@publicpc oci]# </code></pre> <p>ちなみに、非アクティブ化は以下でできる。</p> <pre><code>(venv1) [root@publicpc oci]# deactivate [root@publicpc oci]# </code></pre> <h2 id="7.4 OCI-CLIのオフラインインストール"><a href="#7.4+OCI-CLI%E3%81%AE%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">7.4 OCI-CLIのオフラインインストール</a></h2> <p>会社の社内規則などによってLinuxサーバがインターネット接続できない場合、自分がWindows端末にインストールファイルをダウンロードし、<br /> そのファイルをLinuxサーバに配置して読み込ませることでCLIの実行環境を準備することができる。</p> <p>Github(https://github.com/oracle/oci-cli/releases)から、oci-cli.zipをローカルにダウンロード。<br /> oci-cli.zipを作Linuxサーバに配置し解凍する。</p> <h1 id="8.Ansibleのインストール"><a href="#8%EF%BC%8EAnsible%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">8.Ansibleのインストール</a></h1> <h1 id="9.BlockVolumeのパーティション切りとマウント"><a href="#9%EF%BC%8EBlockVolume%E3%81%AE%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E3%81%A8%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88">9.BlockVolumeのパーティション切りとマウント</a></h1> <h1 id="10.コンテナ"><a href="#10%EF%BC%8E%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A">10.コンテナ</a></h1> kawai_mizugorou tag:crieit.net,2005:PublicArticle/17690 2021-09-27T00:57:53+09:00 2022-06-10T19:24:22+09:00 https://crieit.net/posts/OCI-CentOS OCI上でCentOSの非公開サーバとプロキシサーバ <h1 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h1> <p>Server1のプライベートIP:10.0.0.130<br /> のパブリックIP: ?.?.?.?<br /> Server2のプライベートIP:10.0.0.123</p> <p>まずは,プロキシサーバとしてるServer1の秘密キーをServer2に渡すため,ローカルに保存してるキーをServer1に渡す.<br /> ファイル転送</p> <pre><code>scp -i C:\Users\Username\Documents\Oracle\ssh-key-controll-secret.key C:\Users\Username\Documents\Oracle\ssh-key-controll-secret.key name@IPofServer1:/home/name/download/ </code></pre> <p>秘密キーの保管場所を管理して公開鍵認証ができるようにする</p> <pre><code>$ cd ~/.ssh $ cp -pi secret-key.pub authorized_keys $ chmod 0600 authorized_keys </code></pre> <p>または</p> <pre><code>~/.ssh/config #Permissionの変更 >chmod 0600 ~/.ssh/config #Permissionの変更 >chmod 0600 ~/.ssh/ssh-key-controll-secret.key Host 任意の接続名(hoge) HostName ホスト名 User ユーザー名 Port ポート番号 IdentityFile 鍵へのPATH(例えば~/.ssh/hoge.key) ServerAliveInterval 60 </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16648 2021-01-25T03:06:35+09:00 2021-01-25T03:06:35+09:00 https://crieit.net/posts/Python-95 Pythonで95パーセンタイル区間を色塗り <h1 id="95パーセンタイル(95 percentile)を色塗り"><a href="#95%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%AB%2895+percentile%29%E3%82%92%E8%89%B2%E5%A1%97%E3%82%8A">95パーセンタイル(95 percentile)を色塗り</a></h1> <pre><code class="python">up=np.zeros(141) #塗りつぶす範囲の上縁 down=np.zeros(141) #塗りつぶす範囲の下縁 for i in range(141): b=loss_all[((parameters[:,0]-i/10-0.5)*(parameters[:,0]-i/10-1) <= 0)] up[i]=np.percentile(b,q=[2.5,97.5])[1] down[i]=np.percentile(b,q=[2.5,97.5])[0] plt.figure(figsize=(6, 6), dpi=150) plt.tick_params(labelsize=15) plt.scatter(parameters[:,0],loss_all,s=10, alpha=0.3) plt.fill_between(np.arange(141)/10+0.5,up,down,color='red',alpha=0.4) plt.xlabel('Hs1[m]') plt.ylabel('Test absolute error of sea state parameters') #plt.ylim(-2,2) plt.grid() plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/c45e68ad33678bfa3b123e2fc7345bd3600db6b05015d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c45e68ad33678bfa3b123e2fc7345bd3600db6b05015d.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16643 2021-01-23T02:29:26+09:00 2022-08-07T06:48:41+09:00 https://crieit.net/posts/Python-Fisher Pythonでピアソンの積率相関係数,Fisherの相関係数を求めるプログラム <h1 id="ピアソン(Pearson)の積率相関係数"><a href="#%E3%83%94%E3%82%A2%E3%82%BD%E3%83%B3%28Pearson%29%E3%81%AE%E7%A9%8D%E7%8E%87%E7%9B%B8%E9%96%A2%E4%BF%82%E6%95%B0">ピアソン(Pearson)の積率相関係数</a></h1> <p>相関係数を求める.</p> <pre><code class="python">def corre_factor(retsu): X=Estimate[index2,retsu] Y=Target[index2,retsu] E_xx=np.sum((X-np.mean(X))**2) E_yy=np.sum((Y-np.mean(Y))**2) E_xy=np.sum((X-np.mean(X))*(Y-np.mean(Y))) return E_xy/np.sqrt(E_xx)/np.sqrt(E_yy) df=pd.DataFrame([['H1',corre_factor(0)],['λ1',corre_factor(3)],['ω1',corre_factor(4)], ['H2',corre_factor(5)],['λ2',corre_factor(8)],['ω2',corre_factor(9)] ]) df </code></pre> <p>以上です.</p> <h1 id="Fisherの相関係数"><a href="#Fisher%E3%81%AE%E7%9B%B8%E9%96%A2%E4%BF%82%E6%95%B0">Fisherの相関係数</a></h1> <p>方向統計では,ピアソンの積率相関係数を適用できません.<br /> 例えば,[0°, 360°)で満遍なくデータが散布していた場合,平均の方向など定義できないからです.<br /> そこで,Fisherの相関係数を使用します.</p> <pre><code class="python">Sxy,Sxx,Syy=0,0,0 sin_est=Estimate[index2,2] cos_est=Estimate[index2,1] sin_tar=Target[index2,2] cos_tar=Target[index2,1] for i in range(len(index2)-1): for j in range(i+1,len(index2)): Sxy +=math.sin(math.atan2(sin_est[i],cos_est[i])-math.atan2(sin_est[j],cos_est[j] ))*math.sin(math.atan2(sin_tar[i],cos_tar[i])-math.atan2(sin_tar[j],cos_tar[j])) Sxx += math.sin(math.atan2(sin_est[i],cos_est[i] )-math.atan2(sin_est[j],cos_est[j] ))**2 Syy += math.sin(math.atan2(sin_tar[i],cos_tar[i] )-math.atan2(sin_tar[j],cos_tar[j] ))**2 Rc=Sxy/(math.sqrt(Sxx*Syy)) print(Rc) </code></pre> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16633 2021-01-19T15:50:06+09:00 2021-01-19T15:50:06+09:00 https://crieit.net/posts/Numpy-FFT Numpyを使用してFFT&トレンド除去 <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>Pythonで,Numpyを使って時系列データをFFT(Fast Fourier Transform: 高速フーリエ変換)する方法と,時系列データのトレンドを除去する方法について紹介しようと思います.FFTとは,DFT(Discrete Fourier Transform:離散フーリエ変換)を高速処理する計算方法です.この記事では理論には触れず,FFTを実行する最低限のコードを示します.参考にした文献は「スペクトル解析 著:日野幹雄 (朝倉書店)」.フーリエ解析の基礎からFFTの理論まで,この本1冊で十分です.</p> <h1 id="目次"><a href="#%E7%9B%AE%E6%AC%A1">目次</a></h1> <p>1.時系列データ<br /> 2.FFT実行<br /> 3.トレンド除去<br /> 4.フーリエ成分を周波数平滑化(スムージング)<br /> 5.Appendix</p> <h1 id="本題"><a href="#%E6%9C%AC%E9%A1%8C">本題</a></h1> <h2 id="1. 時系列データ"><a href="#1.+%E6%99%82%E7%B3%BB%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF">1. 時系列データ</a></h2> <p>サンプリング周波数10Hzの30分間データ.オレンジの線は移動平均です.トレンドがあるのが分かりますね.<br /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/292fc03d-cd12-d9d0-9a92-f21afd798e12.png" alt="元時系列.png" /><br /> 図1.元の時系列データ</p> <p>このデータをFFTしていきます.</p> <h2 id="2. FFT実行"><a href="#2.+FFT%E5%AE%9F%E8%A1%8C">2. FFT実行</a></h2> <pre><code class="python">N =len(X) #データ長 fs=10 #サンプリング周波数 dt =1/fs # サンプリング間隔 t = np.arange(0.0, N*dt, dt) #時間軸 freq = np.linspace(0, fs,N) #周波数軸 fn=1/dt/2 #ナイキスト周波数 </code></pre> <p>FFTはデータ長が2のべき乗である場合に最も計算速度が速くなるような計算手法ですが,そうでない場合でも計算は可能です(処理時間が多少長くなりますが).ただし,データ長が素数の場合には,2のべき乗の時に比べて相対的にかなり処理時間がかかるので,2のべき乗になるよう0パディングした方が良さそうです.Appendixにそれを確かめるコードを載せたので是非確かめてみてください.</p> <pre><code class="python">F=np.fft.fft(X)/(N/2) F[(freq>fn)]=0 #ナイキスト周波数以降をカット plt.plot(freq,np.abs(F))# plt.xlabel("[Hz]") plt.ylabel("Amp") plt.xlim(-0.01,0.5) plt.grid() plt.show() </code></pre> <p>np.fft.fftでは複素フーリエ成分で与えられるので,その絶対値をとったものをプロットしたのが下図です.トレンド成分が0Hz付近にありますね.<br /> 次節ではトレンド除去してみましょう.<br /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/10cfb5d7-225a-0fcb-b587-15cd835a54d6.png" alt="元時系列をFFT.png" /><br /> 図2.元の時系列データに対してFFT実行</p> <h2 id="3. トレンド除去"><a href="#3.+%E3%83%88%E3%83%AC%E3%83%B3%E3%83%89%E9%99%A4%E5%8E%BB">3. トレンド除去</a></h2> <p>図1の移動平均(オレンジ線)を見ると,時系列データの軸がx軸と乖離しており,データにトレンドがあるのが分かります.次の操作で,0.03Hz以下を0にすることでトレンドを除去してみましょう.</p> <pre><code class="python">F=np.fft.fft(X)/(N/2) F[(freq>fn)]=0 F[(freq<=0.03)]=0 #0.03HZ以下を除去 X_1=np.real(np.fft.ifft(F))*N plt.xlabel("Time [s]") plt.ylabel("Signal") plt.xlim(-50,1850) plt.grid() plt.show() </code></pre> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/81607c19-d8a0-741c-0607-b738e22389e6.png" alt="周波数カット時系列.png" /><br /> 図3.トレンド除去後の時系列データ</p> <p>x軸を起点に周期関数となっていることが分かります.</p> <h2 id="4. フーリエ成分を周波数平滑化(スムージング)"><a href="#4.+%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E6%88%90%E5%88%86%E3%82%92%E5%91%A8%E6%B3%A2%E6%95%B0%E5%B9%B3%E6%BB%91%E5%8C%96%28%E3%82%B9%E3%83%A0%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%29">4. フーリエ成分を周波数平滑化(スムージング)</a></h2> <p>図3のデータをFFTすると図4になります.<br /> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/4b9efda7-b282-5598-308e-0a3b8206bd93.png" alt="周波数カット時系列をFFT.png" /><br /> 図4.トレンド除去後の時系列データに対してFFT</p> <p>ガタガタしてるので,平滑化ウィンドーを作用させてスムージングをしてみます.</p> <pre><code class="python">window=np.ones(5)/5 #平滑化ウィンドー F3=np.convolve(F2,window,mode='same') #畳み込み F3=np.convolve(F3,window,mode='same') #畳み込み F3=np.convolve(F3,window,mode='same') #畳み込み plt.plot(freq,np.abs(F3)) plt.xlabel("[Hz]") plt.ylabel("Amp") plt.xlim(-0.01,0.5) plt.grid() plt.show() </code></pre> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/e5c9259f-0027-f647-a77c-5bff2aa82fda.png" alt="周波数平滑化.png" /><br /> 図5.平滑化した</p> <h2 id="5. Appendix"><a href="#5.+Appendix">5. Appendix</a></h2> <p>データ長さを3種類用意して計算時間を比較してみます.<br /> ①2^19(2のべき乗) ②2^(19)-1 (素数) ③2^(19)-2 (素数でも2のいべき乗でもない)</p> <pre><code class="python">import time if __name__ == '__main__': start = time.time() x2 = np.random.uniform(size=2**19-2)#2**19 , 2**19-1 print(np.fft.fft(x2)) elapsed_time = time.time() - start print ("elapsed_time:{0}".format(elapsed_time) + "[sec]") </code></pre> <p>計算結果<br /> ①0.04197[sec]<br /> ②0.1679[sec]<br /> ③0.05796[sec]</p> <p>データ長が素数の場合には0パディングを行って2のべき乗にした方が良さそうですね.</p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16632 2021-01-19T15:49:02+09:00 2021-01-19T15:49:02+09:00 https://crieit.net/posts/Contour-maps-in-polar-coordinate 極座標で等高線図を作成(Contour maps in polar coordinate) <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p> Pythonで極座標形式の等高線図を描く方法を紹介します.<a target="_blank" rel="nofollow noopener" href="https://matplotlib.org/api/_as_gen/matplotlib.pyplot.contour.html">matplotlibの公式ドキュメント</a>を参考にしたので,詳しくはそちらをご覧ください.</p> <p> 本記事では,描き方の使用例として海の波の様子を表示させます.従って,変数は波の高さ・周波数・波向きの3つです.極座標形式の等高線図の周方向が波向きを,中心からの距離が周波数を,等高線の色が波高さを示します.</p> <h1 id="本編"><a href="#%E6%9C%AC%E7%B7%A8">本編</a></h1> <h2 id="準備"><a href="#%E6%BA%96%E5%82%99">準備</a></h2> <p>まずはモジュールのインポート</p> <pre><code class="python">import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.cm as cm </code></pre> <p>続いては表示させたいデータをインポート.<br /> 本記事では,あらかじめ用意したcsvファイルを読み込みました.ファイルは25行36列のデータです.行は周波数を表し,列は波向きです.</p> <pre><code class="python">a = pd.read_csv("GA.csv",engine='python',header=None,skiprows=0) GA =a.values </code></pre> <h2 id="極座標等高線図の作成"><a href="#%E6%A5%B5%E5%BA%A7%E6%A8%99%E7%AD%89%E9%AB%98%E7%B7%9A%E5%9B%B3%E3%81%AE%E4%BD%9C%E6%88%90">極座標等高線図の作成</a></h2> <p>まずは,周方向と中心からの距離の軸を設定します.</p> <p>ここで注意したいのが,インポートしたデータの波向きは,0°~350°([0,10,20, ,,, ,340,350])の36列です.しかし,極座標表示させたい場合は,0°~360°([0,10,20, ,,, ,350,360])の37列にする必要があります.</p> <pre><code class="python">#周方向(波向き[rad])のリスト作成 theta = 2 * np.pi/360*np.arange(0, 370, 10) #中心からの距離(波周波数[rad/s])のリスト作成 freq=2*np.pi*np.array([0.0445953, 0.0486315, 0.053033, 0.0578329, 0.0630672, 0.0687753, 0.075, 0.0817881, 0.0891906, 0.097263, 0.106066, 0.1156658, 0.1261345, 0.1375506, 0.15, 0.1635762, 0.1783811, 0.194526, 0.2121321,0.2313317, 0.252269, 0.2751013, 0.3000001, 0.3271524, 0.3567623]) X, Y = np.meshgrid(theta, freq) #25行37列の2次元リストを作成 ※360°は0°の値を読み込んでいる事に注意 wavedata=[[float(GA[i,int((j)%36)])for j in range(37)] for i in range(25)] </code></pre> <p>いよいよ描画.<br /> 表示させたい2次元データは最大値が4.8なので,np.linspace(0.00, 5.00, 501)のmaxを5にして,同じようにvmax=5としています.<br /> cmapはカラーマップです.色を変えたい場合は<a target="_blank" rel="nofollow noopener" href="https://matplotlib.org/3.2.1/tutorials/colors/colormaps.html">matplotlibの色サンプル</a>をご覧ください.</p> <pre><code class="python">v = np.linspace(0.00, 5.00, 501) ctf=ax2.contour(X, Y, wavedata,levels=v,cmap=cm.jet,linewidths=0.5,vmax=5) plt.colorbar(ctf, pad=0.1,orientation="vertical")#カラーバーを横にしたければorientation="horizontal" ax2.set_theta_zero_location("S")#0°の方角.北はN,南はS,西はW,東はE ax2.set_theta_direction(1)#時計回りの場合は-1,反時計周りの場合は1 ax2.set_rlabel_position(60)#距離の軸の位置.単位はdeg. plt.show() </code></pre> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/822da380-32ae-7b05-b36d-569e21cac29e.png" alt="image.png" /></p> <p>以上になります.お疲れさまでした.<br /> 誤りの指摘や質問等がありましたら,お手数ですがコメントください.<br /> よろしくお願いします.</p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16620 2021-01-19T03:06:48+09:00 2021-01-19T03:06:48+09:00 https://crieit.net/posts/f00c3157c7e766549834c6aa17923099 散布図へ色を付ける方法 <pre><code class="python">import matplotlib.pyplot as plt from scipy.stats import gaussian_kde x=(np.array([np.arange(0, 2.11,0.03 )]*len(index))).flatten() y=GA[index,19:19+71].flatten() xy=np.vstack([x,y]) z=gaussian_kde(xy)(xy) plt.figure(figsize=(5, 3), dpi=100) plt.title('Pitch') plt.scatter(x,y,c=z,s=10) plt.grid(True) plt.ylim(0,0.1) plt.xlabel(" [rad/s]") plt.ylabel("[deg^2/s]") plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/74eb05fa85abc8cad6d1fab5078931006005ce34415d9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/74eb05fa85abc8cad6d1fab5078931006005ce34415d9.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16619 2021-01-19T03:00:41+09:00 2021-01-27T04:23:37+09:00 https://crieit.net/posts/boxplot 箱ひげ図(boxplot)の描き方 <p>箱ひげ図の描き方</p> <pre><code class="python">import seaborn as sns import matplotlib.pyplot as plt sns.set() sns.set_style('whitegrid') sns.set_palette('bone') nums=(np.arange( 0, 2.11,0.03 )*100)/100 Labels=[] for i in range(len(np.arange( 0, 2.11,0.03 ))): if i %5 ==0: Labels.append(int(i*3)/100) else: Labels.append('') fig = plt.figure(figsize=(5,3), dpi=150) ax = fig.add_subplot(1, 1, 1) ax.boxplot(GA[index,19:19+71],labels=Labels,showfliers=False) ax.set_title('Pitch') ax.set_xlabel('[rad/s]') ax.set_ylabel('[deg^2/s]') ax.set_ylim(-0.005, 0.3) ax.set_xlim(0, 71) fig.savefig('GA_Pitch_Boxplot.png') plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/4c6d6d98899e414aa516ddadb9f355676006802b6ffab.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4c6d6d98899e414aa516ddadb9f355676006802b6ffab.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16618 2021-01-19T02:56:21+09:00 2021-01-19T03:01:08+09:00 https://crieit.net/posts/Ridgeline-plot Ridgeline plotの描き方 <p>複数の分布をグループorカテゴリ別に重ね合わせて表示する図(Ridgeline plots)の書き方.Joyplotとも言う?</p> <pre><code class="python">from scipy.stats import gaussian_kde import matplotlib.pyplot as plt plt.figure(figsize=(4, 6), dpi=150) def ridgeline(data,overlap=0.5,fill=True,labels=None,n_points=150): xx=np.linspace(np.min(np.concatenate(data)),np.max(np.concatenate(data)),n_points) curves=[] ys=[] for i,d in enumerate(data): pdf=gaussian_kde(d) y=i*(1.0-overlap) curve=pdf(xx) if fill: plt.fill_between(xx,np.ones(n_points)*y,curve+y,zorder=len(data)-i+1,alpha=0.1,color=fill) plt.plot(xx,curve+y,c='k',zorder=len(data)-i+1) plt.xlim(-1,1) #plt.ylim(10,50) if labels: plt.yticks(ys,labels) data=(FFT[index,19+10:19+51]-GA[index,19+10:19+51]).T print(np.shape(data)) ridgeline(data,overlap=0,fill='blue') </code></pre> <p><a href="https://crieit.now.sh/upload_images/22fcdf363a2232af73bed479cb4b582b6005cbbe7e255.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/22fcdf363a2232af73bed479cb4b582b6005cbbe7e255.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16418 2020-12-24T02:11:35+09:00 2021-02-01T21:00:27+09:00 https://crieit.net/posts/Matplotlib Matplotlibの頻繁に使うコード <p>折れ線グラフや散布図を描くコード</p> <pre><code class="python">fig=plt.figure(figsize=(8, 6), dpi=150) #fig=plt.figure(figsize=(4, 4), dpi=150) plt.scatter(eval_preds[:,0],test_ydata[:,0],s=20, alpha=0.10) plt.plot(list_train_loss, 'k-', label='Training error',alpha=0.8,color='blue') plt.ylim(0,0.2) plt.xlim(0,0.2) plt.xlabel('Epoch') plt.ylabel('MSE') plt.title('Learning curve') plt.tick_params(labelsize=15) plt.locator_params(axis='y',nbins=8) plt.locator_params(axis='x',nbins=8) plt.gca().yaxis.set_major_formatter(plt.FormatStrFormatter('%.0f')) plt.gca().xaxis.set_major_formatter(plt.FormatStrFormatter('%.0f')) plt.legend(['Train','Test'], loc='upper right') plt.grid() fig.savefig('画像/結果.png') plt.show() </code></pre> <p>下の画像は上のコードと対応してませんが,参考程度に<br /> <a href="https://crieit.now.sh/upload_images/e85354f3854274e833c09f024fb5d8e65fe37ae699d60.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e85354f3854274e833c09f024fb5d8e65fe37ae699d60.png?mw=700" alt="image" /></a></p> <p><a href="https://crieit.now.sh/upload_images/c5a917eb692287f0e874b18811319d1d5fe37af784db7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c5a917eb692287f0e874b18811319d1d5fe37af784db7.png?mw=700" alt="image" /></a></p> kawai_mizugorou