มีการกระจายที่สนับสนุนการย้อนกลับแพ็คเกจที่อัพเดตหรือไม่


23

มีเครื่องมือหรือแม้กระทั่งการแจกจ่ายทั้งหมดที่รองรับแพ็คเกจการเปลี่ยนย้อนกลับหลังการอัพเดทหรือไม่?

เป็นตัวอย่าง: ฉันอัปเกรดแพ็คเกจ A, B และ C หลังจากทำงานกับแพ็คเกจเหล่านั้นเป็นเวลาหลายวันฉันพบข้อบกพร่องใน B ที่ทำลายข้อตกลง

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

มีเครื่องมือหรือการแจกจ่ายที่สนับสนุนสิ่งนี้หรือไม่?

ฉันรู้ว่าการกระจายส่วนใหญ่มีวิธีการลดระดับแพ็คเกจ แต่มักจะเป็นแบบร่างหรือเป็นไปไม่ได้เพราะแพ็คเกจก่อนหน้าถูกลบออกจากที่เก็บและบางกรณี (เช่นหลังจากอัปเกรดเซิร์ฟเวอร์ X และ Mesa) จะได้รับจริงๆ .. ยุ่ง


3
สิ่งที่ควรทราบ: หากการเปลี่ยนแปลงรุ่นแพคเกจเล็กน้อยคำตอบด้านล่างอาจนำไปใช้; อย่างไรก็ตามโปรดทราบว่าการเปลี่ยนแปลงแพคเกจที่ใหญ่กว่าอาจอัปเกรดข้อมูลบนดิสก์ซึ่งไม่สามารถทำงานได้อย่างถูกต้องในรุ่นที่เก่ากว่า ตัวอย่างเช่น mysql-server (หรือ joomla) การอัปเกรดที่สำคัญจะเพิ่มและแก้ไขฟิลด์และอัปเกรดตาราง SQL การอัพเกรด inn2 อาจเปลี่ยนประเภทฐานข้อมูลหรือการอัปเกรดเคอร์เนล distro อาจอัปเกรดระบบไฟล์ ext3 เป็น ext4 เป็น ext4 หรือบางแพ็คเกจจะแปลงไฟล์กำหนดค่า การป้องกันเพียงอย่างเดียวต่อการเปลี่ยนแปลงที่ "ไม่สามารถย้อนกลับได้" คือสแน็ปช็อต LVM / btrfs / etc (หรือการสำรอง / เรียกคืนที่ช้ากว่ามาก)
Matija Nalis

@MatijaNalis +1 สำหรับการกล่าวถึงนั้น!
Steffen Winkler

คำตอบ:


21

NixOSสนับสนุนการย้อนกลับการอัปเกรดแม้ว่าฉันจะเข้าใจแล้ว แต่ก็ไม่ได้ไปไกลเท่าที่คุณต้องการ: หากคุณอัปเกรด A, B และ C ในการดำเนินการครั้งเดียวคุณสามารถย้อนกลับการดำเนินการทั้งหมดได้ แต่ไม่ใช่แค่ A และ B. (คุณน่าจะสามารถหมุน A, B และ C กลับมาได้แล้วอัพเกรด C ... ) ที่เหมาะสมจากมุมมองของทรานแซคชัน

Debian (รวมกับสแนปชอตเก็บถาวรหากคุณไม่มีแพ็คเกจเก่า) จะช่วยให้คุณสามารถดาวน์เกรด B และเครื่องมือต่าง ๆ เช่นaptหรือaptitudeจะในหลาย ๆ กรณีพบว่า A ยังต้องมีการลดระดับ (เมื่อคุณมั่นใจว่าคุณ ไม่ต้องการอัปเกรด B) แต่อย่างที่คุณบอกว่ามันค่อนข้างยุ่งเหยิงและการลดระดับแพ็คเกจไม่ได้รับการสนับสนุนใน Debian อยู่ดี (ซึ่งหมายความว่าส่วนใหญ่เวลาที่พวกเขาทำงาน แต่ถ้าพวกเขาทำลายมันไม่ใช่ข้อผิดพลาด)


1
ที่ดูน่าสนใจ! ชุมชนดูกระตือรือร้นและมีสุขภาพดี ฉันจะลองทำสิ่งนี้แน่นอนขอบคุณ! หากภายในเย็นวันศุกร์ไม่มีคำตอบที่ดีกว่า / แตกต่างกันฉันจะทำเครื่องหมายคำตอบของคุณ
Steffen Winkler

