File tree 4 files changed +112
-7
lines changed
4 files changed +112
-7
lines changed Original file line number Diff line number Diff line change @@ -93,6 +93,12 @@ variable "target_system" {
93
93
default = " x86_64-linux"
94
94
}
95
95
96
+ variable "hermetic" {
97
+ type = bool
98
+ description = " Treat the provided nixos configuration as a hermetic expression and do not evaluate using the ambient system nixpkgs. Useful if you customize eval-modules or use a pinned nixpkgs."
99
+ default = false
100
+ }
101
+
96
102
# --------------------------------------------------------------------------
97
103
98
104
locals {
@@ -122,7 +128,8 @@ data "external" "nixos-instantiate" {
122
128
var . config_pwd == " " ? " ." : var . config_pwd ,
123
129
# end of positional arguments
124
130
# start of pass-through arguments
125
- " --argstr" , " system" , var . target_system
131
+ " --argstr" , " system" , var . target_system ,
132
+ " --arg" , " hermetic" , var . hermetic
126
133
],
127
134
var. extra_eval_args ,
128
135
)
Original file line number Diff line number Diff line change @@ -8,17 +8,28 @@ config_pwd=$3
8
8
shift 3
9
9
10
10
# Building the command
11
+ nixExpression=<< EOF
12
+
13
+ EOF
14
+
11
15
command=(nix-instantiate --show-trace --expr '
12
- { system, configuration, ... }:
16
+ { system, configuration, hermetic ? false, ... }:
13
17
let
14
- os = import <nixpkgs/nixos> { inherit system configuration; };
15
- inherit (import <nixpkgs/lib>) concatStringsSep;
18
+ os =
19
+ if hermetic
20
+ then import configuration
21
+ else import <nixpkgs/nixos> { inherit system configuration; };
16
22
in {
17
- substituters = concatStringsSep " " os.config.nix.binaryCaches;
18
- trusted-public-keys = concatStringsSep " " os.config.nix.binaryCachePublicKeys;
23
+ inherit (builtins) currentSystem;
24
+
25
+ substituters =
26
+ builtins.concatStringsSep " " os.config.nix.binaryCaches;
27
+
28
+ trusted-public-keys =
29
+ builtins.concatStringsSep " " os.config.nix.binaryCachePublicKeys;
30
+
19
31
drv_path = os.system.drvPath;
20
32
out_path = os.system;
21
- inherit (builtins) currentSystem;
22
33
}' )
23
34
24
35
if readlink --version | grep GNU; then
Original file line number Diff line number Diff line change
1
+ # A simple, hermetic NixOS configuration for an AWS EC2 instance that
2
+ # uses a nixpkgs pinned to a specific Git revision with an integrity
3
+ # hash to ensure that we construct a NixOS system as purely as
4
+ # possible.
5
+ #
6
+ # i.e. we explicitly specify which nixpkgs to use instead of relying
7
+ # on the nixpkgs supplied on the NIX_PATH.
8
+ #
9
+ # The primary benefit of this is that it removes deployment surprises
10
+ # when other developers supply a different nix-channel in the NIX_PATH
11
+ # of their environment (even if you only add the 20.09 channel,
12
+ # nix-channel --update can mutate that channel to a 20.09 with
13
+ # backported changes).
14
+ #
15
+ # The secondary benefit is that you guard the `nixpkgs` you use, with
16
+ # an integrity hash.
17
+ let
18
+ nixpkgs =
19
+ let
20
+ rev = "cd63096d6d887d689543a0b97743d28995bc9bc3" ;
21
+ sha256 = "1wg61h4gndm3vcprdcg7rc4s1v3jkm5xd7lw8r2f67w502y94gcy" ;
22
+ in
23
+ builtins . fetchTarball {
24
+ url = "https://github.com/NixOS/nixpkgs/archive/${ rev } .tar.gz" ;
25
+ inherit sha256 ;
26
+ } ;
27
+
28
+ system = "x86_64-linux" ;
29
+
30
+ configuration = { config , pkgs , ... } : {
31
+ imports = [
32
+ "${ nixpkgs } /nixos/modules/virtualisation/amazon-image.nix"
33
+ ] ;
34
+
35
+ ec2 . hvm = true ;
36
+
37
+ networking . firewall . allowedTCPPorts = [ 22 80 ] ;
38
+
39
+ environment . systemPackages = [
40
+ pkgs . cloud-utils
41
+ ] ;
42
+
43
+ services . nginx = {
44
+ enable = true ;
45
+ virtualHosts = {
46
+ "_" = {
47
+ root = pkgs . writeTextDir "html/index.html" ''
48
+ <html>
49
+ <body>
50
+ <h1>This is a hermetic NixOS configuration!</h1>
51
+ </body>
52
+ </html>
53
+ '' ;
54
+ } ;
55
+ } ;
56
+ } ;
57
+ } ;
58
+
59
+ in
60
+ import "${ nixpkgs } /nixos" { inherit system configuration ; }
Original file line number Diff line number Diff line change
1
+ provider "aws" {
2
+ region = " us-east-1"
3
+ profile = " yourprofile"
4
+ }
5
+
6
+ resource "aws_instance" "hermetic-nixos-system" {
7
+ count = 1
8
+ ami = " ami-068a62d478710462d" # NixOS 20.09 AMI
9
+
10
+ instance_type = " t2.micro"
11
+
12
+ key_name = " yourkeyname"
13
+
14
+ tags = {
15
+ Name = " hermetic-nixos-system-example"
16
+ Description = " An example of a hermetic NixOS system deployed by Terraform"
17
+ }
18
+ }
19
+
20
+ module "deploy_nixos" {
21
+ source = " github.com/awakesecurity/terraform-nixos//deploy_nixos?ref=c4b1ee6d24b54e92fa3439a12bce349a6805bcdd"
22
+ nixos_config = " ${ path . module } /configuration.nix"
23
+ hermetic = true
24
+ target_user = " root"
25
+ target_host = aws_instance. hermetic-nixos-system [0 ]. public_ip
26
+ ssh_private_key_file = pathexpand (" ~/.ssh/yourkeyname.pem" )
27
+ }
You can’t perform that action at this time.
0 commit comments