Tôi đang thấy một cái gì đó thực sự kỳ lạ trong armel
môi trường Debian chroot-ed .
Nhưng trước tiên, một chút lạc hậu ... Điều này còn dài, nhưng câu hỏi rất phức tạp và bất kỳ trợ giúp tiềm năng nào phụ thuộc vào việc biết toàn bộ câu chuyện.
Tôi có một SoC ARM nhúng chạy Linux - cụ thể hơn là Debian armel
Lenny trên kernel 2.6.17. Bản phân phối Debian có thể dễ dàng nâng cấp lên các phiên bản mới hơn ( sudo apt-get dist-upgrade
) và do đó có thể được tăng tốc, lên các armel
phiên bản
squeeze
hoặc thậm chí wheezy
.
Vấn đề là kernel là một tùy chỉnh ... SoC ARM trong câu hỏi không phải là một phần của kernel chính, vì vậy nó bị bỏ rơi khá nhiều ở 2.6.17.
Nếu bạn biết Linux và GLIBC hoạt động như thế nào, bạn đã có thể thấy vấn đề - các phiên bản GLIBC được biên dịch với phiên bản kernel được hỗ trợ tối thiểu ... Điều này đã vượt qua 2.6.17. Vì vậy, nếu chúng ta cố gắng ví dụ như chroot vào một ...
$ # From inside the little ARM machine running Debian Lenny
$ sudo debootstrap --arch armel squeeze /squeeze \
http://ftp.whateverCountry.debian.org/debian
$ sudo -i
# mount -t proc none /squeeze/proc
# mount -t sysfs none /squeeze/sys
# mount -t devpts none /squeeze/dev/pts
# chroot /squeeze
Fatal: Kernel too old
... Chúng tôi thấy một thông báo từ GLIBC squeeze
, nói với chúng tôi rằng nó không được biên dịch để hoạt động với kernel cũ này (2.6.17).
Vấn đề tương tự cũng xảy ra với wheezy - vì nó mới hơn so với bóp - và thực tế sẽ xảy ra với bất kỳ phiên bản Debian nào kể từ bây giờ, vì GLIBC của chúng sẽ không hoạt động trên kernel 2.6.17 của tôi.
Lúc đầu, tôi nghĩ rằng đây là một công cụ thỏa thuận - nhưng sau đó tôi nhận ra rằng về mặt lý thuyết tôi có thể biên dịch lại GLIBC để làm việc với hạt nhân cũ mà SoC của tôi đang sử dụng ... Nhưng tôi cần một môi trường giống hệt với những gì được sử dụng để xây dựng libc6 gói trong ví dụ Debian ép.
Tôi đoán việc biên dịch GLIBC và chuẩn bị tệp libc6_2.11.3-4.deb được thực hiện thông qua máy móc biên dịch chéo tự động được phát minh bởi các vị thần của Debian.
Tôi không phải là Chúa ... tôi cũng không thể tìm thấy bất cứ điều gì ở Google về cách trở thành một - tức là cách sử dụng Core i5 của tôi làm máy chủ, để biên dịch chéo GLIBC bằng cách sử dụng chính các cài đặt mà phiên bản đóng gói (bên trong Debian squeeze
) sử dụng.
Vì vậy, tôi đã lừa nó - Tôi đã tìm ra cách thiết lập phiên bản ARM của Debian ép trên Core i5 của tôi (một kỹ thuật sử dụng phiên bản tĩnh của qemu-arm
nhị phân).
Khi tôi đã chọn trong phiên bản được lưu trữ x86 của mình Debian-armel-squeeze
, tôi có thể chỉ cần ...
$ cd /var/tmp
$ apt-get source libc6
...
$ # edit this in - compile for my kernel...
$ vi eglibc-2.11.3/debian/sysdeps/linux.mk
...
MIN_KERNEL_SUPPORTED := 2.6.17
...
$ export DEB_BUILD_OPTS="nocheck parallel=1"
$ cd eglibc-2.11.3
$ dpkg-buildpackage -b -d -us -uc
... và sau 3 giờ (phiên bản chroot được lưu trữ trên Core i5
Debian-armel-squeeze
chậm hơn nhiều so với máy gốc ...) Tôi đã nhận được gói libc6 .deb của mình. Có lẽ sẽ mất 3 tháng để thực hiện việc xây dựng này trong SoC của tôi, vì vậy tôi không phàn nàn.
Quay trở lại bên trong ARM SoC thực sự của tôi, tôi đã sao chép tất cả các tệp libc (.so) của gói mới qua các gói mặc định và cố gắng chroot ...
# chroot squeeze/
root@ttsiodras:/#
Đúng! Nó đã làm việc! (hoặc có vẻ như vậy)
Libc tùy chỉnh của tôi báo cáo từ bên trong chroot:
# /lib/libc.so.6
GNU C Library (Debian EGLIBC 2.11.3-4) stable release version 2.11.3, by Roland McGrath et al.
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.5.
Compiled on a Linux 2.6.26 system on 2014-10-23.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
Support for some architectures added on, not maintained in glibc core.
BIND-8.2.3-T5B
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.
Mọi thứ dường như hoạt động - Tôi đã sao chép một tập tin, gọi ls
...
Nhưng khi tôi cố gắng sử dụng apt-get
để cài đặt một số ứng dụng từ đó squeeze
, tôi bắt đầu gặp ... một số lỗi không mong muốn:
# apt-get install indent
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
indent
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 110 kB of archives.
After this operation, 516 kB of additional disk space will be used.
Get:1 http://ftp.gr.debian.org/debian/ squeeze/main indent armel 2.2.11-1 [110 kB]
Fetched 110 kB in 0s (236 kB/s)
tar: ./control: Cannot utime: Function not implemented
tar: ./md5sums: Cannot utime: Function not implemented
tar: .: Cannot utime: Function not implemented
tar: Exiting with failure status due to previous errors
dpkg-deb: subprocess tar returned error exit status 2
dpkg: error processing /var/cache/apt/archives/indent_2.2.11-1_armel.deb (--unpack):
subprocess dpkg-deb --control returned error exit status 2
configured to not write apport reports
rm: cannot remove `/var/lib/dpkg/tmp.ci': Function not implemented
dpkg: error while cleaning up:
subprocess rm cleanup returned error exit status 1
Errors were encountered while processing:
/var/cache/apt/archives/indent_2.2.11-1_armel.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Oh-oh ... một loạt các Function not implemented
. Nghe có vẻ như GLIBC báo cáo rằng những điều cơ bản không hoạt động ...
Tôi quản lý để strace (đừng hỏi làm thế nào) và đã tìm ra rằng tất cả các -at
chức năng đang thất bại: openat
, mkdirat
, renameat
, vv - tất cả chúng đều ENOSYS báo cáo.
Có vẻ như tôi chỉ thành công một phần - một số cuộc gọi hệ thống đang thất bại trong GLIBC mới của tôi.
Có thể biên dịch một squeeze
hoặc wheeze
GLIBC để thực thi theo 2.6.17 không?
Bất kỳ ý tưởng / gợi ý nào về những gì tôi đã làm sai và / hoặc cách tiến hành sẽ được đánh giá cao ...