Add proper debian build support
authorBrenden Blanco <bblanco@plumgrid.com>
Wed, 26 Aug 2015 06:14:25 +0000 (23:14 -0700)
committerBrenden Blanco <bblanco@plumgrid.com>
Wed, 26 Aug 2015 06:20:31 +0000 (23:20 -0700)
The cmake based build system is nice, but not quite production ready.
Move to the more painful but featureful debuild style. This is one step
towards an upstreamable package.

Rename libbpfprog (ugh) to libbcc.

Split out python-bpf and libbcc-examples into separate packages that
depend on libbcc.

Signed-off-by: Brenden Blanco <bblanco@plumgrid.com>
18 files changed:
CMakeLists.txt
Dockerfile.ubuntu
FAQ.txt
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/docs [new file with mode: 0644]
debian/libbcc-examples.install [new file with mode: 0644]
debian/libbcc.install [new file with mode: 0644]
debian/python-bpf.install [new file with mode: 0644]
debian/rules [new file with mode: 0755]
debian/source/format [new file with mode: 0644]
scripts/README.md
src/cc/CMakeLists.txt
src/cc/libbcc.pc.in [moved from src/cc/libbpfprog.pc.in with 75% similarity]
src/python/CMakeLists.txt
src/python/bpf/__init__.py

index 1dc4280..664a649 100644 (file)
@@ -49,17 +49,3 @@ add_subdirectory(scripts)
 add_subdirectory(examples)
 add_subdirectory(src)
 add_subdirectory(tests)
-
-set(CPACK_PACKAGE_NAME "libbcc")
-set(CPACK_PACKAGE_VERSION "${REVISION}")
-set(CPACK_PACKAGE_CONTACT "Brenden Blanco <bblanco@plumgrid.com")
-if(EXISTS "/etc/redhat-release")
-  set(CPACK_GENERATOR "RPM")
-else()
-  set(CPACK_GENERATOR "DEB")
-endif()
-set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
-set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
-set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, python, make, gcc")
-set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Shared Library for BPF Compiler Collection (BCC)")
-include(CPack)
index 6b3fbb5..27d692b 100644 (file)
@@ -9,11 +9,12 @@ RUN printf "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty main\ndeb-src
 RUN wget -q -O - http://llvm.org/apt/llvm-snapshot.gpg.key | apt-key add -
 RUN apt-get -y update
 
-RUN apt-get -y install bison build-essential cmake flex git libedit-dev python zlib1g-dev
-RUN apt-get -y install libllvm3.7 llvm-3.7-dev libclang-3.7-dev
+RUN apt-get -y install bison build-essential cmake debhelper devscripts flex git libedit-dev python zlib1g-dev
+RUN apt-get -y install libllvm3.8 llvm-3.8-dev libclang-3.8-dev
 
 RUN mkdir -p /root/bcc/build
 COPY ./ /root/bcc/
-WORKDIR /root/bcc/build
-RUN cmake .. -DCMAKE_INSTALL_PREFIX=/usr
-RUN make -j$(grep -c ^process /proc/cpuinfo) package
+WORKDIR /root
+RUN tar zcf bcc_0.1.1.orig.tar.gz bcc/
+WORKDIR /root/bcc
+RUN DEB_BUILD_OPTIONS="nocheck parallel=4" debuild -us -uc
diff --git a/FAQ.txt b/FAQ.txt
index b62487c..03b9a74 100644 (file)
--- a/FAQ.txt
+++ b/FAQ.txt
@@ -5,9 +5,9 @@ A: Install pyroute2:
    cd pyroute2; sudo make install
 
 Q: hello_world.py fails with:
-   OSError: libbpfprog.so: cannot open shared object file: No such file or directory
+   OSError: libbcc.so: cannot open shared object file: No such file or directory
 A: make sure to 'make install' and add the directory
