ผู้จัดการแพคเกจควรแก้ไขไฟล์. bashrc ของคุณหรือไม่


9

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


7
คุณสามารถทำให้บางสิ่งบางอย่างทำงานได้ดีขึ้นโดยลบการพึ่งพาตัวแปรสภาพแวดล้อม (เช่นใช้ไฟล์ config แทน) .bashrcฉันคิดว่าน่าจะดีกว่าที่จะบรรจุภัณฑ์แฮ็กหรือการล้อเล่น

แน่นอน แต่ขอพูดเพื่อจุดประสงค์ของคำถามนี้ว่าการปรับเปลี่ยนแอปพลิเคชันไม่ใช่ตัวเลือก
David Cowden

1
เกิดอะไรขึ้นถ้าผู้ใช้ไม่ทำงานbash? มีเชลล์ทางเลือกมากมายที่สามารถใช้ได้กับไฟล์เริ่มต้นที่หลากหลาย ฉันแนะนำให้หาวิธีแก้ปัญหาทางเลือกอย่างจริงจังที่นี่
จูลส์

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

1
@ ความจริงฉันรู้ ข้อเสนอของ Jules ได้รับการแนะนำแล้ว ฉันเป็นคนขี้กลัว - ทำให้ความสนุกของตรรกะวงกลมเกี่ยวข้องกับการโต้แย้งก่อนว่าฉันควรจะมีวิธีแก้ปัญหาเชลล์ผู้ไม่เชื่อเรื่องพระเจ้าแล้วดำเนินการต่อเพื่อแนะนำฉันใช้เชลล์สคริปต์เป็นวิธีการแก้ปัญหา มันเป็นเรื่องตลก (;
David Cowden

คำตอบ:


18

ขั้นตอนการติดตั้งของตัวจัดการแพคเกจควรปรับเปลี่ยนสภาพแวดล้อมของผู้ใช้หรือเพียงแจ้งให้ผู้ใช้ทำเอง

ทั้ง ตัวติดตั้งแพ็คเกจไม่ควรแตะต้องอะไรเลยในไดเรกทอรีหลักสำหรับบัญชีที่แพ็คเกจนั้นไม่ได้เป็นเจ้าของ แพคเกจควรกำหนดค่าตัวเองเพื่อให้พวกเขาติดตั้งพวกเขาจะสามารถใช้งานได้โดยไม่ต้องใช้ความพยายามเป็นพิเศษในส่วนของผู้ใช้ (มีหลายกรณีที่คุณไม่ต้องการทำสิ่งนี้ แต่มีอยู่ไม่มากและไกล)

สภาพแวดล้อม Unixy มีสถานที่ที่จะวางไฟล์การกำหนดค่าที่จะอ่านเมื่อใดก็ตามที่ผู้ใช้เริ่มเปลือกเข้าสู่ระบบ สำหรับ Bourne และ C shells คุณสามารถแทรกการกำหนดค่าลงใน/etc/profileและ/etc/csh.cshrcตามลำดับ (อย่าลืมลบออกเมื่อคุณถอนการติดตั้ง)

ระบบจำนวนมากยังรองรับการทำสิ่งนี้โดยใช้ไฟล์แต่ละไฟล์ซึ่งทำให้ง่ายต่อการเพิ่มและลบบิตของการกำหนดค่าโดยไม่ต้องวางข้อความลงในที่ที่กำหนดไว้ในไฟล์เดียว (นอกจากนี้ยังช่วยให้คุณทั้งหมดของการควบคุมและการตรวจสอบผลประโยชน์ที่คุณจะได้รับจากผู้จัดการแพคเกจ.) การกระจายบางส่วนกำหนดค่าจะอ่านไฟล์ทั้งหมดที่ตรงกัน/etc/profile/etc/profile.d/*.sh


1
ในอดีตrcในชื่อสคริปต์มาจาก CTSSruncom (Run Commands) แต่ได้ขยายขอบเขตในการรวมความหมายอื่น ๆ
Jeffrey Hantin

1
@JeffreyHantin: Touché ลบออก
Blrfl

1
ความเกลียดชังที่จะทำให้การเลือก แต่profile.dไม่ได้สร้างขึ้นในทุบตีมันเป็นตะขอที่มีให้กันทั่วไปจาก (ปกติฐาน distro ฯ/etc/profile) ;)
Jeffrey Hantin

1
@JeffreyHantin: จริงเพียงพอแม้ว่าจะไม่มีการวิจารณ์การใช้คำว่า "Unixy" ของฉัน :-)
Blrfl

14

มันไม่เคยได้รับการยอมรับในการปรับเปลี่ยนของผู้ใช้/homeโครงสร้างจากผู้จัดการแพคเกจการปรับเปลี่ยนเว้นแต่ว่าเป็นจุดทั้งหมด

แนวทางหลักในการนี้คือ:

  • แจ้งผู้ใช้ที่ต้องการกำหนดค่า
  • จัดหาค่าเริ่มต้นดังนั้นจึงไม่จำเป็น
  • แพ็คเกจสคริปต์เรียกใช้งานที่ตั้งค่าอย่างเหมาะสม
  • (ถ้า distro สนับสนุน) /etc/profile.dวางไฟล์ที่ส่งออกภายในตัวแปรสภาพแวดล้อม ในระบบ linux บางระบบสคริปต์ทั้งหมดในไดเรกทอรีนี้มีที่มาจากการตั้งค่าเชลล์เริ่มต้นดังนั้นคุณจึงสามารถตั้งค่าตัวแปรได้อย่างปลอดภัย

7

คำถามขั้นตอนการติดตั้งของผู้จัดการบรรจุภัณฑ์ควรปรับเปลี่ยนสภาพแวดล้อมของผู้ใช้หรือไม่

คำตอบไม่มันเป็นความคิดที่ดีที่จะแก้ไขข้อมูลของผู้ใช้ในกรณีนี้คือไฟล์. bashrc ข้อมูลของผู้ใช้ควรได้รับการพิจารณาอย่างศักดิ์สิทธิ์โดยผู้จัดการแพ็คเกจหรือไม่?

คำถามขั้นตอนการติดตั้งของผู้จัดการแพ็คเกจควรแจ้งให้ผู้ใช้ทำเอง?

คำตอบนี่เป็นคำตอบที่น่าพอใจมากกว่า แต่ก็ยังไม่เหมาะ

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


ฉันคิดว่าความคิดนี้เช่นกัน โครงการนี้ยังเด็กและจะไปถึงจุดที่ไม่จำเป็น
David Cowden

@ GlenH7 ฉันอัพเดตการตอบกลับของฉัน หวังว่าคำตอบที่อัปเดตจะเป็นคำตอบที่คุณต้องการ
R Sahu

@ GlenH7: คำถามนี้โดยพื้นฐานแล้วเป็นปัญหา XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problemที่ความต้องการตัวแปรสภาพแวดล้อมเป็นปัญหาจริงที่ต้องแก้ไข
whatsisname

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

1
@ MattThomason ว่าการรับรู้เป็นสิ่งที่กระตุ้นให้ฉันถามคำถามจริง ๆ (;
David Cowden

5

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


ขอบคุณสำหรับคำแนะนำ. ฉันไม่เคยเขียนแพคเกจสาธารณะมาก่อนและแค่ต้องการให้แน่ใจว่าฉันไม่ทำอะไรต้องห้าม
David Cowden

นี่คือสิ่งที่ SDK ระบบคลาวด์ของ Google จัดการได้ในวันนี้ มันถามว่าคุณต้องการแก้ไขไฟล์เริ่มต้นของคุณหรือไม่
jmq

1

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

คุณกำลังสมมติว่าคุณสามารถค้นหาโฮมไดเร็กตอรี่ของผู้ใช้ได้ หากผู้ใช้มีการจัดการผ่านเช่น LDAP คุณอาจไม่ได้รับอนุญาตให้รับรายชื่อผู้ใช้ที่ถูกต้องทั้งหมด โฮมไดเร็กทอรีอาจไม่อยู่ใน / home; พวกเขาอาจจะติดตั้งแบบไดนามิกจากเครือข่าย โฮมไดเรกทอรีของผู้ใช้อาจถูกเข้ารหัสและคีย์ไม่สามารถเข้าถึงได้ในขณะที่พวกเขาไม่ได้เข้าสู่ระบบ

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


0

การตั้งค่าตัวแปรส่วนกลางในแพ็คเกจเป็นสิ่งที่ยอมรับได้หากเป็นตัวแปรที่กำหนดโดยโครงการของคุณเอง (และนั่นหมายความว่าชื่อโครงการเป็นส่วนหนึ่งของชื่อตัวแปร!) แล้วถึงแม้คุณไม่ควรสัมผัสของผู้ใช้.bashrcไฟล์ - แทนคุณควรเพิ่มสคริปต์เพื่อ/etc/profile.d

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