OpenConnect บน macOS: แพ็กเกจ ไฟล์อาร์ไคฟ์รุ่น หรือโคลน git
Homebrew ให้ไฟล์ไบนารีและสคริปต์เครือข่าย ส่วนต้นไม้ซอร์สไม่ให้ทั้งสองอย่างจนกว่าคุณจะสร้างและเรียกใช้มัน รู้ไว้ว่าการเชื่อมต่อของคุณใช้แบบไหน
มีสามเส้นทางที่ทำให้คุณได้ไคลเอนต์ OpenConnect บน Mac และแต่ละเส้นก็ทิ้งสิ่งต่างกันไว้บนดิสก์ สูตรของ Homebrew ติดตั้งไฟล์ไบนารีที่คอมไพล์แล้วพร้อมสคริปต์เครือข่ายที่กำหนดเส้นทางและ DNS ไฟล์อาร์ไคฟ์รุ่นให้ซอร์สโค้ดพร้อมระบบบิลด์ที่สร้างขึ้นมา ส่วนโคลน git ให้ซอร์สโค้ดโดยไม่มีมัน การเลือกผิดคือสาเหตุที่ผู้คนเจอ configure ที่หายไปไม่กี่นาทีหลังเริ่มบทช่วยสอน
สองเครื่องต่างกันภายใต้ชื่อเดียวกัน
เส้นทางแพ็กเกจเป็นคำสั่งเดียว และเป็นค่าเริ่มต้นที่ถูกต้องสำหรับทุกคนที่งานคือการเชื่อมต่อไม่ใช่การพัฒนา
brew install openconnect
สิ่งที่มันติดตั้งสำคัญกว่าคำสั่ง คุณได้ไฟล์ไบนารีของไคลเอนต์ และยังได้ vpnc-script ที่ไคลเอนต์เรียกเพื่อกำหนดโปรแกรมอินเทอร์เฟซ เส้นทาง และตัวแก้ไขชื่อ ทั้งสองทำงานเป็นคู่: ไฟล์ไบนารีสิ้นสุดเซสชัน TLS และส่งอินเทอร์เฟซที่ได้ให้สคริปต์ และสคริปต์คือส่วนที่รู้ว่าระบบปฏิบัติการนี้ต้องการให้เครือข่ายของมันเปลี่ยนอย่างไร
การแยกนั้นอธิบายรายงานที่สับสนได้ทั้งชั้น ไคลเอนต์ที่เชื่อมต่อ รายงานความสำเร็จ แล้วส่งทราฟฟิกไปผิดทางมักเป็นปัญหาสคริปต์ ไม่ใช่ปัญหาอุโมงค์ และการติดตั้งสูตรใหม่แก้ได้เพียงเพราะสคริปต์ก็ถูกติดตั้งใหม่ด้วย ตรวจสอบการรองรับ macOS และสถาปัตยกรรม CPU ปัจจุบันของสูตรก่อนจะวางแผนพึ่งพามัน Mac ที่รันเชลล์ได้อย่างสมบูรณ์แบบอาจยังไม่มีแพ็กเกจปัจจุบันที่สร้างขึ้นสำหรับเครื่องนั้น
เส้นทางซอร์สทำอะไรจริง ๆ
ไฟล์อาร์ไคฟ์รุ่นมาพร้อมระบบบิลด์ที่สร้างขึ้น ดังนั้น ./configure ที่คุ้นเคยจึงมีอยู่ตั้งแต่ต้น ส่วนโคลน git ไม่มี เพราะไฟล์ที่สร้างขึ้นเป็นผลผลิตของการบิลด์ ไม่ใช่สิ่งที่โปรเจ็กต์เก็บไว้ นี่คือเหตุผลทั้งหมดที่ ./autogen.sh ปรากฏในคำแนะนำสำหรับโคลนและไม่ใช่สำหรับไฟล์อาร์ไคฟ์รุ่น
./autogen.sh
./configure
make
make install
แต่ละบรรทัดทำสิ่งเฉพาะเจาะจง และการรู้ว่าบรรทัดใดล้มเหลวช่วยประหยัดการเดาได้มาก ขั้น autogen รัน autotools เพื่อสร้าง configure ขั้น configure ตรวจสอบคอมไพเลอร์ ไลบรารี และเฮดเดอร์ที่ไคลเอนต์ต้องการ แล้วเขียน makefile ที่สะท้อนสิ่งที่พบ ขั้น make คอมไพล์ ขั้น install คัดลอกผลลัพธ์ไปที่ใดที่หนึ่งในพาธของคุณ
ที่บรรทัดสุดท้ายนั้นเองที่คำแนะนำมักผิดพลาด การติดตั้งไม่ใช่หลักฐานว่าการบิลด์ทำงาน และการรันในโฟลเดอร์ดาวน์โหลดใดก็ได้ด้วยสิทธิ์สูงเป็นวิธีที่ดีในการกระจายไฟล์ที่คุณจะจำไม่ได้ในภายหลัง หาก configure ล้มเหลวเพราะไลบรารีหายไป ผลลัพธ์ที่มีประโยชน์คือข้อผิดพลาดแรกที่พิมพ์ออกมา ไม่ใช่ยี่สิบบรรทัดสุดท้ายของบันทึก
เซสชันและการกำหนดค่าเครือข่ายแยกจากกัน
ความแตกต่างนี้ตัดสินว่าการเชื่อมต่อส่งทราฟฟิกจริงหรือไม่ การสร้างเซสชัน TLS ให้อินเทอร์เฟซฝั่งไคลเอนต์ การใช้เส้นทาง ที่อยู่ และตัวแก้ไข DNS เป็นขั้นที่สองที่ทำผ่านสคริปต์เครือข่าย และการบิลด์ที่สร้างไฟล์ไบนารีโดยไม่มีสคริปต์นั้นมีไคลเอนต์เพียงครึ่งเดียว
การแยกเดียวกันอธิบายว่าทำไมสองเครื่องที่มีไคลเอนต์เหมือนกันจึงมีพฤติกรรมต่างกัน: สคริปต์ปรึกษาการกำหนดค่าเครือข่ายของระบบ และการกำหนดค่านั้นรวมทุกสิ่งอื่นที่ได้อ้างสิทธิ์เส้นทาง เมื่ออุโมงค์แบบแยกส่งทราฟฟิกไปที่ที่ไม่คาดคิด อุโมงค์กำลังทำหน้าที่ของมัน และการตัดสินใจเรื่องเส้นทางคือสิ่งที่ต้องตรวจสอบ
ดังนั้นเมื่อแก้ปัญหา ให้ถามว่าชั้นใดล้มเหลว เซสชันที่ไม่เคยถูกสร้างคือโปรโตคอล ใบรับรอง หรือข้อมูลรับรอง เซสชันที่ถูกสร้างแต่ไม่ส่งอะไรเลยคืออินเทอร์เฟซและสคริปต์ ไคลเอนต์ที่ติดตั้งแล้วใช้งานได้จากเครือข่ายหนึ่งแต่ไม่ได้จากอีกเครือข่ายคือการเข้าถึง และการบิลด์ใหม่ไม่ว่าจะมากเพียงใดก็ไม่เปลี่ยนสิ่งนั้น
รู้ว่าคุณกำลังรันไบนารีตัวไหน
การบิลด์ที่ติดตั้งด้วยมือและไบนารีที่แพ็กเกจมาสามารถอยู่ร่วมกันได้อย่างสงบ และตัวที่รันขึ้นอยู่กับพาธของคุณไม่ใช่ความตั้งใจของคุณ ค้นหาสิ่งนี้ก่อนรายงานเลขเวอร์ชันให้ใคร
which -a openconnect
openconnect --version
brew list --versions openconnect
คำสั่งแรกแสดงรายการทุกสำเนาที่เชลล์ของคุณมองเห็น ตามลำดับที่มันจะลอง คำสั่งที่สองบอกคุณว่าตัวใดตอบสนอง เมื่อสิ่งนั้นไม่ตรงกับที่คุณคาดหวัง คุณกำลังรันบิลด์จากการทดลองเก่า และการเปลี่ยนการกำหนดค่าใดก็ไม่ทำให้มันย้าย
การติดตั้งไคลเอนต์ไม่ใช่การอนุมัติเกตเวย์
ไบนารีที่ทำงานได้ไม่ได้ทำให้การติดตั้งใช้งานเข้ากันได้ ยืนยันโปรโตคอลของเกตเวย์ ขั้นตอนการพิสูจน์ตัวตน และข้อกำหนดอุปกรณ์ที่จัดการใด ๆ กับคนที่เป็นเจ้าของ เพราะสิ่งเหล่านั้นคือข้อเท็จจริงด้านนโยบายและชั้นแอปพลิเคชันที่การบิลด์ให้ไม่ได้
คำแนะนำการบิลด์ของโปรเจ็กต์ครอบคลุมลำดับ autotools และข้อกำหนดสคริปต์เครือข่ายอย่างละเอียดกว่า และเป็นสิ่งที่ควรปฏิบัติตาม ไม่ใช่โพสต์บล็อกที่เก่ากว่ารุ่น macOS ของคุณ หากเป้าหมายเป็นเพียงการเชื่อมต่อ ให้เอาแพ็กเกจ เก็บสคริปต์ไว้ และปล่อยคอมไพเลอร์ไว้ข้างนอก