20220110のLinuxに関する記事は10件です。

【WLS2】みんなOracle Linuxあそぼうよ!!

やあやあ僕はただのいい男の子です。 この記事を書いたきっかけ WSLでUbuntuで結構遊んだんだけどさ、 自分は結構Oracle製品愛用してて、Oracle DBとかWebLogic Serverを使いたいときにさ、 Ubuntuでは動作保証されてないわけなのよ。 別にDockerやらのコンテナで動かせばいいんだけどさ、もうちょっとWindowsから近い場所で触りたいのよ。 だからコンテナでOracle DBを動かすんじゃなくてWSL上でOracle Linux(以下OL)を動かしたいのだ! Oracle Linuxは個人開発なら無償利用できます。 Oracle Linux ダウンロード WSL用のOracle Linuxのイメージはないよ 残念ながらOLはMicrosoft Storeにリリースされてない。 あるのはUbuntuとその他有償の各種ディストリビューションのみ。 CentOSもStoreにないけれどGitHubのアーカイブから利用できるみたいだね。 【本題】Oracle LinuxをWSLとしてインストールする 参照: WSL で使用する Linux ディストリビューションをインポートする ここみてやってるからわしは裏技みたいなすごいことしてないよ! やること 1. UbuntuのWSLからOLのコンテナイメージをプル 2. イメージをTarファイルにしてWindowsの任意の場所に配置 3. WSLコマンドでインポート ⇒使える!! 1. UbuntuのWSLからOLのコンテナイメージをプル この記事ではWLS2ですでにUbuntuが使えることを前提にしているよ! どこかでお調べして前提条件クリアしてね(^▽^)/ Ubuntuで以下を実行してOLイメージをプル ※今回は最新の8.5をプルするよ $ podman -v  ←Dockerでも大丈夫です podman version 3.4.2 $ podman pull docker.io/library/oraclelinux:8.5 ↑ container-registry.oracle.com/os/oraclelinux:8.5でも可 (Oracle公式のコンテナレジストリからプルすることになる、中身は同じ) Trying to pull docker.io/library/oraclelinux:8.5... Getting image source signatures Copying blob 671f9b4a2df1 done Copying config 7f20b3bf28 done Writing manifest to image destination Storing signatures 7f20b3bf28af8fe567962c2f39579436fe33c59232d95a27ab404aee89fe95e7 確認 $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/oraclelinux 8.5 7f20b3bf28af 2 weeks ago 243 MB 2. イメージをTarファイルにしてWindowsの任意の場所に配置 ここでは イメージを実行⇒実行中のコンテナIDを取得⇒実行コンテナをTarファイルとしてエクスポート という流れだよ。 Ubuntuで作業するよ イメージを実行 lsコマンド実行したからプロセスダウンするけど大丈夫だよ $ podman run -t docker.io/library/oraclelinux:8.5 ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var コンテナIDを取得 $ ContainerID=$(podman container ls -a | grep -i oracle | awk '{print $1}') $ echo $ContainerID 42b479efd71b 実行コンテナをTarファイルとしてエクスポート WSL2はデフォルトで/mntにWindowsのファイルシステムがマウントされてるよ だから例えば/mnt/c/Users/[ユーザ名]配下に置けば、Windowsのホームディレクトリに置けるというわけだ! 今回はTarファイルを格納するディレクトリを作っておくよ(任意) $ mkdir -p /mnt/c/Users/laxbl/oracle_linux $ podman export $ContainerID > /mnt/c/Users/laxbl/oracle_linux/ol85.tar Windows側からもTarファイルがあることを確認してね! 3. WSLコマンドでインポート ここからはUbuntuマシンじゃなくてWindowsで作業するよ! コマンドプロンプトを起動して作業するよ(PowerShellでもOK) WSLのimportサブコマンドでディストリビューションをインポートするのだ importサブコマンドの構文: wsl.exe –import <ディストリ名> <インストール先のフォルダパス> <インポートするファイルパス> 今回はTarファイルがあるところにインストールする C:\Users\laxbl>wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2 C:\Users\laxbl>wsl --import Oracle-8.5 C:\Users\laxbl\oracle_linux C:\Users\laxbl\oracle_linux\ol85.tar 確認・起動 >wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2 Oracle-8.5 Stopped 2 [root@MSI ~]# [root@MSI ~]# cat /etc/oracle-release Oracle Linux Server release 8.5 できた!!! インポートするとデフォルトではrootユーザしかないので適宜一般ユーザを作成して使ってくださいな。 [root@MSI ~]# passwd oracle Changing password for user oracle. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@MSI ~]# su - oracle [oracle@MSI ~]$ [oracle@MSI ~]$ whoami oracle その他 お気づきの方はわかると思うけど、この要領でほかのいろんなディストリビューションもWSLで使えるようになるよ(^▽^)/ 以上! 最後まで見てくれてありがとうね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【WLS2】みんなOracle Linuxであそぼうよ!!

