2020年8月23日 (日)

Mac+外付けHDDにUbuntu 20.04をインストール (HFS+ ESP編)[追記]

Intel Mac 上で外付け HDD に Ubuntu 20.04 をインストールして、外付けHDD 内のブートローダーから起動できるようにするための覚え書き。

注意:Intel Mac とは、2006年?以後2020年現在まで発売されている Macintosh コンピューターのこと。かつて販売されていた PPC Mac や 2021年以降に発売が噂される ARM Mac(Apple Silicon 搭載 Mac)は本項では扱わない。

通常のやり方で外付け HDD に Ubuntu をインストールすると、ブートローダー GRUB が内蔵 SSD の EFI パーティションにインストールされてしまう。そうなると、Mac に Boot Camp を用いて Windows をインストールしてある場合、Windows が起動できなくなる恐れがある。

幸いなことに Intel Mac には、内臓であれ外付けであれ、一定の条件を満たしてさえいればどの HFS+ パーティションからでも OS を起動させることができるという特性がある。その特性を利用すれば、内蔵ドライブに全く影響を与えることなく外付け HDD のみで Linux を起動することが可能である。その外付け HDD を別の Intel Mac に接続して Linux を起動するという芸当もできる。

同じ Linux でも Fedora のほうはかなり早い段階から標準でそのようなインストールできるようになっており、当ブログでもその方法を説明している。

一方、Ubuntu はそのようにはなっていないため、工夫が必要である。

そのやり方については、こちらのサイト などでも説明されているが、コマンドラインを多用している。当ブログでは、できるだけ簡単に、GUI アプリを活用しつつ、設定を行いたいと思っている。

» 続きを読む

2020年8月18日 (火)

最近のWindows 10 ISOをmacOS上でUSBメモリに書き込む

Windows 10 インストール iso ファイルをダウンロードして、それを macOS 上で USB メモリに書き込む方法は、多数のサイトで説明されている。

すなわち、FAT / MBR でフォーマットした USB メモリに、Unetbootin というツールで iso を書き込むというものである。

(余談だが、一部サイトでは dd コマンドで書き込む方法を紹介しているが、現在は仕様が変わって、その方法ではできなくなっている)

だが、筆者が試した限りでは、Win10_1909_Japanese_x64.iso を書き込もうとしても、途中で止まってしまい、しかも警告も出ず、何時間経っても終わらないという事態が起こる。

調べたところ、Win10_1909_Japanese_x64 内には 4GB を超える大きさのファイルが1つあり、それが「FAT ボリュームには 4GB 超のファイルは書き込めない」という制限に抵触しているために起こるようだ。

そこで、USB メモリを macOS 上で(Disk Utility app を使って)敢えて exFAT でフォーマットして、Unetbootin で iso を書き込んでみたところ、書き込みは正常に終了し、またその USB メモリから Windows 10 インストールプログラムを正常に起動できることを確認した。

USB メモリをフォーマットする際、パーティションテーブルは MBR でも GUID でもどちらであっても書き込み/起動できることを確認している。

※但し、実際にインストールしてみたわけではない。もしこの方法で作成した USB メモリからのインストールは失敗したという方がいらっしゃいましたら、コメント欄で報告していただければありがたいです。

※なお、サイトからブラウザで直接ダウンロードした iso ではなく、Windows 上であらかじめ Media Creation Tool を使ってダウンロード/作成した iso は、現在のところ 4GB を超えるファイルを含んでいないので、FAT / MBR の USB メモリに書き込むことは可能(将来に渡って可能かどうかはわからない)。Media Creation Tool は このウェブページ を Windows で表示して「ツールを今すぐダウンロード」をクリックすればダウンロードできる。

※現在のところ、Unetbootin は macOS Big Sur Beta には対応していない(起動しようとするとハングする)。対応が待たれる

2020年4月30日 (木)

Aleph One JPをMacでプレイする(Catalina版)

Aleph One についての詳しい説明は省略するが、早く言えばフリーの 3D FPS (一人称シューティングゲーム) の実行環境である。プレイするには別途シナリオファイルが必要で、長年にわたり多くのシナリオが作成されている。

marathon-infinity
(クリックして拡大)
(プレイ中のシナリオは Marathon Infinity。写っているのはその最終ステージ)

幸いなことに、日本語版も開発されており、有志達の手により日本語化されたシナリオもいくつか配布されていて、英語が苦手な人でも楽しめる環境が整っている。

本項で扱うのはその Mac 版である。Mac 版の実行ファイルは更新が長い間止まっていたが、どうやら2019年から更新が再開されたようだ。

筆者が試した限りでは、記事執筆時点の最新版 AlephOneJP-20200404-Mac.dmg が macOS Catalina (10.15.4) 上で問題なく動作する (APFS でフォーマットされたドライブ上でも可能)。

