動かざることバグの如し

近づきたいよ 君の理想に

Ubuntuで特定のレポジトリを除外してインストールする方法

ここでいうリソースってのはhttp://ap-northeast-1.ec2.archive.ubuntu.com/ubuntuみたいなやつのことを指す リソースのほうが正しいかも?

何がやりたいか

例えばnginxをインストールしようってなったときに、

# apt-cache madison nginx
     nginx | 1.14.0-1~bionic | https://nginx.org/packages/ubuntu bionic/nginx amd64 Packages
     nginx | 1.14.0-0ubuntu1 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
     nginx | 1.14.0-0ubuntu1 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main Sources
     nginx | 1.14.0-1~bionic | https://nginx.org/packages/ubuntu bionic/nginx Sources

って状況のUbuntuで、公式レポジトリのhttp://ap-northeast-1.ec2.archive.ubuntu.com/ubuntuを無視してhttps://nginx.org/packages/ubuntuからのみのインストールに限定したいとき用

発端

システムの関係上、Ubuntu 18.04にNodejsのバージョン6をインストールすることになった。

2018年7月17日現在では10が一番新しい安定版になているが、ありがたいことに6.xのパッケージがNodeSourceから公開されている。

早速レポジトリを追加

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
apt install nodejs

インストール完了 見てみるか

# node -v
v8.10.0

は?????

原因

これ、一見nodesourceのバグかと思うけどnodesource側は何も悪くなくて、利用可能なパッケージを見てみると

# apt-cache madison nodejs
    nodejs | 8.10.0~dfsg-2 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
    nodejs | 6.14.1-1nodesource1 | https://deb.nodesource.com/node_6.x bionic/main amd64 Packages
    nodejs | 8.10.0~dfsg-2 | http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe Sources

