]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
osx: add an homebrew formula
authorVincent Bernat <bernat@luffy.cx>
Fri, 11 Jan 2013 00:07:38 +0000 (01:07 +0100)
committerVincent Bernat <bernat@luffy.cx>
Fri, 11 Jan 2013 00:07:38 +0000 (01:07 +0100)
This formula is currently incorrect because of the bad MD5 sum. We
will correct it at the first release supporting Mac OS X.

README.md
osx/lldpd.rb [new file with mode: 0644]

index 18ce156e9d581e43c0ae4905207b067bb07570b5..a101474893c1e9caa22a54496e129b589655387c 100644 (file)
--- 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 (file)
index 0000000..0f78f77
--- /dev/null
@@ -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
+    <?xml version="1.0" encoding="UTF-8"?>
+    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+    <plist version="1.0">
+    <dict>
+      <key>Label</key>
+      <string>#{plist_name}</string>
+      <key>ProgramArguments</key>
+      <array>
+        <string>#{opt_prefix}/sbin/lldpd</string>
+      </array>
+      <key>RunAtLoad</key><true/>
+      <key>KeepAlive</key><true/>
+    </dict>
+    </plist>
+    EOS
+  end
+
+end