やあやあ僕はただのいい男の子です。 この記事を書いたきっかけ WSLでUbuntuで結構遊んだんだけどさ、 自分は結構Oracle製品愛用してて、Oracle DBとかWebLogic Serverを使いたいときにさ、 Ubuntuでは動作保証されてないわけなのよ。 別にDockerやらのコンテナで動かせばいいんだけどさ、もうちょっとWindowsから近い場所で触りたいのよ。 だからコンテナでOracle DBを動かすんじゃなくてWSL上でOracle Linux(以下OL)を動かしたいのだ! Oracle Linuxは個人開発なら無償利用できます。 Oracle Linux ダウンロード WSL用のOracle Linuxのイメージはないよ 残念ながらOLはMicrosoft Storeにリリースされてない。 あるのはUbuntuとその他有償の各種ディストリビューションのみ。 CentOSもStoreにないけれどGitHubのアーカイブから利用できるみたいだね。 【本題】Oracle LinuxをWSLとしてインストールする 参照: WSL で使用する Linux ディストリビューションをインポートする ここみてやってるからわしは裏技みたいなすごいことしてないよ! やること 1. UbuntuのWSLからOLのコンテナイメージをプル 2. イメージをTarファイルにしてWindowsの任意の場所に配置 3. WSLコマンドでインポート ⇒使える!! 1. UbuntuのWSLからOLのコンテナイメージをプル この記事ではWLS2ですでにUbuntuが使えることを前提にしているよ! どこかでお調べして前提条件クリアしてね(^▽^)/ Ubuntuで以下を実行してOLイメージをプル ※今回は最新の8.5をプルするよ $ podman -v  ←Dockerでも大丈夫です podman version 3.4.2 $ podman pull docker.io/library/oraclelinux:8.5 ↑ container-registry.oracle.com/os/oraclelinux:8.5でも可 (Oracle公式のコンテナレジストリからプルすることになる、中身は同じ) Trying to pull docker.io/library/oraclelinux:8.5... Getting image source signatures Copying blob 671f9b4a2df1 done Copying config 7f20b3bf28 done Writing manifest to image destination Storing signatures 7f20b3bf28af8fe567962c2f39579436fe33c59232d95a27ab404aee89fe95e7 確認 $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/oraclelinux 8.5 7f20b3bf28af 2 weeks ago 243 MB 2. イメージをTarファイルにしてWindowsの任意の場所に配置 ここでは イメージを実行⇒実行中のコンテナIDを取得⇒実行コンテナをTarファイルとしてエクスポート という流れだよ。 Ubuntuで作業するよ イメージを実行 lsコマンド実行したからプロセスダウンするけど大丈夫だよ $ podman run -t docker.io/library/oraclelinux:8.5 ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var コンテナIDを取得 $ ContainerID=$(podman container ls -a | grep -i oracle | awk '{print $1}') $ echo $ContainerID 42b479efd71b 実行コンテナをTarファイルとしてエクスポート WSL2はデフォルトで/mntにWindowsのファイルシステムがマウントされてるよ だから例えば/mnt/c/Users/[ユーザ名]配下に置けば、Windowsのホームディレクトリに置けるというわけだ! 今回はTarファイルを格納するディレクトリを作っておくよ(任意) $ mkdir -p /mnt/c/Users/laxbl/oracle_linux $ podman export $ContainerID > /mnt/c/Users/laxbl/oracle_linux/ol85.tar 用済みのコンテナはさよなら? $ podman rm -fv $ContainerID Windows側からもTarファイルがあることを確認してね! 3. WSLコマンドでインポート ここからはUbuntuマシンじゃなくてWindowsで作業するよ! コマンドプロンプトを起動して作業するよ(PowerShellでもOK) WSLのimportサブコマンドでディストリビューションをインポートするのだ importサブコマンドの構文: wsl.exe –import <ディストリ名> <インストール先のフォルダパス> <インポートするファイルパス> 今回はTarファイルがあるところにインストールする C:\Users\laxbl>wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2 C:\Users\laxbl>wsl --import Oracle-8.5 C:\Users\laxbl\oracle_linux C:\Users\laxbl\oracle_linux\ol85.tar 確認・起動 >wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2 Oracle-8.5 Stopped 2 [root@MSI ~]# [root@MSI ~]# cat /etc/oracle-release Oracle Linux Server release 8.5 できた!!! インポートするとデフォルトではrootユーザしかないので適宜一般ユーザを作成して使ってくださいな。 [root@MSI ~]# useradd oracle [root@MSI ~]# passwd oracle Changing password for user oracle. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@MSI ~]# su - oracle [oracle@MSI ~]$ [oracle@MSI ~]$ whoami oracle その他 お気づきの方はわかると思うけど、この要領でほかのいろんなディストリビューションもWSLで使えるようになるよ(^▽^)/ 以上! 最後まで見てくれてありがとうね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【何を】screenコマンドで表示が崩れる問題【今更】

現象 screenコマンドで開始したセッション上で alsamixer を実行すると表示が崩れることに最近気が付いた。 取り合えず矢印キーでの音量設定はできるので構わず使っていたが、流石に気持ち悪いので調べてみた。 対応方法 ~/.screenrc に(無ければ作成)以下追記 cjkwidth off 参考URL: bug #46273: screen 4.3.1 broken nmon's display and alsamixer try adding "cjkwidth off" to your ~/.screenrc and it will probably work again. cjk の意味は以下参照。 CJK統合漢字 - Wikipedia CJK統合漢字の名称は、中国語(Chinese)、日本語(Japanese)、朝鮮語(Korean) で使われている漢字をひとまとめにしたことからきている。 所謂全角文字って認識でいいのかな。どうもその文字幅設定機能に問題があるので off にしろってことらしい。 御託 そもそも、alsamixer は ncurses を利用している。 alsamixer(1) - Linux man page alsamixer - soundcard mixer for ALSA soundcard driver, with ncurses interface ncurses は以下参照。 ncurses - Wikipedia ncurses は、端末に依存しない形式でテキストユーザインタフェース (TUI) を作成するためのAPIを提供するライブラリ。画面切り替えを最適化し、リモートシェルで使ってもレイテンシを最小に抑えるようになっている。 根源的には、screenコマンド + ncurses の問題。(alsamixer 云々ではなく) 経緯としては、GNU Screen 4.x 辺りのパッチに問題があり、表示に不具合が発生するようになったらしい。 UTF8環境のGNU Screen 4.1_4.2でNCursesの表示がおかしくなる - Narrow Escape GNU Screen 4.2.0にしたら罫線表示がぶっ壊れた GNU screenの日本語環境でncursesを使うと表示が乱れる - ksaitoの日記 Unicode の曖昧な文字幅問題 その2 - diary of a madman GNU screen っていうかバグだよね、これ。cjkwidth 機能を off にすることによる問題回避は小手先の対応に過ぎない。根本的な修正を望みたいところ。 英語圏にも日本人以上に日本語、文字コードレベルで詳しい方もいて驚かされる。 海外の技術者が日本語の「文字化け」を本気で解説、日本人顔負けの日本通っぷりが披露される - GIGAZINE しかし、Linux の世界では非英語圏は蚊帳の外というか、あまり熱心に対応してくれないよな。ぶっちゃけ、物凄くどうでもいいです、ぐらいな感じだろうし。 とはいえ今回色々と調べていて良い勉強になった。 個人的に screenコマンドは常用しているが、セッションの作成に限定した単純な使い方だけだった。(無線LAN がよく切れるのでその対策) 奥が深いツールなのでもう少し勉強して使い込んでいきたいと思ったなり。 Man page of SCREEN Screen User’s Manual
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SSL設定 備忘録

