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