かゆいとこログ

あと少しなのに届かないかゆいところに効きます

iTerm2にpowerline導入

powerlineって何?

https://camo.githubusercontent.com/ef9de011e72134e8363644a3e10f312292c08d65/68747470733a2f2f7261772e6769746875622e636f6d2f62616e67612f706f7765726c696e652d7368656c6c2f6d61737465722f626173682d706f7765726c696e652d73637265656e73686f742e706e67 ↑こういう感じの,一度はやってみたくなるやつ.

iTerm2 on Mac 民がぶつかる壁

何もせずにpowerlineのテーマとか適用すると, "▶"に対応する文字が化けてしまい,残念な感じになる.

https://camo.githubusercontent.com/5c332c9adcfdae274b3bba91c282d8dbcd2f9150/68747470733a2f2f6170692e6d6f6e6f736e61702e636f6d2f7270632f66696c652f646f776e6c6f61643f69643d6c43786948794274596f6a54724244705973303065337177485775325334

解決策

"▶"のような,powerlineで使われる特殊なフォントを導入する必要がある.
フォントの導入は,Homebrew-Caskでやると楽 physick.hatenablog.com

$ brew cask search fonts-powerline

で結構引っかかる.
選んでも良いが,めんどくさければ全部入れておけば良い.

再ログインしてから,入れたフォントが一覧にあることをFontBook appで確認する.
その後,iTermの設定でprofile内のフォントを変更する.
これに関しては

Installing powerline on Mac OSX. The following was done in version Version 10.8.2 · GitHub

が参考になる.

注意点

"▶"等をフォントで代用しているため, iTermの設定で

透明度が0% かつ コントラストが最小

の設定にしていないと,powerlineの色ズレが発生する. ("▶"部分とその左側とで色が異なっていることが分かる)

f:id:physickelback:20180222002811p:plain
透明度0
f:id:physickelback:20180222002816p:plain
半透明

Homebrew関連

Homebrew+Caskについて

"brew"と"brew cask"って何が違うの?

homebrew - What is the difference between `brew` and `brew cask`? - Ask Different

要約: Homebrew-CaskはHomebrewの拡張.

"brew cask": GUIアプリ, "brew": CUIアプリを主に扱う.

"brew cask install foo" は "brew install caskroom/cask/foo" のエイリアスになってるらしい.

