วิธีที่ดีที่สุดในการล้างที่เก็บ Yum?


10

เรามี repo Yum แบบกำหนดเองที่นักพัฒนาของเราอัปโหลดงานสร้าง

ปัญหาคือหลังจากเวลาผ่านไปมันก็จะกลายเป็นรกไปด้วยรุ่นเก่า

การลบเวอร์ชันเก่าออกด้วยตนเองนั้นค่อนข้างน่ารำคาญดังนั้นก่อนที่เราจะลองด้วยตัวเองโดยอัตโนมัติฉันสงสัยว่ามีสคริปต์ใดที่จะล้าง RPM เก่าตามเวอร์ชัน (ที่ต้องการ) หรือเวลาอัปโหลด

ดีที่สุดคือถ้าเราสามารถระบุให้บันทึก X เวอร์ชันล่าสุดอย่างง่ายและลบสิ่งอื่นใด จากนั้นเราสามารถ cron มันและปล่อยให้มันวิ่งทุกวัน

ขอบคุณสำหรับความคิดใด ๆ


หากไม่มีสคริปต์ควรมี เราเขียนหนึ่งสำหรับการใช้งานของเราเองที่ บริษัท ของเรา แต่ฉันจะดูเกี่ยวกับการปล่อยสิ่งนี้เข้าสู่ป่า
Andrew M.

ยอดเยี่ยม - ฉันจะขอบคุณถ้ามันสามารถเปิดได้ การโพสต์บน Github จะเป็นโอเดียที่ยอดเยี่ยม
SyRenity

คำตอบ:


13

วิธี "แบบง่าย" คือการทิ้งทุกสิ่งในไดเรกทอรีและเรียกใช้:

rm $(repomanage --keep=2 --old /path/to/repo)
createrepo /path/to/repo

... วิธีที่ซับซ้อนกว่าคือตั้งค่า koji / etc เพื่อสร้างงานของคุณและสร้าง repos


เจ๋ง - นั่นคือสิ่งที่ฉันต้องการ
SyRenity

สิ่งที่ดีไม่รู้ตัวหนึ่งในนี้เลย
dyasny

ในทางเทคนิคคุณควรใช้ร่วมกับxargsแทนเพราะมิฉะนั้นคุณอาจได้รับrm: missing operand(หากไม่มี RPM เก่าที่จะลบ) ดังนั้น:repomanage --keep=2 --old /path/to/repo | xargs rm -f
Danila Vershinin

เหตุผลในการใช้ xargs เป็นเพราะrm $(repomanage --keep=2 --old /path/to/repo)อาจเกินความยาวคำสั่งสูงสุดได้อย่างง่ายดาย xargsจะดูแลรายการข้อโต้แย้งขนาดใหญ่ ดู: offbytwo.com/2011/06/26/things-you-didnt-know-about-xargs.html
shrewmouse

1

ลองดูยูทิลิตี้ "repomanage" จาก yum-utils RPM มันทำสิ่งที่คุณกำลังมองหา

[root ~]# repomanage --help
usage:
  repomanage: manage a directory of rpm packages. returns lists of newest
            or oldest packages in a directory for easy piping to xargs
            or similar programs.
  repomanage [--old] [--new] path.


  options:
    -h, --help            show this help message and exit
    -o, --old             print the older packages
    -n, --new             print the newest packages
    -s, --space           space separated output, not newline
    -k KEEP, --keep=KEEP  newest N packages to keep - defaults to 1
    -c, --nocheck         do not check package payload signatures/digests
[root ~]#

0

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


คุณหมายถึงการตรวจสอบรุ่นในชื่อไฟล์? นี่คือแนวความคิดของฉันเช่นกัน แต่ก็ดีที่มีสคริปต์อัตโนมัติสำหรับสิ่งนี้
SyRenity

1
โปรดจำไว้ว่าชื่อไฟล์ไม่จำเป็นต้องบ่งบอกถึงเวอร์ชัน เช่นฉันสามารถเปลี่ยนชื่อ RPM เป็นอะไรก็ได้ที่ฉันต้องการ yum จะใช้ข้อมูลเมตาของ RPM แทน
Andrew M.

0

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

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