]> git.ipfire.org Git - thirdparty/lldpd.git/blob - osx/lldpd.rb
osx: sync HomeBrew formula
[thirdparty/lldpd.git] / osx / lldpd.rb
1 class Lldpd < Formula
2 desc "Implementation of IEEE 802.1ab (LLDP)"
3 homepage "https://vincentbernat.github.io/lldpd/"
4 url "https://media.luffy.cx/files/lldpd/lldpd-1.0.1.tar.gz"
5 sha256 "450b622aac7ae1758f1ef82f3b7b94ec47f2ff33abfb0e6ac82555b9ee55f151"
6
7 option "with-snmp", "Build SNMP subagent support"
8
9 depends_on "pkg-config" => :build
10 depends_on "libevent"
11 depends_on "net-snmp" if build.with? "snmp"
12 depends_on "readline"
13
14 def install
15 readline = Formula["readline"]
16 args = %W[
17 --prefix=#{prefix}
18 --sysconfdir=#{etc}
19 --localstatedir=#{var}
20 --with-launchddaemonsdir=no
21 --with-privsep-chroot=/var/empty
22 --with-readline
23 --with-xml
24 CPPFLAGS=-I#{readline.include}\ -DRONLY=1
25 LDFLAGS=-L#{readline.lib}
26 ]
27 args << (build.with?("snmp") ? "--with-snmp" : "--without-snmp")
28
29 system "./configure", *args
30 system "make"
31 system "make", "install"
32 end
33
34 def post_install
35 (var/"run").mkpath
36 end
37
38 def dscl(*args)
39 result = `dscl . -#{args.join(' ')} 2> /dev/null`
40 if $? != 0
41 raise ErrorDuringExecution, "Failure while executing dscl: #{args.join(' ')}"
42 end
43 return result
44 end
45
46 # Create user and group if needed
47 def caveats
48 u = "_lldpd"
49 unless Kernel.system "/usr/bin/dscl . -read /Users/#{u} &> /dev/null"
50 # Find a free UID/GID
51 uids = dscl("list /Users uid")
52 gids = dscl("list /Groups gid")
53 uid = 200
54 while uids =~ Regexp.new("#{Regexp.escape(uid.to_s)}\n") || gids =~ Regexp.new("#{Regexp.escape(uid.to_s)}\n")
55 uid += 1
56 end
57 s = <<~EOS
58 You need to create a special user to run lldpd.
59 Just type the following commands:
60 sudo dscl . -create /Groups/#{u}
61 sudo dscl . -create /Groups/#{u} PrimaryGroupID #{uid.to_s}
62 sudo dscl . -create /Groups/#{u} Password "*"
63 sudo dscl . -create /Groups/#{u} RealName "lldpd privilege separation group"
64 sudo dscl . -create /Users/#{u}
65 sudo dscl . -create /Users/#{u} UserShell /usr/bin/false
66 sudo dscl . -create /Users/#{u} NFSHomeDirectory /var/empty
67 sudo dscl . -create /Users/#{u} PrimaryGroupID #{uid.to_s}
68 sudo dscl . -create /Users/#{u} UniqueID #{uid.to_s}
69 sudo dscl . -create /Users/#{u} Password "*"
70 sudo dscl . -create /Users/#{u} RealName "lldpd privilege separation user"
71 EOS
72 return s
73 end
74 end
75
76 plist_options :startup => true
77
78 def plist
79 additional_args = ""
80 additional_args += "<string>-x</string>" if build.with? "snmp"
81 <<~EOS
82 <?xml version="1.0" encoding="UTF-8"?>
83 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
84 <plist version="1.0">
85 <dict>
86 <key>Label</key>
87 <string>#{plist_name}</string>
88 <key>ProgramArguments</key>
89 <array>
90 <string>#{opt_sbin}/lldpd</string>
91 #{additional_args}
92 </array>
93 <key>RunAtLoad</key><true/>
94 <key>KeepAlive</key><true/>
95 </dict>
96 </plist>
97 EOS
98 end
99 end