homebrew-core/Formula/ddclient.rb

127 lines
4.5 KiB
Ruby

class Ddclient < Formula
desc "Update dynamic DNS entries"
homepage "https://ddclient.net/"
url "https://github.com/ddclient/ddclient/archive/v3.10.0.tar.gz"
sha256 "34b6d9a946290af0927e27460a965ad018a7c525625063b0f380cbddffc01c1b"
license "GPL-2.0-or-later"
revision 2
head "https://github.com/ddclient/ddclient.git", branch: "master"
livecheck do
url :stable
regex(/^v?(\d+(?:\.\d+)+)$/i)
end
bottle do
sha256 cellar: :any_skip_relocation, arm64_ventura: "6894c0f9e8a341551e1ea396768d584da17a2aacf0da34018d54f22ab3bd4d00"
sha256 cellar: :any_skip_relocation, arm64_monterey: "6894c0f9e8a341551e1ea396768d584da17a2aacf0da34018d54f22ab3bd4d00"
sha256 cellar: :any_skip_relocation, arm64_big_sur: "6894c0f9e8a341551e1ea396768d584da17a2aacf0da34018d54f22ab3bd4d00"
sha256 cellar: :any_skip_relocation, ventura: "6894c0f9e8a341551e1ea396768d584da17a2aacf0da34018d54f22ab3bd4d00"
sha256 cellar: :any_skip_relocation, monterey: "6894c0f9e8a341551e1ea396768d584da17a2aacf0da34018d54f22ab3bd4d00"
sha256 cellar: :any_skip_relocation, big_sur: "6894c0f9e8a341551e1ea396768d584da17a2aacf0da34018d54f22ab3bd4d00"
sha256 cellar: :any_skip_relocation, x86_64_linux: "f6baa3bce12ee03d891e9761ceaaac4396c171c312c5552f5de50e4c2e9e08b5"
end
depends_on "autoconf" => :build
depends_on "automake" => :build
uses_from_macos "perl"
on_linux do
depends_on "openssl@3"
resource "IO::Socket::INET6" do
url "https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/IO-Socket-INET6-2.73.tar.gz"
sha256 "b6da746853253d5b4ac43191b4f69a4719595ee13a7ca676a8054cf36e6d16bb"
end
resource "IO::Socket::SSL" do
url "https://cpan.metacpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-2.078.tar.gz"
sha256 "4cf83737a72b0970948b494bc9ddab7f725420a0ca0152d25c7e48ef8fa2b6a1"
end
resource "JSON::PP" do
url "https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI/JSON-PP-4.16.tar.gz"
sha256 "8bc2f162bafc42645c489905ad72540f0d3c284b360c96299095183c30cc9789"
end
resource "Net::SSLeay" do
url "https://cpan.metacpan.org/authors/id/C/CH/CHRISN/Net-SSLeay-1.92.tar.gz"
sha256 "47c2f2b300f2e7162d71d699f633dd6a35b0625a00cbda8c50ac01144a9396a9"
end
end
def install
if OS.linux?
ENV.prepend_create_path "PERL5LIB", libexec/"lib/perl5"
ENV["PERL_MM_USE_DEFAULT"] = "1"
ENV["OPENSSL_PREFIX"] = Formula["openssl@1.1"].opt_prefix
resources.each do |r|
r.stage do
system "perl", "Makefile.PL", "INSTALL_BASE=#{libexec}"
system "make", "install"
end
end
end
system "./autogen"
system "./configure", *std_configure_args, "--sysconfdir=#{etc}", "--localstatedir=#{var}", "CURL=curl"
system "make", "install", "CURL=curl"
# Install sample files
inreplace "sample-ddclient-wrapper.sh", "/etc/ddclient", "#{etc}/ddclient"
inreplace "sample-etc_cron.d_ddclient", "/usr/bin/ddclient", "#{opt_bin}/ddclient"
doc.install %w[sample-ddclient-wrapper.sh sample-etc_cron.d_ddclient]
bin.env_script_all_files(libexec/"bin", PERL5LIB: ENV["PERL5LIB"]) if OS.linux?
end
def post_install
(var/"run").mkpath
chmod "go-r", etc/"ddclient.conf"
# Migrate old configuration files to the new location that `ddclient` checks.
# Remove on 31/12/2023.
old_config_file = pkgetc/"ddclient.conf"
return unless old_config_file.exist?
new_config_file = etc/"ddclient.conf"
ohai "Migrating `#{old_config_file}` to `#{new_config_file}`..."
etc.install new_config_file => "ddclient.conf.default" if new_config_file.exist?
etc.install old_config_file
pkgetc.rmtree if pkgetc.empty?
end
def caveats
<<~EOS
For ddclient to work, you will need to customise the configuration
file at `#{etc}/ddclient.conf`.
Note: don't enable daemon mode in the configuration file; see
additional information below.
The next reboot of the system will automatically start ddclient.
You can adjust the execution interval by changing the value of
StartInterval (in seconds) in /Library/LaunchDaemons/#{launchd_service_path.basename}.
EOS
end
service do
run [opt_bin/"ddclient", "-file", etc/"ddclient.conf"]
run_type :interval
interval 300
require_root true
end
test do
begin
pid = fork do
exec bin/"ddclient", "-file", etc/"ddclient.conf", "-debug", "-verbose", "-noquiet"
end
sleep 1
ensure
Process.kill "TERM", pid
Process.wait
end
$CHILD_STATUS.success?
end
end