Mac_cheat_sheet

背景 いや、会社入るまでずっとwindowsユーザだったんですよ。だから最初マック渡されたときはだいぶ戸惑いましたね。 しかし、慣れてくると今度は逆にウィンドウズが気持ち悪くなってくるんですよね。画面の切り替えができないのがマジでつらいということに築きました。 しかし、Macにはまだまだたくさんの裏技があると俺は知っています。ここで全部洗いだしてしまおうと思います。 マックのチートシート まずはよく使うショートカットキー4つを覚えておきたいと思います commandキー optioinキー shiftキー controlキー アプリケーションの切り替え command + tab ページ先頭/末尾に移動する comamnd + 上矢印/下矢印 windowdではctrl + fn + <-/-> クロームでタブを切り替え Command + option 全画面スクショ shift + command + 3 範囲指定スクショ shift + command + 4 chromeタブの切り替え

July 12, 2024 · 1 min · 40 words · Me

GSLB_and_DNS

GSLBとは はい、GSLB(Global Server Load Balancing)について知っています。GSLBは、複数の地理的に分散したサーバー間でネットワークトラフィックを効果的に分散するための技術です。これにより、以下のような利点が得られます。 高可用性: サーバーの障害が発生した場合でも、トラフィックを他の健全なサーバーにリダイレクトすることでサービスの継続性を確保します。 負荷分散: トラフィックを複数のサーバーに分散することで、特定のサーバーに過負荷がかかるのを防ぎます。 低遅延: ユーザーに最も近いサーバーにトラフィックをルーティングすることで、応答時間を短縮します。 災害復旧: 地理的に分散したサーバーを利用することで、特定地域での災害や障害に対する耐性を向上させます。 GSLBは、DNSベースの方法や、アプリケーション層でのルーティングを使用して実現されることが一般的です。具体的な実装方法や製品には、以下のようなものがあります。 DNSラウンドロビン: 最も基本的なGSLBの方法で、DNSサーバーが複数のIPアドレスを順番に返すことで負荷を分散します。 Anycast: 同じIPアドレスを複数の地理的に分散したサーバーに割り当て、最も近いサーバーにトラフィックをルーティングします。 商用製品: F5 NetworksのBIG-IP、CitrixのNetScaler、Amazon Web ServicesのRoute 53など、さまざまな商用ソリューションがあります。 GSLBは、大規模なWebサービスやクラウドサービスでよく利用される技術です。 僕の質問 一般ユーザはDNSを介してどのサーバにアクセスするかがきいまると思います。また、DNSは裏でGSLBと繋がっていて、一般ユーザー>DNS -> GSLBという流れでリクエストが流れると思います。この認識は合っていますか? chatGPTの回答 基本的な認識は合っていますが、もう少し詳細に説明すると、DNSとGSLBの関係は次のようになります。 一般ユーザーのリクエスト: 一般ユーザーがウェブサイトにアクセスしようとすると、まずDNSリクエストが発生します。このリクエストは、ユーザーが入力したドメイン名をIPアドレスに変換するためのものです。 DNSサーバーの役割: DNSサーバーは、このドメイン名に対応するIPアドレスを返します。ここで、GSLBがDNSサーバーに組み込まれているか、もしくはGSLBがDNSサーバーと連携しています。 GSLBの動作: GSLBは、複数の地理的に分散したサーバーの中から最適なサーバーを選択し、そのサーバーのIPアドレスをDNSサーバーに返します。選択基準には、サーバーの負荷、地理的な距離、ネットワークの遅延などが含まれます。 DNSの応答: DNSサーバーは、GSLBから受け取った最適なサーバーのIPアドレスをユーザーに返します。 ユーザーのアクセス: 最終的に、ユーザーのブラウザは返されたIPアドレスを使って直接サーバーにアクセスします。 この流れを図にすると以下のようになります: mermaid sequenceDiagram participant User as 一般ユーザー participant DNS as DNSサーバー participant GSLB as GSLBシステム participant Server as 最適なサーバー User->>DNS: ドメイン名の解決リクエスト DNS->>GSLB: 最適なサーバーのIPアドレスを要求 GSLB->>DNS: 最適なサーバーのIPアドレスを返す DNS->>User: IPアドレスを返す User->>Server: サーバーにアクセス このように、一般ユーザーのリクエストは最終的にはDNSを介してGSLBによって選ばれた最適なサーバーに到達します。DNSはGSLBと連携して動作し、ユーザーに最適なサーバーのIPアドレスを提供します。 ...

