Include /etc/hosts and /etc/resolv.conf in initramfs
This commit is contained in:
parent
0126d9b356
commit
77ef9e0368
2
Makefile
2
Makefile
|
|
@ -43,6 +43,8 @@ SYSCALL_TEST_WORKDIR ?= /tmp
|
||||||
# NETDEV possible values are user,tap
|
# NETDEV possible values are user,tap
|
||||||
NETDEV ?= user
|
NETDEV ?= user
|
||||||
VHOST ?= off
|
VHOST ?= off
|
||||||
|
# The name server listed by /etc/resolv.conf inside the Asterinas VM
|
||||||
|
DNS_SERVER ?= none
|
||||||
# End of network settings
|
# End of network settings
|
||||||
|
|
||||||
# ========================= End of Makefile options. ==========================
|
# ========================= End of Makefile options. ==========================
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ VERBOSE ?= 1
|
||||||
SYSCALL_TEST_SUITE ?= ltp
|
SYSCALL_TEST_SUITE ?= ltp
|
||||||
SYSCALL_TEST_WORKDIR ?= /tmp
|
SYSCALL_TEST_WORKDIR ?= /tmp
|
||||||
ENABLE_BASIC_TEST ?= false
|
ENABLE_BASIC_TEST ?= false
|
||||||
|
DNS_SERVER ?= none
|
||||||
# Set Nix's cached tarballs to be live for a longer period of time (30 days) to avoid network traffics.
|
# Set Nix's cached tarballs to be live for a longer period of time (30 days) to avoid network traffics.
|
||||||
# Nix's default value is rather small (1 hour or 3600 seconds).
|
# Nix's default value is rather small (1 hour or 3600 seconds).
|
||||||
NIXPKGS_CACHE_TTL := 2592000 # In seconds
|
NIXPKGS_CACHE_TTL := 2592000 # In seconds
|
||||||
|
|
@ -65,6 +66,7 @@ $(INITRAMFS_IMAGE): $(INITRAMFS)
|
||||||
--arg enableSyscallTest $(ENABLE_SYSCALL_TEST) \
|
--arg enableSyscallTest $(ENABLE_SYSCALL_TEST) \
|
||||||
--argstr syscallTestSuite $(SYSCALL_TEST_SUITE) \
|
--argstr syscallTestSuite $(SYSCALL_TEST_SUITE) \
|
||||||
--argstr syscallTestWorkDir $(SYSCALL_TEST_WORKDIR) \
|
--argstr syscallTestWorkDir $(SYSCALL_TEST_WORKDIR) \
|
||||||
|
--argstr dnsServer ${DNS_SERVER} \
|
||||||
--arg initramfsCompressed $(INITRAMFS_COMPRESSED) \
|
--arg initramfsCompressed $(INITRAMFS_COMPRESSED) \
|
||||||
--arg smp $(SMP) \
|
--arg smp $(SMP) \
|
||||||
--out-link $@ \
|
--out-link $@ \
|
||||||
|
|
@ -80,6 +82,7 @@ $(INITRAMFS):
|
||||||
--arg enableSyscallTest $(ENABLE_SYSCALL_TEST) \
|
--arg enableSyscallTest $(ENABLE_SYSCALL_TEST) \
|
||||||
--argstr syscallTestSuite $(SYSCALL_TEST_SUITE) \
|
--argstr syscallTestSuite $(SYSCALL_TEST_SUITE) \
|
||||||
--argstr syscallTestWorkDir $(SYSCALL_TEST_WORKDIR) \
|
--argstr syscallTestWorkDir $(SYSCALL_TEST_WORKDIR) \
|
||||||
|
--argstr dnsServer ${DNS_SERVER} \
|
||||||
--arg smp $(SMP) \
|
--arg smp $(SMP) \
|
||||||
--out-link $@ \
|
--out-link $@ \
|
||||||
nix -A initramfs
|
nix -A initramfs
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
{ target ? "x86_64", enableBasicTest ? false, enableBenchmark ? false
|
{ target ? "x86_64", enableBasicTest ? false, enableBenchmark ? false
|
||||||
, enableSyscallTest ? false, syscallTestSuite ? "ltp"
|
, enableSyscallTest ? false, syscallTestSuite ? "ltp"
|
||||||
, syscallTestWorkDir ? "/tmp", smp ? 1, initramfsCompressed ? true, }:
|
, syscallTestWorkDir ? "/tmp", dnsServer ? "none", smp ? 1
|
||||||
|
, initramfsCompressed ? true, }:
|
||||||
let
|
let
|
||||||
crossSystem.config = if target == "x86_64" then
|
crossSystem.config = if target == "x86_64" then
|
||||||
"x86_64-unknown-linux-gnu"
|
"x86_64-unknown-linux-gnu"
|
||||||
|
|
@ -35,6 +36,7 @@ in rec {
|
||||||
apps = if enableBasicTest then apps else null;
|
apps = if enableBasicTest then apps else null;
|
||||||
benchmark = if enableBenchmark then benchmark else null;
|
benchmark = if enableBenchmark then benchmark else null;
|
||||||
syscall = if enableSyscallTest then syscall else null;
|
syscall = if enableSyscallTest then syscall else null;
|
||||||
|
dnsServer = dnsServer;
|
||||||
};
|
};
|
||||||
initramfs-image = pkgs.callPackage ./initramfs-image.nix {
|
initramfs-image = pkgs.callPackage ./initramfs-image.nix {
|
||||||
inherit initramfs;
|
inherit initramfs;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{ lib, stdenvNoCC, fetchFromGitHub, hostPlatform, writeClosure, busybox, apps
|
{ lib, stdenvNoCC, fetchFromGitHub, hostPlatform, writeClosure, busybox, apps
|
||||||
, benchmark, syscall, }:
|
, benchmark, syscall, dnsServer, pkgs }:
|
||||||
let
|
let
|
||||||
etc = lib.fileset.toSource {
|
etc = lib.fileset.toSource {
|
||||||
root = ./../src/etc;
|
root = ./../src/etc;
|
||||||
|
|
@ -9,7 +9,9 @@ let
|
||||||
name = "gvisor-libs";
|
name = "gvisor-libs";
|
||||||
path = "/lib/x86_64-linux-gnu";
|
path = "/lib/x86_64-linux-gnu";
|
||||||
};
|
};
|
||||||
all_pkgs = [ busybox etc ] ++ lib.optionals (apps != null) [ apps.package ]
|
resolv_conf = pkgs.callPackage ./resolv_conf.nix { dnsServer = dnsServer; };
|
||||||
|
all_pkgs = [ busybox etc resolv_conf ]
|
||||||
|
++ lib.optionals (apps != null) [ apps.package ]
|
||||||
++ lib.optionals (benchmark != null) [ benchmark.package ]
|
++ lib.optionals (benchmark != null) [ benchmark.package ]
|
||||||
++ lib.optionals (syscall != null) [ syscall.package ];
|
++ lib.optionals (syscall != null) [ syscall.package ];
|
||||||
in stdenvNoCC.mkDerivation {
|
in stdenvNoCC.mkDerivation {
|
||||||
|
|
@ -26,6 +28,8 @@ in stdenvNoCC.mkDerivation {
|
||||||
|
|
||||||
cp -r ${etc}/* $out/etc/
|
cp -r ${etc}/* $out/etc/
|
||||||
|
|
||||||
|
cp ${resolv_conf}/resolv.conf $out/etc/
|
||||||
|
|
||||||
${lib.optionalString (apps != null) ''
|
${lib.optionalString (apps != null) ''
|
||||||
cp -r ${apps.package}/* $out/test/
|
cp -r ${apps.package}/* $out/test/
|
||||||
''}
|
''}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
{ stdenv, dnsServer }:
|
||||||
|
let
|
||||||
|
host_resolv_conf = builtins.path {
|
||||||
|
name = "host-resolv-conf";
|
||||||
|
path = "/etc/resolv.conf";
|
||||||
|
};
|
||||||
|
in stdenv.mkDerivation {
|
||||||
|
name = "resolv-conf";
|
||||||
|
buildCommand = ''
|
||||||
|
RESOLV_CONF_FILE="$out/resolv.conf"
|
||||||
|
mkdir -p $out
|
||||||
|
|
||||||
|
is_host_resolve_conf_valid() {
|
||||||
|
if [ ! -f "${host_resolv_conf}" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -qE "nameserver\s+127\.0\.0\." "${host_resolv_conf}"; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -n "${dnsServer}" ] && [ "${dnsServer}" != "none" ]; then
|
||||||
|
echo "nameserver ${dnsServer}" > "$RESOLV_CONF_FILE"
|
||||||
|
elif is_host_resolve_conf_valid; then
|
||||||
|
cp ${host_resolv_conf} $RESOLV_CONF_FILE
|
||||||
|
echo "resolv.conf is generated from the host's /etc/resolv.conf"
|
||||||
|
else
|
||||||
|
echo "Warning: the host's /etc/resolv.conf is not valid for the guest VM (containing lookback addresses)." >&2
|
||||||
|
echo "Fall back to Cloudflare's public DNS servers (1.1.1.1)." >&2
|
||||||
|
echo "Consider using the DNS_SERVER Makefile variable to specify DNS server explicitly." >&2
|
||||||
|
echo "For example: make DNS_SERVER=\"192.168.1.1\"" >&2
|
||||||
|
echo "nameserver 1.1.1.1" > "$RESOLV_CONF_FILE"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
127.0.0.1 localhost
|
||||||
Loading…
Reference in New Issue