diff --git a/internal/rosa/all.go b/internal/rosa/all.go index 73061a64..4b87ed69 100644 --- a/internal/rosa/all.go +++ b/internal/rosa/all.go @@ -47,6 +47,7 @@ const ( Bison Bzip2 CMake + Connman Coreutils Curl DBus diff --git a/internal/rosa/connman.go b/internal/rosa/connman.go new file mode 100644 index 00000000..c59eea8b --- /dev/null +++ b/internal/rosa/connman.go @@ -0,0 +1,109 @@ +package rosa + +import "hakurei.app/internal/pkg" + +func (t Toolchain) newConnman() (pkg.Artifact, string) { + const ( + version = "2.0" + checksum = "MhVTdJOhndnZn2SWd8URKo_Pj7Zvc14tntEbrVOf9L3yVWJvpb3v3Q6104tWJgtW" + ) + return t.NewPackage("connman", version, pkg.NewHTTPGetTar( + nil, "https://git.kernel.org/pub/scm/network/connman/connman.git/"+ + "snapshot/connman-"+version+".tar.gz", + mustDecode(checksum), + pkg.TarGzip, + ), &PackageAttr{ + Patches: []KV{ + {"alpine-musl-res", `musl does not implement res_ninit + +--- a/gweb/gresolv.c ++++ b/gweb/gresolv.c +@@ -877,8 +877,6 @@ + resolv->index = index; + resolv->nameserver_list = NULL; + +- res_ninit(&resolv->res); +- + return resolv; + } + +@@ -918,8 +916,6 @@ + + flush_nameservers(resolv); + +- res_nclose(&resolv->res); +- + g_free(resolv); + } + +@@ -1022,24 +1018,19 @@ + debug(resolv, "hostname %s", hostname); + + if (!resolv->nameserver_list) { +- int i; +- +- for (i = 0; i < resolv->res.nscount; i++) { +- char buf[100]; +- int family = resolv->res.nsaddr_list[i].sin_family; +- void *sa_addr = &resolv->res.nsaddr_list[i].sin_addr; +- +- if (family != AF_INET && +- resolv->res._u._ext.nsaddrs[i]) { +- family = AF_INET6; +- sa_addr = &resolv->res._u._ext.nsaddrs[i]->sin6_addr; ++ FILE *f = fopen("/etc/resolv.conf", "r"); ++ if (f) { ++ char line[256], *s; ++ int i; ++ while (fgets(line, sizeof(line), f)) { ++ if (strncmp(line, "nameserver", 10) || !isspace(line[10])) ++ continue; ++ for (s = &line[11]; isspace(s[0]); s++); ++ for (i = 0; s[i] && !isspace(s[i]); i++); ++ s[i] = 0; ++ g_resolv_add_nameserver(resolv, s, 53, 0); + } +- +- if (family != AF_INET && family != AF_INET6) +- continue; +- +- if (inet_ntop(family, sa_addr, buf, sizeof(buf))) +- g_resolv_add_nameserver(resolv, buf, 53, 0); ++ fclose(f); + } + + if (!resolv->nameserver_list) +`}, + }, + }, &MakeHelper{ + Generate: "./bootstrap", + }, + Automake, + Libtool, + PkgConfig, + + DBus, + IPTables, + GnuTLS, + Readline, + KernelHeaders, + ), version +} +func init() { + artifactsM[Connman] = Metadata{ + f: Toolchain.newConnman, + + Name: "connman", + Description: "a daemon for managing Internet connections", + Website: "https://git.kernel.org/pub/scm/network/connman/connman.git/", + + Dependencies: P{ + DBus, + IPTables, + GnuTLS, + Readline, + }, + + ID: 337, + } +}