動かざることバグの如し

近づきたいよ 君の理想に

Ubuntuにredisをビルドしてインストールする

やりたいこと

apt install redisでRedisサーバーがインストールされるが、特定のバージョンをインストールしたかった

手順

まずはダウンロード

wget http://download.redis.io/redis-stable.tar.gz
tar xzvf redis-stable.tar.gz
cd redis-stable

で、ビルド

make

流れるようにmake install 慎重にやるばあいはmake testするといいかも

# make test
make install

設定は自分で作成する必要がある。テンプレートが解凍したディレクトリ配下にあるので、それを/etc/redis/redis.confにコピー

mkdir /etc/redis
cp redis.conf /etc/redis

/etc/redis/redis.conf を色々以下の通りに変更する。

# supervisedを「systemd」にする
supervised systemd

# dirを「/var/lib/redis」にする
dir /var/lib/redis

systemdのデーモンとして動かしたいので、/etc/systemd/system/redis.service 作成して以下

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

redisユーザーを作成

adduser --system --group --no-create-home redis

ディレクトリ作成

mkdir /var/lib/redis
chown redis:redis /var/lib/redis
mkdir /var/run/redis/ && chown redis: /var/run/redis/
mkdir /var/log/redis/ && chown redis: /var/log/redis/

いざスタート

systemctl start redis

確認

systemctl status redis

Ubuntuでインストール可能なバージョン一覧を表示する方法

環境

apt install では最新のバージョンがインストールされるが、特定のバージョンをインストールしたときとか、インストール前にインストールされるバージョンを確認しておきたいとかある。そのときに使えるメモ

例えばvimをバージョン一覧を表示したいとき

apt policy

aptコマンドが使えれば使える。Version tableにバージョン一覧が表示される。

# apt policy vim
vim:
  Installed: 2:7.4.1689-3ubuntu1.2
  Candidate: 2:7.4.1689-3ubuntu1.3
  Version table:
     2:7.4.1689-3ubuntu1.3 500
        500 http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
 *** 2:7.4.1689-3ubuntu1.2 100
        100 /var/lib/dpkg/status
     2:7.4.1689-3ubuntu1 500
        500 http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

apt listを使う方法

apt listは直感的でもっとシンプルな表示。ただ、デフォルトだと最新バージョンしか表示されないので、すべてのバージョンを表示させたい場合は-aを付ける必要がある。

# apt list vim -a
Listing... Done
vim/xenial-updates,xenial-security 2:7.4.1689-3ubuntu1.3 amd64 [upgradable from: 2:7.4.1689-3ubuntu1.2]
vim/now 2:7.4.1689-3ubuntu1.2 amd64 [installed,upgradable to: 2:7.4.1689-3ubuntu1.3]
vim/xenial 2:7.4.1689-3ubuntu1 amd64

apt-cache policy

Ubuntuの古いバージョン等で、aptコマンドがない場合はapt-cache policyが使える。表示形式としてはapt policyと同じ

# apt-cache policy vim
vim:
  Installed: 2:7.4.1689-3ubuntu1.2
  Candidate: 2:7.4.1689-3ubuntu1.3
  Version table:
     2:7.4.1689-3ubuntu1.3 500
        500 http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
 *** 2:7.4.1689-3ubuntu1.2 100
        100 /var/lib/dpkg/status
     2:7.4.1689-3ubuntu1 500
        500 http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

apt-cache madison

