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