On 14/03/2016 23:39, Gordan Bobic wrote:
On 2016-03-14 22:58, Gordan Bobic wrote:
On 2016-03-14 22:25, Gordan Bobic wrote:
On 2016-03-14 22:14, Michael Howard wrote:
On 14/03/2016 21:47, Gordan Bobic wrote:
On 2016-03-14 21:41, Michael Howard wrote:
On 14/03/2016 17:16, Gordan Bobic wrote: > On 2016-03-14 17:13, Michael Howard wrote: >> On 14/03/2016 16:56, Gordan Bobic wrote: >>> On 2016-03-14 15:00, Gordan Bobic wrote: >>>> On 2016-03-01 22:32, Michael Howard wrote: >>>>> On 01/03/2016 22:26, Richard W.M. Jones wrote: >>>>>> On Mon, Feb 29, 2016 at 03:20:03PM +0000, Michael Howard >>>>>> wrote: >>>>>>> Just to let you know, I can't get this to work. aarch64 is >>>>>>> supposed >>>>>>> to be binary compatible, with the correct libraries >>>>>>> installed, but >>>>>>> I'm thinking the cpu isn't. >>>>>>> >>>>>>> All I get is 'cannot execute binary file: Exec format error', >>>>>>> regardless of what I try. >>>>>> As I understand it the problem is page size - 64K was >>>>>> chosen by >>>>>> Red Hat for aarch64, where as 4K is the norm on armv7. >>>>>> >>>>>> Anyway, you can run a 32 bit VM and it works well -- in >>>>>> fact a lot >>>>>> faster than regular 32 bit armv7 hardware. >>>>>> >>>>> >>>>> Yes, with CONFIG_ARM64_4K_PAGES=y and CONFIG_COMPAT=y, 32 >>>>> bit binaries run fine. >>>> >>>> I built a kernel with these options enabled, but chrooting >>>> into an >>>> armv5tel subtree segfaults immediately. :-( >>>> >>>> # grep -E "CONFIG_COMPAT=|CONFIG_ARM64_4K_PAGES=" >>>> /boot/config-4.4.5 >>>> CONFIG_ARM64_4K_PAGES=y >>>> CONFIG_COMPAT=y >>>> >>>> # chroot /orcone/docker/rsel6/ >>>> Segmentation fault >>>> >>>> The chroot is armv5tel soft-float, which I think should work. >>>> Oddly, I see no mention of a segfault in dmesg or in >>>> /var/log/messages >>>> on the host... >>>> >>>> # strace chroot /orcone/docker/media/ >>>> execve("/sbin/chroot", ["chroot", "/orcone/docker/media/"], >>>> [/* 18 vars */]) = 0 >>>> brk(0) = 0x153eb000 >>>> mmap(NULL, 4096, PROT_READ|PROT_WRITE, >>>> MAP_PRIVATE|MAP_ANONYMOUS, -1, >>>> 0) = 0x7f98108000 >>>> faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT >>>> (No such >>>> file or directory) >>>> openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 >>>> fstat(3, {st_mode=S_IFREG|0644, st_size=23876, ...}) = 0 >>>> mmap(NULL, 23876, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f98102000 >>>> close(3) = 0 >>>> openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 >>>> read(3, >>>> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\270\r\2\0\0\0\0\0"..., >>>> 832) = 832 >>>> fstat(3, {st_mode=S_IFREG|0755, st_size=1801536, ...}) = 0 >>>> mmap(NULL, 1528796, PROT_READ|PROT_EXEC, >>>> MAP_PRIVATE|MAP_DENYWRITE, 3, >>>> 0) = 0x7f97f66000 >>>> mprotect(0x7f980c2000, 65536, PROT_NONE) = 0 >>>> mmap(0x7f980d2000, 24576, PROT_READ|PROT_WRITE, >>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15c000) = 0x7f980d2000 >>>> mmap(0x7f980d8000, 13276, PROT_READ|PROT_WRITE, >>>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f980d8000 >>>> close(3) = 0 >>>> mmap(NULL, 4096, PROT_READ|PROT_WRITE, >>>> MAP_PRIVATE|MAP_ANONYMOUS, -1, >>>> 0) = 0x7f98101000 >>>> mmap(NULL, 4096, PROT_READ|PROT_WRITE, >>>> MAP_PRIVATE|MAP_ANONYMOUS, -1, >>>> 0) = 0x7f98100000 >>>> mmap(NULL, 4096, PROT_READ|PROT_WRITE, >>>> MAP_PRIVATE|MAP_ANONYMOUS, -1, >>>> 0) = 0x7f980ff000 >>>> mprotect(0x7f980d2000, 16384, PROT_READ) = 0 >>>> mprotect(0x41f000, 4096, PROT_READ) = 0 >>>> mprotect(0x7f9810b000, 4096, PROT_READ) = 0 >>>> munmap(0x7f98102000, 23876) = 0 >>>> brk(0) = 0x153eb000 >>>> brk(0x1540c000) = 0x1540c000 >>>> brk(0) = 0x1540c000 >>>> openat(AT_FDCWD, "/usr/lib/locale/locale-archive", >>>> O_RDONLY|O_CLOEXEC) = 3 >>>> fstat(3, {st_mode=S_IFREG|0644, st_size=109669264, ...}) = 0 >>>> mmap(NULL, 109669264, PROT_READ, MAP_PRIVATE, 3, 0) = >>>> 0x7f916cf000 >>>> close(3) = 0 >>>> chroot("/orcone/docker/media/") = 0 >>>> chdir("/") = 0 >>>> execve("/bin/bash", ["/bin/bash", "-i"], [/* 18 vars */]) = >>>> -1053305918634065933 >>>> --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} --- >>>> +++ killed by SIGSEGV +++ >>>> Segmentation fault >>>> >>>> >>>> What am I doing differently? >>> >>> Just to make sure we are as much on the same page as possible, >>> here >>> is the minimal chroot I am trying: >>> http://ftp.redsleeve.org/pub/el6-staging/rootfs/rsel6-minimal.tar.xz >>> >>> >>> Built from the latest RedSleeve 6 binaries using: >>> yum --installroot=/some/path install @core >>> >>> Can you extract that into an empty folder and chroot into it >>> from your aarch64 CentOS 7 install? Does it work for you or >>> does it segfault? >>> >>> If it works for you, any chance you could post your kernel >>> config somewhere? It's the only thing I can think of that >>> could plausibly be causeing the discrepancy (I am on 4.4.5 >>> and IIRC you were on 4.5rc). >> >> Downloading now but it will be a couple of hours before I can >> check it out. > > Thanks, most appreciated. You may want to re-download, as I > literally > just replaced with tar ball with a more compressed version. If > that happened > during your download, what you get may end up being corrupted > (check whether > it matches the md5 checksum).
I did re-download, just in case. It all works here as expected.
[root@mp30 ~]# chroot ~/CHROOT2 [root@mp30 ~]# echo "nameserver 192.168.1.2" > /etc/resolv.conf [root@mp30 /]# yum search linux base | 3.8 kB 00:00 updates | 3.0 kB 00:00 ============================== N/S Matched: linux ============================== libselinux.armv5tel : SELinux library and simple utilities libselinux-utils.armv5tel : SELinux libselinux utilies python-linux-procfs.noarch : Linux /proc abstraction classes selinux-policy.noarch : SELinux policy configuration selinux-policy-doc.noarch : SELinux policy documentation selinux-policy-minimum.noarch : SELinux minimum base policy selinux-policy-mls.noarch : SELinux mls base policy selinux- SELinux policy compiler epel-release.noarch : Extra Packages for Enterprise Linux repository : configuration filesystem.armv5tel : The basic directory layout for a Linux system iptables.armv5tel : Tools for managing Linux kernel packet filtering : capabilities libsemanage.armv5tel : SELinux binary policy manipulation library libsepol.armv5tel : SELinux binary policy manipulation library man-pages.noarch : Man (manual) pages from the Linux Documentation Project man-pages-cs.noarch : Czech man pages from the Linux Documentation Project man-pages-es.noarch : Spanish man pages from the Linux Documentation Project man-pages-fr.noarch : French version of the Linux man-pages man-pages-it.noarch : Italian man (manual) pages from the Linux Documentation : Project man-pages-pl.noarch : Polish man pages from the Linux Documentation Project man-pages-ru.noarch : Russian man pages from the Linux Documentation Project man-pages-uk.noarch : Ukrainian man pages from the Linux Documentation Project policycoreutils.armv5tel : SELinux policy core utilities redhat-bookmarks.noarch : Red Hat Enterprise Linux bookmarks redhat-indexhtml.noarch : Browser default start page for Red Hat Enterprise : Linux redsleeve-release.armv5tel : Red Sleeve Enterprise Linux release file rhel-guest-image-6.noarch : Red Hat Enterprise Linux Guest Images util-linux-ng.armv5tel : A collection of basic system utilities
Name and summary matches only, use "search all" for everything. [root@mp30 /]# exit [root@mp30 ~]#
That is most puzzling. Any chance you could please post your kernel config file (pastebin it or similar)? I'd like to try to build one exactly the same and see if I can get it working.
No problem;
If all else fails (don't see why it should) I can put up the binary and modules so you can triple check. I didn't build an RPM as I came across a packaging problem, an aarch64/UTS_MACHINE issue I believe and I had no idea how to solve it nor could I spend any real time investigating it.
Thanks for this. I'm building a new kernel with your config now. Hoping to report success in the morning. :)
I forgot how fast this thing builds the kernel. :) I'm happy to say that 4.5.0 release kernel works fine, and I can run chroots!
Thanks for your help Michael, I really appreciate it.
Now to see if I can make the same thing work with the LT 4.4.x kernel...
Using that same config with 4.4.5 (make oldconfig, take all defaults) also works. There must have been an extra config option that I missed the first time around.
Excellent.