Skip to content

Instantly share code, notes, and snippets.

@mamemomonga
Last active April 6, 2022 03:04
Show Gist options
  • Select an option

  • Save mamemomonga/f931e1c23a3e1c27a5a3ba89e92c1ab4 to your computer and use it in GitHub Desktop.

Select an option

Save mamemomonga/f931e1c23a3e1c27a5a3ba89e92c1ab4 to your computer and use it in GitHub Desktop.
hdiutilを簡単に使うためのスクリプトです

diskimage-creator.pl

hdiutilを簡単に使うためのスクリプトです。macOSでディスクイメージを作るのに便利です。

セットアップ

$ curl -Lo ./diskimage-creator https://gist.githubusercontent.com/mamemomonga/f931e1c23a3e1c27a5a3ba89e92c1ab4/raw/diskimage-creator.pl
$ chmod 755 ./diskimage-creator

使い方

ヘルプ

$ ./diskimage-creator

書込可能イメージ

max sizeはディスクイメージサイズです。20GBならば 20gb と書きます。

単一イメージファイル 可変サイズ

$ ./diskimage-creator sparse [max size] [ボリューム名] [ファイル名(省略可)]

単一イメージファイル 可変サイズ AES-128 暗号化

$ ./diskimage-creator sparse aes [max size] [ボリューム名] [ファイル名(省略可)]

分割イメージファイル 可変サイズ

$ ./diskimage-creator bundle [max size] [ボリューム名] [ファイル名(省略可)]

分割イメージファイル 可変サイズ AES-128 暗号化

$ ./diskimage-creator bundle aes [max size] [ボリューム名] [ファイル名(省略可)]

読込専用イメージ

読込専用 固定サイズ LZFSE圧縮

$ ./diskimage-creator lzfse [ソースフォルダ] [ボリューム名] [ファイル名(省略可)]

読込専用 固定サイズ LZFSE圧縮 AES-128 暗号化

$ ./diskimage-creator lzfse aes [ソースフォルダ] [ボリューム名] [ファイル名(省略可)] 
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
sub help {
my $text=<< 'EOS';
----------------------
書込可能イメージ
----------------------
単一イメージファイル 可変サイズ
$ ##EXEC## sparse [max size] [ボリューム名] [ファイル名(省略可)]
単一イメージファイル 可変サイズ AES-128 暗号化
$ ##EXEC## sparse aes [max size] [ボリューム名] [ファイル名(省略可)]
分割イメージファイル 可変サイズ
$ ##EXEC## bundle [max size] [ボリューム名] [ファイル名(省略可)]
分割イメージファイル 可変サイズ AES-128 暗号化
$ ##EXEC## bundle aes [max size] [ボリューム名] [ファイル名(省略可)]
----------------------
読込専用イメージ
----------------------
読込専用 固定サイズ LZFSE圧縮
$ ##EXEC## lzfse [ソースフォルダ] [ボリューム名] [ファイル名(省略可)]
読込専用 固定サイズ LZFSE圧縮 AES-128 暗号化
$ ##EXEC## lzfse aes [ソースフォルダ] [ボリューム名] [ファイル名(省略可)]
EOS
$text=~s!##EXEC##!$0!mg;
say $text;
exit(1);
}
my @args=@ARGV;
my %cfg=();
# mode
{
help() if(scalar(@args) == 0);
my $cmd=shift(@args);
if( $cmd eq 'sparse') {
$cfg{mode} = 'rw';
$cfg{type} = "SPARSE";
shift
} elsif ($cmd eq 'bundle') {
$cfg{mode} = 'rw';
$cfg{type} = "SPARSEBUNDLE";
} elsif ($cmd eq 'lzfse') {
$cfg{mode} = 'ro';
$cfg{format} = "ULFO";
} else {
help();
}
}
# aes
{
$cfg{aes}=[];
help() if(scalar(@args) == 0);
if($args[0] eq 'aes') {
shift(@args);
$cfg{aes}=['-encryption','AES-128','-stdinpass'];
}
}
# rw: size
if($cfg{mode} eq 'rw') {
help() if(scalar(@args) == 0);
$cfg{size} = shift(@args);
# ro: srcfolder
} elsif($cfg{mode} eq 'ro') {
help() if(scalar(@args) == 0);
$cfg{srcfolder} = shift(@args);
}
# volname
help() if(scalar(@args) == 0);
$cfg{volname} = shift(@args);
# filename
if(scalar(@args) == 0) {
$cfg{filename}=$cfg{volname};
} else {
$cfg{filename}=shift(@args);
}
my @cmds;
# rw
if($cfg{mode} eq 'rw') {
@cmds=(
'hdiutil', 'create',
'-type', $cfg{type},
'-fs', 'JHFS+',
@{$cfg{aes}},
'-size',$cfg{size},
'-volname', $cfg{volname},
$cfg{filename}
);
# ro
} elsif($cfg{mode} eq 'ro') {
@cmds=(
'hdiutil', 'create',
'-format', $cfg{format},
'-fs', 'HFS+',
@{$cfg{aes}},
'-srcfolder',$cfg{srcfolder},
'-volname', $cfg{volname},
$cfg{filename}
);
}
say join(" ",@cmds);
exec(@cmds);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment