]>
Commit | Line | Data |
---|---|---|
29e300e5 | 1 | class Lldpd < Formula |
a254e923 | 2 | desc "Implementation of IEEE 802.1ab (LLDP)" |
c65f44ec | 3 | homepage "https://vincentbernat.github.io/lldpd/" |
acbb798a VB |
4 | url "https://media.luffy.cx/files/lldpd/lldpd-0.9.9.tar.gz" |
5 | sha256 "5e9e08f500d21376631cbc9f8e19a4b167cd38eb2d8fd9e660b8e80507f802db" | |
29e300e5 | 6 | |
c65f44ec | 7 | option "with-snmp", "Build SNMP subagent support" |
59363019 | 8 | |
c65f44ec VB |
9 | depends_on "pkg-config" => :build |
10 | depends_on "readline" | |
11 | depends_on "libevent" | |
12 | depends_on "net-snmp" if build.with? "snmp" | |
29e300e5 VB |
13 | |
14 | def install | |
084988d4 | 15 | readline = Formula["readline"] |
1eb493a3 VB |
16 | args = [ |
17 | "--prefix=#{prefix}", | |
18 | "--sysconfdir=#{etc}", | |
19 | "--localstatedir=#{var}", | |
20 | "--with-xml", | |
21 | "--with-readline", | |
22 | "--with-privsep-chroot=/var/empty", | |
23 | "--with-launchddaemonsdir=no", | |
24 | "CPPFLAGS=-I#{readline.include} -DRONLY=1", | |
25 | "LDFLAGS=-L#{readline.lib}", | |
26 | ] | |
f363bce7 | 27 | args << (build.with?("snmp") ? "--with-snmp" : "--without-snmp") |
59363019 VB |
28 | |
29 | system "./configure", *args | |
29e300e5 | 30 | system "make" |
c65f44ec | 31 | system "make", "install" |
33f787eb | 32 | end |
60c6b6cb | 33 | |
61ae8353 VB |
34 | def post_install |
35 | (var/"run").mkpath | |
29e300e5 VB |
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.undent | |
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} | |
2d52771d | 65 | sudo dscl . -create /Users/#{u} UserShell /usr/bin/false |
29e300e5 VB |
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 | |
35289729 | 77 | |
59363019 VB |
78 | def plist |
79 | additional_args = "" | |
0414abe1 | 80 | additional_args += "<string>-x</string>" if build.with? "snmp" |
c65f44ec | 81 | <<-EOS.undent |
29e300e5 VB |
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> | |
084988d4 | 90 | <string>#{opt_sbin}/lldpd</string> |
59363019 | 91 | #{additional_args} |
29e300e5 VB |
92 | </array> |
93 | <key>RunAtLoad</key><true/> | |
94 | <key>KeepAlive</key><true/> | |
95 | </dict> | |
96 | </plist> | |
97 | EOS | |
98 | end | |
29e300e5 | 99 | end |