これもバージョン一覧を表示できる。他のコマンド比較して、特にこれを使うメリットはない気がしている(覚えにくいし

root@gux01:~# apt-cache madison vim
       vim | 2:7.4.1689-3ubuntu1.3 | http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
       vim | 2:7.4.1689-3ubuntu1.3 | http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
       vim | 2:7.4.1689-3ubuntu1 | http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
       vim | 2:7.4.1689-3ubuntu1 | http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial/main Sources
       vim | 2:7.4.1689-3ubuntu1.3 | http://asia-northeast1-c.gce.clouds.archive.ubuntu.com/ubuntu xenial-updates/main Sources
       vim | 2:7.4.1689-3ubuntu1.3 | http://security.ubuntu.com/ubuntu xenial-security/main Sources

apt-show-versions

ここまで長々と書いたが、実はバージョン一覧を表示するコマンドがある。が、デフォルトではインストールされていないので、先にインストールする必要がある。

apt install apt-show-versions

以下は例。

# apt-show-versions vim -a
vim:amd64 2:7.4.1689-3ubuntu1.2 install ok installed
vim:amd64 2:7.4.1689-3ubuntu1   xenial          asia-northeast1-c.gce.clouds.archive.ubuntu.com
vim:amd64 2:7.4.1689-3ubuntu1.3 xenial-security security.ubuntu.com
vim:amd64 2:7.4.1689-3ubuntu1.3 xenial-updates  asia-northeast1-c.gce.clouds.archive.ubuntu.com
No stable version
vim:amd64/xenial-security 2:7.4.1689-3ubuntu1.2 upgradeable to 2:7.4.1689-3ubuntu1.3

好きなやつ1つ覚えておけば、何かと使えると思う。

参考リンク

Ubuntuでディスクを完全にフォーマットする

ただのフォーマットでは消せないので、0埋めをする 戻せないので注意

方法

Ubuntuではデフォルトで shredというコマンドがインストールされている。

  • -v 進捗状況を表示する
  • -n (回数) ランダム情報を書き込む回数を指定する(デフォルトは3)
  • -z 最後に0を書き込む

例えば/dev/sdaに対してフォーマットする場合

shred -v -n 3 -z /dev/sda

割と時間かかるので注意

詳細なオプションはman読んだほうがよい

SSHでRaspberry Piの世代を調べるコマンド

発端

Raspberry Piにはいくつかモデルがあるのだが、家にいくつかあってどれがどのバージョンがわからなくなった。

直接目視で確認できない場合でも、SSHで確認できる方法があったのでメモ

コマンド

cat /proc/cpuinfo | grep 'Revision'

以下が実行例 今回だと「a020d3」がリビジョンなのでこれもメモる

$ cat /proc/cpuinfo  | grep Revision
Revision    : a020d3

https://elinux.org/RPi_HardwareHistoryへ行き、さっきのを検索すれば対応するラズパイのモデルがわかる。

今回は「3 Model B+」だった

蛇足

さっきの確認サイトには他にもコマンドが紹介されてた

リビジョンだけ抽出する例 シェルスクリプトで分岐とかしたいならあり

cat /proc/cpuinfo | grep 'Revision' | awk '{print $3}' | sed 's/^1000//'

APIで取得する例もあった 草

rev=$(awk '/^Revision/ { print $3 }' /proc/cpuinfo) && curl -L perturb.org/rpi?rev=$rev

参考リンク

1分でRailsにSidekiqを導入するまでの手順

環境

  • Rails 5.x
    • 6でも同じ 4は知らん
  • ruby 2.x

手順

早速やっていく

ここでは

  • localのRedisサーバーにSidekiqを使う
  • 混合しがちだが、SidekiqのWorkerは使わずRailsのActiveJobでJobを走らせる。

Gemfileに以下を追加

gem "sidekiq"
gem 'redis-namespace'

config/sidekiq.ymlを作成して以下

:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:concurrency: 1
:queues:
  - capture
:retry: false
  • concurrency: 並列数
  • queues: 後述するキュー名 無指定だとdefaultだが混乱の元なので明示するように
  • retry: falseなのはリトライ処理はSidekiq側ではなくActiveJob側で制御したいため

Jobの作成

rails destroy job capture

すると app/jobs/capture_job.rb が作成される

例えば以下に書き換える

class CaptureJob < ApplicationJob
  queue_as :capture

  def perform(id)
    p id
  end
end

config/application.rb にて以下設定

config.active_job.queue_adapter = :sidekiq

最後にSidekiqが接続するRedisを記述 コンフリクトしないようにnamespaceで分けると吉

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://localhost:6379', namespace: "sample_sidekiq" }
end
Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://localhost:6379', namespace: "sample_sidekiq" }
end

実行

bundle exec sidekiq -C config/sidekiq.yml

を実行したあとに

CaptureJob.perform_later(1234)

とかでいける