デュアルブートにしたSurfaceの9時間ズレを修正する

無事UbuntuとWin10のデュアルブートにしたんですけど、なんか起動後9時間ずれてるんです。どういうこと。 なおしてもOS別の動かしてから戻ってくると、またズレてる。

原因

UbuntuとWin10でシステムクロックの解釈がUTCとLocalTimeで異なるのだそうです。 UbuntuUTC

対処

これコマンドで打つだけ!

sudo timedatectl set-local-rtc true

kurokawanushi.hatenablog.com

raspberry Pi ではじめからSSH接続設定してモニタいらず

raspberry Pi に入れてるOS、raspbianって OSインストール直後だとSSH接続できないんです。
OS入れたあと、またはOS入れるために、 モニタ&キーボード&マウスなどなど付けて、GUIからSSH許容しなきゃならいんです。

本体こんなにちっさいのに!
いきなりSSHで接続して、コンパクトにはじめたいんですよ僕は。
モニタ置く場所ないし。
ミッションスタートですわ!

ちなみに調べればこの情報に限らず、先人が同様のことを書いておられるわけだが、あえて今更記事にするのは、
「今この段階でも使えるよこの方法」と言いたいから。

概要

raspberryPiに入れたraspbianに、モニタ接続せずに いきなりSSHでリモート操作したい。

方法

  1. raspbian のイメージを落とす(NOOBSじゃない方)
  2. SDカードをフォーマットして、更にイメージを書き込む
  3. OSを書き込んだSDカードのroot直下に、sshって空っぽのファイルを置く。 f:id:kurokawanushi:20190306212551j:plain:w300
  4. LANケーブルと電源ケーブルつないで起動
  5. netEnumとかで、起動したラズパイのIPを調べる
  6. SSHクライアントで接続する。

これだけ。これだけでデフォでSSH接続できるようになってます。 ね?簡単でしょう?

NOOBSでOS入れたときも使える。

ちなみにNOOBSを使う場合でも、SDカードにNOOBSのファイルを書き込んだあとに、ディスクのルート直下に ssh っていう空っぽのファイルを置くと、raspbian起動後にデフォルトでSSH接続できます。 でもNOOBSはインストール時にモニタが必要だから、いきなりSSH接続する意味がないのです。モニタつないじゃったんなら、そのままGUISSH許容設定すればいいんじゃないかしら?

Surface Pro 6 をUbuntuデュアルブートにする

概要

発売日に手に入れたSurfacePro6、ネットにはまだPro6の事例はなかったが、Ubuntuデュアルブートにしようとしたチャレンジングスピリットあふれる去年のぼくの記録


Linuxを普段遣いにしたかったので、SurfacePro6が納品された当日、即UbuntuとWindows10のデュアルブートにした。

結論をはじめに

Surface Pro 6 でもUbuntuデュアルブートできる。ちょっとだけ問題もある

Ubuntuカーネル更新をすると、SecureBoot設定が[Microsoft]か[Microsoft & 3rd Party CA]に設定になっていると、Windows起動時にBirLocker回復キーを求められる。
SecureBootを無効にしたくなかったので、ちょくちょくBitLocker回復キーを入力するマンになった。
Microsoftアカウントに関連付けられたBItLocker回復キーを控えておきましょう。
重要です。超重要です。

Surface Pro 6 をUbuntuデュアルブートにする方は、ディスクのイメージバックアップを取った上で、BitLocker回復キーを保管、自己責任でお願いします。

Ubuntuブートローダで起動OSを選べるようになった、輝かしき我がSurfacePro6。やだかっこいい
f:id:kurokawanushi:20190304225817p:plain:w300

懸念点

  1. ネットにある、デュアルブート例でのSurfacePro(第5世代まで)のOSはWindows10 Proとか。これらはBitlocker有効無効の操作ができる。
    SurfacePro6(非企業向け)のOSはWindows10 home であり、bitlockerは操作できない。というかはじめから無効。
    しかしディスクの管理メニューではbitlocker有効と表示されている。どっちが正しいんだ?
    SurfacePro(第5世代以前)の例では、手順に「Bitlockerを無効化する」とあったが、影響がないだろうか。 不安。でもやっちゃうもんね。