認証レベル OpenSSl opensslは通常、ほとんどのLinuxディストリビューションにデフォルトでインストールされている。 versionの確認 openssl version ssl -V ディレクトリ作成 sudo mkdir /etc/apache2/ssl.key sudo mkdir /etc/apache2/ssl.crt 補足 説明 備考 mkdir /etc/apache2/ssl.key ssl.keyという名前のフォルダができる。ファイルができるわけではない。 秘密鍵の作成 sudo openssl genrsa -out /etc/apache2/ssl.key/server.key 2048 補足 説明 備考 genrsa 暗号アルゴリズムRSA -des3 秘密鍵の暗号化トリプルDES サーバーを再起動するたびに聞かれるため今回は使わない server.key .keyという名称が多い 2048 鍵長。1024だと認証局から受け付けてもらえない。 権限変更 sudo chmod 400 /etc/apache2/ssl.key/server.key 確認用 sudo cat /etc/apache2/ssl.key/server.key 公開鍵とCSRの作成 公開鍵はCSR生成時に添付される形で作成されるので、公開鍵単独の生成は必要無い。 実際にwebサーバーで指定するのは秘密鍵と公開鍵が添付されている認証局が発行した証明書となる。 csr作成 sudo openssl req -new -key /etc/apache2/ssl.key/server.key -out server.csr 補足 説明 備考 -key 上記で作成したkeyを指定する -key /etc/apache2/ssl.key/server.key -out 拡張子は.csrとする 必要項目の入力 対話形式で入力していく 項目 説明 例 Country Name (2 letter code) 国名。最大2文字 JP State or Province Name (full name) [Some-State] 届け出る事業所またはサイト運営組織の都道府県 TOKYO Organization Name (eg, company) サイトの運営組織の 【正式英語名称】 を指定 Sample.com Organizational Unit Name (eg, section) 部門・部署名など 【任意の識別名称】 を指定。ドメイン認証の場合には空欄でも可 Common Name (e.g. server FQDN or YOUR name) サイト閲覧者へ案内しているURLの【ドメイン名】を指定。SSL接続の際にブラウザで指定するURL(FQDN) sample.com Email Address 空欄 Please enter the following 'extra' attributesto be sent with your certificate request A challenge password 空欄 An optional company name 空欄 作成したCSRの中身確認 openssl req -noout -text -in server.csr [さくらインターネット]JPRS SSLサーバ証明書 今回はさくらのSSLから JPRSドメイン認証型 990円/年 を申し込み 下記情報を入力する。 * 支払方法指定 * 約款に同意 * CSRの入力 メールに従い手続きを行う [さくらインターネット]JPRS SSLサーバ証明書お申込受付完了のお知らせ(手続きの流れご案内) SSLサーバ証明書 認証ファイルのアップロードのお願い [さくらインターネット]JPRS SSLサーバ証明書発行のお知らせ SSLサーバ証明書 認証ファイルのアップロード さくらの会員メニュー>契約中のサービス一覧にアクセス 「SSL JPRS ドメイン認証型(1年)」から「サーバー証明書(例:cf123456789abc987654321efgd4a4b7.txt )」をダウンロードする 「サーバー証明書」を「/opt/tomcat/apache-tomcat-9.0.52/webapps/.well-known/pki-validation」に設置する 正常に設置できた場合、例:「http://shinseidomain.com/.well-known/pki-validation/cf123456789abc987654321efgd4a4b7.txt 」例のようにアクセスすると、ブラウザにファイルの中身(例:02123456789f82abcdeb123456789d5c)が表示される アップロード後、数分で「[さくらインターネット]JPRS SSLサーバ証明書発行のお知らせ」メールが届く ポイント 説明 備考 「サーバー証明書」 [ランダムな文字列].txt 中身も[ランダムな文字列] 「サーバー証明書」設置場所 「.well-known/pki-validation」は自分でディレクトリを作成する 「サーバー証明書」の名前や中身を変更しない。 同左 サーバー証明書DL 「契約情報」>「契約サービスの確認」をクリック 購入した証明書の「サーバ証明書」ボタンをクリック 「サーバ証明書DL」ボタンをクリックしてサーバ証明書をダウンロード 中間CA証明書のダウンロード 中間CA証明書のDLおよびインストール サーバー証明書および中間CA証明書をサーバーへ設置 上記で作成したディレクトリ(etc/apache2/ssl.crt)へ設置する。 SSLに関するモジュールを有効化する ssl a2enmod ssl default-ssl.confを修正する /etc/apache2/sites-available/default-ssl.conf #証明書のファイル名 SSLCertificateFile:/etc/apache2/ssl.crt/server.crt #秘密鍵のファイル名 SSLCertificateKeyFile:/etc/apache2/ssl.key/server.key #中間証明書のファイル名 SSLCertificateChainFile:/etc/apache2/ssl.crt/JPRS_DVCA_G4_PEM.cer サイト設定を有効化する sudo a2ensite default-ssl Apacheの再起動 sudo systemctl restart apache2 443のポートを開放する sudo ufw status sudo ufw allow 443 sudo ufw reload ここまででSSL接続が可能となる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitのデフォルトブランチ名がconfigに記述しても変更されない!