ただ、配布サイトのニュースリリースに書かれている通り、実行プログラム単体では動作せず、boost というライブラリーをシステムにインストールしなければならない。

ニュースリリースには brew から boost をインストールせよと書かれている。しかし、ゲームをするためだけに Homebrew をわざわざ導入するのは好ましくない (筆者は個人的に、少なくともメインの Mac はできるだけ「Unix 的な使い方をしない」という方針を取っているので)。

そこで、サブマシンに Homebrew を導入して boost をインストールし (その詳細は Homebrew のサイトをご覧ください)、そこから必要なファイルのみを取り出すことにした。

必要なのは /usr/local/Cellar/boost/1.72.0_2/lib/libboost_system.dylib である (なお「1.72.0_2」の部分はバージョン名と思われるので、今後のアップデートで変化することが予想される)。

このファイルをメインマシンに移し、/usr/local/lib フォルダにコピーする。それだけでメインマシンで Aleph One JP の起動が可能になる。

サブマシンなど所有していないし、内蔵ドライブに余裕もないという場合、一旦 Homebrew を導入して libboost_system.dylib だけを取り出し、その上で Homebrew をアンインストールするという方法もある (ただこの場合、Apple 純正の Xcode Command Line Tools がインストールされてしまい、アンインストールは不可能なので、ご注意ください)。

なお、libboost_system.dylib をここで配布しようかとも思ったが、ライセンス上そのようなことが許されるのかどうかわからないので、断念した次第。わかればいつか配布するかもしれない。

2018年2月15日 (木)

JavaScript for Automation (JXA)でファイルをFTPアップロード

JXA でも Apple Script 同様、doShellScript 内で curl コマンドを用いてファイルを FTP サーバーにアップローすることはできる。

 app = Application.currentApplication();
 app.includeStandardAdditions = true;
 var localFilePath = "/Users/xxxxx/foo/bar.txt";
 var ftpUser = "xxxxx";
 var ftpPassWord = "papapass";
 var upPath = "ftp://ftp.hogehoge.hog/usr/xxxxx/hoge";
 
 app.doShellScript("curl -T '"+localFilePath.replace(/\'/g, "'\\''")+"' -u "+ftpUser+":"+ftpPassWord+" '"+upPath.replace(/\'/g, "'\''")+"'");

ローカルファイルやアップロードパスに絶対にスペースやクォーテーションマーク(ダブル、シングルとも)が含まれない自信があるなら、パスをクォーテーションで囲んだり、エスケープせずに以下のように書くこともできる。

 app.doShellScript("curl -T "+localFilePath+" -u "+ftpUser+":"+ftpPassWord+" "+upPath);

いずれにしても、これでは FTP パスワードがスクリプト内にむき出しになってしまうので、スクリプト実行時にキーチェーンからパスワードを取り出すことにする。

» 続きを読む

JavaScript for Automation (JXA)でUTF-8テキストの読み書き

Apple Script 同様、JXA でも本来の機能を用いてテキストを開いて読み書きすることはできる。

app = Application.currentApplication();
app.includeStandardAdditions = true;
app.openForAccess(item_1);
var text_content = app.read(item_1, {as:"text"});
app.closeAccess(item_1);

しかしこれでは、文字コードが MacOS(Shift JIS の Mac 独自仕様)になり、改行コードも CR に変わってしまうため、筆者のように外国語と日本語が混じった文章を書く人間にとっては実用的ではない。

そのため、unicode テキストを扱うには JXA でもやはり doShellScirpt 頼みということになる。

» 続きを読む

JavaScript for Automation (JXA)でフォルダアクション

フォルダアクションスクリプトを JXA で書こうとしたがうまくいかない。

function addingFolderItemsTo(this_folder, {afterReceiving:added_items}) {
	//
}

というメソッドが実装されているはずなのだが、うまく動作しない。

ただ、上記のメソッドを記述しなくても

var finder = Application('Finder')
finder.includeStandardAdditions = true
var added_items = finder.selection()

のようなスクリプトを単にフォルダアクションとして登録するだけで、一応動作はするのだが、それだとそのフォルダから項目を取り除いた場合や、フォルダウィンドウを開いたり閉じたりしただけでも処理が行われてしまうので、実用的ではない。

そこで、Automator を介してフォルダアクションを動作させるという方法を試みた。

» 続きを読む

JavaScript for Automation (JXA)で色々やってみる

故あって、普段よく使っている Apple Script を数件、JavaScript for Automation (JXA) に移植した。

その際、メモしておいたヒントなどをいくつかここに書き留めておく。

» 続きを読む

«[旧]Aleph One JPをMacでプレイする

無料ブログはココログ