yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

つまりSystemdな環境の東京理科大学学生はいかにしてVPNに接続することができるのか

結論

まず、大学のマニュアルに従いanyconnect-tus-predeploy-linux-3.1.01065-k9.tar.gzを手に入れる(バージョンは違うかも)

$ tar zxvf anyconnect-tus-predeploy-linux-3.1.01065-k9.tar.gz
$ cd anyconnect-3.1.01065/vpn
$ sudo ./vpn_install.sh
$ sudo pacman -S pangox-compat networkmanager-openvpn networkmanager-openconnect

./vpn_install.shからエラーメッセージが出るが、SysVinit周りなので無視する。

/etc/systemd/systemvpnagentd.serviceという名前で

[Unit]
Description=vpnagentd
Requires=network.target

[Service]
Type=simple
ExecStart=/opt/cisco/annyconnect/bin/vpnagentd
ExecStop=/usr/bin/pkill vpnagentd
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

を作成し

$ sudo systemctl daemon-reload
$ sudo systemctl enable vpnagentd.service
$ sudo systemctl start vpnagentd.service

以上。

背景

以前にこのブログで

yumetodo.hateblo.jp

という記事を書いた。東京理科大学の学生である私がいかにしてUbuntu 16.04から大学のVPNを利用できるようにしたのかという話だ。

先日@Akcuohbe氏のPCのセットアップを手伝っていた際にManjaro Linuxを入れたのだが、上の記事の手順がほぼそのまま適用できると考えていたがそうではなかった。悪戦苦闘しどうにかできるようになった。

知らなかったのだが、Ubuntu 16.04は確かにsystemdが利用できるが、昔ながらのSysVinitが生き残っているようだ。互換機能があるため上記記事を書いたときはCisco AnyconnectがSystemdに対応していると勘違いしていた。

大学のVPNアクセスに必要なCisco Anyconnectは(少なくとも大学が配っているバージョンのものは)SysVinitのみに対応していて、Systemdに対応していない。

Cisco Anyconnectにはvpnagentdというプログラムが有り、これがバックグラウンドで起動していることが重要らしい。

奮闘の内容

もう少しざっくりした話は

Archlinuxに東京理科大学のVPN接続するための道具を導入 - Qiita

を参照。

まだCisco AnyconnectがSystemdに対応していると勘違いしていたころ

TwitterのDMでやり取りしていた。

  1. インストールできないとの報告を受ける(GUI操作で/opt/cisco/anyconnect/bin/vpnuiを起動しようとして何も起きない動画を添付される)
  2. sudo pacman -S networkmanager-openconnectすることと、端末から/opt/cisco/anyconnect/bin/vpnuiを起動することを要請
  3. pacmanのことは華麗にスルーされ、端末から/opt/cisco/anyconnect/bin/vpnuiを起動したときに

    /opt/cisco/anyconnect/bin/vpnui: error while loading shared libraries: libpangox-1.0.so.0: cannot open shared object file: no such file or directory

    と言われた

  4. sudo pacman -S pangox-compatすることを要請
  5. 今度は端末から/opt/cisco/anyconnect/bin/vpnuiを起動したときに何も言わずに死ぬように
  6. yaourt -S lib32-pangox-compatすることを要請
  7. これを華麗にスルー
  8. 再起動してsudo systemctl status vpnagentd.serviceすることを要請
  9. ところが

    Unit vpnagentd.service could not be found.

    と言われる

  10. おかしい。オフトンに居たのでSystemdのサービス列挙方法調べてその中にそれっぽいの居ないか試すように要請して寝る
  11. 起きてみたらどうしたらいいかわからなかったらしい。
原因究明

埒が明かないので実際にあって操作することに。

/opt/cisco/anyconnect/bin/vpnuiを起動しようとすると確かに一瞬だけGUIが出て即座に死ぬこと確認。

  1. networkmanager-openvpn, networkmanager-openconnectpacmanから入れてみるもだめ。
  2. networkmanager-openvpn-gtk2をyaourtから入れようとしてみる
    1. gpg署名検証エラーで怒られる
    2. gpgコマンドから--serch-keysで出てくるのに--recv-keysできない問題に当たる
    3. 仕方ないので公開鍵を手動で取ってきてpacman-key --addする
    4. yaourtでビルドが通ったが、インストールフェーズでnetworkmanager-openvpnと競合するとの通知がきて取りやめ
  3. ls /opt/cisco/anyconnect/binしたときにvpn, vpnui, vpnagentdがいた。
    1. /opt/cisco/anyconnect/bin/vpnをターミナルから立ち上げると、メッセージをメモし忘れたがエージェントが居ないとか云々言われた気がする。
    2. あれ、これvpnagentdが立ち上がってない・・・?
    3. vpnagentdを立ち上げてからvpnコマンド立ち上げたらそのメッセージが消えた
    4. これだっ!自動起動の設定がコケてたんだ!
