diff --git a/.travis.yml b/.travis.yml index 681936a54..4d9221094 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: node_js +required: sudo node_js: - '9' services: @@ -12,20 +13,6 @@ addons: packages: - libgif-dev - google-chrome-stable - hosts: - - admin.example.com - - login.example.com - - singlefactor.example.com - - dev.example.com - - home.example.com - - mx1.mail.example.com - - mx2.mail.example.com - - public.example.com - - secure.example.com - - authelia.example.com - - admin.example.com - - mail.example.com - - duo.example.com before_script: - export DISPLAY=:99.0 diff --git a/bootstrap.sh b/bootstrap.sh index c3eee60e1..8d5fc04f0 100644 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -24,25 +24,6 @@ then return; fi -echo "[BOOTSTRAP] Checking if example.com domain is forwarded to your machine..." -cat /etc/hosts | grep "login.example.com" > /dev/null -if [ $? -ne 0 ]; -then - echo "[ERROR] Please add those lines to /etc/hosts: - -127.0.0.1 home.example.com -127.0.0.1 public.example.com -127.0.0.1 secure.example.com -127.0.0.1 dev.example.com -127.0.0.1 admin.example.com -127.0.0.1 mx1.mail.example.com -127.0.0.1 mx2.mail.example.com -127.0.0.1 singlefactor.example.com -127.0.0.1 login.example.com -192.168.240.100 duo.example.com" - return; -fi - echo "[BOOTSTRAP] Running additional bootstrap steps..." authelia-scripts bootstrap diff --git a/scripts/authelia-scripts-bootstrap b/scripts/authelia-scripts-bootstrap index b4ec915f7..2e58fb58c 100755 --- a/scripts/authelia-scripts-bootstrap +++ b/scripts/authelia-scripts-bootstrap @@ -3,12 +3,59 @@ var { exec } = require('./utils/exec'); var fs = require('fs'); -async function main() { +async function buildDockerImages() { + console.log("[BOOTSTRAP] Building required Docker images..."); + console.log('Build authelia-example-backend docker image.') await exec('docker build -t authelia-example-backend example/compose/nginx/backend'); console.log('Build authelia-duo-api docker image.') await exec('docker build -t authelia-duo-api example/compose/duo-api'); +} + +async function checkHostsFile() { + async function checkAndFixEntry(entries, domain, ip) { + const foundEntry = entries.filter(l => l[1] == domain); + if (foundEntry.length > 0) { + if (foundEntry[0][0] == ip) { + // The entry exists and is correct. + return; + } + else { + // We need to remove the entry and replace it. + console.log(`Update entry for ${domain}.`); + await exec(`cat /etc/hosts | grep -v "${domain}" | /usr/bin/sudo tee /etc/hosts > /dev/null`); + await exec(`echo "${ip} ${domain}" | /usr/bin/sudo tee -a /etc/hosts > /dev/null`); + } + } + else { + // We need to add the new entry. + console.log(`Add entry for ${domain}.`); + await exec(`echo "${ip} ${domain}" | /usr/bin/sudo tee -a /etc/hosts > /dev/null`); + } + } + + console.log("[BOOTSTRAP] Checking if example.com domain is forwarded to your machine..."); + const actualEntries = fs.readFileSync("/etc/hosts").toString("utf-8") + .split("\n").filter(l => l !== '').map(l => l.split(" ").filter(w => w !== '')); + + await checkAndFixEntry(actualEntries, 'login.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'admin.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'singlefactor.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'dev.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'home.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'mx1.mail.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'mx2.mail.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'public.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'secure.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'authelia.example.com', '127.0.0.1'); + await checkAndFixEntry(actualEntries, 'mail.example.com', '127.0.0.1'); + + await checkAndFixEntry(actualEntries, 'duo.example.com', '192.168.240.100'); +} + +async function checkKubernetesDependencies() { + console.log("[BOOTSTRAP] Checking Kubernetes tools in /tmp to allow testing a Kube cluster... (no junk installed on host)"); if (!fs.existsSync('/tmp/kind')) { console.log('Install Kind for spawning a Kubernetes cluster.'); @@ -21,6 +68,12 @@ async function main() { } } +async function main() { + await checkHostsFile(); + await buildDockerImages(); + await checkKubernetesDependencies(); +} + main().catch((err) => { console.error(err); process.exit(1);