Có thể cho biết liệu nhân Linux của tôi là tùy chỉnh (tức là được biên dịch) trái ngược với bản phân phối không?


10

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?



2
Chà, chỉ cần so sánh nhị phân với tệp gói ... và xem, liệu đó có phải là hạt nhân ban đầu hay nó đã bị thay đổi ..
kravemir

Câu trả lời:


13

Chắc chắn, chỉ cần kiểm tra xem có dpkgbiế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 dpkgcơ 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 dlocatetừ dlocategói. dlocateđầu tiên xây dựng bộ đệm từ dpkgcơ 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-amd64ví 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

1
Xin vui lòng xem ý kiến ​​của tôi về câu trả lời của exussum. Điều gì sẽ xảy ra nếu bạn chỉ biên dịch lại cùng một kernel, với các tùy chọn khác nhau, nhưng không đặt cho nó một tên khác?
terdon

@terdon xem các chỉnh sửa.
Faheem Mitha

2
Ah, vâng, băm nên làm điều đó, thông minh!
terdon

Mặc dù cách tiếp cận này hoạt động trong hầu hết các trường hợp, nhưng nó không hoạt động vì tôi có một kho lưu trữ riêng cho các gói được biên dịch cục bộ, vì vậy nó hiển thị dưới dạng gói của nhà cung cấp ngay cả khi tôi sử dụng gói được biên dịch cục bộ. tất nhiên bạn có thể nhận ra sự khác biệt một cách dễ dàng vì các gói của nhà cung cấp có tên nhà cung cấp là một phần của phiên bản, trong đó các gói của tôi có tên của tôi.
hildred

1
@bytefire apt-cache show ...hoạt động. Tôi thấy tôi đã nhầm. Sửa chữa ngay.
Faheem Mitha

7

Tối thiểu, uname -rsẽ đư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. SMPcho 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ụ, stattrê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.


2

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

3.19.0-15-generic

trong đó chỉ ra cùng một phiên bản


1
Điều đó sẽ thay đổi nếu bạn biên dịch lại cùng một phiên bản với các tùy chọn khác nhau? Tôi không thấy lý do tại sao chuỗi phiên bản sẽ thay đổi trong trường hợp đó.
terdon

Tôi không chắc 2 cái cùng tên sẽ cài đặt. Tôi chưa thử. Cá nhân khi biên dịch lại với các tùy chọn khác nhau, tôi xóa phiên bản khỏi trình quản lý gói để loại bỏ xung đột
exussum

Tôi đoán rằng cùng một tên sẽ được ghi đè lê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 unamethay đổ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-cacheuname -rsẽ 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ộ.
terdon

@terdon Chuỗi phiên bản có thể được tùy chỉnh trong cấu hình kernel, đây là một ý tưởng hay nếu bạn đang sử dụng nguồn distro.
goldilocks

@goldilocks vâng, tôi thấy điều đó trong câu trả lời của bạn và điều đó có ý nghĩa. Tuy nhiên, nếu tôi đủ ngớ ngẩn để không làm như vậy và vừa biên dịch lại kernel stock của distro của tôi thay đổi một vài tùy chọn, chuỗi phiên bản sẽ giống hệt nhau, phải không? Đề xuất của bạn về số lượng bản dựng có thể giúp ích, nhưng theo tôi biết, không phải những gì được đề xuất ở đây.
terdon

0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.