การย้อนกลับบน NixOS นั้นยอดเยี่ยม แต่พลังที่แท้จริงมาจากวิธีการที่เปิดเผย: คำอธิบายแพคเกจ (และระบบ) สามารถนำมาจากที่เก็บ git ดังนั้นคุณสามารถจัดการระบบของคุณในแบบเดียวกับที่คุณจัดการโครงการซอฟต์แวร์รวมถึงสาขา และการผสาน ฯลฯ (และเนื่องจากการอัปเกรดอะตอมและความบริสุทธิ์ที่คุณไม่เคยทำลาย)
Daniel Jour

ผู้จัดการแพคเกจระวังยังสามารถทำงานบน distros ลินุกซ์อื่น ๆ เคียงข้างกับผู้จัดการแพคเกจ 'พื้นเมือง' ของพวกเขา มันยังทำงานบน OSX และฉันเคยเห็นการอ้างว่ามันอาจทำงานได้บน Windows นอกจากนี้คุณยังสามารถบอกให้ห้ามใช้แพคเกจบางรุ่น 'ดั้งเดิม' แทนการติดตั้งซ้ำของตัวเองแม้ว่าคุณจะสูญเสียการรับประกันบางอย่างด้วยวิธีนี้
Warbo

เพียง FYI ฉันจัดการเพื่อติดตั้ง NixOS บนแล็ปท็อปของฉัน (ภาพ KDE4 ให้ Kernel Panic ของฉัน แต่อิมเมจขนาดเล็ก (~ 390 MB) บูตได้ดีสำหรับคนที่เคยติดตั้ง Debian แบบกระจายนี่ค่อนข้างน่าสนใจ / สนุกอย่างไรก็ตาม ฉันยังไม่เข้าใจบางสิ่งเกี่ยวกับตัวจัดการแพคเกจโดยเฉพาะอย่างยิ่งเมื่อมันมาถึงสภาพแวดล้อมบนเดสก์ท็อปฉันติดตั้ง gdm / gnome-shell แล้ว แต่มันไม่ทำงานฉันจึงเปิดใช้งาน gnome3 / gdm ในไฟล์ configuration.nix และในการสร้างใหม่ มันทั้งแพคเกจและการอ้างอิงของพวกเขาถูกดาวน์โหลดอีกครั้งมันทำงานหลังจากรีบูตเครื่อง แต่ฉันไม่เข้าใจว่าทำไม
Steffen Winkler

@SteffenWinkler เมื่อใช้ NixOS คุณไม่ปกติติดตั้งสิ่งที่มีnix-envแทนคุณระบุสิ่งที่อยู่ในและเรียกใช้แล้วconfiguration.nix nixos-rebuild switchสิ่งนี้มีประโยชน์ที่การกำหนดค่าระบบทั้งหมดของคุณอยู่ในที่เดียวและเป็นเรื่องง่ายในการสำรองข้อมูลการกำหนดค่าระบบทั้งหมดของคุณ (เพียงสำรองconfiguration.nixไฟล์)
Pauan

15

ในการyumแจกจ่ายตาม (เช่นRed Hat EL , CentOSฯลฯ ) คุณสามารถ:

  1. ตรวจสอบประวัติความเปลี่ยนแปลงของระบบโดยใช้ sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. ตรวจสอบรายละเอียดโดยใช้ sudo yum history info 10

  3. ย้อนกลับไปยังจุดก่อนหน้าในประวัติศาสตร์โดยใช้ sudo yum history rollback 9

การเตือน

มีข้อแม้ที่ชัดเจนบางอย่าง:

  1. หากแพ็คเกจเก่าไม่สามารถใช้งานได้อีกต่อไปแสดงว่าคุณเป็นขนมปังปิ้ง (เพื่ออ้างอิง @vonbrand)
  2. หากคุณติดตั้งสิ่งใดนอกยำคุณสามารถทำลายประวัติ

ในตัวอย่างของฉันที่<อยู่ในแถวที่มี ID 4(ในคอลัมน์สุดท้าย) หมายความว่าฉันไม่สามารถย้อนกลับผ่านจุดนั้นได้

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete

3
คุณสมบัติที่น่าสนใจ! แต่เนื่องจาก 'ขนมปังปิ้ง' ไม่พอดีกับใบเสร็จของฉัน
Steffen Winkler

AFAIK สามารถทำได้เฉพาะใน RHEL / CentOS 6 หรือสูงกว่า หากคุณยังใช้ RHEL / CentOS 5 อยู่แสดงว่าคุณเป็น SOL
Wildcard

และโดยวิธีการในสภาพแวดล้อมขององค์กรที่มี repos ที่มีการจัดการวิธีการนี้ค่อนข้างใช้งานได้เพราะคุณมีแพ็คเกจเก่า ๆ อยู่เสมอแม้ว่าคุณจะต้องใช้--enablerepoแฟล็กเพื่อเปิดใช้งานพื้นที่เก็บข้อมูลเก่าที่ไม่ได้ใช้งาน
สัญลักษณ์แทน

ประโยชน์ของการย้อนกลับกับเพียงแค่ติดตั้งเวอร์ชันเก่าอีกครั้งคืออะไร
Bratchley

@ อัตโนมัติแบรดลีย์! yum เพียงแค่ดูแลรายการของแพ็คเกจและรุ่นที่ติดตั้งไว้และตรวจสอบการพึ่งพาเมื่อติดตั้งเวอร์ชันเก่า เห็นได้ชัดว่าคุณสามารถทำมันด้วยมือ
andcoz

7

เมื่อวันที่OpenSUSEคุณสามารถใช้ปลากะพงกับระบบแฟ้ม Btrfs

ถ้าคุณใช้มาตรฐานการกำหนดค่าของระบบไฟล์ระหว่างการติดตั้งมันถูกเปิดใช้งานโดยค่าเริ่มต้น

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

หากต้องการย้อนกลับระบบเป็นเงื่อนไขก่อนหน้านี้คุณต้องเรียกใช้yast2 snapperเท่านั้น

ป้อนคำอธิบายรูปภาพที่นี่


เครื่องมือที่น่าสนใจอย่างแน่นอน แม้ว่าฉันจะชอบ ext4 มาก จะวิจัยเรื่องนี้! ฉันถูกต้องในการสมมติว่าปลากะพงไม่ 'ผูก' กับ OpenSUSE แต่เพื่อ btrfs?
Steffen Winkler

ปลากะพงได้รับการพัฒนาโดย SUSE มันคือชุดของเครื่องมือที่สร้างสแน็ปช็อตของ Brtfs ใน "events" โดยอัตโนมัติ ฉันคิดว่าคุณสามารถใช้มันกับการกระจายอื่น ๆ แต่ฉันไม่แน่ใจ คุณสามารถสร้างสแนปชอตของ Brtfs ด้วยตนเองในทุกกรณี
andcoz

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

1
โปรดทราบว่าแพ็กเกจจำนวนมากมีไฟล์และ / หรือไดเรกทอรีใน/varจึงจะต้องย้อนกลับพร้อมกับ/แม้ว่าจะเป็น fs หรือ subvolume แยกต่างหาก เป็นการดีกว่าที่จะทดสอบการอัปเกรดอย่างละเอียดก่อนที่จะนำไปใช้กับเซิร์ฟเวอร์ที่ใช้งานจริงมากกว่าที่จะใช้คุณสมบัติเช่นการอัปเกรดระบบปฏิบัติการย้อนกลับ (ซึ่งเป็นเรื่องง่ายที่จะทำในลักษณะกึ่งครึ่ง แต่เป็นปัญหาที่ยากมากในการแก้ไขอย่างถูกต้อง )
cas

1
@Jimp คำแนะนำที่ดี ไม่ว่าในกรณีใด OpenSuSE จะไม่เปิดใช้งานปลากะพงเว้นแต่/homeจะอยู่ในระบบไฟล์ที่ไม่มีสแนปชอตแยกต่างหาก
andcoz

6

AIX ดีมากในการย้อนกลับการอัพเดต ดี - เราอยู่ในเว็บไซต์ Unix / Linux และคุณไม่เคยระบุว่าคุณต้องการ Linux :)