systemdのserviceを書こう

Ubuntu16.04でマウスのホイールの回転量を調整する - QiitaでSystemdのサービスを書いたことがあったのでこれを参考に書き進める

  1. Fedora Quick Docs | Fedora Quick Docs | Understanding and administering Systemd#creating-new-systemd-servicesのサンプルのExecStart=/usr/bin/sleep infinityに騙されてExecStart=/opt/cisco/anyconnect/bin/vpnagentd infinityとしてしまう(節子、それsleepコマンドの引数や!)
  2. Systemd入門(4) - serviceタイプUnitの設定ファイル - めもめもを見てWants+AfterじゃなくてRequiresを使うように: 少なくともサービスが立ち上がるようにはなったがvpnagentdが立ち上がらない
  3. なんかしばらくするとサービス落ちる問題
  4. ユーザーサービスにしたらうまくいくのでは?: システムサービスじゃないとioctlがコケる
  5. ようやくserviceのタイムアウトのせい?と気がつく: [Service]>RemainAfterExit=yesが必要だった
  6. うまく行ったと思ったが、OS終了時にあきらかにこのサービスの終了待ちのタイムアウトが・・・
  7. ExecStopが必要
  8. 完全解決!

まいん氏の #二度目の人生を異世界で が総スカン食らっているようだけど

まいん氏って誰?

まいん小説家になろうで投稿されている作家さん。「食い詰め傭兵の幻想奇譚」「二度目の人生を異世界で」など。

私もこの2つの作品の更新は追っかけて読んでいる。

問題のツイート

随分と昔の2013年から2014年のツイートが槍玉に上がっている。

img

槍玉に上がっている「二度目の人生を異世界で」の設定

設定が乗っていた話はすでに削除されているが、ぎりぎりGoogleのキャッシュに残っていた。引用すると

「手伝うもなにも、検索履歴から引っ張ればすぐでしょう?」

それもそうだと、あの世界に送り込む魂を検索した時の履歴から、該当する情報を引っ張り出して表示させる。

功刀 蓮弥 人族 享年94歳。

現在リソース不足の9201-0846-2525-4989へリソース充填の為、界渡り中。

元の世界番号は8190-9735-1414-3878であり、特記する事象なし。

界渡り前は、功刀一刀流第14代当主。

幼少より剣道を嗜み、13歳にして剣術へ移行し、その才能を開花させる。

15歳より、武者修行と称し中国大陸へ渡り黒社会で活動。

刀一本で大人数へ切り込み、生還する様から「剣鬼」の異名で呼ばれる。

黒社会活動中の殺害人数は5年間で912名に及ぶ。

その後、世界大戦に従軍。

4年間の従軍期間中の殺害数は3712名、全て斬殺。

「ブレードオーガ」のコードネームで畏怖される。

終戦後は功刀流の家督を継ぎ、後進の育成や、剣術の普及に尽力。

各地で公演や剣術の実演を行い、功刀一刀流を広く普及させ、国内外に49の道場を持つに至る。

晩年は刀匠として大成し、「華蓮」の銘を持ち、人間国宝に指定。

美食家としても知られ、自身も高い料理の腕を持つ。

94歳と127日目にして、老衰にて死去。

生涯殺害数、5730名。

「……リアルチートキター?」

「なんでカタコトなんですか、主様」

情報の書かれているウィンドウから視線を上げて、ぼそっと言った私に、部下が即時にツッコミを入れてくる。

きっと今の私は、非常にうつろな表情をしているに違いない。

「なにこれ!? 適当に選んだ割には、とんでもない人生だよねこれ!?」

「こんな人生送って、よく老衰で死ねましたねこの人……。普通たたみの上では死ねない人生ですよねぇ」

「刀だけで五千人以上殺すって、ありえないよね!? ってか終戦迎えた後からも4ケタくらい殺してるよね、この人!」

「よほど上手に隠蔽したんでしょうねぇ」

「そういえば、特記事項なしってことは、この人犯罪者になったことないよ!」

犯罪歴があれば特記事項として情報が表示されるはずだった。

ちなみにだが、ここで表示される犯罪暦は、その世界の法に触れたという事実がない限りは犯罪暦としてカウントされない。

そうでもしないと、ほぼ全ての人間の情報に犯罪暦が表示されてしまうからだ。

