Install all $progs_install_splitcmd, and set appropriate linux file capabilities(7) using setcap(8).
NOTE: while installing, group is hardcoded to "btrfs"! This needs further discussion. Signed-off-by: Axel Burri <a...@tty0.ch> --- Makefile | 36 ++++++++++++++++++++++++++++++++++++ Makefile.inc.in | 1 + configure.ac | 1 + 3 files changed, 38 insertions(+) diff --git a/Makefile b/Makefile index fcfc815a..5a1e2747 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ # static build static bnaries, requires static version of the libraries # test run the full testsuite # install install to default location (/usr/local) +# install-splitcmd-setcap install splitcmd binaries, and set linux capabilities # clean clean built binaries (not the documentation) # clean-all clean as above, clean docs and generated files # @@ -231,6 +232,30 @@ progs_install = progs_build = endif +# split-command executables, generated by splitcmd-gen.sh +progs_splitcmd = btrfs-send \ + btrfs-receive \ + btrfs-subvolume-list \ + btrfs-subvolume-show \ + btrfs-subvolume-snapshot \ + btrfs-subvolume-delete \ + btrfs-filesystem-usage \ + btrfs-qgroup-destroy + +progs_install_splitcmd = $(progs_splitcmd) + +INSTALL_SETCAP_FLAGS = -m710 -gbtrfs + +# linux capabilities(7) needed; used by "install-splitcmd-setcap-%" below +btrfs_subvolume_show_fcaps = "cap_sys_admin,cap_fowner,cap_dac_read_search" +btrfs_subvolume_list_fcaps = "cap_sys_admin,cap_fowner,cap_dac_read_search" +btrfs_subvolume_snapshot_fcaps = "cap_sys_admin,cap_fowner,cap_dac_override,cap_dac_read_search" +btrfs_subvolume_delete_fcaps = "cap_sys_admin,cap_dac_override" +btrfs_send_fcaps = "cap_sys_admin,cap_fowner,cap_dac_read_search" +btrfs_receive_fcaps = "cap_sys_admin,cap_fowner,cap_chown,cap_mknod,cap_setfcap,cap_dac_override,cap_dac_read_search" +btrfs_filesystem_usage_fcaps = "cap_sys_admin" +btrfs_qgroup_destroy_fcaps = "cap_sys_admin,cap_dac_override" + # external libs required by various binaries; for btrfs-foo, # specify btrfs_foo_libs = <list of libs>; see $($(subst...)) rules below btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2) @@ -318,6 +343,7 @@ endif $($(subst -,_,btrfs-$(@:%/$(notdir $@)=%)-cflags)) all: $(progs_build) $(libs_build) $(BUILDDIRS) +splitcmd: $(progs_splitcmd) ifeq ($(PYTHON_BINDINGS),1) all: libbtrfsutil_python endif @@ -618,6 +644,7 @@ clean: $(CLEANDIRS) $(check_defs) \ $(libs) $(lib_links) \ $(progs_static) \ + $(progs_splitcmd) \ libbtrfsutil/*.o libbtrfsutil/*.o.d ifeq ($(PYTHON_BINDINGS),1) $(Q)cd libbtrfsutil/python; \ @@ -678,6 +705,15 @@ install-static: $(progs_static) $(INSTALLDIRS) # btrfsck is a link to btrfs in the src tree, make it so for installed file as well $(LN_S) -f btrfs.static $(DESTDIR)$(bindir)/btrfsck.static +# install split-command binary, and set linux capabilities(7) defined +# in btrfs_*_fcaps above, using setcap(8) +install-splitcmd-setcap-%: % + @echo $(INSTALL) -m755 -d $(DESTDIR)$(bindir) + @echo $(INSTALL) $(INSTALL_SETCAP_FLAGS) $< $(DESTDIR)$(bindir) + @echo $(SETCAP) $($(subst -,_,$<)_fcaps)+ep $(DESTDIR)$(bindir)/$< + +install-splitcmd-setcap: $(progs_install_splitcmd) $(patsubst %,install-splitcmd-setcap-%,$(progs_install_splitcmd)) + $(INSTALLDIRS): @echo "Making install in $(patsubst install-%,%,$@)" $(Q)$(MAKE) $(MAKEOPTS) -C $(patsubst install-%,%,$@) install diff --git a/Makefile.inc.in b/Makefile.inc.in index a86c528e..567e4e6f 100644 --- a/Makefile.inc.in +++ b/Makefile.inc.in @@ -10,6 +10,7 @@ AR = @AR@ RM = @RM@ RMDIR = @RMDIR@ INSTALL = @INSTALL@ +SETCAP = @SETCAP@ DISABLE_DOCUMENTATION = @DISABLE_DOCUMENTATION@ DISABLE_BTRFSCONVERT = @DISABLE_BTRFSCONVERT@ BUILD_PROGRAMS = @BUILD_PROGRAMS@ diff --git a/configure.ac b/configure.ac index df02f206..fefbfd9c 100644 --- a/configure.ac +++ b/configure.ac @@ -39,6 +39,7 @@ AC_PROG_LN_S AC_CHECK_TOOL([AR], [ar]) AC_PATH_PROG([RM], [rm], [rm]) AC_PATH_PROG([RMDIR], [rmdir], [rmdir]) +AC_PATH_PROG([SETCAP], [setcap], [setcap]) AC_CHECK_FUNCS([openat], [], -- 2.16.4