feature image

2023年12月3日 | ブログ記事

うっかり`rm -rf ~`したのでOSを入れ直した話

この記事は アドベントカレンダー2023 3日目の記事です。ポストイメージはカメラロールにあったyakudoラーメンです。

TL; DR

tldr

やってしまいました...

ということでOSを入れ直しました(!?) まあそろそろ入れ直したいなとは思っていたので、いいきっかけだということで...

ちなみにことの経緯↓

環境

M1 MacBook Airで、初期OSはmacOS Montereyです(後で効いてくるので書いておきます)。rm前はSonomaでした。

入れ直しの手順

  1. Time Machineでバックアップ
  2. 外付けSSDからmac起動
  3. 本体のディスクからmacOSを削除
  4. SSDのmacからinstall
  5. Apple ID認証
  6. Time Machineから復元
  7. 必要なツールを入れる

以降は各手順の具体的な内容について書きます。

0: OS入れ直しの前に

さっき言及したツイートにもあるとおり途中で止めました。じゃあ何が吹き飛んだのか?ざっくりls -a ~rm中のpermission deniedログで見た感じだと、~/.*がaから順に飛んでたっぽいです。あと何故か~/goがちょっと。~/.asdfは跡形もなかったけど~/.cargoは生きてた、ぐらいの被害状況でした。これはCtrl-Cが早かったおかげですね。

事後の被害確認はこれくらいにしておいて、じゃあ事前に対策しておく手立てはないのか?というのをちょっと調べたところ、trashというコマンドがあるらしいですね。

[macOS]コマンドでファイルを安全に削除する方法 - Qiita
概要rmコマンドだとファイルがゴミ箱に移動されずそのまま削除されてしまうので、操作を間違えると大惨事になる場合があります。ということで今回はコマンドでファイルを安全に削除する方法&ツール2選を紹介…

rmtrashというものも過去には存在したらしいですね。

Macでrmtrashの代替とLinuxでのrmの置き換え - Qiita
rmtrashがHomebrewでインストールできなくなったライセンスが不透明で作者のレスポンスがないのでHomebrewから最近外されたらしい.https://github.com/Homeb…
Linuxでの対処法も書いてあるやつ

ついついrmを使っちゃう人はこれを入れておくと一安心ですね。まあ、私はまだ入れてないんですが...

0.5: OS入れ直しの目的

ただ入れ直すだけじゃ何も変わらないので、OSを入れ直してやりたいことを書いておきます。まず、現状には問題として以下のようなものがあります。

強い思想なのでワンクッション

nyaninjia

https://www.nyan.cat/index.php?cat=nyaninja

いらないソフトが入っている

Sophos, Microsoft Office製品などいらない滅多に使わないソフトが溜まっていました。OS入れ直しでその辺を綺麗さっぱり消し去りたいです。

Homebrewを辞めたい

これはdotfiles関係で感じていた問題です。OSを入れ直す前のdotfilesではBrewfileなどを提供しておらず、READMEを見ながらbrew installを直打ちする以外に環境を再現する方法を提供していませんでした。OS入れ直し後はこの問題を少しでも緩和させたいです。


問題だけではなく、試したいこともあります。

Nixを使いたい

Introduction - Nix Reference Manual

Nixは です。パッケージ構成などをNix言語で記述することができます。Reproducibilityに注力していて、Linux(WSL2含む)とmacOSで使うことができます。これを導入してdotfilesの問題を少しでも解消したいです。

1: Time Machineでバックアップ

え?rm -rf ~しちゃったからいっそのこと全てを吹き飛ばすんじゃないのかって?やだなぁ、そんなことしたら何もできなくなっちゃうじゃないですか。

手頃なSSD | HDDを買ってTime Machineでバックアップを取ります。手順は↓を参照してください。

Time Machine で Mac をバックアップする
USB ドライブやその他の外付けのストレージデバイスがある場合は、Time Machine を使用して、アプリ、音楽、写真、メール、ドキュメントなどのファイルを自動的にバックアップできます。

とは言っても既存の設定・キャッシュとかは引き継ぎたくないので、バックアップ対象を厳選します。

MacでTime Machineバックアップからファイルを除外する
Macで「Time Machine」設定を使用して、Time Machineバックアップからファイルを除外します。

バックアップに残したもの一覧↓

あと、本当に大切なパスワードを~/Documents/.credentials/内に保存しておきました。これはセキュリティ的に大丈夫なのか知りません。無事にTime Machineにバックアップが取れたら次に進みましょう。

2: 外付けSSDからmac起動

ここから先はうろ覚えなのでもしかしたら間違ったことを書いているかもしれません。

環境紹介で紹介した通り、MacBook Airに最初入っていたOSはMontereyでした。その関係かわかりませんが、macOS を再インストールする方法 - Apple サポート (日本)に従って入れようとしてもMontereyが入ると表示されました。確か。Montereyを入れてからSonomaにあげてもいいですが、せっかく入れ直すのにそれは格好悪いと思ったのでSonomaを直接入れたいです。

そのため、元から持っていたmacOS入りの外付けSSDからSonomaをインストールしようとしました。これはそのための下準備です。あと、万が一OSの入れ直しに失敗しても外付けSSDで問題なく起動できることを保証するためでもあります。外付けSSDが認識されている状態で設定の「起動ディスク」をいじって再起動しました。

