setup for use with vagrant-nixos
This commit is contained in:
parent
27993a5f78
commit
2339979240
30
README.md
30
README.md
|
@ -1,12 +1,10 @@
|
||||||
OS Image build scripts
|
NixOS Image build scripts
|
||||||
======================
|
=========================
|
||||||
|
|
||||||
Cycle's OS is based on [NixOS](http://nixos.org), a linux distribution with a purely functional
|
[NixOS](http://nixos.org) is a linux distribution with a purely functional
|
||||||
package manager.
|
package manager.
|
||||||
|
|
||||||
These scripts build .box images that can be used by [vagrant](http://vagrantup.com) for development, and other images suitable for production.
|
These scripts build .box images that can be used by [vagrant](http://vagrantup.com) with the [vagrant-nixos](http://github.com/oxdi/vagrant-nixos) plugin for development, and other images suitable for production.
|
||||||
|
|
||||||
See [CycleSDK](https://bitbucket.org/oxdi/cycle-sdk) for the complete development environment (which makes use of the images generated here).
|
|
||||||
|
|
||||||
|
|
||||||
Building the images
|
Building the images
|
||||||
|
@ -22,21 +20,17 @@ packer build template.json
|
||||||
|
|
||||||
The .box image is now ready to go. Install it into Vagrant via:
|
The .box image is now ready to go. Install it into Vagrant via:
|
||||||
|
|
||||||
Updating the public box image
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
`s3put` is handy tool for copying files to Amazon S3, it's part of the [boto](https://github.com/boto/boto) library.
|
|
||||||
|
|
||||||
Install boto:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install boto
|
vagrant box add nixos-14.02-x86_64 nixos-14.02-x86_64-virtualbox.box
|
||||||
```
|
```
|
||||||
|
|
||||||
Push the .box image to S3 via s3put
|
Using the images
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Vagrant does not have a nixos guest plugin by default, so you'll need to install [vagrant-nixos](http://github.com/oxdi/vagrant-nixos).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
s3put -a $AWS_ID -s $AWS_KEY -b oxdi -g public-read --prefix `pwd` cycle-xx.xx-x86_64-virtualbox.box
|
vagrant plugin install vagrant-nixos
|
||||||
|
vagrant init nixos-14.02-x86_64
|
||||||
|
vagrant up
|
||||||
```
|
```
|
||||||
|
|
||||||
The box will then be available at http://amazonaws.com/oxdi/cycle64-virtualbox.box
|
|
||||||
|
|
|
@ -1,26 +1,18 @@
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
#
|
|
||||||
# This file should only be a list of imports managed by whichever provisioner
|
|
||||||
# is building the environment.
|
|
||||||
#
|
|
||||||
# You should not be editing this by hand.
|
|
||||||
#
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./guest.nix
|
./guest.nix
|
||||||
|
./users.nix
|
||||||
./vagrant.nix
|
./vagrant.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# we want our nixpkgs repo to take priority
|
# we always want git and vim
|
||||||
environment.shellInit = ''
|
|
||||||
export NIX_PATH='nixpkgs=/etc/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels/nixos'
|
|
||||||
'';
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
git
|
git
|
||||||
|
vim
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,17 @@
|
||||||
boot.loader.grub.version = 2;
|
boot.loader.grub.version = 2;
|
||||||
boot.loader.grub.device = "/dev/sda";
|
boot.loader.grub.device = "/dev/sda";
|
||||||
|
|
||||||
|
# load missing module (should be fixed by 14.02 propper)
|
||||||
|
boot.kernelModules = [ "vboxsf" ];
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
services.openssh.permitRootLogin = "yes";
|
services.openssh.permitRootLogin = "yes";
|
||||||
users.extraUsers.root.openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" ];
|
users.extraUsers.root.openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" ];
|
||||||
|
|
||||||
|
# Vagrant cannot yet handle udev's new predictable interface names.
|
||||||
|
# Use the old ethX naming system for the moment.
|
||||||
|
# http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
|
||||||
|
networking.usePredictableInterfaceNames = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
37
nixos/users-vagrant.nix
Normal file
37
nixos/users-vagrant.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
#
|
||||||
|
# This file is used by the vagrant-nixos plugin
|
||||||
|
#
|
||||||
|
|
||||||
|
{
|
||||||
|
# Creates a "vagrant" users with password-less sudo access
|
||||||
|
users = {
|
||||||
|
extraGroups = [ { name = "vagrant"; } { name = "vboxsf"; } ];
|
||||||
|
extraUsers = [ {
|
||||||
|
description = "Vagrant User";
|
||||||
|
name = "vagrant";
|
||||||
|
group = "vagrant";
|
||||||
|
extraGroups = [ "users" "vboxsf" "wheel" ];
|
||||||
|
password = "vagrant";
|
||||||
|
home = "/home/vagrant";
|
||||||
|
createHome = true;
|
||||||
|
useDefaultShell = true;
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
||||||
|
];
|
||||||
|
} ];
|
||||||
|
};
|
||||||
|
|
||||||
|
security.sudo.wheelNeedsPassword = false;
|
||||||
|
security.sudo.configFile = ''
|
||||||
|
Defaults:root,%wheel env_keep+=LOCALE_ARCHIVE
|
||||||
|
Defaults:root,%wheel env_keep+=NIX_PATH
|
||||||
|
Defaults:root,%wheel env_keep+=TERMINFO_DIRS
|
||||||
|
Defaults env_keep+=SSH_AUTH_SOCK
|
||||||
|
Defaults lecture = never
|
||||||
|
root ALL=(ALL) SETENV: ALL
|
||||||
|
%wheel ALL=(ALL) NOPASSWD: ALL, SETENV: ALL
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
|
@ -1,39 +1,7 @@
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
#
|
#
|
||||||
# This file configures the OS for use with vagrant by setting up the
|
# This file is used by the vagrant-nixos plugin
|
||||||
# vagrant user, keys etc.
|
|
||||||
#
|
#
|
||||||
|
|
||||||
{
|
{}
|
||||||
|
|
||||||
# Creates a "vagrant" users with password-less sudo access
|
|
||||||
users = {
|
|
||||||
extraGroups = [ { name = "vagrant"; } { name = "vboxsf"; } ];
|
|
||||||
extraUsers = [ {
|
|
||||||
description = "Vagrant User";
|
|
||||||
name = "vagrant";
|
|
||||||
group = "vagrant";
|
|
||||||
extraGroups = [ "users" "vboxsf" "wheel" ];
|
|
||||||
password = "vagrant";
|
|
||||||
home = "/home/vagrant";
|
|
||||||
createHome = true;
|
|
||||||
useDefaultShell = true;
|
|
||||||
openssh.authorizedKeys.keys = [
|
|
||||||
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
|
||||||
];
|
|
||||||
} ];
|
|
||||||
};
|
|
||||||
|
|
||||||
security.sudo.wheelNeedsPassword = false;
|
|
||||||
security.sudo.configFile = ''
|
|
||||||
Defaults:root,%wheel env_keep+=LOCALE_ARCHIVE
|
|
||||||
Defaults:root,%wheel env_keep+=NIX_PATH
|
|
||||||
Defaults:root,%wheel env_keep+=TERMINFO_DIRS
|
|
||||||
Defaults env_keep+=SSH_AUTH_SOCK
|
|
||||||
Defaults lecture = never
|
|
||||||
root ALL=(ALL) SETENV: ALL
|
|
||||||
%wheel ALL=(ALL) NOPASSWD: ALL, SETENV: ALL
|
|
||||||
'';
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# rebuild (which should now use our nixpkgs)
|
# Switch to non ssl channel as there are issues with certs
|
||||||
|
# TODO: fix this propperly by including the root certs.
|
||||||
nix-channel --remove nixos
|
nix-channel --remove nixos
|
||||||
nix-channel --add http://nixos.org/channels/nixos-unstable nixos
|
nix-channel --add http://nixos.org/channels/nixos-unstable nixos
|
||||||
nixos-rebuild switch --upgrade
|
nixos-rebuild switch --upgrade
|
||||||
|
|
|
@ -18,8 +18,9 @@
|
||||||
"nixos-generate-config --root /mnt<enter><wait>",
|
"nixos-generate-config --root /mnt<enter><wait>",
|
||||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/configuration.nix > /mnt/etc/nixos/configuration.nix<enter><wait>",
|
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/configuration.nix > /mnt/etc/nixos/configuration.nix<enter><wait>",
|
||||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/guest-virtualbox.nix > /mnt/etc/nixos/guest.nix<enter><wait>",
|
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/guest-virtualbox.nix > /mnt/etc/nixos/guest.nix<enter><wait>",
|
||||||
|
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/users-vagrant.nix > /mnt/etc/nixos/users.nix<enter><wait>",
|
||||||
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/vagrant.nix > /mnt/etc/nixos/vagrant.nix<enter><wait>",
|
"curl http://{{ .HTTPIP }}:{{ .HTTPPort }}/vagrant.nix > /mnt/etc/nixos/vagrant.nix<enter><wait>",
|
||||||
"nix-env -i git && (cd /mnt/etc/nixos && git clone git://github.com/oxdi/nixpkgs.git) && nixos-install && reboot<enter>"
|
"nixos-install && reboot<enter>"
|
||||||
],
|
],
|
||||||
"guest_additions_mode": "disable",
|
"guest_additions_mode": "disable",
|
||||||
"guest_os_type": "Linux_64",
|
"guest_os_type": "Linux_64",
|
||||||
|
@ -33,7 +34,7 @@
|
||||||
"ssh_wait_timeout": "20m",
|
"ssh_wait_timeout": "20m",
|
||||||
"virtualbox_version_file": ".vbox_version",
|
"virtualbox_version_file": ".vbox_version",
|
||||||
"vboxmanage": [
|
"vboxmanage": [
|
||||||
["modifyvm", "{{.Name}}", "--memory", "2048"],
|
["modifyvm", "{{.Name}}", "--memory", "1024"],
|
||||||
["modifyvm", "{{.Name}}", "--cpus", "2"]
|
["modifyvm", "{{.Name}}", "--cpus", "2"]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -48,7 +49,7 @@
|
||||||
"post-processors": [
|
"post-processors": [
|
||||||
{
|
{
|
||||||
"type": "vagrant",
|
"type": "vagrant",
|
||||||
"output": "cycle-14.02-x86_64-{{.Provider}}.box"
|
"output": "nixos-14.02-x86_64-{{.Provider}}.box"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue