動かざることバグの如し

殿、温めておいたバグがこちらでございます

dockerでWineをインストールするときにライセンス確認画面から進めない問題

環境

症状

ubuntuのイメージを使ってdockerをbuildする。

RUN apt-get update
RUN apt-get install wine1.6 xvfb -y

みたいにwineインストールしようとすると、

(略)
If you acquired this product in the United States, this EULA is governed by the
laws of the State of Washington.

If this product was acquired outside the United States, then local laws may
apply.

Should you have any questions concerning this EULA, or if you desire to contact
Microsoft for any reason, please contact the Microsoft subsidiary serving your
country, or write: Microsoft Sales Information Center/One Microsoft
Way/Redmond, WA 98052-6399.

Reference: http://www.microsoft.com/typography/fontpack/eula.htm

In order to install this package, you must accept the license terms, the
"TrueType core fonts for the Web EULA ". Not accepting will cancel the
installation.

Do you accept the EULA license terms? [yes/no]

のようなゴミみたいな確認画面が出てきてウザい。しかもyes入力しても進まないし。。。-yでも意味なし。。。

解決策

実は上記のライセンス画面を出している原因のレポジトリは直接のwineではなくttf-mscorefonts-installerというもの

ってことで

RUN echo "yes" | apt-get install ttf-mscorefonts-installer -y

でyesをパイプでつなぐことでスキップできる

なので2行に分かれてしまうけど、まぁしゃーない

RUN echo "yes" | apt-get install ttf-mscorefonts-installer -y
RUN apt-get install wine1.6 xvfb -y

参考リンク

シェルスクリプトからrbenv上のrubyを実行したい

環境

  • rbenv

通常rbenvは/etc/profile.dか~/.bashrcなどの読み込み時にロードされる。 が、シェルスクリプトからだとロードされないのでrbenvが無い環境扱いになってしまう。

ので、以下のように明示的にrbenvを読み込ませる必要がある。

#!/bin/bash

export PATH="/usr/local/rbenv/bin:$PATH"
eval "$(rbenv init -)"
rbenv shell 2.4.0
echo ruby -v

これで

ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

とか表示されればおk

Linuxでパーミッション情報やシンボリックリンクを維持したままコピーしたい

特定のディレクトリをバックアップしたいとき、cp -r target destすればもちろんコピーできるが、とっても大切なデータの場合慎重になる。

というのもcpコマンドではパーミッションまで保持してくれないからである。

-aオプションをつけると属性を引き継いだままコピーできるが、うまくいかないケースも稀にある。

そんなときはcpではなくtarを使うと吉

tar cfp - target_dir | tar xfp - -C /tmp/

オプションの意味だが、

  • c createの意味 作成モード
  • f fileの意味 デフォルトだとテープとかいう謎なのでファイルモードに -p permissionの意味 今回のキモオプション パーミッションを保持する

  • x 解凍モード

  • f 同じくファイルモード
  • p 同じくパーミッションを保持
  • C 指定したディレクトリへ解凍

例えば以下のようなworkディレクトリを/root/workへまるごとバックアップしたい時がある

# ll work/
total 4
-rw-rw-r-- 1 nginx   nginx      0 Aug 30 14:36 aaa
drwxrwxr-x 2 vagrant vagrant 4096 Aug 30 14:36 bbb

# ll work/bbb/
total 0
-rw-rw-r-- 1 root root 0 Aug 30 14:36 cccc

tarで実行

tar cfp - work | tar xfp - -C /root

ちゃんとパーミッションが引き継がれている。

# ll /root/work/
total 4
-rw-rw-r-- 1 nginx   nginx      0 Aug 30 14:36 aaa
drwxrwxr-x 2 vagrant vagrant 4096 Aug 30 14:36 bbb

# ll /root/work/bbb/
total 0
-rw-rw-r-- 1 root root 0 Aug 30 14:36 cccc

参考リンク

Capistrano3のデフォルトのデプロイタスクをoverrideする方法

環境

やりたいこと

Capistranoにはデフォルトでdeploy: やgit:でたくさんのタスクが用意されていて、cap production deployでいろんなタスクが実行されるが、一部のタスクをオレオレにカスタマイズしたかった

方法

公式サイトにトピックがあった

deploy.rbの任意の場所で以下

Rake::Task["deploy:log_revision"].clear_actions

これでタスクの中が空になる

で、以下のように再定義してあげると定義したタスクが同じタイミングで実行される やったね

namespace :deploy do
  
  task :log_revision do |t|
    on roles(:all) do |s|
      info "yeahhhhhhhhhhhhhhhh"
    end
  end
end

SSL証明書エラーのテストに使える badssl.com が便利

SSL証明書絡みのエラーは厄介である。が、その状況を再現するのって結構難しかったりする。

そんなときはbadssl.comが便利

期限切れの証明書

https://expired.badssl.com/

このサーバーが expired.badssl.com であることを確認できませんでした。セキュリティ証明書の有効期限が 1,254 日前に切れています。原因として、設定が不適切であるか、悪意のあるユーザーが接続を妨害していることが考えられます。パソコンの時計は現在 2018年9月17日月曜日に設定されています。この時刻が正しくない場合は、システムの時計を修正した後このページを更新してください。

ホスト名が不一致

https://wrong.host.badssl.com/

このサーバーが wrong.host.badssl.com であることを確認できませんでした。このサーバーのセキュリティ証明書は *.badssl.com から発行されています。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。

オレオレ証明書

https://self-signed.badssl.com/

このサーバーが self-signed.badssl.com であることを確認できませんでした。このサーバーのセキュリティ証明書は、ご使用のパソコンのオペレーティング システムによって信頼されているものではありません。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。

他にも見慣れないエラーが沢山あって驚き