From: Vincent Bernat Date: Fri, 11 Jan 2013 00:07:38 +0000 (+0100) Subject: osx: add an homebrew formula X-Git-Tag: 0.7.1~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=29e300e5ab4a61e5c18b572ac6568f0b3f5b8e8c;p=thirdparty%2Flldpd.git osx: add an homebrew formula This formula is currently incorrect because of the bad MD5 sum. We will correct it at the first release supporting Mac OS X. --- diff --git a/README.md b/README.md index 18ce156e..a1014748 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,8 @@ want to install libevent from Homebrew, as well as Readline: brew install libevent brew install readline ./configure CPPFLAGS="-I$(brew --prefix readline)/include" \ - LDFLAGS="-L$(brew --prefix readline)/lib" + LDFLAGS="-L$(brew --prefix readline)/lib" \ + --with-privsep-chroot=/var/empty make sudo make install @@ -92,16 +93,18 @@ You need to create the `_lldpd` user and group: dscl . -create /Groups/_lldpd RealName "lldpd privilege separation group" dscl . -create /Users/_lldpd dscl . -create /Users/_lldpd UserShell /usr/bin/false - dscl . -create /Users/_lldpd NFSHomeDirectory /var/run/lldpd + dscl . -create /Users/_lldpd NFSHomeDirectory /var/empty dscl . -create /Users/_lldpd PrimaryGroupID 274 dscl . -create /Users/_lldpd UniqueID 274 dscl . -create /Users/_lldpd Password "*" dscl . -create /Users/_lldpd RealName "lldpd privilege separation user" -Also create `/var/run/lldpd`: +Alternatively, you can use a convenient brew formula: - mkdir -p /var/run/lldpd/etc - cp /etc/localtime /var/run/lldpd/etc/. + brew install https://raw.github.com/vincentbernat/lldpd/master/osx/lldpd.rb + +This formula includes the ability to interface properly with launchd +to start `lldpd` at boot. Usage ----- diff --git a/osx/lldpd.rb b/osx/lldpd.rb new file mode 100644 index 00000000..0f78f777 --- /dev/null +++ b/osx/lldpd.rb @@ -0,0 +1,90 @@ +require 'formula' + +class Lldpd < Formula + homepage 'https://github.com/vincentbernat/lldpd/wiki' + url 'http://media.luffy.cx/files/lldpd/lldpd-0.7.1.tar.gz' + md5 '1534a5deb9671afb83be9b01edba9908' + + # Included copy of libevent does not like automake 1.13 + # head 'git://github.com/vincentbernat/lldpd.git' + + depends_on 'readline' + depends_on 'libevent' + depends_on 'pkg-config' + depends_on 'autoconf' if build.head? + depends_on 'automake' if build.head? + depends_on 'libtool' if build.head? + + def install + readline = Formula.factory 'readline' + if build.head? + system "env LIBTOOLIZE=glibtoolize ./autogen.sh" + end + system "./configure", "--prefix=#{prefix}", + "--with-xml", + "--with-readline", + "--with-privsep-chroot=/var/empty", + "CPPFLAGS=-I#{readline.include}", + "LDFLAGS=-L#{readline.lib}" + system "make" + system "make install" + end + + def dscl(*args) + result = `dscl . -#{args.join(' ')} 2> /dev/null` + if $? != 0 + raise ErrorDuringExecution, "Failure while executing dscl: #{args.join(' ')}" + end + return result + end + + # Create user and group if needed + def caveats + u = "_lldpd" + unless Kernel.system "/usr/bin/dscl . -read /Users/#{u} &> /dev/null" + # Find a free UID/GID + uids = dscl("list /Users uid") + gids = dscl("list /Groups gid") + uid = 200 + while uids =~ Regexp.new("#{Regexp.escape(uid.to_s)}\n") || gids =~ Regexp.new("#{Regexp.escape(uid.to_s)}\n") + uid += 1 + end + s = <<-EOS.undent + You need to create a special user to run lldpd. + Just type the following commands: + sudo dscl . -create /Groups/#{u} + sudo dscl . -create /Groups/#{u} PrimaryGroupID #{uid.to_s} + sudo dscl . -create /Groups/#{u} Password "*" + sudo dscl . -create /Groups/#{u} RealName "lldpd privilege separation group" + sudo dscl . -create /Users/#{u} + sudo dscl . -create /Users/#{u} UserShell /usr/bin/false + sudo dscl . -create /Users/#{u} NFSHomeDirectory /var/empty + sudo dscl . -create /Users/#{u} PrimaryGroupID #{uid.to_s} + sudo dscl . -create /Users/#{u} UniqueID #{uid.to_s} + sudo dscl . -create /Users/#{u} Password "*" + sudo dscl . -create /Users/#{u} RealName "lldpd privilege separation user" + EOS + return s + end + end + + plist_options :startup => true + def plist; <<-EOS.undent + + + + + Label + #{plist_name} + ProgramArguments + + #{opt_prefix}/sbin/lldpd + + RunAtLoad + KeepAlive + + + EOS + end + +end