แต่ละการอัพเดต AIX เดี่ยวจะบันทึกไฟล์ที่ถูกแก้ไขทั้งหมดในไดเร็กทอรีย่อยที่แยกจากกันภายในระบบไฟล์ / var การอัปเดตสามารถย้อนกลับได้ด้วยคำสั่งเนทีฟแบบธรรมดาและการเปลี่ยนกลับไม่จำเป็นต้องใช้เครือข่ายให้ทำงานมันไม่จำเป็นต้องมีสื่อ / แพ็คเกจใด ๆ มันไม่ได้ติดตั้งอะไรอีกและไม่ขึ้นอยู่กับสิ่งใด ๆ เทคโนโลยี snapshot - เอฟเฟกต์เป็นเพียงไฟล์ที่ปรากฏขึ้นอีกครั้งเหมือนก่อนการอัพเดท

เป็นโบนัสมีคำสั่งเนทีฟเล็กน้อยmksysbสำหรับสร้างการสำรองข้อมูลระบบแบบสแตนด์อโลนที่สามารถบู๊ตได้ ไฟล์ที่สามารถบู๊ตได้บนระบบที่ผิดปกติอย่างสมบูรณ์ซึ่งไม่สามารถบู๊ตได้เนื่องจากข้อผิดพลาด / ความเสียหายบางอย่าง