はじめに 昨日投稿した以下の記事で「そのうち書こうかな」と言っていたやつです。 gitのデフォルトブランチ名を変えたのに、なぜかgit initしてもブランチがmasterで作成されて困ったという話。 原因 gitのバージョンが古いことが原因でした。恥ずかしい。 どうもconfigでdefaultbranchの名前を変えられる昨日は、バージョン2.28から追加されたようです。 自分のgitのバージョンを調べてみたところ、見事に古いバージョンのものでした。 gitのバージョンを調べるコマンドは以下のとおり。 git version #gitのバージョンが表示されます git version 2.XX.X 解決方法 gitの更新 リポジトリをOSに追加する方法でgitをインストールしてた人は多分apt update apt upgradeで更新できてたと思うけど、自分はなぜかgitのリポジトリが追加されてなかった(多分直接ファイルダウンロードでもしてたのかな)ので、新しくリポジトリを追加してからパッケージを更新する。 add-apt-repository ppa:git-core/ppa apt update apt upgrade これだけです。 この後gitのバージョンを確認してみると、しっかりgit version 2.34.1に更新されていました。 これでちゃんとinitしたときのデフォルトブランチ名が変更されるはず。 init時のデフォルトブランチ名を変える 情報をまとめるついでにconfigを変える方法も書いておきます。 gitのconfigには以下の3つのスコープがあるもよう。 system: システム全体に適用 /etc/gitconfig global: ログインユーザに適用 home/.gitconfig local: gitリポジトリごとに適用 {workspace}/.git/config これらは上から順に読み込まれます。つまり、特定のリポジトリで作業をする際は、localに記述した内容が最優先されます。 今回はとりあえずgit initで新規作成する際のブランチ名を変えたいので、globalのconfigに記述を加えます。 記述はコマンドラインから以下のように打ち込めばok。 git config --global init.defaultBranch {default branch name} #例えばmainに変更したい場合は git config --global init.defaultBranch main #systemレベルで変更したい場合は git config --system init.defaultBranch {default branch name} #sudo必要かも コマンドではなく直接エディタで編集したい場合は、ファイルマネージャでそれぞれのconfigを確認すればいい。 かんたーーーん!! とりあえずgithubのデフォルトがmainだし、人権問題とかでmasterが復権することは(特に海外では)望めなさそうなので、デフォルトブランチ名はmainに変えておくのがよろしいかな。 おわりに gitの更新忘れというなんとも粗末な原因で余計な手間と時間を消費してしまった。 やっぱりサービス提供者の発表した重要な更新にはしっかり対応しないとまずそう。 というかせっかく登録したサービスなんだからこまめに使っていかないと、事故に蓄積した情報や技術がいつの間にか陳腐化してしまうから、そのあたり意識変えないといけない。 qiitaももっと活用しなきゃ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

デバイスファイルについてまとめてみました〜ブロックデバイスとキャラクターデバイスの違いとランダムアクセス〜

本記事について Linuxの学習を進める中で出てくるデバイスファイル。 デバイスファイルには、ブロックデバイスとキャラクターデバイスに分けられるとありますが、 参考書を読んでもピンとこなかったので、自分の言葉でまとめてみました。 ※LPIC level2の学習中に気になった内容にはなりますので、 同じ資格勉強をしているかたや初学者の方に参考していただくと幸いです。 参考URL https://qiita.com/angel_p_57/items/1faafa275525469788b4 →普通のファイルシステムとデバイスファイルについての違い(反映のされ方とか)について、 わかりやすくまとめられておりました! https://wa3.i-3-i.info/word19512.html →ランダムアクセスについて図を用いてわかりやすく説明がされています。 イメージを掴むには最適です! https://kb-jp.sandisk.com/app/answers/detail/a_id/8980/~/%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A8%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%AE%E6%93%8D%E4%BD%9C%E3%81%AE%E9%81%95%E3%81%84 →ランダムアクセスについてそれぞれの特徴が解説されており、より深く理解ランダムアクセスについて理解をすることができました! デバイスファイルとは どうやらそんな難しく考えず、シンプルに 「認識されているデバイスを操作(データの読み書き)するファイル」 という認識で○ ここでいうデバイスというのは、HDDやCPUなど実際のハード機器と、 OSで認識している仮想的なデバイスを含んでの意味とのこと。 配置ファイルとしては/dev以下に配置されることとなります。 HDDディスクであれば/dev/sdaといった形ですね。 ブロックデバイスとキャラクターデバイス ざっくりまとめると下記表のようの感じ デバイス名 特徴 ファイルタイプ 例 ブロックデバイス ブロック単位でデバイスにアクセス・バッファーがある・ランダムアクセスが可能 b ハードディスク・RAMディスク・RAIDボリューム キャラクターデバイス 文字単位でデバイスにアクセス・ランダムアクセスができない c キーボード・マウス・プリンター まずそれぞれ名前の通り、ブロック単位・文字(キャラクター)単位でデータを扱うかが大きな違い。 そしてもう一つ、「ランダムアクセスができるかできるか」 これが大きな違い。 さてそもそもランダムアクセスとはなんぞやとなります。。 本当のところこれをまとめたくてこの記事を書いたというのもあります。笑 ランダムアクセスとは 「記憶装置などのデータへアクセスする技法の一つ」 一言でまとめるとこういうことでしょうか。 技法の一つと書きましたがもう一つ、シーケンシャルアクセスというのがあります。 これら照らし合わせながらまたまとめていきたいと思います。 ランダムアクセス ・特定のデータへピンポイントでアクセスできる シーケンシャルアクセス ・データ領域へ順番にアクセスし、対象データを特定していく。 →ハードウェアが直接動作するため、アクセス速度をこちらの方が高い。 まとめ キャラクターデバイスはランダムアクセスできないのか。。 勝手にマイナスな印象を持っていましたが、速度に優れているということなのでそんなことはなさそうでした。 ブロックデバイスの例にある通り、RAMディスクなど記憶装置はやりとりするデータの容量がそもそも多くなっているので、なるべくデータを特定するランダムアクセスを使うことで、効率的なデータアクセスができるようになっているのかなという印象を受けました。(推測ですが。。) こうしてまとめてみるとまだまだ自分の知識が浅いことを再認識しました。。 今年はアウトプットを意識していこう。。。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Lustreインストールスクリプト(CentOS7.9.2009)