当たり前だが、いくら困っていたとは言え、犯罪者を界渡りさせるつもりなど毛頭なかったのだが、急いで手配したとは言え、私はなんという札を引いてしまったんだろうと頭を抱えてしまう。

この人が元いた世界には数十億の人間がいたから、五千人程度の殺害数は、常識外れに多いとは言っても、世界にたいした影響は与えなかったはずだ。

しかし、今回送った先の世界の人口は、せいぜい1000万前後がいい所だ。

そこに素の状態で五千人を殺し得る人を、さらにチートっぽいスキルまで付属させた上で送ってしまった。

小説の設定についての感想

まあよくあるなろう小説の異世界転生からの俺TUEEE系小説だ。主人公(男)が老衰で死んで、前世の記憶を失って転生する。

TVアニメ化されるというラノベ『二度目の人生を異世界で』の設定がひどすぎて目眩がする - 読む・考える・書く

連載開始が2014年なので、この主人公は1920年頃生まれたことになる。すると、日中戦争開始時点で17歳、敗戦時で25歳くらいか。で、この間に912+3712=4624名を斬殺した、と。

引き算してみると戦後も1000人以上殺していることになるというトンデモはとりあえず無視するとしても、この設定のあまりの馬鹿らしさには乾いた笑いしか出てこない。


それに、異世界側の設定であればいくらでも好きにすればいいが、ここは現世における主人公の生涯に関する設定なのだから、いくらラノベでも歴史的事実をガン無視したデタラメは許されない。この主人公が斬殺しまくった舞台は中国しかあり得ないだろう。


戦場で敵を斬りまくったなどという軍人の自慢話は大嘘で、ほぼすべてが実際には無抵抗の捕虜や民間人の虐殺だったのだ。

引用部分、なかなか崩壊した設定だなと思ったら考察している記事があった。

しかしだ、そもそもみんな忘れてないだろうか、小説家になろうにあがる小説の大半は設定が崩壊している。この作品の設定もやはり崩壊しているが、べつにこの程度日常茶飯事である。

手塚治虫の「漫画の描き方」を引っ張ってきて基本的人権が云々言っているツイートも見かけるが、小説家になろうにある作品の多くで基本的人権は崩壊してる。というか俺TUEEEを成立させるには基本的人権がある程度消し飛んだ世界観を持ってこないと設定が成立させにくい。

ああ、上の記事で捕虜や民間人の虐殺とか言っているが、戦争とはそういうものであり、だから戦争は許されざることである。

それにどうも忘れられているようだが、異世界転生もので、転生前がパラレルワールドではないといつから錯覚していた?

小説の設定には作者の政治的主張が出るものだが、以て小説や作者を叩くのは頓珍漢である。というか、それこそ作者の基本的人権の重大な侵害だから自己矛盾甚だしいことを思い出して欲しい。

というわけで、流れに乗って叩いちゃった各位は反省されたい。

なおちゃんとなろうに上がっている全話を読破していればわかることだが、基本的人権や性志向・性自認の軽視傾向の度合いは、ほかのなろう作品と大差ない

「だから小説家になろうは糞」という理論なら成り立つのかもしれないが(要検証)、この作品の攻撃は成り立たない。

問題のツイート

言うまでもなく人種差別的、攻撃的な言動である。とはいえこの程度の低レベルな言動はこんにち、twitterでは極めてよく見かけるものであり、なかなか悲しい。極右極左ともにこの手の救いのない罵倒の応酬が日々繰り広げられている。彼らは「ネトウヨ」だの「パヨク」だのという全く機能しないレッテルを張り合うコトしかできないのだろうか・・・。

ただツイートの時期に注目しておきたい。2013年から2014年というのは「二度目の人生を異世界で」の連載が始まる前、ないし始まった直後頃のことである。

なんだってそんな4年も前の話が蒸し返されたのだろうか?

この点は別途考察が必要である。

おそらくだが、小説の設定と現実世界の区別がつかなくなったお馬鹿たちが作者の攻撃材料を探す過程で引っ張りだされたものだろう。

声優降板について

まあ単に大きな市場である中国市場で叩かれているから傷がつくとかそんな程度の判断だろう。炎上への対処を明確に打ち出せないまま声優の繋ぎとめに失敗した、ということだろう。針小棒大に書き立てている人が居るだけのことだ。

作者の政治主張と作品内容を分けて考えられない人たちへ

どうも小説家になろうにあがる小説には歴史修正主義的な傾向があるように思う。例えば魔法科高校の劣等生だってそのたぐいだと、私なんかは思っている。

でも、魔法科高校の劣等生北山雫はかわいい。これが正義だ。

まとめ

追記

