Comments on super linux programing

はじめに 図書館で借りた、「c言語によるスーパーlinuxプログラミング」という本の返却期限が近づいているのでさっさとまとめておきたいと思う 1章:c言語の位置づけ cを勉強することでプログラムの動きをマシンレベルでイメージすることができるからいいよねと。ただし、記述は非常に具体的になる。それでは面倒なことが多いと。そういう理由から「高級言語」が開発されたと。スクリプト言語ともいう。どの言語を使うかは何を開発したいか?に依存するわけですね。システムだったらc/c++,webだったら、jsとかね。適材適所が大事ってこと。 strace python だけでもシステムコールがたくさん呼び出されることからも、pythonがインタープリタ言語であることがわかる。 この辺の続きを詳しく知りたければ、「linuxの仕組み」という本を読むことをお勧めします。 2章:ubuntuの導入 ubuntuはまだ一般的になっていません。と。いえ、もう一般的になっています。既知の事実がつらつらと書かれているだけですね。 3章:大規模プログラミングとライブラリの利用 複数の開発者による並行開発を実現するには、アプリケーションの分割は必須の技術。ライブラリの利用は分割プログラミングのゴール。 改めてc/c++プログラムのビルド工程 プリプロセッサによるファイルのインクルードやマクロの展開(プログラム中で#でかかれている所) アセンブラへの展開とアセンブル作業によるオブジェクトコードへの変換 オブジェクトファイルの結合やライブラリとのリンクを実施 で、コンパイルってのは「実行ファイルを作る」って意味で使われるけど、どっちかっていうと、「オブジェクトファイルを作る」って意味だな。で、ビルドが「実行ファイルを作る」だな。うん、 だから、「分割コンパイル」ってのは、どっちかというと、分割ビルド ≒ 分割したファイルをコンパイルしてリンクするってかんじ。 ライブラリの種類についてもここで説明されているので、チョットやります。 ライブラリの種類とリンク ビルド ≒ コードをコンパイルしてオブジェクトファイルの生成 + ライブラリのリンク なわけだけれど、ライブラリにはスタティックリンクとシェアードリンクの2種類があると。で、共有ライブラリのリンクはさらに、 実行形式のメモリへのロード時にリンクされる、動的リンクライブラリ 必要に応じてメモリへロード、リンクされる、動的ローディング の二つがある。 ldd ./binary で調べられるんですね。便利ですね。 んで、ライブラリをリンクする時ってのは、ライブラリが提供する関数を使いたいときだと思うんですけど、この、関数の仕様(インターフェース)がどうなっているか?を知る方法が、ヘッダーファイルなんですよねー。そうなんですよ、まさに。 だからヘッダーファイルには定義はかかないんですよね。引数と返り値だけなんです。 自分で共有ライブラリを作る方法 まずは、mainがない、関数だけの.cppと.hppを作る。 -fPICオプションをつけてコンパイルする。この時、.oファイルができる。 e.g., mylib.o g++ -shared -o libmylib.so mylib.o でshared-libraryができる。 ヘッダーファイルと作ったshared-libraryを/libにおいて完了。あとは、コンパイル時に-lmylibってつけることを忘れずに。ライブラリのリンクでよく忘れるやつね。大事だから。 g++ -o myapp myapp.cpp -L/path/to/library -lmylib でコンパイルできるよーって話ね。あと大事なの。 ...

January 17, 2023 · 6 min · 1072 words · Me

ラズパイでルータを作る (ラズパイでhadoopクラスタを構築するための準備)

ことはじめ HPCの研究室に所属している割にはHPCっぽいことができていなくて不満なので、自分でHPCぽいことをやることにした。自分のいう「HPCぽさ」ってのは、大規模なデータ分析とか難しい処理を複数ノードを使って効率よくやることとか、まあとりあえずクラスタが好きなんすよ。 ってことでとりあえず手始めにラズパイでHadoopクラスタを構築する。その後kubernetesクラスタや、slurmクラスタも試してみる。 やることは全部で5つある。3つめと4つ目ははHadoopクラスタの構築のためではなく、MPIを使った実行も可能にするためである。勉強にはなる。 1. ラズパイのルータ化 2. クラスタネットワークに属しているノードのIPアドレスを固定 3. ノード間をシームレスで移動できるようにkeychain loginを追加 4. nfsを使ってノード間で共有ディレクトリを作る 5. hadoopの導入 ラズパイのルータ化(やることその1) 大元のLanにはsoftbankのルータを使っているが、このネットワークにラズパイクラスタを置きたくない。なので、ラズパイ一台をルータ兼マスターノードにして新しいネットワーク(172.20.2.0/24)を構築する。 ネットワークの構成 192.168.3.0/24がメインのネットワークで、この中にルータ兼マスターノードをつくる。マスターノードは2つのnicを持つが、 192.168.3.0/24側は、192.168.3.4 新しいネットワーク側(172.20.2.0/24)は172.20.2.1。 そして172.20.2.0/24の中にラズパイクラスタをいっぱい配置する。 必要な道具 ラズパイはether net ポートが1つしかない。そのためラズパイで外部からアクセス可能なLanを作るためにはもう一つ物理的なLanポートが必要になる。これには usb -> ether net変換アダプタを使う。 ifconfigの結果は次のような感じになる。 eth0がもとからついているポートでeth1が追加されたやつ。 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.4 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::dea6:32ff:fefa:54df prefixlen 64 scopeid 0x20<link> inet6 2400:2413:121:fd00:dea6:32ff:fefa:54df prefixlen 64 scopeid 0x0<global> ether dc:a6:32:fa:54:df txqueuelen 1000 (Ethernet) RX packets 841 bytes 96345 (96.3 KB) RX errors 0 dropped 281 overruns 0 frame 0 TX packets 472 bytes 90115 (90.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether 18:c2:bf:e9:3b:8d txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0がメインネットワーク側。eth1がクラスタネットワーク側。以下、新しいネットワークを作るための設定 ...

December 10, 2022 · 2 min · 367 words · Me

Open VPNがつながらなくなった話。

openVPNが急につながらなくなった話。 自宅外から自宅内のサーバにアクセスする際の手段としてsshとvpnがあるが、最近はvpnで自宅ネットワークに入ることがおおい。というのも自宅にあるサーバで構築されたシステムの開発をする際、同じネットワーク内にいたほうがいろいろと作業がしやすいためである。 vpnサーバの構築にはopenVPNを使っているが、そんなopenVPNが今朝からつながらなくなった。 /etc/var/openvpn.logを見てみると以下のエラーが。 Tue Sep 27 15:36:24 2022 130.xx.xxx.xxx:61548 VERIFY ERROR: depth=0, error=CRL has expired: CN=hogehoge. error=CRL has expiredとのこと。 実はこれでつながらなくなるのが3回目である。まあ、証明書の有効期限が切れたということなので、証明書を再発行することになる。 その手順を改めてまとめる。 そもそもどうやってopenVPNサーバを立てるか このサイトを参考にVPNサーバを構築する。 一応、流れを説明する。 必要なソフトのインストール OpenVPNのインストール sudo apt install openvpn Easy RSAのダウンロード git clone https://github.com/OpenVPN/easy-rsa.git 認証鍵の生成 Easy RSAディレクトリへ移動 cd ./easy-rsa/easyrsa3 初期設定 ./easyrsa init-pki 以下のように表示されればOK init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: path/to/easy-rsa/easyrsa3/pki CA証明書の生成 ./easyrsa build-ca パスフレーズを聞かれるので、パスフレーズを入力。再入力を要求されるので入力する。 sudo cp pki/ca.crt /etc/openvpn で生成された鍵を/etc/openvpnにコピー。 サーバ証明書の生成 ./easyrsa build-server-full server nopass パスフレーズは3で入力したものと同じものを入力。 生成された鍵を/etc/openvpnにコピー ...

September 27, 2022 · 2 min · 271 words · Me