จำเป็นต้องติดตั้ง glibc> = 2.14 ใน Wheezy


22

ฉันกำลังพยายามทำให้Protractorทำงานเพื่อการทดสอบเชิงมุม e2e แต่ไม้โปรแทรกเตอร์ต้องใช้Seleniumซึ่งต้องใช้ChromeDriverซึ่งต้องใช้glibc2.14 กล่องพัฒนาปัจจุบันของฉันกำลังใช้งาน Debian Wheezy ซึ่งมาพร้อมกับglibc2.13 ฉันได้อ่านแล้วว่าการเปลี่ยนไปใช้สาขาที่ไม่เสถียรของ Debian จะช่วยให้สามารถเข้าถึงได้glib-2.14แต่จากสิ่งที่ฉันได้ยินมาว่าไม่เสถียรคือ ... ค่อนข้างไม่มั่นคง

มีวิธีใดบ้างที่ฉันสามารถอัพเกรดglibcเป็น 2.14 หรือ 2.15 โดยไม่มีความเสี่ยงที่จะทำลายทุกอย่าง หรือเป็นไปได้ที่จะเปลี่ยนกลับจากสาขา Debian ที่ไม่เสถียรหากสิ่งต่าง ๆ เริ่มแตก?

12:15:22.784 INFO - Executing: [new session: {browserName=chrome}] at URL: /session)
12:15:22.796 INFO - Creating a new session for Capabilities [{browserName=chrome}]
/home/chris/projects/personal/woddy/client/selenium/chromedriver:     /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by      /home/chris/projects/personal/woddy/client/selenium/chromedriver)
/home/chris/projects/personal/woddy/client/selenium/chromedriver: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /home/chris/projects/personal/woddy/client/selenium/chromedriver)
12:15:43.032 WARN - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException:  java.lang.reflect.InvocationTargetException

ChromeDriver บอกว่าต้องใช้ glibc 2.14 ที่ไหน? โดยทั่วไปแพ็คเกจระดับสูงไม่มีข้อ จำกัด ที่แคบมากในไลบรารี C มันบอกว่าอยู่ที่ไหนสักแห่งในเอกสารหรือรหัสหรือว่ามันเป็นเพียงการอ้างอิงในบางแพคเกจ? ระวังถ้าคุณยังไม่ได้แพ็คเกจการแจกจ่ายนั้นอาจเพิ่มการพึ่งพาที่เข้มงวดมากเกินไปโดยไม่มีเหตุผล
Faheem Mitha

ฉันเพิ่มเอาท์พุทเทอร์มินัลด้านบนเพื่อแสดงตำแหน่งที่ต้องการ 2.14 หรือ 2.15 อย่างไรก็ตามทั้งหมดกำลังทำงานอยู่ในขณะนี้
chris

คำตอบ:


23

คุณไม่ต้องเปลี่ยนไปใช้สิ่งที่ไม่เสถียรเพื่อรับ glib> = 2.14 ในความเป็นจริงสาขาการทดสอบ (ตอนนี้มีเสถียรภาพหรือเจสซี) มี glib-2.17 ซึ่งคุณสามารถเลือกได้เพียงแค่เพิ่มที่เก็บการทดสอบและการเปิดตัว:

sudo apt-get install libc6-dev=2.17-7

หรือ,

sudo apt-get -t testing install libc6-dev

คุณสามารถเพิ่มสวิตช์--dry-runเพื่อดูว่าจะติดตั้งอะไรก่อนถึงมือ คุณสามารถดูสถานะของแพคเกจ glibc ในระบบติดตามพัสดุ Debian (Debian เปลี่ยนชื่อแพคเกจ eglibc เป็นเพียงglibcจาก Jessie เป็นต้นไป)

นอกจากนี้คุณยังสามารถเพียงแค่รอให้เจสซีเปิดตัววันที่ 25 เมษายน


2
นั่นมัน ทำตามคำแนะนำของเดเบียนที่debian.org/doc/manuals/apt-howto/…จากนั้นรันคำสั่งที่สองที่คุณระบุไว้ทำงานได้อย่างสมบูรณ์ ขอบคุณสำหรับความช่วยเหลือ BTW ฉันมีในหัวของฉันที่ไม่เสถียรเป็นขั้นตอนต่อไปแทนการทดสอบ
chris

1
ทั้งสองอย่างนี้ไม่ได้ผลสำหรับฉัน วิธีแรกที่ผลิตE: The value 'testing' is invalid for APT::Default-Release as such a release is not available in the sourcesและครั้งที่สองE: Version '2.17-7' for 'libc6-dev' was not found
ฌอน DeNigris

1
โซลูชันที่ยอมรับนี้ควรมีคำเตือน ฉันติดตามมันและจบลงด้วย "FrankenDebian": wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian ฉันใช้เวลาอีก 2-3 ชั่วโมงเพื่อต่อสู้กับนรกและพึ่งพาระบบของฉัน
stanri

