เป็นไปได้หรือไม่ที่จะบอกได้ว่าเคอร์เนล Linux ของฉันเป็นแบบกำหนดเอง (เช่นเรียบเรียง) ตรงข้ามกับ distro หรือไม่?


10

จากตัวอย่างของอูบุนตูเราสามารถบอกได้ไหมว่าเคอร์เนลนั้นถูกคอมไพล์เองมากกว่าจะมาพร้อมกับ distro หรือไม่?


ตรวจสอบกระทู้นี้: unix.stackexchange.com/questions/43164/…
nomadrc

2
ดีก็ไบนารีเปรียบเทียบกับแฟ้มแพคเกจ ... และดูไม่ว่าจะเป็นเคอร์เนลเดิมหรือไม่ว่าจะมีการเปลี่ยนแปลง ..
kravemir

คำตอบ:


13

แน่นอนตรวจสอบว่าdpkgรู้เกี่ยวกับมันหรือไม่

ก่อนอื่นตรวจสอบรุ่นเคอร์เนลที่คุณใช้งานอยู่

uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux

จากนั้นบอกdpkgให้ค้นหาไฟล์อิมเมจเคอร์เนลในdpkgฐานข้อมูล

dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

หรือดีกว่าใช้dlocateจากdlocateแพ็คเกจ dlocateขั้นแรกให้สร้างแคชจากdpkgฐานข้อมูลและใช้สิ่งนั้น ดังนั้นจึงรวดเร็ว

dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

สุดท้ายตรวจสอบว่าคลังเก็บ Debian มีแพ็คเกจนี้

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

ถ้าไม่เช่นนั้นมันเป็นแพ็คเกจที่กำหนดเอง แน่นอนถ้า dpkg ไม่รู้เกี่ยวกับไฟล์รูปภาพเคอร์เนลของคุณไม่ได้เป็นส่วนหนึ่งของแพ็คเกจเลย แต่ถูกคอมไพล์แล้ว

ทราบว่าapt สามารถบอกความแตกต่างระหว่างแพคเกจในการเก็บถาวร Debian และหนึ่งในชื่อเดียวกันที่รวบรวมภายใน ฉันคิดว่ามันตรวจสอบ md5sum ของแพ็คเกจ แต่ฉันลืมรายละเอียดของวิธีการทำ แพคเกจไบนารีมีข้อมูลเกี่ยวกับแฮชดูด้านล่างของapt-cache show linux-image-3.2.0-4-amd64ตัวอย่างเช่น เช่น

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
โปรดดูความคิดเห็นของฉันเกี่ยวกับคำตอบของ exussum ถ้าคุณเพิ่งคอมไพล์เคอร์เนลเดิมด้วยตัวเลือกต่าง ๆ แต่อย่าตั้งชื่ออื่นล่ะ?
terdon

@terdon ดูการแก้ไข
Faheem Mitha

2
อ่าใช่แฮชควรทำมันช่างฉลาด!
terdon

แม้ว่าวิธีการนี้จะใช้งานได้ในกรณีส่วนใหญ่ แต่ก็ไม่ได้ทำงานเพราะฉันมีที่เก็บส่วนตัวสำหรับแพ็คเกจที่รวบรวมในเครื่องดังนั้นจึงแสดงเป็นแพ็คเกจผู้ขายแม้ว่าฉันจะใช้แพ็คเกจที่รวบรวมไว้ในเครื่องก็ตาม แน่นอนคุณสามารถมองเห็นความแตกต่างได้อย่างง่ายดายเนื่องจากแพ็คเกจผู้ขายมีชื่อผู้จัดจำหน่ายเป็นส่วนหนึ่งของเวอร์ชันที่แพ็คเกจของฉันมีชื่อของฉัน
hildred

1
@bytefire apt-cache show ...ทำงาน ฉันเห็นว่าฉันพิมพ์ผิด กำลังแก้ไขทันที
Faheem Mitha

7

อย่างน้อยที่สุดuname -rจะให้รุ่น kernal 3.18.6เช่น แต่เมื่อเคอร์เนลจะรวบรวมสตริงเพิ่มเติมสามารถกำหนดค่าและติดอยู่กับที่และ distros มักจะทำเช่นนี้เพื่อบ่งบอกถึงระดับของตัวเองแพทช์ (หลังเส้นประ) 3.18.6-32-genericและรสชาติเช่น นั่นเป็นเงื่อนงำหนึ่ง เห็นได้ชัดว่าใช้สตริงของคุณเองเมื่อคุณสร้างเคอร์เนลที่กำหนดเองสามารถเป็นอีกหนึ่ง

uname -v ให้สตริงซึ่งโดยค่าเริ่มต้นคืออะไรเช่นนี้

#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015