และเป็นเทคโนโลยีที่ได้รับการพิสูจน์มาแล้วหลายทศวรรษ :)


คุณมักประสบปัญหากับโปรแกรมที่กู้คืนในลักษณะที่อยู่ในสถานะที่ไม่สอดคล้องกันและย้อนกลับ (เช่นฐานข้อมูลที่มีเอ็นจินการเก็บข้อมูลมีการเปลี่ยนแปลงหรือบริการที่เปลี่ยนเป็นรูปแบบไฟล์กำหนดค่าใหม่) หรือมีวิธีการทำงานที่ดี ที่?
Josh Rumbut

1
นี่คือรูปแบบที่ฉันใช้เมื่อฉันสร้างระบบการจัดการแพ็กเกจพื้นฐานสำหรับซอฟต์แวร์ที่เผยแพร่แบบดั้งเดิมใน tarball ที่บีบอัด / gzipped เมื่อใดก็ตามที่ติดตั้งการอัปเดตมันจะสร้าง "แพ็คเกจการย้อนกลับ" เป็นครั้งแรกของทุกสิ่งที่จะต้องแก้ไข แพคเกจย้อนกลับนี้สามารถใช้ในการย้อนกลับได้หากไม่มีแพ็คเกจการอัพเดทอื่น ๆ ที่ถูกนำไปใช้ในระหว่างกาล ฉันมักจะสงสัยว่าผู้จัดการแพคเกจที่เหมาะสมสามารถทำได้หรือไม่ แต่ให้ข้อ จำกัด ในการย้อนกลับเฉพาะในลำดับย้อนกลับ ... บางทีเราควรใช้ git แทน
Monty Harder

ด่ามัน ฉันควรระบุว่าฉันหมายถึง GNU / Linux ดิสทริบิวชัน แต่น่าสนใจ AIX ดูเหมือนว่าจะสามารถเรียกใช้ GNU / Linux 'โปรแกรม' ในปัจจุบันเดาว่าฉันจะมองอย่างใกล้ชิด
Steffen Winkler

5

ใน Fedora (และฉันมั่นใจในการกระจายอื่น ๆ ด้วย) คุณสามารถขอให้ย้อนกลับไปเป็นเวอร์ชั่นก่อนหน้า:

dnf downgrade <packages>

ทำให้คุณได้รับแพ็คเกจรุ่นต่อไปถึงรุ่นล่าสุดและคุณสามารถขอรุ่นใดรุ่นหนึ่งได้โดย:

dnf downgrade <package>.<version>

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


คุณสามารถใช้ประวัติ dnf เลิกทำทุกอย่างเพื่อเลิก
Clearer

This only works if the package(s) are still available in the repositories. ใช่นั่นเป็นปัญหา ฉันประหลาดใจที่ดูเหมือนจะไม่มีทางแก้ปัญหาที่ 'กว้างขึ้น' สำหรับเรื่องนี้โดยเฉพาะอย่างยิ่งเมื่อมีการแจกแจงแบบกระจาย ณ ตอนนี้ดูเหมือนว่า NixOS เป็นตัวเลือกที่ดีที่สุดของฉันหรือฉันต้องการเครื่องมือสร้างภาพระบบบางอย่างที่ทำงานกับความแตกต่างเท่านั้น
Steffen Winkler

@SteffenWinkler หากแพ็คเกจเก่าไม่สามารถใช้งานได้อีกต่อไปแสดงว่าคุณเป็นขนมปังปิ้ง อย่างชัดเจน เว้นแต่คุณจะมีข้อมูลสำรองในตัวเครื่องอยู่
vonbrand