公式サイト(https://caskroom.github.io/)

に書いてある導入方法も

$ brew tap caskroom/cask

ってするだけだから,リポジトリ追加してるだけ.

できること

Macで使うGUI, CUIアプリケーションを一元管理できる. ファイルがバラバラに配置されないので,削除とかもしやすい.

フォントの導入

フォントのインストールも可能. qiita.com どうやら,

/Users/[username]/Library/Fonts

の中に突っ込んでくれるらしい. 再ログインすればFont Book などでも見れるようになる. (再ログインすることが全く頭になくてここでハマった) 因みに,macOSのフォントファイルの配置については

Mac OS X: Font locations and their purposes - Apple Support

が参考になる.

wgetで複数階層に渡るファイルをダウンロードする

wgetってなに?

wgetlinuxのコマンドで、非対話型のダウンローダーです。

最低限の使い方

例えばダウンロードしたいzipファイルが http://hostname/hoge.zip にある場合、

$ wget http://hostname/hoge.zip

とすることで、ローカルにhoge.zipが保存されます。

必要十分(?)な使い方

サイト上にファイル一覧のダウンロードリンクがおいてある場合、

例えば、 http://hostname/directory1/ 内にダウンロードリンクがおいてある場合、

$ wget http://hostname/directory1/

としてしまうと、index.htmlがDLされるだけで終わってしまいます。

$ wget http://hostname/directory1/file0.zip

などとすればDLできますが、ダウンロードリンクが大量にある場合はこんなことやっていられません。

 

ここで、wgetのオプションを使って以下のようにDLします

$ wget -rH -l 1 -A txt,zip --random-wait http://hostname/directory1/

各オプションについて:

  • -r: 再帰的にDLします。このとき,wgetは兄弟ディレクトリの中身まですべてDLしてしまうことがあるようです。(これを防ぐためにlオプションをつけています。)
  • -l: 再帰的にDLする最大深さを指定します.
  • -H: 異なるドメインのファイルはダウンロードしません。(lオプションを1にしていれば関係ないかと思われますが)
  • -A: ダウンロードするファイルを限定します。カンマ区切りで拡張子を指定できるほか、ダブルクオートで囲めば、正規表現でファイルを絞ることもできます。

  • --random-wait: これは必須ではありませんが、ファイルをDLするためにあまりに大量のリクエストを投げてしまうと相手サーバーに負荷がかかり、攻撃してるみたいになるので、ランダムにwaitを入れます(マナーですね)

ターミナルで日本語が文字化けするとき

まずlocaleについて勉強しておく↓ eng-entrance.com

あとは, どこで読んだか忘れたけど,とりあえず ~/.bashrcに(fishなら~/.config/fish)

export LANG=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8

って書いておけば,

$ locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

となって,日本語が化けなくなる.

JavaとおさらばしてJuniper SSLVPNをLinuxから快適に利用

うちの大学はネットワークが学内で閉じており、学外からの接続手段としてJuniper Networksのsslvpnを採用しているので、これを使わねばならない。

Chromeでsslvpnサービスを提供してるサイトへ飛んで、「ネットワークコネクト」を実行するとJRE がインストールされていないか、Java が無効です。

って表示される。色々インストールしてもうまくいかないので、調べていると、

Chrome

バージョン42以降のChromeブラウザ。Chromeバージョン42 (2015年4月リリース)以降、Chromeはブラウザがプラグインをサポートする標準的な方法を無効化しました。詳細

 

(https://java.com/ja/download/help/enable_browser.xml)

モダンなブラウザではJavaが標準で無効どころか、そもそも有効化する手段がないという感じ。

FlashHTML5に取って代わったみたいな、パラダイムシフトかな。

 

とにかく、このままではSSLVPNに接続できないので困ってしまう。
いろいろ調べていたら、どうやらLinuxのコマンド一発でJuniper NetworkのSSLVPNに接続できる方法があるらしい。Javaも必要ない。(筆者はLinuxのノートPCを使っている)

https://www.scc.kit.edu/scc/net/juniper-vpn/linux/

このサイトに、パーフェクトな説明があった。

configurationファイルは、説明にあるとおり

~/.juniper_networks/network_connect/config

に作成し、このディレクトリ内に

somename.conf (デフォルトの構成なら "default.conf")

という形で記述する。

confファイルの中身は

host=foo.bar.com
user=username
password=secret
realm=very long realm with spaces
cafile=/etc/ssl/bar-chain.pem
certfile=

こんな感じにする必要がある。
cafileは、".pem"の拡張子を持つファイルが/etc/ssl/certsに転がってるので、対応するものを探して記入する。
もしくは、サーバー証明書を落としてきて、certfileにパス追加する。

正直、あまりにも簡単にできたので拍子抜け。

 

これができたら好きなときに

$ jnc --nox

で接続開始

$ jnc stop

で接続終了!

また1つ幸せになりましたね〜

UbuntuにApache導入してWebサーバ立てるまでのかゆいところ

Apache導入、CGIスクリプトの作成とファイルアクセス

そもそも、なぜApacheが必要なのか

WebブラウザにHTML等要求されて、応答を返すなどという仕組みは(当たり前だが)本来備わっていないので、これを可能にするApacheというWebサーバーを導入することが必要。

こんなの書くまでもないけど、以下を見れば違いが分かる(Apacheの場合)。

webサーバが動いていないマシン:
$ curl http://localhost
curl: (7) Failed to connect to localhost port 80: 接続を拒否されました

webサーバが動いているマシン:
$ curl http://localhost

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
(中略)
</html>

*Apacheの場合、localhostにアクセスするとdefault page的なものが表示される。


CGIってなにそれ?

CGI(Common Gateway Interface)は、ウェブサーバ上で好きなプログラムを動作させる仕組み.

名前のとおり、単なるInterfaceなので、様々な様々な言語で実装されている. Pythonもその1つ.

-- 2017年6月10日 追記 --
私の説明がゴミなので、古いSoftware Designに書いてあった一節も引用させて頂く。

CGIというのは Common Gateway Interfaceの略で、単純に言うとブラウザからWebサーバに置いてあるプログラムを起動するための仕様です。CGIという言葉はInterfaceを指すので、CGIで動く(動かされる)プログラムのことは、CGIプログラムやCGIスクリプトという方が丁寧です。スクリプト言語で書いた場合はCGIスクリプトというのが良いでしょう。
 CGIプログラムはどんな言語で作っても構いません。C言語で書いても良いわけですが、この領域ではLightweight Language(LL言語)で書かれることがほとんどであり、伝統的にはPerlPHPが多く、最近ではRubyPythonもよく使われます。

開眼シェルスクリプト第19回 by 上田隆一 (Software Design 2013 July P.122)

実行環境?

Ubuntu 16.04

Apache/2.4.18

 

aotake-rail.raindrop.jp

↑これを参考にした。ホームディレクトリ直下で

$ mkdir public_html

及び

$ chmod 770 public_html

として、(groupのpermissionは7にしないとだめなはず。)

続けて、

$ a2enmod userdir

ユーザーディレクトリの指定かな?

$ a2enmod cgid

CGIを使用可能にする。

を入力。

このあと、URLの先にもあるように、

mime.conf を編集して、.cgi の拡張子を持つファイルを cgi-script として処理するよう設定する。userdir.conf を編集して、public_html ディレクトリに ExecCGI Option を付加する。

(これをやらないと、cgiファイル読むときに、web-serverが、これXMLだわwwとか言って読みだしてエラー吐いて死ぬ) 

を行ってから再起動して終了。

 

Permissionについて

普通にCGIからサーバーのファイル触ろうとするとPermission denied食らう。
$ chmod 777 [FILE] ってしちゃえば行けるが、危険すぎる。
Apache2の場合はwww-dataなるuserがapacheを動かしているということを知る。

以下のサイトとか参考にする。Stack overflowのやつはわざわざvarwwwusersとかいうグループを追加しているが、必要ない。(下記参考)

stackoverflow.com

qiita.com

$ less /etc/apache2/envvars

とすることで、apache環境変数覗ける。
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
と記されており、userもgroupも"www-data"になっていることが分かる。

よって使用しているディレクトリ(今回cgiを書いているのは~/public_html/以下である)に対して、

$ sudo chgrp -R www-data ~/public_html

と入力してやる。(~/public_html以下のファイルを、グループ"www-data"の所有物にする. -R はRecursive(再帰))
次に、

$ sudo chmod -R 770 ~/public_html

としてやることで、適切なPermissionとなり、apacheがpublic_html配下のファイルにアクセスできるようになる。

デフォルトシェルをbashにしたい

screen実行時にbashになっていない場合もこれで解決。

現在のシェルを確認。

$ echo $SHELL

もしくは

$ cat /etc/passwd | grep [ユーザー名]

これで何も表示されない場合は、default shellが設定されてない。

 

設定するには

1. /etc/passwdを直接編集(やったことないしおすすめしない)

2. chshを使う

$ chsh [ユーザー名]

これで対話式にシェルを変更可能。-sオプション使っても良いけど。

※一度ログアウトし直さないと反映されないので注意!