前提条件(MGS/MDS/OSS/CLIENT共通) ・CentOS 7.9.2009 ・x86 64 構成 Role PC IP NIC NAME DISK Comment MGS/MGT PC1 192.168.0.10 enp2s0 /dev/sdb1 MDT/MDT PC1 192.168.0.10 enp2s0 /dev/sdb2 MGSと兼用 OSS/OST PC2 192.168.0.11 enp2s0 /dev/sdb1 Client PC3 192.168.0.12 - - インストール(サーバ側) MGS、MDS、及びOSSをインストールするPC1、PC2では、以下を実行する。 以下はMGS/MDS枠割のPC1のIPとNICデバイス名なので、OSSのPC2の場合は、それぞれ修正してから実行する。 #!/bin/bash # http://www.comphys.las.shibaura-it.ac.jp/install_lustre2_1_3 NDEV="enp2s0" IP_ADDR="192.168.0.10" echo "INFO : install wget ------------------------------------------------------"; yum -y install wget #-------------------------------------------------------------------------------------------------------------------------------- items=( "libcom_err-1.45.6.wc7-0.el7.x86_64.rpm" "libss-1.45.6.wc7-0.el7.x86_64.rpm" "e2fsprogs-libs-1.45.6.wc7-0.el7.x86_64.rpm" "e2fsprogs-1.45.6.wc7-0.el7.x86_64.rpm" ) for item in "${items[@]}" ; do echo "INFO : download ${item} ----------------------------------------"; wget https://downloads.whamcloud.com/public/e2fsprogs/1.45.6.wc7/el7/RPMS/x86_64/${item} done #-------------------------------------------------------------------------------------------------------------------------------- #echo "INFO : uninstall libcom_err ---------------------------------------"; yum -y remove libcom_err if [ -e /etc/yum/protected.d/systemd.conf ]; then if [ -e /etc/yum/protected.d/systemd.conf.bak ]; then echo "INFO : /etc/yum/protected.d/systemd.conf.bak exist --> no action -----------------"; else echo "INFO : rename to prevent error -------------------------------"; mv /etc/yum/protected.d/systemd.conf /etc/yum/protected.d/systemd.conf.bak fi else echo "INFO : /etc/yum/protected.d/systemd.conf does not exist --> no action -----------------"; fi echo "INFO : uninstall libcom_err ---------------------------------------"; rpm -e --nodeps libcom_err echo "INFO : install libcom_err ---------------------------------------"; rpm -Uvh libcom_err-1.45.6.wc7-0.el7.x86_64.rpm echo "INFO : uninstall libss ---------------------------------------"; yum -y remove libss echo "INFO : install libss ---------------------------------------"; rpm -Uvh libss-1.45.6.wc7-0.el7.x86_64.rpm echo "INFO : uninstall e2fsprogs-libs---------------------------------------"; yum -y remove e2fsprogs-libs echo "INFO : install e2fsprogs-libs---------------------------------------"; rpm -Uvh e2fsprogs-libs-1.45.6.wc7-0.el7.x86_64.rpm echo "INFO : install e2fsprogs ---------------------------------------"; rpm -Uvh e2fsprogs-1.45.6.wc7-0.el7.x86_64.rpm #-------------------------------------------------------------------------------------------------------------------------------- # https://web.chaperone.jp/w/index.php?Lustre echo "INFO : create /etc/yum.repos.d/lustre.repo --------------------------"; echo "[lustre-server]" > /etc/yum.repos.d/lustre.repo echo "name=CentOS-\$releasever - Lustre" >> /etc/yum.repos.d/lustre.repo echo "baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/patchless-ldiskfs-server/" >> /etc/yum.repos.d/lustre.repo echo "gpgcheck=0" >> /etc/yum.repos.d/lustre.repo echo "" >> /etc/yum.repos.d/lustre.repo echo "[e2fsprogs]" >> /etc/yum.repos.d/lustre.repo echo "name=CentOS-\$releasever - Ldiskfs" >> /etc/yum.repos.d/lustre.repo echo "baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7/" >> /etc/yum.repos.d/lustre.repo echo "gpgcheck=0" >> /etc/yum.repos.d/lustre.repo echo "" >> /etc/yum.repos.d/lustre.repo echo "[lustre-client]" >> /etc/yum.repos.d/lustre.repo echo "name=CentOS-\$releasever - Lustre" >> /etc/yum.repos.d/lustre.repo echo "baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/client" >> /etc/yum.repos.d/lustre.repo echo "gpgcheck=0" >> /etc/yum.repos.d/lustre.repo echo "INFO : install lustre-osd ----------------------------------------"; yum -y install lustre-osd echo "INFO : install libyaml ----------------------------------------"; yum -y install libyaml echo "INFO : download lustre ----------------------------------------"; wget https://downloads.whamcloud.com/public/lustre/lustre-2.12.8/el7.9.2009/server/RPMS/x86_64/lustre-2.12.8_6_g5457c37-1.el7.x86_64.rpm echo "INFO : install lustre ----------------------------------------"; rpm -ivh lustre-2.12.8_6_g5457c37-1.el7.x86_64.rpm #-------------------------------------------------------------------------------------------------------------------------------- grep -q $IP_ADDR /etc/lnet.conf if [ $? = 0 ]; then echo "INFO : setting has already added to /etc/lnet.conf --> skip ---------"; else echo "INFO : setting does not added to /etc/lnet.conf yet --> add setting --"; echo "net:" >> /etc/lnet.conf echo " - net type: tcp" >> /etc/lnet.conf echo " local NI(s):" >> /etc/lnet.conf echo " - nid: ${IP_ADDR}@tcp" >> /etc/lnet.conf echo " status: up" >> /etc/lnet.conf echo " interfaces:" >> /etc/lnet.conf echo " 0: ${NDEV}" >> /etc/lnet.conf fi echo "INFO : enable lnet ------------------------------------------------------"; systemctl enable lnet echo "INFO : restart lnet ------------------------------------------------------"; systemctl restart lnet echo "INFO : lnetctl net show --------------------------------------------------"; lnetctl net show echo "INFO : restart firewalld ---------------------------------------------"; systemctl restart firewalld echo "INFO : enable firewalld ---------------------------------------------"; systemctl enable firewalld echo "INFO : allow 988/tcp to firewalld ----------------------------------------"; firewall-cmd --add-port=988/tcp --permanent echo "INFO : reload firewalld --------------------------------------------------"; firewall-cmd --reload インストール(クライアント側) クライアントのPC3では以下を実行する。 #!/bin/bash # http://www.comphys.las.shibaura-it.ac.jp/install_lustre2_1_3 NDEV="enp2s0" IP_ADDR="192.168.0.12" #-------------------------------------------------------------------------------------------------------------------------------- # https://web.chaperone.jp/w/index.php?Lustre echo "INFO : create /etc/yum.repos.d/lustre.repo --------------------------"; echo "[lustre-server]" > /etc/yum.repos.d/lustre.repo echo "name=CentOS-\$releasever - Lustre" >> /etc/yum.repos.d/lustre.repo echo "baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/patchless-ldiskfs-server/" >> /etc/yum.repos.d/lustre.repo echo "gpgcheck=0" >> /etc/yum.repos.d/lustre.repo echo "" >> /etc/yum.repos.d/lustre.repo echo "[e2fsprogs]" >> /etc/yum.repos.d/lustre.repo echo "name=CentOS-\$releasever - Ldiskfs" >> /etc/yum.repos.d/lustre.repo echo "baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7/" >> /etc/yum.repos.d/lustre.repo echo "gpgcheck=0" >> /etc/yum.repos.d/lustre.repo echo "" >> /etc/yum.repos.d/lustre.repo echo "[lustre-client]" >> /etc/yum.repos.d/lustre.repo echo "name=CentOS-\$releasever - Lustre" >> /etc/yum.repos.d/lustre.repo echo "baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/client" >> /etc/yum.repos.d/lustre.repo echo "gpgcheck=0" >> /etc/yum.repos.d/lustre.repo #-------------------------------------------------------------------------------------------------------------------------------- grep -q $IP_ADDR /etc/lnet.conf if [ $? = 0 ]; then echo "INFO : setting has already added to /etc/lnet.conf --> skip ---------"; else echo "INFO : setting does not added to /etc/lnet.conf yet --> add setting --"; echo "net:" >> /etc/lnet.conf echo " - net type: tcp" >> /etc/lnet.conf echo " local NI(s):" >> /etc/lnet.conf echo " - nid: ${IP_ADDR}@tcp" >> /etc/lnet.conf echo " status: up" >> /etc/lnet.conf echo " interfaces:" >> /etc/lnet.conf echo " 0: ${NDEV}" >> /etc/lnet.conf fi echo "INFO : enable lnet ------------------------------------------------------"; systemctl enable lnet echo "INFO : restart lnet ------------------------------------------------------"; systemctl restart lnet echo "INFO : lnetctl net show --------------------------------------------------"; lnetctl net show echo "INFO : restart firewalld ---------------------------------------------"; systemctl restart firewalld echo "INFO : enable firewalld ---------------------------------------------"; systemctl enable firewalld echo "INFO : allow 988/tcp to firewalld ----------------------------------------"; firewall-cmd --add-port=988/tcp --permanent echo "INFO : reload firewalld --------------------------------------------------"; firewall-cmd --reload #-------------------------------------------------------------------------------------------------------------------------------- echo "INFO : install wget ---------------------------------------------"; yum -y install wget echo "INFO : install attr ---------------------------------------------"; yum -y install attr echo "INFO : install lsof ---------------------------------------------"; yum -y install lsof echo "INFO : install libtool ---------------------------------------------"; yum -y install libtool echo "INFO : install openmpi to resolve error of libmpi.so.12(64bit) -----"; yum -y install openmpi echo "INFO : install libyaml ---------------------------------------------"; yum -y install libyaml items=( "lustre-client-2.12.8_6_g5457c37-1.el7.x86_64.rpm" ) for item in "${items[@]}" ; do echo "INFO : download ${item} ----------------------------------------"; if [ -e ${item} ]; then echo "INFO : ${item} is exist --> skip download -----------------"; else wget https://downloads.whamcloud.com/public/lustre/lustre-2.12.8/el7.9.2009/client/RPMS/x86_64/${item} fi echo "INFO : install ${item} -----------------------------------------"; rpm -ivh ${item} done #-------------------------------------------------------------------------------------------------------------------------------- echo "INFO : (CLIENT) yum upgrade e2fsprogs ------------------------------------"; yum -y upgrade e2fsprogs echo "INFO : (CLIENT) yum install lustre-client --------------------------------"; yum install lustre-client echo "INFO : (CLIENT) yum list installed | grep lustre-client ------------------"; yum list installed | grep lustre-client インストール後は再起動 サーバ側とクライアント側で上記をそれぞれインストールしたら再起動しておく。 ファイルシステム作成、マウント 再起動したら、後述のスクリプトを実行して、対象ディスクをLustreファイルシステムでフォーマットして、さらにクライアントからマウントする。 先にサーバ側の設定をすべきなので、実行順番は、MGS/MDS/OSSを先に実行し、その後にCLIENT側で実行する。 MGT/MDT役割のPC1の場合の設定は以下。 SW_MGT=YES SW_MDT=YES SW_OST=NO SW_CLIENT=NO NDEV="enp2s0" IP_ADDR="192.168.0.10" IP_MGT="192.168.0.10" OST役割のPC2の場合の設定は以下。 SW_MGT=NO SW_MDT=NO SW_OST=YES SW_CLIENT=NO NDEV="enp2s0" IP_ADDR="192.168.0.11" IP_MGT="192.168.0.10" CLIENT役割のPC3の場合の設定は以下。 SW_MGT=NO SW_MDT=NO SW_OST=NO SW_CLIENT=YES NDEV="enp2s0" IP_ADDR="192.168.0.12" IP_MGT="192.168.0.10" #!/bin/bash # https://web.chaperone.jp/w/index.php?Lustre SW_MGT=NO SW_MDT=NO SW_OST=NO SW_CLIENT=YES NDEV="enp2s0" IP_ADDR="192.168.0.12" IP_MGT="192.168.0.10" DEV_MGT=sdb1 DEV_MDT=sdb2 DEV_OST=sdb3 DIR_MGT=/mnt/mgt DIR_MDT=/mnt/mdt.0 DIR_OST=/mnt/ost.0 DIR_CLIENT=/mnt/lustre if [ $SW_MGT == "YES" ]; then echo "INFO : (MGT) SW_MGT = $SW_MGT --> mkfs.lustre ---------------------------"; #echo "INFO : (MGT) mkfs.lustre for MGT disk ------------------------------------"; mkfs.lustre --reformat --fsname=fsname --mgs /dev/$DEV_MGT echo "INFO : (MGT) mkfs.lustre for MGT disk ------------------------------------"; mkfs.lustre --fsname=fsname --mgs /dev/$DEV_MGT echo "INFO : (MGT) create dir for mount ----------------------------------------"; mkdir -p $DIR_MGT echo "INFO : (MGT) mount as lustre file system ---------------------------------"; mount -t lustre /dev/$DEV_MGT $DIR_MGT else echo "INFO : (MGT) SW_MGT = $SW_MGT --> no action -----------------------------"; fi if [ $SW_MDT == "YES" ]; then echo "INFO : (MDT) SW_MDT = $SW_MDT --> mkfs.lustre ---------------------------"; echo "INFO : (MDT) mkfs.lustre for MDT disk ------------------------------------"; mkfs.lustre --fsname=fsname --mgsnode=$IP_MGT@tcp0 --mdt --index=0 /dev/$DEV_MDT echo "INFO : (MDT) create dir for mount ----------------------------------------"; mkdir -p $DIR_MDT echo "INFO : (MDT) mount as lustre file system ---------------------------------"; mount -t lustre /dev/$DEV_MDT $DIR_MDT else echo "INFO : (MDT) SW_MDT = $SW_MDT --> no action -----------------------------"; fi if [ $SW_OST == "YES" ]; then echo "INFO : (OST) SW_OST = $SW_OST --> mkfs.lustre ---------------------------"; echo "INFO : (OST) mkfs.lustre for OST disk ------------------------------------"; mkfs.lustre --fsname=fsname --mgsnode=$IP_MGT@tcp0 --ost --index=0 /dev/$DEV_OST echo "INFO : (OST) create dir for mount ----------------------------------------"; mkdir -p $DIR_OST echo "INFO : (OST) mount as lustre file system ---------------------------------"; mount -t lustre /dev/$DEV_OST $DIR_OST else echo "INFO : (OST) SW_OST = $SW_OST --> no action -----------------------------"; fi if [ $SW_CLIENT == "YES" ]; then echo "INFO : (CLIENT) SW_CLIENT = $SW_CLIENT --> mount lustre fs --------------"; echo "INFO : (CLIENT) create dir for mount -------------------------------------"; mkdir -p $DIR_CLIENT echo "INFO : (CLIENT) mount lustre file system to $DIR_CLIENT ------------------"; mount -t lustre $IP_MGT@tcp0:/fsname $DIR_CLIENT else echo "INFO : (CLIENT) SW_CLIENT = $SW_CLIENT --> no action --------------------"; fi
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

