summaryrefslogtreecommitdiffstats
path: root/infest.d/cac-CentOS-7-64bit/prepare.sh
blob: f932e9c302933305f931bc9494503c5b67eb4bc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#! /bin/sh
set -euf

: $nix_url
: $nix_sha256

{
  #
  # prepare host
  #

  type bzip2 2>/dev/null || yum install -y bzip2
  type rsync 2>/dev/null || yum install -y rsync

  if ! getent group nixbld >/dev/null; then
    groupadd -g 30000 -r nixbld
  fi
  for i in `seq 1 10`; do
    if ! getent passwd nixbld$i 2>/dev/null; then
      useradd \
        -c "CentOS Nix build user $i" \
        -d /var/empty \
        -g 30000 \
        -G 30000 \
        -l \
        -M \
        -s /sbin/nologin \
        -u $(expr 30000 + $i) \
        nixbld$i
      rm -f /var/spool/mail/nixbld$i
    fi
  done

  # generate fake sudo because
  # sudo: sorry, you must have a tty to run sudo
  mkdir -p bin
  printf '#! /bin/sh\nexec env "$@"\n' > bin/sudo
  chmod +x bin/sudo

  PATH=$PWD/bin:$PATH
  export PATH

  # install nix on host (cf. https://nixos.org/nix/install)
  if ! test -e /root/.nix-profile/etc/profile.d/nix.sh; then
    (
      verify() {
        echo $nix_sha256  $(basename $nix_url) | sha256sum -c
      }
      if ! verify; then
        curl -C - -O "$nix_url"
        verify
      fi
    )
    tar jxf $(basename $nix_url)
    $(basename $nix_url .tar.bz2)/install
  fi

  MANPATH=/var/empty . /root/.nix-profile/etc/profile.d/nix.sh

  if ! type nixos-install 2>/dev/null; then
    nixpkgs_expr='import <nixpkgs> { system = builtins.currentSystem; }'
    nixpkgs_path=$(find /nix/store -mindepth 1 -maxdepth 1 -name *-nixpkgs-* -type d)
    nix-env \
      --arg config "{ nix.package = ($nixpkgs_expr).nix; }" \
      --arg pkgs "$nixpkgs_expr" \
      --arg modulesPath 'throw "no modulesPath"' \
      -f $nixpkgs_path/nixpkgs/nixos/modules/installer/tools/tools.nix \
      -iA config.system.build.nixos-install
  fi

  #
  # mount install directory
  #

  if ! mount | grep -Fq '/dev/mapper/centos-root on /mnt type xfs'; then
    mkdir -p /newshit
    mount --bind /newshit /mnt
  fi

  if ! mount | grep -Fq '/dev/sda1 on /mnt/boot type xfs'; then
    mkdir -p /mnt/boot
    mount /dev/sda1 /mnt/boot
  fi

  if ! mount | grep -Fq '/dev/mapper/centos-root on /mnt/nix type xfs'; then
    mkdir -p /mnt/nix
    mount --bind /nix /mnt/nix
  fi

  mount | grep 'on /mnt\>' >&2

  #
  # prepare install directory
  #
  # XXX This should be done by (?)
  #   remote_dir=/mnt ./cac pushconfig servername:c731445864-cloudpro-134581046 rmdir

  mkdir -p /mnt/etc/nixos
  mkdir -m 0555 -p /mnt/var/empty

  # add eye candy
  address=$(echo $SSH_CONNECTION | awk '{print$3}')
  echo 'PS1='\''\[\e[1;31m\]\u@'"$address"'\[\e[m\] \[\e[1;32m\]\w\[\e[m\] '\' > .bashrc
}