RPMbuild立在相同的客户操作系统上,在另一个主机上的段错误(Asterisk)

我已经使用在OSX上运行的构build虚拟机(MacBook,使用Parallels)为Centos 7构build了一个用于Asterisk 13的RPM。 这是为了在我们的QA和生产系统上使用这个RPM。

但是,在其中一个QA服务器上安装了RPM之后,在启动时会立即出现星号段错误,并且不会运行。 QA服务器是在Intel CPU上运行的另一个Centos 7 VM,使用KVM(Qemu)的Centos主机。

我的RPM规格文件是:

%define _prefix /usr/local %define _ver 13.4.0 %define _unpackaged_files_terminate_build 0 %define debug_package %{nil} Name: asterisk Version: %{_ver} Release: 1 Summary: Asterisk Vendor: Asterisk Packager: Amir Abiri <???> Source: http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-%{_ver}.tar.gz URL: http://www.asterisk.org/ Group: Applications/Multimedia BuildRequires: ncurses-devel BuildRequires: libuuid-devel BuildRequires: jansson-devel BuildRequires: sqlite-devel %description - %prep %setup %build ./configure make %install make install DESTDIR=$RPM_BUILD_ROOT mkdir -p "$RPM_BUILD_ROOT/usr/lib/systemd/system" cp %{_topdir}/PATCHES/asterisk/asterisk.service "$RPM_BUILD_ROOT/usr/lib/systemd/system" %post /sbin/ldconfig 2>/dev/null systemctl enable asterisk %postun /sbin/ldconfig 2>/dev/null systemctl disable asterisk %files %defattr (-,root,root) /usr/sbin/* /usr/lib/asterisk/* /usr/lib/libasteriskssl.so* %exclude /usr/include/asterisk* /usr/lib/systemd/system/asterisk.service /var/lib/asterisk/* /usr/share/man/* 

GCC版本是:

 4.8.3 20140911 (Red Hat 4.8.3-9) 

构buildVM(OSX主机)的cpuinfo是:

 processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 70 model name : Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz stepping : 1 cpu MHz : 2194.000 cache size : 6144 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat xsaveopt pln pts dtherm fsgsbase bmi1 avx2 smep bmi2 invpcid bogomips : 4388.00 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: 

QA服务器虚拟机的cpuinfo是:

 processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version 1.5.3 stepping : 3 microcode : 0x1 cpu MHz : 3092.836 cache size : 4096 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl pni cx16 hypervisor lahf_lm abm bogomips : 6185.67 clflush size : 64 cache_alignment : 64 address sizes : 39 bits physical, 48 bits virtual power management: 

如果我通过strace运行sagfaulting星号,strace输出的最后一个屏幕是:

 clone(child_stack=0x7f5d487c3f70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f5d487c49d0, tls=0x7f5d487c4700, child_tidptr=0x7f5d487c49d0) = 4583 mmap(NULL, 507904, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f5d486cd000 mprotect(0x7f5d486cd000, 4096, PROT_NONE) = 0 clone(child_stack=0x7f5d48747f70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f5d487489d0, tls=0x7f5d48748700, child_tidptr=0x7f5d487489d0) = 4584 open("/dev/urandom", O_RDONLY|O_CLOEXEC) = 6 fcntl(6, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(6, F_SETFD, FD_CLOEXEC) = 0 getuid() = 0 getppid() = 4569 read(6, "\242Dm\252\343n\333\22\264\177,\355m\1w\300", 16) = 16 close(6) = 0 gettid() = 4572 stat("/etc/asterisk/codecs.conf", 0x7fffc4362f20) = -1 ENOENT (No such file or directory) mmap(NULL, 507904, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f5d48651000 mprotect(0x7f5d48651000, 4096, PROT_NONE) = 0 clone(child_stack=0x7f5d486cbf70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f5d486cc9d0, tls=0x7f5d486cc700, child_tidptr=0x7f5d486cc9d0) = 4585 mmap(NULL, 507904, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f5d485d5000 mprotect(0x7f5d485d5000, 4096, PROT_NONE) = 0 clone(child_stack=0x7f5d4864ff70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f5d486509d0, tls=0x7f5d48650700, child_tidptr=0x7f5d486509d0) = 4586 brk(0) = 0x1993000 brk(0x19b4000) = 0x19b4000 open("/dev/urandom", O_RDONLY|O_CLOEXEC) = 6 fcntl(6, F_GETFD) = 0x1 (flags FD_CLOEXEC) fcntl(6, F_SETFD, FD_CLOEXEC) = 0 getuid() = 0 getppid() = 4569 read(6, "\251\357\241U\357\267\34G\314@\272\256r\341\210r", 16) = 16 close(6) = 0 gettid() = 4572 stat("/etc/asterisk/modules.conf", {st_mode=S_IFREG|0644, st_size=2768, ...}) = 0 open("/etc/asterisk/modules.conf", O_RDONLY) = 6 fstat(6, {st_mode=S_IFREG|0644, st_size=2768, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5d4b6ab000 read(6, "[modules]\nautoload = no\n\n; This "..., 4096) = 2768 read(6, "", 4096) = 0 close(6) = 0 munmap(0x7f5d4b6ab000, 4096) = 0 stat("/etc/asterisk/features.conf", 0x7fffc4362ea0) = -1 ENOENT (No such file or directory) --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPN, si_addr=0x5d5a57} --- +++ killed by SIGILL (core dumped) +++ 

如果要在一台机器上构build并在另一台机器上运行,您将需要禁用BUILD_NATIVE选项。

在你的%build部分中试试:

 ./configure make menuselect.makeopts menuselect/menuselect --disable BUILD_NATIVE menuselect.makeopts make