https://www.hokkaido-np.co.jp/article/197053www.hokkaido-np.co.jp

アニメ制作中止とのこと。まあそれはいい。声優に殺害予告が行くという意味不明な状況だったしな。

www.asahi.com

しかしノベルに影響が行くのは意味がわからん。

なんにせよ、作品が知られるようになるより前のツイートが原因で作品を潰せてしまうという悪しき前例ができてしまった。とても良くない

コアってなに?スレッドが2つある?非同期?というあなたに

前提: 演算器

例えばAND回路とかOR回路なんかをイメージしてほしい。

まずCPUがある

一般にCPUは1つのPCに1つのものをよく見かけるが、複数CPUが乗っていることもある。

コアとは

CPUは多数の演算器が複雑に組み合わさってできているが、この脳みそに当たるものが1つのCPUの中に複数あることがある(というかそのほうが主流)。これがコアだ。

Pipeline

基本的にコア1つに付き1つの作業しか同時にできない。はずであった。しかし、作業内容をCPUが見抜いて、依存関係のない演算同士をばらしてPipelineを組み立て、同時に複数の処理を実行するという離れ業を現代のCPUはやってのける。

ただし、例えば条件分岐では、分岐するまでパイプライン進められなくなる。パイプラインを崩す。

条件分岐予測とか投機的実行

パイプラインが崩れると処理速度が遅くなって困るので条件分岐に対しては条件分岐予測というものがある。

つまり、CPUの謎パワーで条件分岐先を予測して、投機的実行(Pipelineを組み立て分岐先の処理を実行)してしまう。条件分岐判定が終わって予測が間違っていたら処理を差し戻して正しい処理を実行する。

この投機的実行の有用性が揺らぐ事件としてSpectreがある。雑に解説すると、処理の差し戻しが不完全なことで意図しない副作用が起きるというものである。まじでどーすんだこれ。

SMT(同時マルチスレッディング)

Pipelineとは別に、基本的にコア1つに付き1つの作業しか同時にできないという概念を覆すものがある。1つの作業中のCPUをよく観察すると、すべての回路が仕事をしているわけではなかった。遊んでいるところでもう1個仕事できるんじゃないか?例えるならば右手でスマホを操作しながら左手で飲み物を飲めるようなものだ。

いわゆる論理コア。

論理コア

Intel® Hyper-Threading Technology

SMTの実装例である。1つのコアを2つのコアに見せかける。HTT。Technologyは冗長だから省いてHTと呼んだりハイパースレッディングと呼んだり。

プロセス

一気にソフトウェア面での話になってくる。

実行ファイルを実行する時にOSが生成し管理する。

一般的なOSでは当たり前のようにプロセスは複数作れる。

スレッド

プロセスごとにスレッドを生成できる。プロセスではメモリー空間を共有するのが難しい。スレッドならメモリー空間は共有だ(ただしバグを作り込みやすい)。スレッドの生成コストは普通プロセスの生成コストより小さい。

スレッドプール

プログラミングの技法的な話になってくる。スレッドは確かにプロセスの生成コストより小さいかもしれないがそれでも重い。ループの中で逐次スレッドを生成しては破棄するような使い方をすると遅すぎる。ここで生産者ー消費者モデルというプログラミングの技法を使う。つまり予めいくつかのスレッドを生成しておき休眠させ、必要になったら起こしてデータを渡して処理を行わせ、終わったら次のデータが来るまでまた眠る。これがスレッドプールだ。

非同期

スレッドプールをまともに実装するなんてことができるのは一部のプログラマーだけだ。一般的なプログラマーには無理だし、そうでなくても楽をしたい。生産者ー消費者モデルではなく、ある処理が終わったときに呼び出す処理(callback)を登録しておくという手法を用いるほうがわかりやすい。これが非同期プログラミングだ。

futhre/thenとかasync/awaitとか

非同期プログラミングはスレッドプールを自分で書くよりはマシかも知れないが、プログラムの可読性が落ちる(callback地獄)。そこでライブラリ側でこれをどうにかする手法としてfuture/thenだったり、これをもうすこし可読性を上げて書けるようにするプログラミング言語仕様側のサポートとしてasync/awaitとかが一部のプログラミング言語にはある。

「スレッドと呼ばれるものが2つある問題」

プロセスごとにスレッドがあるのだが、一方でSMTの論理コアのことをスレッドと呼ぶことがある。プロセスごとのスレッドを論理コアにOSが割り当てるのだからThreadingのほうが正しいはずなのだが、どういうわけか論理コアのこともスレッドと呼ぶ。意味がわからない。

謝辞

質問者
情報提供