apt purge ลบ VPN ไปแล้ว แต่บริการยังเริ่มตอนบูต
apt purge ลบไฟล์ของแพ็กเกจ ไม่ใช่ unit ที่สคริปต์ผู้ขายติดตั้ง ลบ unit และลิงก์ wants ของมัน แล้วเลือกเจ้าของการบูตเพียงหนึ่งเดียว
apt purge บอกว่าแพ็กเกจหายไปแล้ว แต่ทุกครั้งที่เริ่มเครื่องก็ยังมีอุโมงค์เกิดขึ้นอีก journal ยังโตต่อ เส้นทางกลับมา และเครื่องก็ทำตัวราวกับไม่มีอะไรถูกลบ ผู้ติดตั้งของผู้ขายอาจเขียนไฟล์ที่ตัวจัดการแพ็กเกจไม่เคยบันทึกไว้ ดังนั้น การถอนแพ็กเกจกับการถอนผลิตภัณฑ์เป็นงานสองอย่างที่ต่างกัน. runbook ด้านล่างแยกบันทึกสองชุดออกจากกันและจบการลบอย่างตั้งใจ
ผู้ติดตั้งสองตัว บันทึกสองชุดที่ต่างกัน
แพ็กเกจ Debian เก็บรายการไฟล์ และ purge จะลบสิ่งที่รายการระบุไว้บวกกับการกำหนดค่าของแพ็กเกจ ผู้ติดตั้งแบบ shell หรือชุด .run ไม่มีรายการเช่นนั้น มันเขียนที่ใดก็ได้ตามต้องการ โดยทั่วไปใน /opt, /usr/local และ /etc/systemd/system ไม่มีเส้นทางเหล่านั้นปรากฏในรายการไฟล์ของแพ็กเกจใดเลย ดังนั้น dpkg จึงไม่รู้จักและไม่รายงาน สุดท้ายคุณเหลือเจ้าของการติดตั้งสองรายบนระบบไฟล์เดียว และมีเพียงรายเดียวเท่านั้นที่ทำบัญชี
ถาม dpkg เรื่องเส้นทางนั้นก่อนลบ เส้นทางที่มันปฏิเสธเป็นของคุณที่จะลบ และคำตอบเดียวกันบอกว่าการอัปเกรดภายหลังจะเอากลับมาหรือไม่
dpkg -S /etc/systemd/system/acmevpn.service
systemctl list-unit-files | grep -i acmevpn
unit กับลิงก์ wants ของมันเป็นไฟล์แยกกัน
การเปิดใช้งานเป็นการกระทำที่แยกจากการติดตั้ง unit ประกาศความสัมพันธ์กับเป้าหมายในส่วน [Install] และ systemctl enable เปลี่ยนคำประกาศเหล่านั้นเป็นลิงก์สัญลักษณ์ในไดเรกทอรี .wants/ ของแต่ละเป้าหมาย ตอนนี้มีสองเส้นทาง คือไฟล์ unit และลิงก์ที่ดึงมันเข้าเป้าหมายการบูต ลบแค่ไฟล์แล้วลิงก์ชี้ไปที่ว่างเปล่า ซึ่งทำให้เกิดข้อร้องเรียนตอนบูต ลบแค่ลิงก์แล้ว unit ยังเริ่มได้ด้วยชื่อ ต้องเอาออกทั้งสองอย่าง
ลบตามลำดับแล้วโหลดใหม่ เพื่อให้ systemd เลิกเก็บคำจำกัดความเก่าไว้ในหน่วยความจำ
systemctl disable --now acmevpn.service
systemctl show -p FragmentPath -p ExecStart acmevpn.service
sudo rm /etc/systemd/system/acmevpn.service
sudo rm /etc/systemd/system/multi-user.target.wants/acmevpn.service
systemctl daemon-reload
อ่าน FragmentPath แทนการเดาตำแหน่ง เพราะผู้ขายอาจเขียนไปที่ /usr/lib/systemd/system หรือ /lib/systemd/system แทนที่จะเป็น /etc การลบสำเนาที่คุณคาดไว้จะปล่อยให้ตัวที่ใช้งานจริงยังทำงาน และการแก้ไขดูเหมือนสำเร็จจนถึงการโหลดใหม่ครั้งถัดไป เมื่อโหลดใหม่เสร็จให้แสดงรายการไฟล์ unit อีกครั้งและยืนยันว่าชื่อไม่ปรากฏแล้ว
หาไบนารีที่ทำให้การจัดวางนี้ยังมีชีวิต
unit ที่เปิดใช้งานยังคงเริ่มเดมอนไม่ว่าฐานข้อมูลแพ็กเกจจะคิดอย่างไร กระบวนการนั้นอาจนำอุโมงค์กลับมา เพิ่มเส้นทางอีกครั้ง หรือคืนกฎ kill-switch และพฤติกรรมดูเหนือธรรมชาติจนกว่าคุณจะตรวจสอบการจัดวาง ติดตามเส้นทาง ExecStart และดูว่าไบนารียังอยู่ที่นั่นหรือไม่ เพราะไฟล์ที่เรียกใช้ได้ซึ่งถูกทิ้งไว้ใต้ /opt คือทั้งหมดที่การจัดวางนี้ต้องการ การลบ unit หยุดการเริ่มตามกำหนดเวลา แต่ไม่ได้ลบโปรแกรม
จัดการไดเรกทอรีสถานะด้วยความระมัดระวังแบบเดียวกัน โทเค็นบัญชี โปรไฟล์ที่สร้างขึ้น และรายการเซิร์ฟเวอร์ที่แคชไว้อยู่ใน /var/lib หรือในไดเรกทอรีบ้าน และสิ่งเหล่านั้นเป็นข้อมูลรับรอง ไม่ใช่แคชที่ทิ้งได้ ลบออกหลังจากหยุดบริการแล้ว อย่างตั้งใจ และบันทึกว่าคุณเอาอะไรไป
sudo ls -l /opt/acmevpn /usr/local/bin/acmevpn
sudo find /var/lib -maxdepth 2 -iname "*acme*"
systemctl is-enabled acmevpn.service
เลือกเจ้าของการบูตหนึ่งรายและทดสอบ
ผู้สมัครสามรายสามารถอ้างสิทธิ์การบูต และการติดตั้งทั้งสามทำให้เกิดการแข่งกันแทนที่จะเป็นการป้องกันสองชั้น ไฟล์เริ่มอัตโนมัติของเดสก์ท็อปจะทำงานหลังมีคนลงชื่อเข้าใช้ systemd unit ทำงานเร็วกว่าแต่ต้องมีไคลเอนต์ที่ทำงานได้โดยไม่มีหน้าจอ และรายการ cron @reboot ทำงานตามตารางเวลาที่อาจผิดสำหรับไคลเอนต์เครือข่าย CLI ของผู้ขายอาจต้องมีอาร์กิวเมนต์เซิร์ฟเวอร์เพิ่ม เพราะตอนบูตไม่มีเซสชันก่อนหน้าให้ทำต่อ เลือกผู้สมัครที่ตรงกับวิธีการยืนยันตัวตนของไคลเอนต์ และทิ้งรายอื่น
ทดสอบโดยรีบูตเครื่องและดูข้อเท็จจริงอิสระสามอย่าง คือสถานะของ unit รายการโปรเซส และการเชื่อมต่อใหม่ไปยังสิ่งที่คุณตรวจสอบได้ ไคลเอนต์ที่ต้องใช้พวงกุญแจหรือการลงชื่อเข้าใช้แบบโต้ตอบจะล้มเหลวตอนบูตแม้มีไฟล์ unit ที่ถูกต้อง และ journal จะบอกเช่นนั้นถ้าคุณอ่านมันแทนที่จะดูแค่สถานะบริการ
ไม่ว่าจะให้ข้อมูลรับรองที่ทำงานได้โดยไม่ถามแก่ไคลเอนต์ หรือเริ่มมันตอนลงชื่อเข้าใช้ ทั้งสองอย่างป้องกันได้ และการรวมทั้งสองเป็นวิธีที่อุโมงค์หนึ่งได้เจ้าของสองรายที่แย่งกัน
จดสิ่งที่ purge ครั้งถัดไปควรคาดหวัง
จดข้อเท็จจริงสองอย่างหลังการลบด้วยมือทุกครั้ง ผู้ติดตั้งใดสร้างการจัดวางนี้ และเจ้าของคนใดเริ่มมันตอนนี้ บันทึกนั้นเปลี่ยน purge ครั้งถัดไปจากเรื่องเซอร์ไพรส์เป็นรายการในเช็กลิสต์ และมันมีอายุยืนกว่าคนที่ทำงานนั้น
เก็บไว้ข้างการกำหนดค่าบริการไม่ใช่ในไดเรกทอรีส่วนตัว และใส่ข้อมูลวันที่ เพราะการอัปเดตของผู้ขายอาจคืน unit ที่คุณลบไป การเทียบ systemctl list-unit-files กับบันทึกนั้นทุกสองสามเดือนจะจับการคืนสภาพได้ในขณะที่การแก้ไขยังถูกอยู่