This works around a bug in Net::DNS (or arguably in IO::Socket::IP) which causes it to refuse to send queries to IPv4 nameservers (even localhost), when running on IPv6-only hosts. Since IPv6-only hosts are the primary use case for clatd, and most modern Linux distributions are shipping with systemd-resolved listening on 127.0.0.53 by default, this prevents PLAT prefix discovery from working correctly out of the box. Forcing Net::DNS to use an IPv6 socket, by simply substituting all IPv4 addresses in the name server as IPv4-mapped IPv6 addreses, successfully works around this problem. This bug has been present in Net::DNS since version 1.03 (more specifically since SVN r1406, dated 2015-10-05). This version started defaulting to using IO::Socket::IP for all sockets, so it is no longer necessary to require it explicitly in clatd. For more info: https://rt.cpan.org/Public/Bug/Display.html?id=158714 (Net::DNS) https://rt.cpan.org/Public/Bug/Display.html?id=132760 (IO::Socket::IP)
28 lines
2.1 KiB
Makefile
28 lines
2.1 KiB
Makefile
DESTDIR=
|
|
PREFIX=/usr
|
|
SYSCONFDIR=/etc
|
|
|
|
APT_GET:=$(shell which apt-get)
|
|
DNF_OR_YUM:=$(shell which dnf || which yum)
|
|
SYSTEMCTL:=$(shell which systemctl)
|
|
TAYGA:=$(shell which tayga)
|
|
|
|
install:
|
|
# Install the main script
|
|
install -m0755 clatd $(DESTDIR)$(PREFIX)/sbin/clatd
|
|
# Install manual page if pod2man is installed
|
|
pod2man --name clatd --center "clatd - a CLAT implementation for Linux" --section 8 README.pod $(DESTDIR)$(PREFIX)/share/man/man8/clatd.8 && gzip -f9 $(DESTDIR)$(PREFIX)/share/man/man8/clatd.8 || echo "pod2man is required to generate manual page"
|
|
# Install systemd service file if applicable for this system
|
|
if test -x "$(SYSTEMCTL)" && test -d "$(DESTDIR)$(SYSCONFDIR)/systemd/system"; then install -m0644 scripts/clatd.systemd $(DESTDIR)$(SYSCONFDIR)/systemd/system/clatd.service && $(SYSTEMCTL) daemon-reload; fi
|
|
if test -e "$(DESTDIR)$(SYSCONFDIR)/systemd/system/clatd.service" && test ! -e "$(DESTDIR)$(SYSCONFDIR)/systemd/system/multi-user.target.wants/clatd.service"; then $(SYSTEMCTL) enable clatd.service; fi
|
|
# Install NetworkManager dispatcher script if applicable
|
|
if test -d $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d; then install -m0755 scripts/clatd.networkmanager $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d/50-clatd; fi
|
|
|
|
installdeps:
|
|
# .deb/apt-get based distros
|
|
if test -x "$(APT_GET)"; then $(APT_GET) -y install perl-base perl-modules libnet-ip-perl libnet-dns-perl iproute2 nftables tayga; fi
|
|
# .rpm/DNF/YUM-based distros
|
|
if test -x "$(DNF_OR_YUM)"; then $(DNF_OR_YUM) -y install perl perl-IPC-Cmd perl-Net-IP perl-Net-DNS perl-File-Temp iproute nftables; fi
|
|
# If necessary, try to install the TAYGA .rpm using dnf/yum. It is unfortunately not available in all .rpm based distros (in particular CentOS/RHEL).
|
|
if test -x "$(DNF_OR_YUM)" && test ! -x "$(TAYGA)"; then $(DNF_OR_YUM) -y install tayga || echo "ERROR: Failed to install TAYGA using dnf/yum, the package is probably not included in your distro. Try enabling the EPEL repo <URL: https://fedoraproject.org/wiki/EPEL> and try again, or install TAYGA <URL: http://www.litech.org/tayga> directly from source."; exit 1; fi
|