Skip to content

Commit 05531b4

Browse files
committed
Add comments
1 parent 0f485f2 commit 05531b4

File tree

2 files changed

+64
-71
lines changed

2 files changed

+64
-71
lines changed

nix-yrmcds/flake.lock

-34
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nix-yrmcds/flake.nix

+64-37
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,72 @@
33

44
inputs = {
55
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
6-
flake-utils.url = "github:numtide/flake-utils";
76
};
87

9-
outputs = { nixpkgs, flake-utils, ... }:
10-
flake-utils.lib.eachDefaultSystem (system:
11-
let
12-
pkgs = nixpkgs.legacyPackages.${system};
13-
yrmcds = pkgs.stdenv.mkDerivation {
14-
pname = "yrmcds";
15-
version = "1.1.12";
16-
src = pkgs.fetchFromGitHub {
17-
owner = "cybozu";
18-
repo = "yrmcds";
19-
rev = "v1.1.12";
20-
hash = "sha256-zoQRqun8OFkkOU+4brTXJtbr/kvtPg22r+i2yoSnWD0=";
21-
};
22-
nativeBuildInputs = [ pkgs.gperftools ];
23-
buildPhase = ''
24-
make
25-
'';
26-
installPhase = ''
27-
mkdir -p $out/bin
28-
cp ./yrmcdsd $out/bin/yrmcdsd
29-
'';
30-
meta = {
31-
mainProgram = "yrmcdsd";
32-
description = "A memcached compatible KVS";
33-
license = pkgs.lib.licenses.bsd2;
34-
};
8+
# outputs のスキーマは以下のページが詳しい:
9+
# https://zenn.dev/asa1984/books/nix-hands-on/viewer/ch01-05-flake-outputs
10+
outputs = { nixpkgs, ... }:
11+
let
12+
# とりあえず x86_64-linux のみを対象としてビルドすることにする。
13+
system = "x86_64-linux";
14+
# nixpkgs という全部入りのパッケージリポジトリから x86_64 のパッケージ集合
15+
# だけを抜き出してきて "pkgs" 変数に束縛する(一般的なお作法らしい)。
16+
pkgs = nixpkgs.legacyPackages.${system};
17+
# yrmcds の derivation を定義する。
18+
# pkgs.stdenv はパッケージをビルドするための標準的なパッケージを集めた環境であり、
19+
# coreutils, bash, gcc, make などが入っている。
20+
yrmcds = pkgs.stdenv.mkDerivation {
21+
pname = "yrmcds";
22+
version = "1.1.12";
23+
# ソースコードを GitHub から取得する。
24+
# ビルドを reproducible にするためにハッシュを必ず指定する必要がある。
25+
src = pkgs.fetchFromGitHub {
26+
owner = "cybozu";
27+
repo = "yrmcds";
28+
rev = "v1.1.12";
29+
hash = "sha256-zoQRqun8OFkkOU+4brTXJtbr/kvtPg22r+i2yoSnWD0=";
3530
};
36-
in
37-
{
38-
devShells.default = pkgs.mkShell {
39-
packages = [ pkgs.gperftools ];
31+
# ビルドに必要な入力を定義する。
32+
# 型は list of derivation。
33+
# パッケージ名は https://search.nixos.org/ で調べるとよいらしい。
34+
nativeBuildInputs = [ pkgs.gperftools ];
35+
# ビルドするためのシェルコマンドを定義する。
36+
# このコマンドは上で指定した src を作業ディレクトリとして実行される。
37+
buildPhase = ''
38+
make
39+
'';
40+
# $out という環境変数の指すディレクトリに生成物をコピーするためのコマンドを記述する。
41+
# $out の中身がこのビルドのアウトプットであるとみなされる。
42+
installPhase = ''
43+
mkdir -p $out/bin
44+
cp ./yrmcdsd $out/bin/yrmcdsd
45+
'';
46+
# メタデータ
47+
meta = {
48+
# nix run したときに実行されるファイル名はこれで決まる模様。
49+
mainProgram = "yrmcdsd";
50+
# 説明。longDescription という属性もある。
51+
description = "A memcached compatible KVS";
52+
# ライセンス。一覧は↓を見るとよい。
53+
# https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix
54+
license = pkgs.lib.licenses.bsd2;
4055
};
41-
packages = {
42-
inherit yrmcds;
43-
default = yrmcds;
44-
};
45-
}
46-
);
56+
};
57+
in
58+
{
59+
# 定義した derivation を `packages.<プラットフォーム>.<パッケージ名>` という名前で出力すると
60+
# `nix build <flake-url>#<パッケージ名>` でビルドできるようになる。
61+
# また、 `packages.<プラットフォーム>.default` という名前で出力すると
62+
# `nix build <flake-url>` でビルドできる。
63+
packages.${system} = {
64+
inherit yrmcds;
65+
default = yrmcds;
66+
};
67+
68+
# `nix develop <flake-url>` で起動するシェル。
69+
# これがなくてもビルドには支障ないが、用意しておくとアドホックにコマンドを試せて便利。
70+
devShells.${system}.default = pkgs.mkShell {
71+
packages = [ pkgs.gperftools ];
72+
};
73+
};
4774
}

0 commit comments

Comments
 (0)