Forgot to say, these patches are against the 0.52.0 tag, not master.
On Friday, January 25, 2019 at 11:27:37 AM UTC-5, Brian Ledbetter wrote:
>
> Here's my first stab at solving this problem in a backwards-compatible
> way, let me know what you think. I've added a --resolv flag to the loader
> to enable this behavior.
>
> patch-dhcp.cc:
>
> --- ./core/dhcp.cc~ 2019-01-25 11:18:29.173860626 -0500
> +++ ./core/dhcp.cc 2019-01-25 11:17:19.546083373 -0500
> @@ -29,6 +29,12 @@
> #include <libc/network/__dns.hh>
>
> using namespace boost::asio;
> +bool generate_resolv_conf = false;
> +
> +void enable_resolv_conf()
> +{
> + generate_resolv_conf = true;
> +}
>
> dhcp::dhcp_worker net_dhcp_worker;
>
> @@ -720,6 +726,31 @@
> });
>
> osv::set_dns_config(dm.get_dns_ips(),
> std::vector<std::string>());
> +
> + // Some linux applications (go, erlang) depend on
> /etc/resolv.conf to be
> + // populated with DNS server information in order to function.
> The --resolv
> + // option has been added to the kernel loader, which will
> enable this
> + // feature.
> + //
> + // TODO: It's possible that the /etc directory does not exist
> at this time.
> + // We should ideally check and create it if necessary. What's
> the right
> + // way to do that?
> + //
> + // TODO: We are currently ignoring DHCP-provided default domain
> + // names. I'll have to dig further into the code to see if I
> can ingest
> + // those.
> + //
> + if( generate_resolv_conf )
> + {
> + FILE *f = fopen("/etc/resolv.conf", "w+");
> + if( f ) {
> + fprintf( f, "## Autoconfigured by DHCP\n" );
> + for( auto &ip : dm.get_dns_ips() )
> + {
> + fprintf( f, "server %s\n",
> ip.to_string().c_str() );
> + dhcp_i( "Added DNS server: %s\n",
> ip.to_string().c_str() );
> + }
> + fclose( f );
> + dhcp_i( "Generated /etc/resolv.conf" );
> + }
> + }
> +
> if (dm.get_hostname().size()) {
> sethostname(dm.get_hostname().c_str(),
> dm.get_hostname().size());
> dhcp_i("Set hostname to: %s", dm.get_hostname().c_str());
>
>
> patch-loader.cc:
>
> --- ./loader.cc~ 2019-01-25 11:10:40.091359718 -0500
> +++ ./loader.cc 2019-01-25 11:11:40.243167695 -0500
> @@ -144,10 +144,13 @@
> bool opt_assign_net = false;
> bool opt_maxnic = false;
> int maxnic;
> +static bool opt_resolv_conf = false;
>
> static int sampler_frequency;
> static bool opt_enable_sampler = false;
>
> +void enable_resolv_conf();
> +
> void parse_options(int loader_argc, char** loader_argv)
> {
> namespace bpo = boost::program_options;
> @@ -182,6 +185,7 @@
> ("delay", bpo::value<float>()->default_value(0), "delay in
> seconds before boot")
> ("redirect", bpo::value<std::string>(), "redirect stdout and
> stderr to file")
> ("disable_rofs_cache", "disable ROFS memory cache")
> + ("resolv", "generate an /etc/resolv.conf file with DHCP DNS
> values (for Linux compatibility)")
> ;
> bpo::variables_map vars;
> // don't allow --foo bar (require --foo=bar) so we can find the first
> non-option
> @@ -234,6 +238,11 @@
> enable_verbose();
> }
>
> + if (vars.count("resolv")) {
> + opt_resolv_conf = true;
> + enable_resolv_conf();
> + }
> +
> if (vars.count("sampler")) {
> sampler_frequency = vars["sampler"].as<int>();
> opt_enable_sampler = true;
>
>
> patch-run.py:
>
> --- ./scripts/run.py~ 2019-01-25 11:14:20.858654652 -0500
> +++ ./scripts/run.py 2019-01-25 11:14:52.406553829 -0500
> @@ -43,6 +43,8 @@
> execute = cmdline.read()
> if options.verbose:
> execute = "--verbose " + execute
> + if options.resolv:
> + execute = "--resolv " + execute
>
> if options.jvm_debug or options.jvm_suspend:
> if '-agentlib:jdwp' in execute:
> @@ -461,6 +463,8 @@
> help="Enable graphics mode.")
> parser.add_argument("-V", "--verbose", action="store_true",
> help="pass --verbose to OSv, to display more
> debugging information on the console")
> + parser.add_argument("--resolv", action="store_true",
> + help="pass --resolv to OSv, to generate an
> /etc/resolv.conf file for Linux compatibility")
> parser.add_argument("--forward", metavar="RULE", action="append",
> default=[],
> help="add network forwarding RULE (QEMU syntax)")
> parser.add_argument("--dry-run", action="store_true",
>
>
>
--
You received this message because you are subscribed to the Google Groups "OSv
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.