1
Debian.org ระบุไว้อย่างชัดเจนว่านี่เป็นความคิดที่ไม่ดี ไม่ใช่ทุกคนที่เป็นดูแลระบบ OP ขอวิธีการแก้ปัญหาที่ปลอดภัยและได้รับการแนะนำที่ไม่ ทำให้เกิดปัญหาใด ๆ และวิธีนี้จะไม่ตรงตามเกณฑ์เหล่านั้น
stanri

2
เนื่องจากเรากำลังพูดถึงสิ่งต่าง ๆ ในขณะนี้ OP: "มีวิธีใดบ้างที่ฉันสามารถอัพเกรด glibc เป็น 2.14 หรือ 2.15 โดยไม่มีความเสี่ยงที่จะทำลายทุกอย่าง " Debian.org:" มันไม่ได้เป็นความคิดที่ดีที่จะเพิ่มแหล่งเก็บข้อมูลสำหรับรุ่น Debian อื่น ๆ .... ผลลัพธ์นี้เป็นระบบที่ผสมผสานทั้งสองอย่างเข้าด้วยกัน "ฉันจะมีความชัดเจนมากขึ้นได้อย่างไร หวังว่าทุกคนจะอ่านความคิดเห็นก่อนที่จะรับคำแนะนำนี้ ฉันเสร็จแล้ว
stanri

22

ในสถานการณ์ของฉันข้อผิดพลาดปรากฏขึ้นเมื่อฉันพยายามเรียกใช้แอปพลิเคชั่น (รวบรวมบน Ubuntu 12.04 LTS) โดยใช้ GLIBC_2.14 บน Debian Wheezy (ซึ่งติดตั้ง glibc 2.13 ตามค่าเริ่มต้น)

ฉันใช้วิธีที่ยุ่งยากในการรันและรับผลลัพธ์ที่ถูกต้อง:

  1. ดาวน์โหลดlibc6และlibc6-devจาก Ubuntu 12.04 LTS

  2. เรียกใช้dpkgคำสั่งเพื่อติดตั้งลงในไดเรกทอรี ( /home/user/fakeroot/ตัวอย่าง):

    $ dpkg -x libc6-dev_2.15-0ubuntu10.6_amd64.deb /home/user/fakeroot/
    $ dpkg -x libc6_2.15-0ubuntu10.6_amd64.deb /home/user/fakeroot/
    
  3. รันคำสั่งของคุณด้วยการระบุLD_LIBRARY_PATH:

    $ LD_LIBRARY_PATH=/home/user/fakeroot/lib/x86_64-linux-gnu/ YOUR_COMMAND
    
  4. แอปพลิเคชันของฉันใช้memcpy()จาก GLIBC_2.14 เท่านั้นและใช้งานได้

    ฉันไม่รู้ว่ามันจะทำงานได้สำเร็จสำหรับแอปพลิเคชั่นอื่นหรือไม่


ขอบคุณ! คำแนะนำเหล่านี้ทำให้ฉันสามารถเรียกใช้ Shaka Packager ได้อย่างง่ายดายบน Debian Wheezy ฉันกำลังห่อคำสั่งของฉันในสคริปต์ทุบตีที่ดูเหมือนexec env LD_LIBRARY_PATH=/home/user/fakeroot/lib/x86_64-linux-gnu/ YOUR_COMMAND "$@"ว่าคำสั่งนั้นสามารถใช้ได้ง่ายโดยไม่จำเป็นต้องระบุ LD_LIBRARY_PATH ทุกครั้ง
Gabe Kopley

1

ฉันเดาว่ามีหลายตัวเลือกสำหรับคุณที่จะลองสาขาที่ไม่เสถียร "ปลอดภัย":

  • virtualization
  • Chrootingโดยที่คุณเลือกไดเร็กตอรี่สำรองเป็นไดเร็กตอรี่ root ของคุณ. คุณสามารถสร้างอิมเมจระบบไฟล์และติดตั้งแพ็คเกจที่ต้องการด้วยตนเอง นี่เป็นกระบวนการที่ซับซ้อนและทำได้ง่ายขึ้นในกรณีของ Debian ที่ใช้:
  • deboostrapซึ่งอ้างถึงบทความ Debian Wiki ที่ลิงค์นี้คือ

    เครื่องมือที่จะติดตั้งระบบฐาน Debian ลงในไดเรกทอรีย่อยของอีกระบบที่ติดตั้งไว้แล้ว มันไม่จำเป็นต้องมีแผ่นซีดีติดตั้งเพียงแค่เข้าถึงที่เก็บ Debian

    สิ่งนี้ไม่ได้หมายความถึงการdebootstrapใช้เทคนิคการ chrooting ฉันไม่ได้ตระหนักถึงการใช้งานภายใน


ฉันใช้การสอน debootstrap และมันก็เป็นสิ่งที่ฉันต้องการ: wiki.debian.org/Debootstrap ฉันทำตามตัวอย่าง sid แต่ใช้ jessie แทน: debootstrap --arch amd64 jessie $MY_CHROOT http://http.debian.net/debian/ ขอบคุณ!
Drew LeSueur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.