とでる。つまりUbuntu的には8.10 > 6.14となり公式レポジトリの8.xが優先されてインストールされてしまった。ということ(至極当然の判断

が、今回はあくまで6系の最新版をインストールしたかった

解決策1

apt install時にバージョンを指定する。今回の場合だと

apt install nodejs=6.14.1-1nodesource1

で6がインストールされる。が、毎回バージョンを確認しないといけないのもダルいし、次にapt upgradeすると結局8がインストールされてしまう。

解決策2

Debian系にはApt-Pinningという機能があって、指定したパッケージのバージョン固定とかインストールの管理ができるようになっている。

今回はこの機能を使って公式が出している側のNodejsレポジトリを無効化した

/etc/apt/preferences.d/nodejs.pref を以下作成

Package: nodejs
Pin: release c=universe
Pin-Priority: -1 

release cコンポーネント名を指定する。c=コンポーネント名で今回無効化したいのは↑一覧よりbionic/universeなのでuniverseと記述

で、apt updateしたのちにapt install nodejs

これで

# node -v
v6.14.1

やったぜ

急性名古屋行きたい病に感染したので行ってきた話

3連休することもなかったので急遽名古屋行ってきた

なぜ名古屋

おいでよ名古屋(@oinagoya)というTwitterアカウントがある。毎回流れてくる画像見てたら行きたくなった 以上

なので今回のお店の探し方はぐるなびでもるるぶでもなく、「from:oinagoya filter:images」でツイート検索して気になったところを巡るやり方にした

1日目

といっても深夜バスに乗って揺られていただけだが

乗り先はバスタ新宿。最近できたばかりってこともあって綺麗

すごいなと思ったのは、自分みたいな方向音痴のバカでも迷わないように乗り場がA~Dのブロックに分かれていたこと。ブロックには色付けもされて予定バスの案内板もあったのは親切。あとブロックからブロックへの通り抜けも禁止されてた(ターミナルに人が出るのを防ぐため

流石にここで遅れたら寒いので、1時間前に到着。フリーWifiでOpenlecのスプラ実況見てた。正直回線は遅い

2日目

高速バス揺られて名古屋到着。ケツが痛い 到着は「ささしまライブ駅」とか言う場所で、名前からずいぶん辺鄙な場所だと勝手に思っていたが徒歩で名古屋駅につける近さだった。ごめんなさい

問題は到着が5:30だったこと。バス予約したときはそんなことすら考えてなかった(

当然どの店のモーニングも空いてなかったので近くのマックで時間を潰す。バンドリやってた

朝はシャポーブラン サンロード店。名古屋駅の地下にあった。現地にマップがないので分かりづらいが吉野家の近く

https://tabelog.com/aichi/A2301/A230101/23001973/tabelog.com

当然決め手はおいなご氏のレビュー。名古屋で一番オススメのモーニングと言われたら行くしかない。

https://tabelog.com/aichi/A2301/A230101/23001973/dtlrvwlst/B250211544/tabelog.com

なぜなら490円で! 常に4~5種類が並ぶパンやサンドイッチと、ゆで卵が食べ放題なのです!破格です!

美味しかった ゆで卵2つも食べてしまった。。。

唯一氏のレビューと違ったのは開店前から人が並んでいて結構混んでいたこと。自分が食べてる間は待ちが発生するくらいには人気だった。

全くのノープランだったのでなんとなく東山動物園へ行くことにした くっそ広くて色々動物いたのに500円という破格。

名古屋駅から電車で20分位 f:id:thr3a:20180715110930j:plain

すでに動物がいる f:id:thr3a:20180715110932j:plain

着いた くっそあつい f:id:thr3a:20180715105931j:plain

動物園といえばキリンでしょ(謎理論 f:id:thr3a:20180715093447j:plain

熱帯にいるはずのカンガルーもバテている f:id:thr3a:20180715091721j:plain

アシカ?「オゥオゥオゥ」って館内に響き渡るボリュームでずっと鳴いてて面白かった f:id:thr3a:20180715092815j:plain

どうもこの鳥には柵という概念がないらしい f:id:thr3a:20180715092946j:plain

がおー こんなに凶暴なのにちゃんと遊び用のボールが置いてあって所詮お前もネコ科なんだなぁと f:id:thr3a:20180715092021j:plain

サーバルちゃん! が、一番奥にいる。。。 f:id:thr3a:20180715092245j:plain

アライグマ (・(ェ)・) f:id:thr3a:20180715092552j:plain

フェネック 耳を掻いてる瞬間 f:id:thr3a:20180715092654j:plain

確かに広い 植物園もあるんだけど流石に回れなかった(体力的に

おなか空いたのでお昼ご飯 名古屋といえば味噌カツでしょ、と短絡的思考のもと、矢場とんというとんかつ屋さんへ 

美味しかった(こなみ あと店員さんの雰囲気が活気あふれててよかった

f:id:thr3a:20180715114337j:plain

おいなご氏はわらじとんかつ食べてた。これ食べたかったけどこのあとの食べ歩きのために胃を温存

で時間はあまりに余ってるので次は大須商店街で適当に散策 イオシスじゃんぱらアニメイト秋葉原感あった

喉も乾いたので唐揚げとタピオカのココナッツ味 人気店ということもってか、注文からかなり待たされたが唐揚げ美味しかったので許した 辛さは4段階で選べる

f:id:thr3a:20180715135024j:plain

当然おいなご氏が行ってないはずもなく

で、15時まわったのでチェックイン 泊まったのはここ

ホステル わさび名古屋駅前 / HOSTEL WASABI Nagoya Ekimae

レビューとかは名古屋の安いゲストハウスわさびに泊まってみた【1泊2200円】シャワー有の格安素泊まり宿!口コミレビュー - 豊かですよ!に任せる。てか自分がこのサイト見て決めたんだし(

ただ、リンク先で「寝床同士の壁が薄い」と書かれてるけど、男性専用の3Fではそんなふうに感じなかった。多分階で設備が違うんだと思う フリーWifiYoutube見れるくらいには速かった。

名古屋の番組表。まず1チャンネルがNHKじゃないし全放送局知らないんだが。。

f:id:thr3a:20180716074327j:plain

夜は名古屋駅の地下街にあたるエスカ街とオアシス21を散策してた。ちゃんと手羽先も食えたしみっしょんくりあ

オアシス21の屋根は予想より大きかった。 f:id:thr3a:20180715193355j:plain

下から見た図

f:id:thr3a:20180715194809j:plain

イルミネーションやるとのことだったので待機。が、肝心の画像は時間つぶしにバンドリやってたら始まってしまったのでなし(綺麗だった

オアシス21の存在もこのツイートで知る

3日目

あとは帰るだけなので特にない 朝食はデニーズのセレクトセット?ってやつ 目玉焼きをトーストに乗せて食べた あれで600円はうまい コーヒー飲み放題だし

帰りはスーパーライナー60号 名古屋→東京の高速バス 予約ギリギリだったしここしか空いてなかったってのもあるんだけど、ちょくちょく停留所で止まるから落ち着いて寝れない。次高速バス選ぶときは直行かどうか見てえらぶようにする

まとめ

初名古屋だったけど行ったかいがあった。次は計画性を持って予定を立てたい

行ってもないのに買ってしまった名古屋城&しゃちほこ

f:id:thr3a:20180716204431j:plain

 おわり

Ziproxyで画像を圧縮するプロキシを構築して格安SIMでも快適になりたい

なりたい(願望

すごい結果から言うと、ziproxyは古参プロキシなのでhttpsの画像圧縮に対応できてない よってhttps当たり前の今日の環境ではあまり意味がない

環境

インストール

apt install ziproxy

設定

mkdir -p /var/log/ziproxy
chown ziproxy:ziproxy /var/log/ziproxy
--- ziproxy.conf_orig    2018-07-14 20:26:59.956647988 +0900
+++ ziproxy.conf  2018-07-14 20:41:52.692669599 +0900
@@ -6,13 +6,13 @@
 
 ## Port to listen for proxy connections
 ## default: 8080
-# Port = 8080
+Port = 10722
 
 ## Local address to listen for proxy connections
 ## If you have more than one network interface,
 ## it's useful for restricting to which interface you want to bind to.
 ## By default Ziproxy binds to all interfaces.
-Address = "127.0.0.1"
+#Address = "0.0.0.0"
 
 ## Accepts conections only from that address.
 ## WARNING: Remember to restrict the access to Ziproxy
@@ -209,7 +209,7 @@
 ##          ziproxy will fail and no error will be displayed on the console.
 ##
 ## Default: undefined (dumps to stderr).
-# ErrorLog = "/var/log/ziproxy/error.log"
+ErrorLog = "/var/log/ziproxy/error.log"
 
 ## File to be used as access log.
 ## If undefined, there will be no access logging at all.
@@ -241,7 +241,7 @@
 ## 5 (SIGSYS received)
 ## X (SIGTERM received - also happens when interrupting the daemon while transferring)
 ## Disabled by default.
-# AccessLog = "/var/log/ziproxy/access.log"
+AccessLog = "/var/log/ziproxy/access.log"
 
 ## When enabled, Ziproxy will intercept signals indicative of
 ## software crash, flag the offending request in access log
@@ -342,7 +342,7 @@
 ## to reroute the connections from x.x.x.x:80 to ziproxy.host:PROXY_PORT
 ## Disabled by default.
 ## See also: RestrictOutPortHTTP
-# TransparentProxy = false
+TransparentProxy = true
 
 ## Whether to process normal proxy requests or not
 ## Only makes sense when TransparentProxy is enabled.
@@ -361,7 +361,7 @@
 ## abuse of the service.
 ## Enabled by default.
 ## See also: RestrictOutPortCONNECT
-# AllowMethodCONNECT = true
+AllowMethodCONNECT = true
 
 ## If defined, restricts the outgoing connections (except CONNECT methods - used by HTTPS)
 ## to the listed destination ports.
@@ -516,7 +516,7 @@
 ##   Gzip compression (and only that) will be applied while streaming.
 ## Default: 1048576 (bytes)
 ##   (default used to be "0" in ziproxy 2.3.0 and earlier)
-# MaxSize = 1048576
+MaxSize = 0
 
 UseContentLength = false
 
@@ -595,9 +595,9 @@
 ## Whether to try to (re)compress incoming data originally in
 ## the following formats (true) or not (false)
 ## default: true
-# ProcessJPG = true
-# ProcessPNG = true
-# ProcessGIF = true
+ProcessJPG = true
+ProcessPNG = true
+ProcessGIF = true
 
 ## Whether to try to optimize HTML, CSS and Javascript, thus reducing their size
 ## ProcessHTML: text/html
@@ -645,7 +645,7 @@
 ## Note: Not all images sent will be in grayscale, only the ones
 ##       considered worth recompression that way.
 ## Disabled by default.
-# ConvertToGrayscale = false
+ConvertToGrayscale = true
 
 ## Preemptive Name Resolution
 ## If enabled, tries to resolve hostnames present in the processed HTML files
@@ -817,7 +817,7 @@
 ## If "ForceOutputNoJP2 = true", this option will be overrided
 ## and stay disabled.
 ## default: false
-# ProcessToJP2 = false
+# ProcessToJP2 = true
 
 ## When enabled, this option forces the conversion of all incoming
 ## JP2K images to another format (usually JPEG).
@@ -859,7 +859,7 @@
 ## Thus, prior to compression, the image is analysed in order to know which rate
 ## (loosely) reflects the quality had this picture be compressed using jpeg.
 ## This option obsoletes "JP2Rate".
-# JP2ImageQuality = {20,15,15,15}
+JP2ImageQuality = {20,15,15,15}

参考リンク

ディスクが壊れてGive root password for maintenanceで起動しない

環境

症状

ディスクが逝った。Linuxたんは賢いので、故障を検知すると自動でRead Onlyになる。

今回逝ったディスクはrootディスクじゃない別のデータ用ディスク。だからそのディスクだけ交換して再起動すればめでたしめでたし、かと思ったらそもそも起動しなくなった。なんと

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D to continue):

は??????rootディスクは逝ってないんだから普通に起動させてくれよ ここでCtrl+Dを押すと再起動してしまう

仕方ないので/etc/fstabで問題のディスクを編集して保存、できなかった。CentOSのやつ、全ディスクをReadOnlyにしやがる。当然rootディスクもReadOnlyのためfstabの保存ができない。

ググったら再マウントすればいいとのこと。

  • rootパスワードを入力してシェル画面へ
  • mount -o remount,rw / で再マウント
  • vim /etc/fstabで問題のディスクをコメントアウト
  • rebootで再起動

これで起動した。やれやれ

参考リンク

Rubyで配列Aの中に配列Bの値が含まれているかを確認する

1行なので解説も何もないが

rubyでは[1, 2, 3].include?(3)のようにすると配列の中に特定の値が含まれているかを一発でチェックできるが、確認したい値が複数ある場合はその都度include?を実行しなければならなくて面倒

だけど

> (%w"1 2 3 4" & %w"2 3").any?
=> true

のように&(論理積演算子)を使うと一発で行ける。

当然だが含まれていない場合はfalse

>  (%w"1 2 3 4" & %w"0 5").any?
=> false