Lấy ví dụ về Ubuntu, chúng ta có thể biết liệu kernel đã được biên dịch tùy chỉnh hơn là những gì đi kèm với distro không?
Lấy ví dụ về Ubuntu, chúng ta có thể biết liệu kernel đã được biên dịch tùy chỉnh hơn là những gì đi kèm với distro không?
Câu trả lời:
Chắc chắn, chỉ cần kiểm tra xem có dpkg
biết về nó.
Đầu tiên hãy kiểm tra phiên bản kernel bạn đang chạy.
uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Sau đó nói dpkg
để tìm kiếm tập tin hình ảnh hạt nhân trong dpkg
cơ sở dữ liệu.
dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Hoặc, tốt hơn, sử dụng dlocate
từ dlocate
gói. dlocate
đầu tiên xây dựng bộ đệm từ dpkg
cơ sở dữ liệu và sử dụng nó. Vì vậy, nó là nhanh chóng.
dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Cuối cùng, hãy kiểm tra xem kho lưu trữ Debian có chứa gói này không.
apt-cache policy linux-image-3.2.0-4-amd64
linux-image-3.2.0-4-amd64:
Installed: 3.2.68-1+deb7u1
Candidate: 3.2.68-1+deb7u1
Version table:
*** 3.2.68-1+deb7u1 0
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
100 /var/lib/dpkg/status
3.2.65-1 0
500 http://httpredir.debian.org/debian/ wheezy/main amd64 Packages
Nếu họ không, thì đó là một gói tùy chỉnh. Tất nhiên, nếu dpkg không biết về tệp hình ảnh, thì kernel của bạn hoàn toàn không phải là một phần của gói, nhưng đã được biên dịch cục bộ.
Lưu ý rằng apt
có thể cho biết sự khác biệt giữa một gói trong kho lưu trữ Debian và một gói được biên dịch cục bộ cùng tên. Tôi nghĩ rằng nó kiểm tra md5sum của gói, nhưng tôi quên các chi tiết về cách nó làm điều đó. Các gói nhị phân chứa thông tin về băm, apt-cache show linux-image-3.2.0-4-amd64
ví dụ , xem phần dưới cùng . ví dụ
Package: linux-image-3.2.0-4-amd64
Source: linux
Version: 3.2.68-1+deb7u1
Installed-Size: 105729
[...]
Size: 23483788
MD5sum: f9736f30f8b68ae79b2747d8a710ce28
SHA1: 64bfde903892801dccd04b52b12316901a02cd96
SHA256: 775814b3eff4a964b593c0bdeaac20587a4e3ddb1257a9d2bfcf1e9d3b9bfd15
apt-cache show ...
hoạt động. Tôi thấy tôi đã nhầm. Sửa chữa ngay.
Tối thiểu, uname -r
sẽ đưa ra phiên bản kernal, chẳng hạn như 3.18.6
. Tuy nhiên, khi kernel được biên dịch, một chuỗi bổ sung có thể được cấu hình và gắn vào đó và các distro thường làm điều này để chỉ mức độ vá của riêng chúng (sau dấu gạch ngang) và hương vị, chẳng hạn như 3.18.6-32-generic
. Đó là một đầu mối; rõ ràng sử dụng chuỗi của riêng bạn khi bạn tạo kernel tùy chỉnh có thể là một chuỗi khác.
uname -v
đưa ra một chuỗi mà theo mặc định là một cái gì đó như thế này
#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015
Số này là tùy ý theo nghĩa đó là số lần hạt nhân này được xây dựng bằng cách sử dụng một cây nguồn cụ thể mà không cần đặt lại cây - điều này có thể hữu ích khi bạn tự xây dựng. SMP
cho biết hạt nhân đa tác vụ (nghĩa là không phải thời gian thực) và PREEMPT là một tùy chọn cấu hình khác liên quan đến "mô hình ưu tiên" của bộ lập lịch. Nhưng manh mối lớn ở đây có lẽ là thời gian nó được xây dựng. Điều này có thể được sử dụng để khớp với dấu thời gian sửa đổi / thay đổi trên chính kernel, lưu ý rằng có thể thay đổi, ví dụ, với touch
. Ví dụ, stat
trên kernel đó trông như thế này:
File: ‘3.19-goldilocksSpecial’
Size: 6858880 Blocks: 13400 IO Block: 4096 regular file
Device: 801h/2049d Inode: 3156605 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-02-15 15:32:29.000000000 -0500
Modify: 2015-03-03 13:55:21.000000000 -0500
Change: 2015-03-03 14:02:26.767045553 -0500
Birth: -
Đó là khá nhiều phù hợp với Mon Mar 9 13:55:25 EDT 2015
.
Giống như bất kỳ khác
sudo apt-cache policy linux-generic
là phiên bản được cài đặt mặc dù trình quản lý gói và
uname -r
so sánh các phiên bản
đối với tôi nó
linux-generic:
Installed: 3.19.0.15.14
Candidate: 3.19.0.15.14
và
3.19.0-15-generic
trong đó chỉ ra cùng một phiên bản
/boot
. Quan điểm của tôi là tôi không thấy lý do tại sao bạn mong muốn đầu ra uname
thay đổi nếu bạn chỉ biên dịch lại trong khi thay đổi một số tùy chọn. Trong trường hợp đó, tôi mong đợi điều đó apt-cache
và uname -r
sẽ trả lại thông tin tương tự, mặc dù thực tế là bạn đã biên dịch lại cục bộ.
Tôi muốn nói câu trả lời chung chung nhất là "không, bạn không thể". Có nhiều phương pháp khác nhau có thể giúp ích trong một số trường hợp nhất định và những phương pháp này đã được đề xuất nhưng tất cả đều có vẻ như bỏ lỡ tình huống này thực sự xảy ra như thế nào. Trong thực tế, nếu bạn đang sử dụng một kernel tùy chỉnh, kernel đó có thể làm bất cứ điều gì, kể cả việc ẩn sự hiện diện của nó hoặc dường như là một kernel khác.
Tôi sẽ lo lắng nếu bạn thực sự đang chạy kernel tùy chỉnh và không biết điều này. Cách đáng tin cậy duy nhất để biết hạt nhân nào đang được sử dụng là theo dõi cẩn thận hạt nhân nào bạn biên dịch và cài đặt.
Nếu bạn thực sự không chắc chắn hệ thống nào đang chạy hoặc hạt nhân này được xây dựng từ đâu hoặc đến từ đâu thì tôi sẽ nghiêm túc xem xét việc cài đặt lại hệ điều hành từ một hình ảnh tốt đã biết và cẩn thận hơn trong tương lai về những gì hạt nhân bạn thử và khởi động từ hoặc sử dụng.