Skip to content

Commit 7397e1f

Browse files
committed
Add deb and rpm packaging
1 parent b48951f commit 7397e1f

25 files changed

+443
-85
lines changed

Dockerfile.centos

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
FROM centos:7
2+
3+
RUN NVIDIA_GPGKEY_SUM=d1be581509378368edeec8c1eb2958702feedf3bc3d17011adbf24efacce4ab5 && \
4+
curl -fsSL http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub | sed '/^Version/d' > /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA && \
5+
echo "$NVIDIA_GPGKEY_SUM /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA" | sha256sum -c --strict -
6+
7+
COPY mk/cuda.repo /etc/yum.repos.d/cuda.repo
8+
9+
RUN yum install -y \
10+
bzip2 \
11+
cuda-misc-headers-8-0-8.0.61-1 \
12+
cuda-nvml-dev-8-0-8.0.61-1 \
13+
gcc \
14+
git \
15+
libcap-devel \
16+
libseccomp-devel \
17+
m4 \
18+
redhat-lsb-core \
19+
rpm-build \
20+
rpmlint \
21+
which && \
22+
rm -rf /var/cache/yum/*
23+
24+
RUN cd $(mktemp -d) && \
25+
curl -fsSL -O https://mirrors.kernel.org/mageia/distrib/6/x86_64/media/core/release/pmake-1.45-16.mga6.x86_64.rpm && \
26+
curl -fsSL -O https://mirrors.kernel.org/mageia/distrib/6/x86_64/media/core/release/bmake-20161212-1.mga6.x86_64.rpm && \
27+
rpm -i *.rpm && \
28+
rm -rf $PWD
29+
30+
ARG USERSPEC=0:0
31+
32+
WORKDIR /tmp/libnvidia-container
33+
COPY . .
34+
RUN chown -R $USERSPEC $PWD
35+
USER $USERSPEC
36+
37+
RUN make distclean && make -j"$(nproc)"
38+
39+
ENV DIST_DIR /mnt
40+
VOLUME $DIST_DIR
41+
CMD make dist && make rpm

Dockerfile.ubuntu

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM ubuntu:16.04
2+
3+
RUN NVIDIA_GPGKEY_SUM=d1be581509378368edeec8c1eb2958702feedf3bc3d17011adbf24efacce4ab5 && \
4+
NVIDIA_GPGKEY_FPR=ae09fe4bbd223a84b2ccfce3f60f4b3d7fa2af80 && \
5+
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub && \
6+
apt-key adv --export --no-emit-version -a $NVIDIA_GPGKEY_FPR | tail -n +5 > cudasign.pub && \
7+
echo "$NVIDIA_GPGKEY_SUM cudasign.pub" | sha256sum -c --strict - && rm cudasign.pub && \
8+
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 /" > /etc/apt/sources.list.d/cuda.list
9+
10+
RUN apt-get update && apt-get install -y --no-install-recommends \
11+
bmake \
12+
build-essential \
13+
bzip2 \
14+
ca-certificates \
15+
cuda-misc-headers-8-0=8.0.61-1 \
16+
cuda-nvml-dev-8-0=8.0.61-1 \
17+
curl \
18+
devscripts \
19+
dh-make \
20+
fakeroot \
21+
git \
22+
libcap-dev \
23+
libseccomp-dev \
24+
lintian \
25+
lsb-release \
26+
m4 && \
27+
rm -rf /var/lib/apt/lists/*
28+
29+
ARG USERSPEC=0:0
30+
31+
WORKDIR /tmp/libnvidia-container
32+
COPY . .
33+
RUN chown -R $USERSPEC $PWD
34+
USER $USERSPEC
35+
36+
RUN make distclean && make -j"$(nproc)"
37+
38+
ENV DIST_DIR /mnt
39+
VOLUME $DIST_DIR
40+
CMD make dist && make deb

Makefile

Lines changed: 76 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
33
#
44

5-
.PHONY: all utils shared static deps install uninstall dist depsclean mostlyclean clean distclean
5+
.PHONY: all tools shared static deps install uninstall dist depsclean mostlyclean clean distclean
66
.DEFAULT_GOAL := all
77

88
##### Global variables #####
@@ -12,12 +12,21 @@ WITH_SECCOMP ?= 1
1212

1313
##### Global definitions #####
1414

15-
export CUDA_DIR ?= /usr/local/cuda-8.0
16-
export SRCS_DIR ?= $(CURDIR)/src
17-
export DEPS_DIR ?= $(CURDIR)/deps
18-
export DIST_DIR ?= $(CURDIR)/dist
19-
export MAKE_DIR ?= $(CURDIR)/mk
20-
export DEBUG_DIR ?= $(CURDIR)/.debug
15+
export prefix = /usr/local
16+
export exec_prefix = $(prefix)
17+
export bindir = $(exec_prefix)/bin
18+
export libdir = $(exec_prefix)/lib
19+
export libdbgdir = $(prefix)/lib/debug$(libdir)
20+
export includedir = $(prefix)/include
21+
export pkgconfdir = $(libdir)/pkgconfig
22+
23+
export CUDA_DIR ?= /usr/local/cuda-8.0
24+
export PKG_DIR ?= $(CURDIR)/pkg
25+
export SRCS_DIR ?= $(CURDIR)/src
26+
export DEPS_DIR ?= $(CURDIR)/deps
27+
export DIST_DIR ?= $(CURDIR)/dist
28+
export MAKE_DIR ?= $(CURDIR)/mk
29+
export DEBUG_DIR ?= $(CURDIR)/.debug
2130

2231
include $(MAKE_DIR)/common.mk
2332

@@ -66,11 +75,15 @@ BIN_SRCS := $(SRCS_DIR)/nvc_cli.c \
6675
$(SRCS_DIR)/utils.c
6776

6877
LIB_SCRIPT = $(SRCS_DIR)/$(LIB_NAME).lds
69-
BIN_SCRIPT = $(SRCS_DIR)/$(BIN_UTILS).lds
78+
BIN_SCRIPT = $(SRCS_DIR)/$(BIN_NAME).lds
7079

7180
##### Target definitions #####
7281

73-
ARCH := x86_64
82+
ifneq ($(wildcard /etc/debian_version),)
83+
ARCH ?= amd64
84+
else
85+
ARCH ?= x86_64
86+
endif
7487
MAJOR := $(call getdef,NVC_MAJOR,$(LIB_INCS))
7588
MINOR := $(call getdef,NVC_MINOR,$(LIB_INCS))
7689
PATCH := $(call getdef,NVC_PATCH,$(LIB_INCS))
@@ -86,7 +99,7 @@ ifeq ($(PATCH),)
8699
$(error Invalid patch version)
87100
endif
88101

89-
BIN_UTILS := nvidia-container-cli
102+
BIN_NAME := nvidia-container-cli
90103
LIB_NAME := libnvidia-container
91104
LIB_STATIC := $(LIB_NAME).a
92105
LIB_SHARED := $(LIB_NAME).so.$(VERSION)
@@ -97,49 +110,42 @@ LIB_PKGCFG := $(LIB_NAME).pc
97110
##### Flags definitions #####
98111

99112
# Common flags
100-
ARFLAGS := -rU
101113
CPPFLAGS := -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 $(CPPFLAGS)
102114
CFLAGS := -std=gnu11 -O2 -g -fdata-sections -ffunction-sections -fstack-protector -fno-strict-aliasing -fvisibility=hidden \
103115
-Wall -Wextra -Wcast-align -Wpointer-arith -Wmissing-prototypes -Wnonnull \
104116
-Wwrite-strings -Wlogical-op -Wformat=2 -Wmissing-format-attribute -Winit-self -Wshadow \
105117
-Wstrict-prototypes -Wunreachable-code -Wconversion -Wsign-conversion \
106118
-Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression $(CFLAGS)
107119
LDFLAGS := -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections $(LDFLAGS)
108-
109-
# Library flags
110-
_LIB_CPPFLAGS := -DNV_LINUX -isystem $(CUDA_DIR)/include -isystem $(DEPS_DIR)/usr/local/include -include $(BUILD_DEFS)
111-
_LIB_CFLAGS := -fPIC
112-
_LIB_LDFLAGS := -L$(DEPS_DIR)/usr/local/lib -shared -Wl,-soname=$(LIB_SONAME)
113-
_LIB_LDLIBS_STATIC := -l:libelf.a -l:libnvidia-modprobe-utils.a
114-
_LIB_LDLIBS_SHARED := -ldl -lcap
120+
LDLIBS := $(LDLIBS)
121+
122+
# Library flags (recursively expanded to handle target-specific flags)
123+
LIB_CPPFLAGS = -DNV_LINUX -isystem $(CUDA_DIR)/include -isystem $(DEPS_DIR)$(includedir) -include $(BUILD_DEFS)
124+
LIB_CFLAGS = -fPIC
125+
LIB_LDFLAGS = -L$(DEPS_DIR)$(libdir) -shared -Wl,-soname=$(LIB_SONAME)
126+
LIB_LDLIBS_STATIC = -l:libelf.a -l:libnvidia-modprobe-utils.a
127+
LIB_LDLIBS_SHARED = -ldl -lcap
115128
ifeq ($(WITH_TIRPC), 1)
116-
_LIB_CPPFLAGS += -isystem $(DEPS_DIR)/usr/local/include/tirpc -DWITH_TIRPC
117-
_LIB_LDLIBS_STATIC += -l:libtirpc.a
118-
_LIB_LDLIBS_SHARED += -lpthread
129+
LIB_CPPFLAGS += -isystem $(DEPS_DIR)$(includedir)/tirpc -DWITH_TIRPC
130+
LIB_LDLIBS_STATIC += -l:libtirpc.a
131+
LIB_LDLIBS_SHARED += -lpthread
119132
endif
120133
ifeq ($(WITH_SECCOMP), 1)
121-
_LIB_CPPFLAGS += -DWITH_SECCOMP
122-
_LIB_LDLIBS_SHARED += -lseccomp
134+
LIB_CPPFLAGS += -DWITH_SECCOMP
135+
LIB_LDLIBS_SHARED += -lseccomp
123136
endif
124-
_LIB_LDLIBS := $(_LIB_LDLIBS_STATIC) $(_LIB_LDLIBS_SHARED)
125-
# Library flags + common flags (recursively expanded to handle target-specific flags)
126-
LIB_CPPFLAGS = $(_LIB_CPPFLAGS) $(CPPFLAGS)
127-
LIB_CFLAGS = $(_LIB_CFLAGS) $(CFLAGS)
128-
LIB_LDFLAGS = $(_LIB_LDFLAGS) $(LDFLAGS)
129-
LIB_LDLIBS_STATIC = $(_LIB_LDLIBS_STATIC)
130-
LIB_LDLIBS_SHARED = $(_LIB_LDLIBS_SHARED) $(LDLIBS)
131-
LIB_LDLIBS = $(_LIB_LDLIBS) $(LDLIBS)
132-
133-
# Binary flags
134-
_BIN_CPPFLAGS := -include $(BUILD_DEFS)
135-
_BIN_CFLAGS := -fPIE -flto
136-
_BIN_LDFLAGS := -L. -pie
137-
_BIN_LDLIBS := -l:$(LIB_SHARED) -lcap
138-
# Binary flags + common flags (recursively expanded to handle target-specific flags)
139-
BIN_CPPFLAGS = $(_BIN_CPPFLAGS) $(CPPFLAGS)
140-
BIN_CFLAGS = $(_BIN_CFLAGS) $(CFLAGS)
141-
BIN_LDFLAGS = $(_BIN_LDFLAGS) $(LDFLAGS)
142-
BIN_LDLIBS = $(_BIN_LDLIBS) $(LDLIBS)
137+
LIB_CPPFLAGS += $(CPPFLAGS)
138+
LIB_CFLAGS += $(CFLAGS)
139+
LIB_LDFLAGS += $(LDFLAGS)
140+
LIB_LDLIBS_STATIC +=
141+
LIB_LDLIBS_SHARED += $(LDLIBS)
142+
LIB_LDLIBS = $(LIB_LDLIBS_STATIC) $(LIB_LDLIBS_SHARED)
143+
144+
# Binary flags (recursively expanded to handle target-specific flags)
145+
BIN_CPPFLAGS = -include $(BUILD_DEFS) $(CPPFLAGS)
146+
BIN_CFLAGS = -fPIE -flto $(CFLAGS)
147+
BIN_LDFLAGS = -L. -pie $(LDFLAGS)
148+
BIN_LDLIBS = -l:$(LIB_SHARED) -lcap $(LDLIBS)
143149

144150
$(word 1,$(LIB_RPC_SRCS)): RPCGENFLAGS=-h
145151
$(word 2,$(LIB_RPC_SRCS)): RPCGENFLAGS=-c
@@ -181,33 +187,31 @@ $(LIB_SHARED): $(LIB_OBJS)
181187

182188
$(LIB_STATIC_OBJ): $(LIB_OBJS)
183189
# FIXME Handle user-defined LDFLAGS and LDLIBS
184-
$(LD) -d -r --exclude-libs ALL -L$(DEPS_DIR)/usr/local/lib $(OUTPUT_OPTION) $^ $(LIB_LDLIBS_STATIC)
190+
$(LD) -d -r --exclude-libs ALL -L$(DEPS_DIR)$(libdir) $(OUTPUT_OPTION) $^ $(LIB_LDLIBS_STATIC)
185191
$(OBJCPY) --localize-hidden $@
186192
$(STRIP) --strip-unneeded -R .comment $@
187193

188-
$(BIN_UTILS): $(BIN_OBJS)
194+
$(BIN_NAME): $(BIN_OBJS)
189195
$(CC) $(BIN_CFLAGS) $(BIN_CPPFLAGS) $(BIN_LDFLAGS) $(OUTPUT_OPTION) $^ $(BIN_SCRIPT) $(BIN_LDLIBS)
190196
$(STRIP) --strip-unneeded -R .comment $@
191197

192198
##### Public rules #####
193199

194-
all: release
200+
all: CPPFLAGS += -DNDEBUG
201+
all: shared static tools
195202

196203
debug: CFLAGS += -pedantic -fsanitize=undefined -fno-omit-frame-pointer -fno-common
197204
debug: LDLIBS += -lubsan
198205
debug: STRIP := @echo skipping: strip
199-
debug: shared static utils
200-
201-
release: CPPFLAGS += -DNDEBUG
202-
release: shared static utils
206+
debug: shared static tools
203207

204-
utils: $(BIN_UTILS)
208+
tools: $(BIN_NAME)
205209

206210
shared: $(LIB_SHARED)
207211

208212
static: $(LIB_STATIC)($(LIB_STATIC_OBJ))
209213

210-
deps: export DESTDIR=$(DEPS_DIR)
214+
deps: export DESTDIR:=$(DEPS_DIR)
211215
deps: $(LIB_RPC_SRCS) $(BUILD_DEFS)
212216
$(MKDIR) -p $(DEPS_DIR)
213217
$(MAKE) -f $(MAKE_DIR)/elftoolchain.mk install
@@ -228,9 +232,9 @@ install: all
228232
# Install debugging symbols
229233
$(INSTALL) -m 644 $(DEBUG_DIR)/$(LIB_SONAME) $(DESTDIR)$(libdbgdir)
230234
# Install configuration files
231-
$(M4) -D'$$VERSION=$(strip $(VERSION))' -D'$$PRIVATE_LIBS=$(strip $(LIB_LDLIBS_SHARED))' $(MAKE_DIR)/$(LIB_PKGCFG).m4 > $(DESTDIR)$(pkgconfdir)/$(LIB_PKGCFG)
235+
$(MAKE_DIR)/$(LIB_PKGCFG).in "$(strip $(VERSION))" "$(strip $(LIB_LDLIBS_SHARED))" > $(DESTDIR)$(pkgconfdir)/$(LIB_PKGCFG)
232236
# Install binary files
233-
$(INSTALL) -m 755 $(BIN_UTILS) $(DESTDIR)$(bindir)
237+
$(INSTALL) -m 755 $(BIN_NAME) $(DESTDIR)$(bindir)
234238

235239
uninstall:
236240
# Uninstall header files
@@ -242,9 +246,9 @@ uninstall:
242246
# Uninstall configuration files
243247
$(RM) $(DESTDIR)$(pkgconfdir)/$(LIB_PKGCFG)
244248
# Uninstall binary files
245-
$(RM) $(DESTDIR)$(bindir)/$(BIN_UTILS)
249+
$(RM) $(DESTDIR)$(bindir)/$(BIN_NAME)
246250

247-
dist: DESTDIR=$(DIST_DIR)/$(LIB_NAME)_$(VERSION)
251+
dist: DESTDIR:=$(DIST_DIR)/$(LIB_NAME)_$(VERSION)$(addprefix -,$(TAG))
248252
dist: install
249253
$(TAR) -C $(dir $(DESTDIR)) -caf $(DESTDIR)_$(ARCH).tar.xz $(notdir $(DESTDIR))
250254
$(RM) -r $(DESTDIR)
@@ -264,4 +268,20 @@ clean: mostlyclean depsclean
264268

265269
distclean: clean
266270
$(RM) -r $(DEPS_DIR) $(DIST_DIR) $(DEBUG_DIR)
267-
$(RM) $(LIB_RPC_SRCS) $(LIB_STATIC) $(LIB_SHARED) $(BIN_UTILS)
271+
$(RM) $(LIB_RPC_SRCS) $(LIB_STATIC) $(LIB_SHARED) $(BIN_NAME)
272+
273+
deb: DESTDIR:=$(DIST_DIR)/$(LIB_NAME)_$(VERSION)_$(ARCH)
274+
deb: prefix:=/usr
275+
deb: libdir:=/usr/lib/@DEB_HOST_MULTIARCH@
276+
deb: install
277+
$(CP) -T $(PKG_DIR)/deb $(DESTDIR)/debian
278+
cd $(DESTDIR) && debuild -eDISTRIB -eSECTION --dpkg-buildpackage-hook='debian/prepare %v' -a $(ARCH) -us -uc -B
279+
cd $(DESTDIR) && debuild clean
280+
281+
rpm: DESTDIR:=$(DIST_DIR)/$(LIB_NAME)_$(VERSION)_$(ARCH)
282+
rpm: all
283+
$(CP) -T $(PKG_DIR)/rpm $(DESTDIR)
284+
$(LN) -nsf $(CURDIR) $(DESTDIR)/BUILD
285+
$(MKDIR) -p $(DESTDIR)/RPMS && $(LN) -nsf $(DIST_DIR) $(DESTDIR)/RPMS/$(ARCH)
286+
cd $(DESTDIR) && rpmbuild --clean --target=$(ARCH) -bb -D"_topdir $(DESTDIR)" -D"_version $(VERSION)" -D"_tag $(TAG)" -D"_major $(MAJOR)" SPECS/*
287+
-cd $(DESTDIR) && rpmlint RPMS/*

mk/common.mk

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,9 @@
22
# Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
33
#
44

5-
export prefix ?= /usr/local
6-
export exec_prefix ?= $(prefix)
7-
export bindir ?= $(exec_prefix)/bin
8-
export libdir ?= $(exec_prefix)/lib
9-
export libdbgdir ?= $(libdir)/debug/$(libdir)
10-
export includedir ?= $(prefix)/include
11-
export pkgconfdir ?= $(libdir)/pkgconfig
12-
135
MV ?= mv -f
6+
CP ?= cp -a
147
LN ?= ln
15-
M4 ?= m4
168
TAR ?= tar
179
CURL ?= curl
1810
MKDIR ?= mkdir

mk/cuda.repo

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[cuda]
2+
name=cuda
3+
baseurl=http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64
4+
enabled=1
5+
gpgcheck=1
6+
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA

mk/elftoolchain.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ include $(MAKE_DIR)/common.mk
88

99
export MKSHARE := no
1010
export MKPROFILE := no
11+
export LORDER := echo
1112
export INSTALL := $(INSTALL) -D
1213
export BINOWN := $(shell id -u)
1314
export BINGRP := $(shell id -g)

mk/libnvidia-container.pc.in

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#! /bin/sh
2+
3+
set -u
4+
5+
VERSION="$1"
6+
PRIVATE_LIBS="$2"
7+
8+
cat <<EOF
9+
prefix=$prefix
10+
exec_prefix=$exec_prefix
11+
libdir=$libdir
12+
includedir=$includedir
13+
14+
Name: libnvidia-container
15+
Description: NVIDIA container library
16+
Version: $VERSION
17+
Libs: -L\${libdir} -lnvidia-container
18+
Libs.private: $PRIVATE_LIBS
19+
Cflags: -I\${includedir}
20+
EOF

mk/libnvidia-container.pc.m4

Lines changed: 0 additions & 19 deletions
This file was deleted.

mk/libtirpc.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ $(SRCS_DIR)/.download_stamp:
2727
@touch $@
2828

2929
$(SRCS_DIR)/.build_stamp: $(SRCS_DIR)/.download_stamp
30-
cd $(SRCS_DIR) && ./configure --prefix=$(DESTDIR)/usr/local --enable-static --disable-shared --disable-gssapi --with-pic
30+
cd $(SRCS_DIR) && ./configure --prefix=$(DESTDIR)$(prefix) --enable-static --disable-shared --disable-gssapi --with-pic
3131
$(MAKE) -C $(SRCS_DIR)
3232
@touch $@
3333

pkg/deb/changelog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
libnvidia-container (1.0.0~alpha.1-1) UNRELEASED; urgency=medium
2+
3+
* Initial release
4+
5+
-- NVIDIA CORPORATION <[email protected]> Tue, 05 Sep 2017 14:31:33 -0700

0 commit comments

Comments
 (0)