จำนวนนั้นโดยพลการในแง่ที่ว่าจำนวนครั้งที่เคอร์เนลนี้ถูกสร้างขึ้นโดยใช้ทรีซอร์สเฉพาะโดยไม่ต้องรีทรีทรี - ซึ่งอาจเป็นประโยชน์เมื่อคุณกำลังสร้างของคุณเอง SMPบ่งชี้เคอร์เนลแบบมัลติทาสกิ้ง (เช่นไม่ใช่แบบเรียลไทม์) และ PREEMPT เป็นตัวเลือกการกำหนดค่าอื่นที่เกี่ยวข้องกับ "preemption model" ของ scheduler แต่เงื่อนงำใหญ่ที่นี่น่าจะเป็นเวลาที่มันถูกสร้างขึ้น นี้สามารถนำมาใช้เพื่อให้ตรงกับการประทับเวลาการแก้ไข / touchการเปลี่ยนแปลงในเคอร์เนลของตัวเองทำให้ทราบว่าสามารถเปลี่ยนแปลงได้เช่นกับ ตัวอย่างเช่นstatบนเคอร์เนลนั้นมีลักษณะดังนี้:

  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: -

Mon Mar 9 13:55:25 EDT 2015ซึ่งเป็นที่สวยมากในแนวเดียวกันกับ


2

เหมือนกับคนอื่น ๆ

sudo apt-cache policy linux-generic

เป็นรุ่นที่ติดตั้งผ่านตัวจัดการแพคเกจและ

uname -r

เปรียบเทียบรุ่น

สำหรับฉันมัน

linux-generic:
  Installed: 3.19.0.15.14
  Candidate: 3.19.0.15.14

และ

3.19.0-15-generic

ซึ่งระบุรุ่นเดียวกัน


1
มันจะเปลี่ยนไปหรือไม่ถ้าคุณคอมไพล์เวอร์ชั่นเดียวกันด้วยตัวเลือกต่าง ๆ ฉันไม่เห็นว่าทำไมสตริงเวอร์ชันจะเปลี่ยนในกรณีนั้น
terdon

ฉันไม่แน่ใจว่า 2 ด้วยชื่อเดียวกันจะติดตั้ง ฉันยังไม่ได้ลอง ส่วนตัวเมื่อทำการคอมไพล์ด้วยตัวเลือกต่าง ๆ ฉันลบเวอร์ชันออกจากตัวจัดการแพ็กเกจเพื่อกำจัดความขัดแย้ง
exussum

/bootฉันเดาว่าชื่อเดียวกันก็จะถูกเขียนทับใน ประเด็นของฉันคือฉันไม่เห็นว่าทำไมคุณคาดหวังผลลัพธ์ของunameการเปลี่ยนแปลงหากคุณเพิ่งคอมไพล์ใหม่ในขณะที่เปลี่ยนตัวเลือกบางอย่าง ในกรณีนี้ฉันคาดหวังapt-cacheและuname -rจะส่งกลับข้อมูลเดิมแม้ว่าคุณจะคอมไพล์ซ้ำในเครื่อง
terdon

@terdon สตริงรุ่นสามารถปรับแต่งในการกำหนดค่าเคอร์เนลซึ่งเป็นความคิดที่ดีถ้าคุณใช้แหล่ง distro
goldilocks

@ goldilocks ใช่ฉันเห็นว่าในคำตอบของคุณและนั่นทำให้รู้สึก อย่างไรก็ตามถ้าฉันโง่พอที่จะไม่ทำเช่นนั้นและเพิ่งคอมไพล์เคอร์เนลสต็อกของ distro ของฉันใหม่ซึ่งเปลี่ยนตัวเลือกไม่กี่ตัวสตริงรุ่นจะเหมือนกันใช่ไหม ข้อเสนอแนะของคุณเกี่ยวกับจำนวนงานสร้างอาจช่วยได้ แต่เท่าที่ฉันรู้ไม่ใช่สิ่งที่แนะนำที่นี่
terdon

0

ฉันจะบอกว่าคำตอบที่แท้จริงโดยทั่วไปคือ "ไม่คุณไม่สามารถ" มีวิธีการต่าง ๆ ที่อาจช่วยได้ในบางกรณีและสิ่งเหล่านี้ได้รับการแนะนำแล้ว แต่สิ่งเหล่านี้ดูเหมือนจะพลาดว่าสถานการณ์นี้เป็นอย่างไร ในความเป็นจริงหากคุณใช้เคอร์เนลที่กำหนดเองเคอร์เนลนั้นสามารถทำอะไรก็ได้รวมถึงการซ่อนการแสดงตนหรือดูเหมือนจะเป็นเคอร์เนลอื่น

ฉันจะกังวลถ้าคุณใช้เคอร์เนลที่กำหนดเองและไม่ทราบสิ่งนี้ วิธีที่เชื่อถือได้เพียงวิธีเดียวในการทราบว่าเคอร์เนลที่ใช้อยู่นั้นคือการติดตามอย่างละเอียดว่าเคอร์เนลใดที่คุณคอมไพล์และติดตั้ง

หากคุณไม่แน่ใจจริงๆว่าเคอร์เนลใดที่ระบบกำลังทำงานอยู่หรือแหล่งที่มาของเคอร์เนลนี้ถูกสร้างขึ้นหรือที่มาจากไหนฉันจะพิจารณาติดตั้งระบบปฏิบัติการอย่างจริงจังจากภาพลักษณ์ที่รู้จักดีและระวังในอนาคตเกี่ยวกับเมล็ดที่คุณลองใช้ จากหรือใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.