2
@Milsted เพราะมันเก่าเกินไปแล้ว ที่เก็บไม่ประกอบด้วยทุกรุ่นตั้งแต่เช้าตรู่
vonbrand

1
ใน dnf.conf (เหมือนกับ yum.conf) มี keepcache = true แพ็คเกจเก่าที่มีอยู่เนื่องจาก lond cache ไม่ได้ถูกล้างด้วยตนเอง แต่ไปที่แคชแพ็กเกจ "bloat"
mmv-ru

2

Arch Linux ยังรองรับแพ็คเกจการดาวน์เกรดและเคอร์เนล คุณยังสามารถติดตั้งdowngraderและdowngradeเครื่องมือต่าง ๆ เพื่อทำให้กระบวนการเป็นไปโดยอัตโนมัติ วิธีการแก้ปัญหา btrfs ยังใช้งานได้ฉันใช้มันเพื่อย้อนกลับด้วยตนเองมาก่อน

ฉันจะย้อนกลับระบบของฉันได้อย่างไร:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

ข้อดีอย่างหนึ่งของ btrfs คือคุณสามารถใช้ไดรฟ์ย่อยและ "พาร์ทิชัน" แบบไดนามิก ตัวอย่างเช่นฉันมี subvolume สำหรับ / (เรียกว่า @), / tmp (@tmp) และ / home (@home) จากนั้นง่ายต่อการสำรองข้อมูลและย้อนกลับสิ่งเหล่านี้ ฉันมี / tmp ใน subvolume แยกต่างหากเนื่องจากการสำรองข้อมูลกับส่วนที่เหลือของระบบดูเหมือนไม่มีจุดหมายเพราะมันถูกลบในการรีบูตเกือบทุกครั้ง


ผมทำตามการเชื่อมโยงในวิกิพีเดียและมีที่นี่ ดูดีและจากการตรวจสอบพื้นที่เก็บข้อมูลมีไฟล์ย้อนกลับไปในปี 2013! เหตุใดจึงต้องใช้วิธี btrfs เมื่อมีอยู่? เพราะไฟล์ที่ 'อัพเกรด'? หรือมีเหตุผลอื่นอีกบ้าง?
Steffen Winkler

ตอนนี้ฉันเปลี่ยนเป็น Arch Linux อย่างถาวรหลังจากจ่าย NixOS ในระยะสั้น มัน (Arch Linux) นั้นแทบไม่เสถียรเท่าที่ฉันคิดเสมอว่ามันเป็นและมีชุมชนที่มีสุขภาพดี
Steffen Winkler

@SteffenWinkler นั่นถูกต้อง นอกจากนี้ตัวเลือกการปรับลดรุ่น Arch ไม่รองรับ "เป็นทางการ" และการปรับลดรุ่นอาจจะไม่สนใจการพึ่งพา (ซึ่งอาจทำให้สับสนได้
Caleb Reister

2

ฉันใช้ Arch Linux และมันเก็บแพ็คเกจที่ดาวน์โหลดมาทั้งหมดเพื่อ/var/cache/pacman/pkg/ให้คุณสามารถดาวน์เกรดแพ็คเกจได้ทุกเมื่อ (ไม่สามารถบูตใช้ usb สด) จากArch Wiki :

pacman -U <file_name_of_the_package>

หากต้องการป้องกันไม่ให้อัปเกรดแพ็คเกจให้ใส่ชื่อแพ็คเกจใน/etc/pacman.confเช่น:

IgnorePkg=linux

เพื่อประหยัดพื้นที่คุณสามารถล้างโฟลเดอร์แคชด้วย:

pacman -Sc

ซึ่งจะลบแพ็คเกจเก่าทั้งหมดและเก็บใหม่ล่าสุดหรือใช้-Sccเพื่อลบทั้งหมด


โปรดทราบว่าสิ่งนี้ (ไม่สนใจแพ็คเกจ) จะเป็นการอัพเกรดบางส่วนซึ่งไม่ได้รับการสนับสนุน ...
jasonwryan

ผมทำตามการเชื่อมโยงในวิกิพีเดียและมีที่นี่ ดูดีและจากการตรวจสอบพื้นที่เก็บข้อมูลมีไฟล์ย้อนกลับไปในปี 2013! เหตุใดจึงต้องใช้วิธี btrfs เมื่อมีอยู่? เพราะไฟล์ที่ 'อัพเกรด'? หรือมีเหตุผลอื่นอีกบ้าง?
Steffen Winkler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.