dpkg-buildpackage 因 openssh-6.6p1(Ubuntu 14.04.3)编译器错误而失败

dpkg-buildpackage 因 openssh-6.6p1(Ubuntu 14.04.3)编译器错误而失败

我需要重建 openssh 来打开审计日志。

因此(以root身份):

apt-get openssh
apt-get build-dep openssh
dpkg-source -x openssh_6.6p1-2ubuntu2.3.dsc

编辑 debian/rules,添加:

confflags += --with-audit=linux

confflags += --with-ssl-engine

./configure
make
dpkg-buildpackage -b

......

gcc -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-all -D_FORTIFY_SOURCE=2 -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -DLOGIN_PROGRAM=\"/bin/login\" -DLOGIN_NO_ENDOPT -DSSH_EXTRAVERSION=\"Ubuntu-2ubuntu2.3ubuntu1audit\"  -I. -I..  -I/usr/include/editline     -I/usr/include/ConsoleKit/ck-connector -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include   -DSSHDIR=\"/etc/ssh\" -D_PATH_SSH_PROGRAM=\"/usr/bin/ssh\" -D_PATH_SSH_ASKPASS_DEFAULT=\"/usr/bin/ssh-askpass\" -D_PATH_SFTP_SERVER=\"/usr/lib/openssh/sftp-server\" -D_PATH_SSH_KEY_SIGN=\"/usr/lib/openssh/ssh-keysign\" -D_PATH_SSH_PKCS11_HELPER=\"/usr/lib/openssh/ssh-pkcs11-helper\" -D_PATH_SSH_PIDDIR=\"/var/run\" -D_PATH_PRIVSEP_CHROOT_DIR=\"/var/run/sshd\" -DHAVE_CONFIG_H -c ../sshd.c

In file included from ../openbsd-compat/sys-tree.h:29:0,
                 from ../sshd.c:56:
./config.h:1606:0: warning: "SUPERUSER_PATH" redefined [enabled by default]
 #define SUPERUSER_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
 ^

In file included from ../includes.h:171:0,
                 from ../sshd.c:45:
../defines.h:399:0: note: this is the location of the previous definition
 # define SUPERUSER_PATH _PATH_STDPATH
 ^

In file included from ../openbsd-compat/sys-tree.h:29:0,
                 from ../sshd.c:56:
./config.h:1615:0: warning: "USER_PATH" redefined [enabled by default]
 #define USER_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
 ^

In file included from ../includes.h:19:0,
                 from ../sshd.c:45:
../config.h:1615:0: note: this is the location of the previous definition
 #define USER_PATH "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
 ^

In file included from ../openbsd-compat/openbsd-compat.h:157:0,
                 from ../includes.h:174,
                 from ../sshd.c:45:
**../openbsd-compat/bsd-misc.h:122:39: error: expected identifier or ‘(’ before ‘while’**
 # define krb5_free_error_message(a,b) while(0)

有谁知道解决这个问题的方法吗?

我尝试将该while(0)部件放入(){},但没有帮助。

使用 14.04.0 时我没有遇到这个问题。

如能提供任何建议/提示我将非常感激。

谢谢!

答案1

make并且configure是标准 Unix 的一部分(即不是Debian 专用的工具链,用于构建软件。Debian 在内部使用它们并不奇怪,但它很可能将构建过程的每个部分包装在自己的命令中,以便它可以控制如何configure调用make。这就是你想要的,因为你不知道(也不知道)了解)所有必要的琐碎细节,以便“劫持” Debian 的构建过程makeconfigure取得成功。

我从来没有试过重建 Debian 软件包但正如我所怀疑的,有一个指导果然,我找到了构建包的命令那里

fakeroot debian/rules clean
fakeroot debian/rules binary

fakeroot命令允许您以非 root 用户身份运行任何需要 root 访问权限的程序。这很好,因为gcc它不是设计为以 root 身份运行的,而且实际上永远都不应该。但是,如果这不困扰您,您可以跳过安装fakeroot,只需运行

debian/rules binary

直接。正如我所说,我从未尝试过,所以如果它有效,请告诉我!:-)

相关内容