作業手順

  1. SSD全体をバックアップしておく。
  2. UbuntuのOSイメージを落とす&USBメモリにbootイメージにする。
  3. SurrfaceのWindowsパーティションを縮小、Ubuntuを入れる領域を確保する。とりあえず256GBモデルなので1/3確保してみる。
  4. 第5世代以前のSurfacePro ではエクスプローラのドライブ右クリック後、コンテキストメニューからBitoLockerを解除する設定画面が出せたが、Pro6はコンテキストメニューにBitlocker設定がない。
  5. セキュアブート設定を変える。Microsoft & 3rd Party CAにする。
  6. Ubuntuインストーラを入れたUSBメディアからOS入れる。
  7. Boot Orderを戻す。Ubuntu を一番上にする

SSDをバックアップする

Clonezillaとか使うといいんじゃないでしょうか。
SSD全体を保存する。 まったく起動できなくなったら、泣いちゃうくらいダメージがでかいぞ。

Ubuntuインストーラのbootメディア作成

https://www.ubuntu.com/download Get Ubuntu する。
Ubuntu Desktop をDL、Rufus でUSBブートメディアを作成する。

Windowsパーティションを縮小、 Ubuntu領域を確保

Windowsマーク -> Windowsシステムツール -> コントロールパネル -> 管理ツール(表示方法:小さいアイコンの場合) -> コンピュータの管理 -> Local Disk (C:) 右クリック -> ボリュームの縮小 -> 縮小後の"Windows"のサイズを入力する。自分はLinuxに80GB確保しました
f:id:kurokawanushi:20190304225246p:plain:w300

UEFIでSecureBootを無効にする。

PC起動時、Surface Pro 6 上面の音量ボタン[+]を押しながら電源を入れる。
UEFIに入って、SecureBootを一旦 None にした。
が、 MIcrosoft & 3rd party CA でもインストールできるそうです。
f:id:kurokawanushi:20190304225431p:plain:w300

UEFI でBootOrderを変える。

USB Storage を一番上にする。
f:id:kurokawanushi:20190304225510j:plain:w300
写真は、全て終了後のブート順序になってます。 この作業をするときはUSB Storageを一番上にした。 自分は謎のブートローダが2番めに入っちゃいました。いらないかも。

OSいれる

作成したUbuntuインストーラUSBメモリで起動! 途中の選択肢では、UbuntuをWindowsBootLoaderとは別に入るほうを選びました。

Boot Order を戻す

再び音量[+]ボタン押しっぱなしで起動、UEFIに入る。 起動順序をUbuntuを一番上にする。 Windows起動時にBitLocker回復キーを求められたら適宜入力する。

あとはもうデュアルブート生活を好きに楽しんでください。

Linuxを普段使いにしてどうだったのか

  1. Webブラウザ使ってAmazonで買い物するくらいだし、何も変化がない。
  2. Google日本語入力の挙動がめっちゃ早い。Windows版のもっさりが一切ない。超反応
  3. Ubuntuカーネル更新後、Windows10を起動するとBitLocker回復キーを求められるのがちょっとだるい。
  4. OSに直入れしたPythonとか環境を更新するのは相変わらず慎重にならざるを得ない。
  5. UEFIでSecureBootが有効になってると、ubuntuにインストールしたvirtualBoxでゲストOSが動かない。VMのホストOSは結局Windowsにしてる。

  6. おれってすげーんだぜ、と根拠のない自信がつく。

その後

  1. ちょくちょくBitLocker回復キーを入力することになりながらも、大きなトラブルもなく平和に使用しています。
  2. UEFIのSecureBoot設定を、一番厳しい[Microsoft]にしてみたが、Ubuntuが普通にうごいでる。BitLocker回復キーも求められない。よくわかんない。
  3. Surface Pro 6をUbuntuデュアルにする人は、くれぐれも自己責任でお願いします

kurokawanushi.hatenablog.com

AnsibleでRaspberryPiの初期設定を自動化する

Raspberry Pi でいくつか動くものを作ったが、途中から初期設定にかける時間がもったいなく感じ始めた。

てか何度も同じコマンド入力してると、「これは中世の単純労働刑?」みたいに感じられてよろしくない。ので、Ansible様にお願いしたのだった。
そんなPlaybookを最近久しぶりに発掘したので、せっかくだから載せます。
時間って大事ですよね。  

前提

  1. ラズパイはmicroSDにOS入れて初回起動までしておく
  2. SSH接続できるようにしておく。起動後にGUI設定でSSHを許容するのでも、raspbianを入れたmicroSDsshってファイル置いてはじめから動くようにしておくのでもいい。
  3. 再起動後、ターゲットノードの起動を待機しているが、 /etc/hosts にターゲットノードのIPアドレスとホスト名を記載しないと、起動を確認できずエラーになる。ので、書く。

/etc/hosts

192.168.101.18 raspberrypi

↑こんなかんじでファイル末尾に追記しとく