このSSDはバックアップに使用したものとは別のディスクです。

3: 本体のディスクからmacOSを削除

まずはmacOS復旧を開きます。

macOS復旧の概要
macOS復旧を使用する方法について説明します。

その中のディスクユーティリティからMacintosh HDを選んでOSを消します。確か。

これでMacBook本体には何も入っていない状態になったはずです。この辺でめちゃ不安になってたことだけは覚えてます。まずは一旦、外付けSSDで起動できることを確認しました。

4: SSDのmacからinstall

macOSを外付けSSD/HDDにインストールする方法
こちらの記事は、macOSを外付けHDDにインストールするための完全ガイドです。外付けHDDからMacを起動する方法もご紹介します。

手順自体は↑と同じです。確か。この記事では本体→外付けSSDですが、今回は外付けSSD→本体の向きでやりました。

無事にmacOS Sonomaが入ったら起動しましょう。

5: Apple ID認証

Macを買って最初にやるやつですね。新品ではなく使い慣れたデバイスでやるのはまた違った感覚です。諸々を†いい感じ†に設定しましょう。

起動記念のtraQスクショ

6: Time Machineから復元

バックアップを取ったディスクを繋げて復元します。ここで開くのは移行アシスタントですね。

Mac を復元する - Apple サポート (日本)
バックアップからファイルを復元する方法をご案内します。

7: 必要なツールを入れる

Homebrewを消すと言いましたが、あれは嘘です(おい)。

Nix Home Manager のつまづき石をまとめる ||| Apribase
いわゆる dotfiles とパッケージマネージャーの両方を Nix Home Manager にまとめているのだけれど、いまいちそれ一つで完結するわけではなくて、でもそれは他の管理方法でも同じなのでそれは良いとしても、単純につまづくポイントが多いのでまとめておきます。
理由

Mac 用の GUI アプリがあまりないのだけれど?

諦めろ。なんなら Firefox や Chrome でさえ Mac 用バイナリはない。

とあるので、全てをNixにreplaceするのは無理そうです。諦めてHomebrewはGUIアプリを入れる用途にのみ使うことにします。とりあえずHomebrew自体のインストール↓

# xcode command line toolsがないと何もできないので
xcode-select install
# Homebrewインストールコマンド
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

色々入れます。

アプリ Homebrew Cask
Vivaldi https://formulae.brew.sh/cask/vivaldi
VSCode https://formulae.brew.sh/cask/visual-studio-code
Obsidian https://formulae.brew.sh/cask/obsidian
Discord https://formulae.brew.sh/cask/discord
Slack https://formulae.brew.sh/cask/slack
iTerm2 https://formulae.brew.sh/cask/iterm2
JetBrains Toolbox https://formulae.brew.sh/cask/jetbrains-toolbox
Docker https://formulae.brew.sh/cask/docker

GUIアプリが整ってきたところで、次はNixのインストールです。色々調べましたが、最終的にはZero to Nixで言及されているインストール方法に従いました。あと、Home ManagerStandalone setup with Nix Flakesで入れました。nix-darwinもHome Managerの前に入れましたが、rebuildの度に/etc/bashrcがconflictしてイライラしたので辞めました。

CLIツール、各種言語のインストールはhome-manager switch一発で全てが完了するようにdotfilesを構成したのでここでは割愛します。

ちなみにDockerですが、記事を書いている時点では一度も使ってません。果たして動くのか...

おまけ: GPG鍵のパスフレーズ忘れちゃった...

私はこれまでGPG鍵でcommitに署名していたんですが、それができなくなってしまいました。まあ鍵を作り直せばいいだけの話なんですが、絶対次もパスフレーズを忘れてしまうと思ったので、SSH鍵で署名することにしました。方法はGitHubのドキュメントとかを参考にしました。

Git へ署名キーを伝える - GitHub Docs
ローカル環境でコミットに署名するには、使う GPG、SSH、 または X.509 キーがあることを Git に知らせる必要があります。
コミットに署名する - GitHub Docs
GPG、SSH、S/MIME のいずれかを使って、ローカル環境でコミットに署名できます。

いかがでしたか?

ラーメン食べたくなってきました。もうしばらくOSを消したり入れたりはしたくないです。次はAsahi Linuxを入れてみたいです。

明日の担当は @s9 さんと @botoku_izm さんです。お楽しみに!

H1rono_K icon
この記事を書いた人
H1rono_K

趣味プログラマー(大学生)

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2023年12月11日
DIGI-CON HACKATHON 2023『Mikage』
toshi00 icon toshi00
2023年12月13日
HgameOPについて語る
noc7t icon noc7t
2024年12月11日
Nixで実行環境のライセンス違反を予防する話
comavius icon comavius
2023年12月25日
オレオレRustプロジェクトテンプレート
H1rono_K icon H1rono_K
2023年12月18日
GPU側でレイヤーブレンドする絵描きソフトの同期方法
tq icon tq
2023年12月16日
MacからWindowsを弄る方法?~RDP環境を作ろう~
Alt--er icon Alt--er
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記