-   where libbpfprog.so was installed into your LD_LIBRARY_PATH
+   where libbcc.so was installed into your LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
 
 Q: hello_world.py fails with:
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..6fd7fee
--- /dev/null
@@ -0,0 +1,5 @@
+bcc (0.1.5-1) unstable; urgency=low
+
+  * Initial release
+
+ -- Brenden Blanco <bblanco@plumgrid.com>  Mon, 06 Jul 2015 18:04:28 +0000
diff --git a/debian/compat b/debian/compat
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..b94e0d4
--- /dev/null
@@ -0,0 +1,24 @@
+Source: bcc
+Maintainer: Brenden Blanco <bblanco@plumgrid.com>
+Section: misc
+Priority: optional
+Standards-Version: 3.9.5
+Build-Depends: debhelper (>= 9), cmake, libllvm3.8, llvm-3.8-dev, libclang-3.8-dev
+Homepage: https://github.com/iovisor/bcc
+
+Package: libbcc
+Architecture: amd64
+Depends: libc6, libstdc++6, make, gcc
+Description: Shared Library for BPF Compiler Collection (BCC)
+ Shared Library for BPF Compiler Collection to control BPF programs
+ from userspace.
+
+Package: libbcc-examples
+Architecture: any
+Depends: libbcc
+Description: Shared Library for BPF Compiler Collection (BCC)
+
+Package: python-bpf
+Architecture: all
+Depends: libbcc, python
+Description: Python wrappers for BPF Compiler Collection (BCC)
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..f262737
--- /dev/null
@@ -0,0 +1,7 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: bcc
+Source: https://github.com/iovisor/bcc
+
+Files: *
+Copyright: 2015 PLUMgrid, Inc.
+License: Apache-2.0
diff --git a/debian/docs b/debian/docs
new file mode 100644 (file)
index 0000000..7d88104
--- /dev/null
@@ -0,0 +1,3 @@
+FAQ.txt
+LICENSE.txt
+README.md
diff --git a/debian/libbcc-examples.install b/debian/libbcc-examples.install
new file mode 100644 (file)
index 0000000..94c7b5a
--- /dev/null
@@ -0,0 +1 @@
+usr/share/bcc/examples/*
diff --git a/debian/libbcc.install b/debian/libbcc.install
new file mode 100644 (file)
index 0000000..7d20e9e
--- /dev/null
@@ -0,0 +1,3 @@
+usr/include/bcc/*
+usr/lib/libbcc* /usr/lib/x86_64-linux-gnu/
+usr/share/bcc/include/*
diff --git a/debian/python-bpf.install b/debian/python-bpf.install
new file mode 100644 (file)
index 0000000..552050d
--- /dev/null
@@ -0,0 +1,2 @@
+usr/lib/python*
+usr/bin/bpf-run
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..941a8fa
--- /dev/null
@@ -0,0 +1,8 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+       dh $@ --buildsystem=cmake --parallel
diff --git a/debian/source/format b/debian/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
index fbcc2ce..8dd200e 100644 (file)
@@ -50,8 +50,8 @@ Reconnect and run the final step, building and testing bcc.
 [root@bpf-demo ~]# bcc-setup
 Cloning into 'bcc'...
 ...
-Linking CXX shared library libbpfprog.so
-[100%] Built target bpfprog
+Linking CXX shared library libcc.so
+[100%] Built target bcc
 ...
 Running tests...
 Test project /root/bcc/build
index 24ef907..4be7784 100644 (file)
@@ -11,7 +11,7 @@ include_directories(${LLVM_INCLUDE_DIRS})
 # todo: if check for kernel version
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat)
 add_definitions(${LLVM_DEFINITIONS})
-configure_file(libbpfprog.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libbpfprog.pc @ONLY)
+configure_file(libbcc.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libbcc.pc @ONLY)
 
 # prune unused llvm static library stuff when linking into the new .so
 set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--exclude-libs=ALL")
@@ -29,7 +29,8 @@ endif()
 # tell the shared library where it is being installed so it can find shared header files
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBCC_INSTALL_PREFIX='\"${CMAKE_INSTALL_PREFIX}\"'")
 
-add_library(bpfprog SHARED bpf_common.cc bpf_module.cc libbpf.c)
+add_library(bcc SHARED bpf_common.cc bpf_module.cc libbpf.c)
+set_target_properties(bcc PROPERTIES VERSION ${REVISION} SOVERSION 0)
 
 # BPF is still experimental otherwise it should be available
 #llvm_map_components_to_libnames(llvm_libs bpf mcjit irreader passes)
@@ -41,14 +42,19 @@ set(clang_libs ${libclangFrontend} ${libclangSerialization} ${libclangDriver} ${
   ${libclangAST} ${libclangLex} ${libclangBasic})
 
 # Link against LLVM libraries
-target_link_libraries(bpfprog b_frontend clang_frontend ${clang_libs} ${llvm_libs} LLVMBPFCodeGen)
+target_link_libraries(bcc b_frontend clang_frontend ${clang_libs} ${llvm_libs} LLVMBPFCodeGen)
 
-install(TARGETS bpfprog LIBRARY DESTINATION lib${LIBSUFFIX})
-install(DIRECTORY export/ DESTINATION share/bcc/include/bcc
+install(TARGETS bcc LIBRARY COMPONENT libbcc
+  DESTINATION lib${LIBSUFFIX})
+install(DIRECTORY export/ COMPONENT libbcc
+  DESTINATION share/bcc/include/bcc
   FILES_MATCHING PATTERN "*.h")
-install(FILES bpf_common.h ../libbpf.h DESTINATION include/bcc)
-install(DIRECTORY compat/linux/ DESTINATION include/bcc/compat/linux
+install(FILES bpf_common.h ../libbpf.h COMPONENT libbcc
+  DESTINATION include/bcc)
+install(DIRECTORY compat/linux/ COMPONENT libbcc
+  DESTINATION include/bcc/compat/linux
   FILES_MATCHING PATTERN "*.h")
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libbpfprog.pc DESTINATION lib${LIBSUFFIX}/pkgconfig)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libbcc.pc COMPONENT libbcc
+  DESTINATION lib${LIBSUFFIX}/pkgconfig)
 
 add_subdirectory(frontends)
similarity index 75%
rename from src/cc/libbpfprog.pc.in
rename to src/cc/libbcc.pc.in
index 8ccdee1..69b28c1 100644 (file)
@@ -6,9 +6,9 @@ datarootdir=${prefix}/share
 
 compatdir=${includedir}/bcc/compat
 
-Name: libbpfprog
+Name: libbcc
 Version: @REVISION@
-Description: BPF Program library
+Description: BCC Program library
 Requires:
-Libs: -L${libdir} -lbpfprog
+Libs: -L${libdir} -lbcc
 Cflags: -I${includedir} -I${compatdir}
index d0ef831..0e04764 100644 (file)
@@ -22,4 +22,5 @@ if(EXISTS "/etc/debian_version")
   set(PYTHON_FLAGS "${PYTHON_FLAGS} --install-layout deb")
 endif()
 install(CODE "execute_process(COMMAND python setup.py install -f ${PYTHON_FLAGS}
-  --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
+  --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
+  COMPONENT python)
index 032e09c..28bd1db 100644 (file)
@@ -23,7 +23,7 @@ from subprocess import Popen, PIPE
 import sys
 basestring = (unicode if sys.version_info[0] < 3 else str)
 
-lib = ct.CDLL("libbpfprog.so")
+lib = ct.CDLL("libbcc.so")
 
 # keep in sync with bpf_common.h
 lib.bpf_module_create_b.restype = ct.c_void_p