IT業界に転職した私のマインド、学習結果、勉強方法【AWSエンジニア未経験~1年目】

はじめに 初投稿。 何を書くか迷いましたが、youtube、twitterでは自分のスキル、勉強方法やマインド(モチベーション)についてあまり語った事が無かったので初学者向けに語ってみたいと思います。 目次 マインド 勉強した結果 勉強方法 まとめ マインド 高校生へ向けた孫正義氏の言葉 「登りたい山を決める」「志高く、人生一度しかない」 これを聞いたときに目が覚めました。 誰の役に立つのか分からない、お金をもらうに値しない仕事を続けることは辞めようと思ったんですよね。 当時の私は転職したら全く使えない属人的なスキルばかり身についてましたので… AWSをはじめとするITスキルに目を付けた理由以下です。 クラウドの将来性 興味がある分野 習得するまでの期間が短い 習得までに時間が掛かる分野(医者、税理士など)に比べると、ITは比較的楽だと感じました。 ※比較的に楽なだけであって、簡単に身につくわけではないです 勉強した結果 小規模なWeb開発において、フロント~ネットワークの全体像を俯瞰することはできる。 AWSでのコンテナ開発環境の構築や、CI/CDなどの基本的な設定はできる。 例えば、WEBサーバーにNginx、バックエンドにPython(FastAPI)などを用いるコンテナ開発において、基礎インフラ(VPC、セキュリティグループなど)を用意し、AWS側でECS(Fargate、EC2)を用いてデプロイできるようにはなりました。 LinuxはLPIC、Dockerやバックエンド、Gitの操作は参考書や、Udemy等を用いて何度か学習していたため、開発側の知識もある程度身についているのが大きいです。 資格 AWS認定クラウドプラクティショナー AWS認定ソリューションアーキテクト・アソシエイト AWS認定デベロッパー・アソシエイト AWS認定SysOpsアドミニストレーター・アソシエイト ITパスポート CCNA GCP アソシエイトクラウドエンジニア LPIC 101 102 LPIC 201 202 今後の課題 DBに関する知識が乏しい サーバーサイド言語理解の深度化 実務経験が乏しい 作業に時間が掛かる 個人的なアプリ開発の過程で適当にテーブルやユーザーを作ったことしかないので。資格で言うところのアソシエイトレベルの知識は習得しておこうと思います。 サーバーサイド言語はPythonを今後使って行く予定です。他の言語でも良いですが、Django、Flask、FastAPIと、一通り自己学習で触ったフレームワークもあり、世間の注目度も高いので。 実務経験不足のため、ログ設定など本来考慮すべき知識にかなり抜けがある気がします…ここら辺は時間で解決するしかないですかね… 調べれば大体のことを解決できる自信はありますが、知らないことを調べている時間が長いので、後1年くらいは必至に勉強した方が良いなと感じました。 勉強方法 まず勉強する範囲を決めます。これは目標によって異なりますが、AWSエンジニア(開発構築、運用)として勉強べき分野は個人的に大きく分けて以下の5つだと思います。 ネットワーク OS(Linux)+Docker DB(MySQL、PostgreSQL、Oracle など) サーバーサイド言語(Ruby、Python、PHP、Node.js など) AWS ()内は選択で、どれか一つに絞って勉強すれば良いと思います。 AWSは他の4つをある程度知っている前提で使うSaaSなので、AWSだけ勉強するのは個人的におススメしません!※AWS認定だけを盲目的にやり続けてしまうとか… 具体的な勉強方法 簡単そうな事、知らない事、覚えきれてない事 上記に当てはまる事を勉強する。 難しい事、知っている事、覚えている事 は勉強しない。 例えば、プログラミングで関数やクラスが分かるのに、実際に開発しようとしない事は新しい知識が入ってこないですし、いきなりMWの設定ファイルの中身を勉強しようとし、意味が分からないまま時間が経過してしまうのは基本的なIT用語や知識が不足しているので、勉強内容のハードルを下げた方が良いと思います。 ハードルを下げ切った状態で、分からない事を勉強します。 後は資格の受験日や、参考書、Udemyをやりきる日を決め、勉強するだけです。 おおよそ100時間で取得できる資格を1か月で取得するならば、1日平均3時間以上の学習時間を設ける。時間的に難しいなら2か月で1日平均1時間30分にすれば良いと思います。 勉強をサボる=人生詰み 今後も一般的な日本の社会人の平均年収は減り続け、物価は上昇し続けます。 サボったら軽く人生詰みますね☆ 「周りも下がるから別にいいや、何とかなるやろ!」って感じなら気にしないでください。 無理なペースで勉強しなくとも、周りの社会人は5分も勉強していないので、1日1、2時間勉強できたら自分を褒めてください。 私は2021年の1年間、暗いトンネルの中で先が見えず不安だらけでしたが、ようやく出口の光が見えてきたような気がします。 「小さなことを積み重ねることが、とんでもないところへ行くただ一つの道」byイチロー まとめ 偉そうに色々語りましたが、私は実力的に大したことありません。個人的に満足もしていません。 2020年の自分のようにこれから勉強し始める人、勉強し始めたけど先が見えなくて不安な人の参考になれば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxユーザーの追加・確認・削除