July 9, 2024 · 2 min · 276 words · Me

Vim_cheat_sheet

vimのチートシート 基本 行番号の表示:カーソルモード(esc)を押した状態で、 :set nonumber 中堅 I : カーする業の行頭から挿入モードに遷移する gI: カーソル行の行頭から挿入モードに遷移 dd : カーソルがいる行を削除 ndd : カーソルがいる行からn行削除 e.g., 10dd : カーソルがいる行から10行削除 j : to down k : to up h : to the left l : to the right 複数選択 v : visual modeに入ってから、カーソルキーで複数選択。 さらにyをすることでやんく(こぴー)が可能。これは 応用

July 8, 2024 · 1 min · 46 words · Me

screwdriverでci/cdパイプラインを作る

screwdriver.cdでci/cdパイプラインを作成 自動デプロイをしたい。 github actionsを使うとself-hosted runnerを使って自動デプロイができるようになる。 がself-hosted runnerはどうやらプライベートリポジトリにしか使えないみたいなんだよね。 ってことでプライベートリポジトリをscrewdriver.cdと連携して、自分のプロジェクトで使えるようにしたい。 導入方法 公式ホームページに書いてある通りに、 python <(curl -L https://tinyurl.com/sd-in-a-box) を実行する。これをやると This command will run a script that will create a Docker Compose file for you locally, complete with Oauth credentials using a generated JWT and a user-provided Oauth Client ID and secret. If you choose to do so, it will then Docker pull the Screwdriver API, UI, and log store images to bring up an entire Screwdriver instance locally for you to play with. All data written to a database will be stored in a data/ directory. For more configuration details, see our SD-in-a-box documentation. ...

July 8, 2024 · 5 min · 1048 words · Me

LocalLLM

何の記事 ローカルホストにLLMをインストールし、性能を検証。 またapiを介して利用可能にする方法を検証。 最後に、社内のことを学ばせて、こういう質問が来たらこう答えてねってのを教え込ませる。 背景 自宅には計算資源がたくさんある。 それをネットワーク越しに使えるということがわかったので、LLM等の重い処理も自宅で動かして、軽量なフロントエンドと連携させる、 みたいなことが非常に簡単にできるということがわかった。 LLMで何をしたいか??お客さんからの問い合わせに自動で答えるチャットボットを作りたいのよね。 うん、社内の情報とかを学ばせないといけない。その辺のファインチューニングの仕方も知りたい。 参考記事 [ollamaについて] (https://bhrtaym-blog.com/?p=407) [ローカルLLMをGPUで動かす] (https://zenn.dev/giana12th/articles/7fc22c8cbdbb5e) ollama公式サイト ollamaのgithub proxmoxで動かすための下準備 GPUをパススルー必要がある。 あと、一番大きいモデルでは何倍とメモリが必要なんだっけ? 64GB以上あれば問題ないらしい。のでとりあえずそれをインストールしようと思う。 あとは、ProxmoxでGPUをパススルーする方法。 あー、「ホストマシンのBIOSにて、VT-x, VT-d を有効にする。(VT-d は PCI Passthrough で必須)」 する必要があるらしい。 しかし、実はCPUの仮想化をした時点でGPUの仮想化もできるようになってたっぽい。 でした準備は完了した。がメモっておくか proxmoxのコンソールから、add hardware PCIeを選択し、GPUを入れる。 nvidia-driverをインストール nvidia-smiが使えるか確認。認識されているかも確認 ちなみに、ここでcudaのバージョンが出てくるけど、これは対応しているcudaのバージョンを示しているだけで実際にcudaがインストールされたわけではありません。そこを気を付けてください。 cuda(ランタイム)をインストール しかし、これはdocker等で、cudaが入ったコンテナを配ってもらえれば終わる話なので、無視でいいのかな??ちょっと調べてみよう。 proxmoxのCPUのtypeをhostに変える。これをやらないとavx命令が使えない。これゆえGPUが使われなくなってしまう。 ollamaのインストール dockerもある。 ollama on docker これを参考にnvidia-container-toolkitをインストールする感じか。 docker install後の苦戦 docker上のollama上で、llama3を動かすことには成功したんですよ。しかし、どうやらGPUでは動かせていいない。これはなんでかわかりました。 time=2024-07-19T00:29:37.242Z level=WARN source=gpu.go:225 msg="CPU does not have minimum vector extensions, GPU inference disabled" required=avx detected="no vector extensions" CPUがavx命令をサポートしていないとGPUにオフロードされないみたいですね。 ほかのところでも同じことが言われていました。 GPU support requires the AVX instruction set, check your CPU model. つまり、ProxmoxでどうにかしてavxをOnにする必要があるということです。 これのやり方ですが、cpuのtypeをホストにしたら解決するようです。ってことで変えて再起動します。 ...

July 7, 2024 · 1 min · 199 words · Me

Proxmoxサーバ爆誕

何の記事か Proxmoxという仮想マシン専用のマシンを立てる方法。そして遊んでみる。 参考文献 [proxmoxのインストール方法] (https://qiita.com/C_Kenta/items/70ecb32495fce9e1de52) proxmoxを使ってできること Proxmoxとは何か ProxmoxはDebianベースの仮想化プラットフォームです。操作はすべてWeb インターフェースで行うことができ、仮想マシンやLinuxコンテナを簡単に作成することができます。バックアップを簡単に作成でき、修復も非常に容易です。ハードウェアパススルーも可能で、USBカメラ、マウス、キーボードなどのデバイスをVMに渡すことができます。 ひところ えぐい 立てる 手順 公式から proxmoxのisoを持ってくる。以上。 インストール時の注意点 最新のをインストールしようとしたら、waitinig for /dev fully populated 的なのが出てきたけど、それは一個前のどの手段でインストールするかのところでeを押して、カーネルのブートパラメータにnomodesetをつけると解消された。よろぴく 実はVMてハードウェアの動きをソフトウェアでエミュレートする方法と、 もう一つKVMってのがあってね、KVMの方が圧倒的に速いわけですよ。んでね、 KVM hardware virtualizationってのをOFFにすると、ソフトウェアでエミュレートになる。しかし、これは遅いからKVM hardware virtualizationはONにした方がいい。しかし、ONにするにはBIOSでKVMをonにする設定を施さないといけない。それはリモートからではできないって話だな。乙。 BIOSのKVM VirtualizationをOFFにしたままUbuntuを走らせようとしたらこう怒られました。 KVM virtualisation configured, but not available. Either disable in VM configuration or enable in BIOS. advanced setting -> CPU Configuration -> SVM Mode -Enable > Save & reset これをやらないと勝ちで遅すぎて話にならなかった。すべてが遅すぎる。 マジで、CPUの動きをエミュレートする仮想化は、KVMと比べて10倍遅かった。えぐい。 GPUのパススルー これが結構面倒くさい。 VM上でOllama立ててllmを動かそうとしているんだけど、なかなかうまくいかない。 これはchatgptから得た回答だから、確証はないんだけど、参考にしてほしい。 chatgpt曰く、やらないといけないことは二つ Enabling IOMMU Enabling VFIO Enabling IOMMU これは何をやっているかだけど、 ...

July 6, 2024 · 1 min · 161 words · Me

KVM_server_and_ansible

何の記事か LinuxサーバでKVMを使った仮想マシン (VM)を立てられるようにし、 KIMCH を使い、webコンソールからVMを立てられるようにし、さらにansibleでVMにインフラのデプロイ、そしてネットワークなどをいじる記事 雑談 はい、完全に分離された自宅ネットワークでしたが、openVPNを使ったsite2site接続により、外からアクセスできるようになってしまった。これがマジで恐ろしい話や。 再びコンピュータを勉強する気力がわいてきたって話だ。頑張るぞい。 dkong上で動かそうと思う。自宅ネットワークでのdkongのipアドレスは 100.64.1.70や。VPNを使えばいつでもアクセスが可能になる。さらにインターネット上のhugo_serverのnginxでvpnをとおしてプロキシすることもできるので、実質インターネットに接しているdkongってわけだ。ネットワークえぐい。 インストール手順 基本的にはKIMCHここに書いてある通りに進めれば問題ない。 1. Wokのインストール Wokとは Wokのリポジトリをクローン git clone https://github.com/kimchi-project/wok.git wok依存ライブラリやランタイムなどをインストール sudo apt install -y python3-pip sudo -H pip3 install -r requirements-dev.txt sudo apt install -y gcc make autoconf automake git python3-pip python3-requests python3-mock gettext pkgconf xsltproc python3-dev pep8 pyflakes3 python3-yaml sudo apt install -y systemd logrotate python3-psutil python3-ldap python3-lxml python3-websockify python3-jsonschema openssl nginx python3-cherrypy3 python3-cheetah python3-pam python3-m2crypto gettext python3-openssl Wokをビルド and install sudo ./autogen.sh --system make wokを起動 sudo python3 src/wokd wokにブラウザでアクセス https://100.64.1.70:8001/login.html 初期パスワードを入力してログイン これ、ログインクレデンシャル、システムのとおんなじなのがすごい。びっくり! ...

July 6, 2024 · 1 min · 91 words · Me

2024July_TODO

2024/07/5時点でのタスクリスト 開発関係 研修で作ったフリマアプリ、まるまる自分のものにしよう。じっさいしてええやろ。 JC_booking_centerを早く稼働させてくれ、同時にjc_licence_translationを早く作ってくれ。 La_keibaのTODO LISTをすべて解消してくれ。TODOの解消はもういいから、ラズパイでk8sクラスタを完成させてくれ。んで、そのうえでこのサービスを展開して。さらに、blog.ingenboy.comの8080をsite to siteのトンネルを通してうちのk8sクラスタにつなげる感じにしたらめっちゃおもろないか??えぐいよね。 Go言語でdistributed file systemを作ってくれ!このyoutubeを見て Grafanaを使っていろいろと可視化してみたい。DBは自分で用意する必要があるのかな?? 分散システムの勉強を続けてくれ。頼む。 buy raspberry pi 5 and run k8s on it using ansible. Monitory the above k8s system using grafana and prometheus and make it possible to access the server from outside. その他 APDCMのJournal書いてくれ!!たしか、July 30が締め切り。やらないとなーーー。せっかくだからjournal一本出したいよね。 毎日筋トレしてくれ。ジムに行ってくれ。朝がいい。 毎朝早く起きてくれ。23時に寝て0630に起きる生活ができると最高だ。 早く業務委託で何かしらの案件を取ってきて売れ。 なんかいい研究ネタがないか、せんせいにきいてくれ!配属されたら意外と退屈しないかもしれないけど。。。やっぱり分散ストレージとか、分散システムとか、なんか知らんけどその辺にすごいひかれる。そもそも分散しているのに強調して動くシステムはすごく惹かれる。k8sとかね。しかしk8sはあまりにもインフラすぎる。できればもう一つ上のレイヤーで動く何かが作りたいって話だ。 早くyoutubeチャンネル開設して、経費生活を始めてくれ! 今の部署との付き合い方 ほとんどコードを書くことはない。 なので、コードを書かないとコーディング力はみるみる落ちていくと思われる。 しかし、そのようなことが起こってはいけない。マジでだめ。 つまり、自分でどうにかしてコーディングをしないといけない。一日、7.5hは仕事をする必要がある。 このうち、仕事自体は6hで、んで、自分のタスクに2h-2.5hかけられるといいね。 自分のタスクを何にするか?それがすごく大事。まあやらないといけないタスクは実際たくさんある。上のやつね。 それを一つ一つやっていくしかないかな。インプットもちゃんとやっていこうな。 これだけど、分散システムを勉強する時間にする。よろしく頼む。もう一回、本気で分散システムを勉強しようって思った。 ...

July 5, 2024 · 1 min · 64 words · Me

site to site routing (VPN)

何の記事 vpnサーバに接続してきたvpnクライアントがいるネットワークに、vpnサーバからアクセスできるようにする方法の手順を解説 ちなみに、これはCloudflaairとかいう会社が提供しているzero trustっていうサービスと同等のことを可能にしてくれる。 初めに VPNサーバを立てて、VPNクライアントのパケット通信をVPNサーバを通すようにすることはできていた。 これによって、クライアントはサーバと同じネットワーク上にいるかのようにふるまうことができていたわけだね。 しかしこの逆ができなかったのですよ。 つまり、 サーバがクライアントのネットワークにいるかの如くふるまうように設定することがずっとできなかったんですよね。 その必要性も当時はあまりなかったからね。 だが、この度新しいおうちに引っ越して、「単一のグローバルipが与えられておりポート開放できるルータがある」環境を失ってしまった。 外からアクセスできないんですよね、今のうちのネットワーク環境だと。 家の外に借りたVPSは結構あって、そこにVPNサーバを立てることはできる。 そこで今まで試したけど挫折してきた、「隔絶されたネットワークに、そのネットワークにいるvpnクライアントを介してアクセスする方法」。 今回はそれを可能にする方法を教えます。 ちなみに、二つの異なるネットワークセグメントをvpnサーバとvpnクライアントを使って完全につなげることを、 「site to site routing」といいます。マジでかっこいいですね。あこがれちゃいます。そんな憧れを、今回、達成してしまうんです。 これによって、「remote.it」のように、ポート開放をしていない、隔絶されているネットワーク環境に、外からアクセスできるようになるんです。えぐいですねーーー。えぐい。とにかくえぐい。 参考記事 記事1 記事2 openVPN公式 site2siteに関しては二つ目がかなりいい感じにまとめてくれています。 まずはいつも通り普通にopenvpnサーバを立てる OpenVPNとeasy-rsaのインストール sudo yum install openvpn easy-rsa -y easy-rsaを使って証明書関係を作る ./easyrsa init-pki ca証明書を作成 ./easyrsa build-ca *ca証明書=認証局(ca)証明書。 認証局(CA)とは、ウェブサイトやその他の独立した存在などに、デジタル証明書を発行する信頼できる組織。 できたら移動しておく cp pki/ca.crt /etc/openvpn diffie-helman parameterを生成 ./easyrsa gen-dh 移動しておく sudo cp pki/dh.pem /etc/openvpn Certificate Revocation List (CRL) を生成 ./easyrsa gen-crl OpenVPN Serverように証明書と秘密鍵を生成 (サーバ証明書の生成) ./easyrsa build-server-full server nopass 移動しておく sudo cp pki/issued/server.crt /etc/openvpn sudo cp pki/private/server.key /etc/openvpn クライアント証明書と秘密鍵を生成 ./easyrsa build-client-full username 各コマンドの詳しい説明 ./easyrsa build-ca ./easyrsa build-ca コマンドは、 Easy-RSAツールを使用して 新しい認証局(CA)のルート証明書と秘密鍵を生成するためのものです。 認証局は、VPN証明書を発行および署名するために使用されます。 このプロセスは通常、VPNサーバーをセットアップする最初のステップの一つです。 具体的には、このコマンドは以下の操作を行います: CAの秘密鍵の生成:認証局(CA)の秘密鍵を生成します。 この鍵は、CAによって発行される証明書に署名するために使用されます。 CAの自己署名証明書の生成:CAの自己署名証明書を生成します。 この証明書は、CA自身が正当な認証局であることを証明します。 このコマンドを実行すると、以下のファイルが生成されます: ca.crt: CAの自己署名証明書 ca.key: CAの秘密鍵 これらのファイルは、VPNサーバーの証明書発行および署名プロセスで使用されます。 具体的には、CAの秘密鍵 (ca.key) は秘密に保管されるべきであり、 CAの証明書 (ca.crt) はクライアントと共有され、 クライアントはこれを使用してサーバー証明書の有効性を検証します。 証明書には公開鍵も含まれていると考えていいです。 ./easyrsa build-server-full server nopass ./easyrsa build-server-full server nopass コマンドは、Easy-RSAツールを使用してOpenVPNサーバーの証明書と秘密鍵を生成するためのものです。このコマンドは、サーバー証明書を生成し、その秘密鍵にパスフレーズを設定せずに保存します。 具体的には、このコマンドは以下の操作を行います: サーバー証明書の生成:指定された名前(この場合は server)でサーバー証明書を生成します。この証明書はサーバーがVPNクライアントに自身を証明するために使用されます。 サーバーの秘密鍵の生成:サーバー証明書と一緒に使用される秘密鍵を生成します。この秘密鍵は、VPN接続を暗号化するために使用されます。 証明書署名要求(CSR)の作成および署名:証明書署名要求(CSR)を作成し、それを認証局(CA)で署名することで有効な証明書を生成します。 パスフレーズの省略:nopassオプションにより、生成される秘密鍵にはパスフレーズが設定されません。これにより、サーバーが起動するたびにパスフレーズを入力する必要がなくなります。 このコマンドを実行すると、通常、以下のファイルが生成されます: server.crt: サーバー証明書 server.key: サーバーの秘密鍵 server.req: 証明書署名要求(CSR) これらのファイルは、OpenVPNサーバー設定に必要なものであり、適切に保管されるべきです。特に、server.key は秘密に保つ必要があります。 ./easy gen-dh ./easyrsa gen-dh コマンドは、Easy-RSAツールを使用してDiffie-Hellman(DH)パラメータを生成するためのものです。DHパラメータは、VPNサーバーとクライアント間で安全にキー交換を行うために使用されます。これにより、セッションごとに異なる鍵が生成され、通信のセキュリティが強化されます。 具体的には、このコマンドは以下の操作を行います: Diffie-Hellmanパラメータの生成:DH鍵交換プロトコルに使用されるパラメータを生成します。これらのパラメータは、安全な通信チャネルを確立するために必要です。 生成されたファイルの保存:生成されたDHパラメータは、VPNサーバーの設定で使用されます。 このコマンドを実行すると、以下のファイルが生成されます: dh.pem: Diffie-Hellmanパラメータ ./easyrsa gen-crl ./easyrsa gen-crl コマンドは、Certificate Revocation List (CRL) を生成するためのものです。CRLは、無効または失効された証明書のリストを保持し、認証局(CA)が管理します。 具体的には、このコマンドは以下の操作を行います: CRLの生成:現在の認証局の設定に基づいて、新しいCRLファイルを生成します。このファイルには、CAによって失効された証明書のリストが含まれています。 既存の失効証明書の確認:CRLを生成する際に、すでに失効されている証明書が正しくリストに含まれていることを確認します。 CRLは、VPNサーバーやその他のサービスがクライアント証明書の有効性を確認するために使用されます。具体的には、クライアントがVPNに接続しようとする際、サーバーはそのクライアントの証明書がCRLに含まれていないことを確認することで、失効された証明書による不正アクセスを防ぎます。 生成されたCRLファイルは通常、crl.pem という名前で保存されます。このファイルは、VPNサーバーの設定に組み込まれる必要があります。例えば、OpenVPNサーバーでは、crl-verify オプションを使用してこのCRLファイルを指定します。 ./easyrsa build-client-full username このコマンドは、Easy-RSAツールを使用してOpenVPNクライアント証明書と鍵を生成するためのものです。具体的には、build-client-fullコマンドは以下の操作を行います: クライアント証明書の生成:指定されたユーザー名(この場合はusername)に対して、クライアント証明書を生成します。証明書はクライアントがVPNに接続するために必要なものであり、認証局(CA)によって署名されます。 クライアントの秘密鍵の生成:クライアント証明書と一緒に使用される秘密鍵を生成します。この鍵は、クライアント証明書とともにVPN接続を確立するために必要です。 証明書署名要求(CSR)の作成および署名:証明書署名要求(CSR)を作成し、それを認証局(CA)で署名することで有効な証明書を生成します。 このコマンドを実行すると、通常、以下のファイルが生成されます: username.crt: クライアント証明書 username.key: クライアントの秘密鍵 username.req: 証明書署名要求(CSR) これらのファイルは、VPNクライアント設定に必要なものであり、適切に保管されるべきです。クライアントはこれらの証明書と鍵を使用してOpenVPNサーバーに接続し、暗号化された通信を確立します。 以上の鍵が生成される順番と、これらのカギを使って実際にクライアントがサーバとコネクションを張り暗号化された通信をするまでの流れ 1. 接続の確立 クライアントがVPNサーバーに接続を試みます クライアントはVPNサーバーに接続リクエストを送信します。 2. サーバーの証明書を検証 クライアントはサーバーから送られてきた証明書 (server.crt) を検証します。 クライアントは自身のCA証明書 (ca.crt) を使用して、 サーバー証明書がCAによって署名されていることを確認します。 この検証により、 クライアントは接続しようとしているサーバーが信頼できるものであることを確信します。 3. クライアントの証明書を検証 サーバーもクライアントから送られてきた証明書 (username.crt) を検証します。 サーバーは自身のCA証明書 (ca.crt) を使用して、 クライアント証明書がCAによって署名されていることを確認します。 サーバーはさらに、クライアント証明書が失効していないことをCRL (crl.pem) を用いて確認します。 4. 秘密鍵の使用 クライアントとサーバーのそれぞれの秘密鍵(username.key と server.key)は、相手の証明書と合わせて使用され、相互認証を実施します。 サーバーの秘密鍵(server.key)は、サーバーが送信するデータのデジタル署名と暗号化に使用されます。 クライアントの秘密鍵(username.key)は、クライアントが送信するデータのデジタル署名と暗号化に使用されます。 5. 鍵交換とセッションの確立 Diffie-Hellman鍵交換プロトコルの使用 クライアントとサーバーは、Diffie-Hellman鍵交換プロトコルを使用して、セッション鍵を安全に交換します。 このプロセスでは、サーバーの dh.pem ファイルが使用されます。 セッション鍵の生成 Diffie-Hellman鍵交換によって生成されたセッション鍵を使用して、クライアントとサーバー間で安全な通信チャネルを確立します。 これにより、以降の通信が暗号化されます。 暗号化された通信の開始 暗号化された通信の開始 セッション鍵が確立された後、クライアントとサーバー間の通信は暗号化されます。 以降のデータは、このセッション鍵を使用して暗号化・復号化されます。 各通信データは、相手側の公開鍵で暗号化され、自身の秘密鍵で復号化されます。 VPNサーバの起動 sudo systemctl stop openvpn サーバがうまく起動できないとき こっちで試してみるのもありかもしれない。 ...

July 5, 2024 · 3 min · 637 words · Me

About_JOIN_of_SQL

ことはじめ チーム開発演習で、SpringBootのMapperファイルを書いていたんですよね。Mapper.xmlってやつ。 んで、ここがおかしくてバグが生じていたんだけど、JOINについてちゃんと理解していなかったからだった。 JOINには色々あってさ、inner joinとかouter joinとか。 たくさんのテーブルを繋げまっくる時って、どのJOINにするかが大事って話だ。 まずはすごくわかりやすい図があるのでそれで学んでくれ Left JoinとInner Joinをミスっていた。 SELECT I.ITEM_ID, I.ITEM_NAME, I.DESCRIPTION, I.PRICE, I.IMAGE AS ITEM_IMAGE, I.UPDATED_AT AS ITEM_UPDATE_AT, I.CREATED_AT AS ITEM_CREATED_AT, I.DELETE_FLAG AS ITEM_DELETE_FLAG, COUNT(I.ITEM_ID = L.ITEM_ID) AS LIKE_COUNT, U.USER_ID, U.EMAIL, U.PASSWORD, U.PROFILE, U.IMAGE AS USER_IMAGE, U.DELETE_FLAG AS USER_DELETE_FLAG, U.UPDATED_AT AS USER_UPDATED_AT, U.CREATED_AT AS USER_CREATED_AT, U.USER_NAME, C.CATEGORY_ID, C.CATEGORY_NAME, C.UPDATED_AT AS CATEGORY_UPDATED_AT, C.CREATED_AT AS CATEGORY_CREATED_AT FROM ITEMS I LEFT OUTER JOIN USERS U ON I.USER_ID = U.USER_ID LEFT OUTER JOIN CATEGORIES C ON I.CATEGORY_ID = C.CATEGORY_ID LEFT OUTER JOIN LIKES L ON I.ITEM_ID = L.ITEM_ID WHERE I.ITEM_ID = #{itemId} GROUP BY I.ITEM_ID これ長いけど非常にいいSQLだよね。学ぶことがいっぱいある。それは置いておいて、ここのLEFT OUTER JOINのところ、普通のJOINにすると共通部分しか出て来なくなってしまうんだよね。 で、どこに問題が潜んでいるかというと、 ...

June 20, 2024 · 1 min · 162 words · Me