Playbookで実行すること

  1. timezone をAsia/Tokyoにする
  2. SDカードのrootを容量にあわせて拡張する
  3. expandを反映するため再起動、再接続をAnsible側で待機する
  4. apt で vim git mlocate を入れる
  5. apt で既存パッケージをまとめて更新する
  6. 再起動をかけたあと、sshが途切れてもAnsibleに待機させる
  7. 最後の再起動は、Ansibleの画面見なくてもraspberry側画面で「ばっちしおわったぜ」的なPRさせて自分が気づきやすくするため。 いらないんじゃないですか?

あとから知ったこと

最近のバージョンのraspbianは、初回起動時に勝手にrootfsをexpandしてくれるみたい。playbookに書いたexpand-rootfs処理いらなかったかも。

playbook

- hosts: all
  gather_facts: no
  become: yes
  tasks:
  - name: raspi-config --expand-rootfs
    command: raspi-config --expand-rootfs

  - name: reboot
    shell: /sbin/reboot
    async: 1
    poll: 0
    ignore_errors: true

  - name: wait ssh down
    local_action: wait_for host={{ inventory_hostname }} port=22 state=stopped

  - name: wait ssh up
    wait_for: host={{ inventory_hostname }} port=22 delay=30
    delegate_to: 127.0.0.1

  - name: set timezone to tokyo
    timezone:
      name: Asia/Tokyo

  - name: apt update
    apt:
      update_cache=yes
  - name: apt dist-upgrade
    apt:
      upgrade=dist
      force=yes
    ignore_errors: true

  - name: apt install vim mlocate git
    apt: name={{item}} state=present
    with_items:
      - vim
      - mlocate
      - git

  - name: reboot
    shell: /sbin/reboot
    async: 1
    poll: 0
    ignore_errors: true

  - name: wait ssh down
    local_action: wait_for host={{ inventory_hostname }} port=22 state=stopped

  - name: wait ssh up
    wait_for: host={{ inventory_hostname }} port=22 delay=30
    delegate_to: 127.0.0.1

Raspberry Pi でノクトビジョン、暗視ゴーグルを作った (1)

子供の頃にSFとかゲームとかアニメとかで見た、暗視ゴーグル。ナイトビジョンとかノクトビジョンとか言われる、軍用・防犯に使われてあるアレをラズパイと赤外線カメラモジュールで作った話。

TRPGの名作、Dungeons and Dragons のエルフとかドワーフは「赤外線視覚」ってスキルを持っていて暗闇でも物が見えるが、アレを人の身で感じたかった。

ラズパイでサイボーグになるのだ俺は。
Call of Duty 4とか劇場版パトレイバーの冒頭にある夜戦ミッション、暗視装置起動して視界がクリアになるとことか、めちゃかっこいいじゃないですか。

 

というわけで作りました。去年。

f:id:kurokawanushi:20190302133554j:plainf:id:kurokawanushi:20190302133501j:plain

「見える!私にも敵の動きが見えるぞ!」

赤外線に照らされた様子がそのままモニタに映るので、街頭のない闇の原野を歩くのも安心。闇が原因でいつのまにかクマに接近されていきなり先手を取られることもない。

サバゲの夜戦でも安心。サバゲやんないですけど。

とりあえず試作した状態のものはこれ。むきだし。動けばいいの。

f:id:kurokawanushi:20190304233129j:plain 

 装備するとめちゃくちゃ目立つので、いかがわしい目的にはとても使えません。

f:id:kurokawanushi:20190304233204j:plain

 あと、闇で撮影すると、赤外線照射器がほんのり赤く光る。魔王かな?

f:id:kurokawanushi:20190304233243j:plain


必要な部品やコードなどは次回以降載せます。

 

つづく

 

 

AnsibleのyumモジュールでGNOME Desktopが入らない件と対処

そういえば以前、Ansible でCentOSを初期設定していたときGNOME Desktopインストール時にエラーがでた。

端末からだと

$ sudo yum groupinstall "GNOME Desktop"

とやるやつ。

Ansibleのplaybookにこんな感じでgroupinstall 指定しても、Ansibleさまは「そんなパッケージないです」的な英語のつれないお返事をするだけ。

  - name:  groupinstall GNOME Desktop
    yum:
      name: "@GNOME Desktop"
      state: present

公式リファレンスをよくみるとGNOMEの前に^が入ってる。^いれるとちゃんとgroupinstallされる。

  - name:  groupinstall GNOME Desktop
    yum:
      name: "@^GNOME Desktop"
      state: present

公式リファレンスはよく読もうね。というおはなし。