現在ログインしているユーザーの確認 下記3つのうちどれか。 $ echo $USER $ who $ users ユーザー一覧の確認 $ cut -d: -f1 /etc/passwd ユーザー名が分かっている場合はgrepしてあげる。 $ cut -d: -f1 /etc/passwd | grep hoge ユーザーを新規追加 ユーザーの登録 $ useradd testuser ユーザーが登録されているかの確認 $ cat /etc/passwd | grep testuser # testuser:x:1000:1000::/home/testuser:/bin/bash ユーザーにパスワードを設定 $ sudo passwd testuser ユーザーの削除 ※ホームディレクトリ配下のユーザーディレクトリも削除する場合は-rオプションが必要。 $ sudo userdel -r testuser
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git push時にエラーが発生した! (fatal: Authentication failed ~, src refspec ~ does not match any.)

はじめに 最近、大学入学時くらいに作成しただけしておいたgithubのアカウントをなんとかせにゃならんな~、と唐突に思った。 あとついでにDockerの知識確認もしたかったから、試しにDockerを使ってNext.jsのサンプルアプリでも立ち上げて、git push origin mainしてみたところ、記事タイトルのエラー発生。 しばらくハマったので戒めのために書いておくことにする。 環境 OS: Linux(KDE neon 5.23.5) git version: なんか.22とか.23くらいの古いやつだったはず 発生したエラー たしか下記の2つ。 fatal: Authentication failed for 'https://github.com/{your user name}/{your repository name}.git' error: src refspec {your branch name} does not match any. 原因 原因は多分下の2つ。多分。 push時に用いるgithubのパスワードが、アクセストークンとやらに変わっていた ローカルとリモートでブランチ名が違っていた(masterとmain) 超初歩的でくだらないミスなので恥ずかしい限り。 解決方法 アクセストークンを取得する パスワードの代わりに使用することになったアクセストークンとやらを取得する必要がある。 これはgithubのSettingsページから取得可能。 アカウントのSettingsページへ行ったら、サイドバーにあるDeveloper settings -> Personal access tokensへ。 Personal access tokensへ行ったら、Generate new tokenで新しくトークンを発行できる。 なにやら色々設定項目があるけども、それぞれ多分以下のような感じ。 Note: トークンの使用目的(多分適当でいい) Expiration: トークンの有効期限(リポジトリに触りそうな期間を目安で設定すればよさそう) Select scopes: トークンに付与されるアクセス権限の設定(適当にrepoとdelete_repoにチェック) はい。どうやらこれでGenerateして出てきたトークンをコピペして使用すればいいのかな。 ただネットで調べた感じ、いちいち長ったらしいトークンを入力するのは面倒って人が多いっぽい。 おまけにトークンは生成時に表示されるページで一度しか確認できないみたいだから、どこかに控えなくちゃいけない。 これが面倒な人は、ローカルのgitに登録するリモートURLに、トークンを追加してあげればいいみたい。 書き方は以下の通り。 .git/config [remote ""origin] url = https://{access token}@github.com/{your user name}/{your repository name}.git 意外と単純。 ただこの方法は将来的に場合によってはセキュリティ的な問題になりやすいみたいだから、注意が必要かも。 個人で遊ぶ分にはまあどうってことなさそうではあるから、自分は気にしないけど。 gitのブランチ名をmasterからmainに変更する 「githubのデフォルトがmainになったんだからgitも対応してくれよ(あるいは逆)」とは思ったけど、してくれないからとりあえず自分でブランチ名を変えるしかない。 これも単純で、ターミナルに以下のコマンドを打ち込めばいい。 git branch -m {old branch name} {new branch name} #現在のブランチ名を変えたいなら引数短縮できて git branch -m {new branch name} 今回だとmasterをmainに変えたいってことだったから、git branch -m master mainとした。 これで多分エラーは出なくなると思う。一件落着。 「いちいちgit initするたびに名前変えるのダルいな!」と思って、デフォルトのブランチ名変えようしたらハマった話もそのうち書くかも。 おわりに 今回引っかかった原因は、どちらも情報としてはキャッチアップしてたのに、実際に手元で確認したり対応していないものだった。 特にgithubのデフォルトブランチ名がmasterからmainになる話なんかは結構大きかったから、やっぱりサービスの提供元からなにか大きな変更が発表されたら、しっかりとそれに対応しなくちゃいかんなー、とかなんとか。 とにかく今後こんなたわけたミスをしないように、情報には敏感に、対応は素早くを心がけたい所存。 あと、もう少し定期的にqiitaとかgithubとか更新しないとせっかく登録したのにもったいないから、そこもなんとかせねば。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む