[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Mẹo: pacman thay thế gói cài bởi yaourt



Hi,

Khi làm việc với Arch, có lúc bạn phải cài thêm vài gói không phải bằng
@[email protected] (các gói chính thức) mà bằng @[email protected] (các gói do người dùng
đóng góp ở dạng chỉ thị đóng gói PKGBUILD.) Nếu cài bằng @[email protected] thì
bạn chỉ gói @[email protected] @[email protected], trong khi cài bằng @[email protected] thì bạn có
thể dùng tới phiên bản @[email protected] (với @[email protected] @[email protected] tại thời
điểm bài này được viết).

Khi cài bằng @[email protected] thì sau một thời gian khá lâu, sau vài lần nâng
cấp hệ thống bạn sẽ thấy rằng các gói bằng @[email protected] đã lạc hậu. Ví dụ,
nếu đến cuối năm nay @firefox [email protected] ra mắt, thì khi đó, trong máy của bạn
phiên bản cài bằng @[email protected] vẫn là @[email protected] Nói dài dòng, thôi minh họa
bằng sơ đồ như sau

<pre>
           | Bây giờ      | Tháng 12
     pacman| firefox 7    | (thực tế: firefox 9)
     yaourt| firefox 8beta| (thực tế: firefox 10beta
    máy bạn| firefox 8beta| firefox8 beta
</pre>

Tới tháng 12 thì bạn có thể dùng @[email protected] để cài tiếp phiên bản @[email protected]
Nhưng nếu bạn muốn dùng bản chính thức (@firefox [email protected]) thì sao? Thật đơn
giản, chỉ việc 

1/ Gỡ bỏ phiên bản @[email protected] hiện có bằng lệnh @pacman -R [email protected]
2/ Cài phiên bản @[email protected] bằng @[email protected] để dùng gói chính thức

Tưởng dễ mà không dễ. Hai bước trên không thể thực hiện theo thứ tự đã
chỉ ra, nếu bạn chạm tới một số thư việc kéo theo nhiều phần mềm phụ
thuộc. Ví dụ, trên máy của mình đây

<pre>
$ pacman -Rs libkipi-git
checking dependencies...
error: failed to prepare transaction (could not satisfy dependencies)
:: digikam: requires libkipi
:: kdegraphics-gwenview: requires libkipi
:: kipi-plugins: requires libkipi
</pre>

Mình đã sử dụng gói @[email protected] cài bằng @[email protected], nhưng gói này làm
bộ @[email protected] của mình bị hỏng, nên mình muốn gỡ nó đi, cài lại. Rõ ràng
cách trên chẳng thể được. 

Rất nhiều lần mình gặp vấn đề tương tự, nhưng tặc lưỡi bỏ qua, thôi thì
cứ xài vậy, khỏi gỡ bỏ gì hết. Hóa ra mình không biết đến giải pháp rất
đơn giản như sau đây:

1/ Tìm gói chính thức tương ứng với gói cài bằng @[email protected] 

 (Bạn để ý là, gói chính thức @[email protected] thì trong @[email protected] có thể có rất
 nhiều tên khác nhau; ở các ví dụ trên đó là @[email protected], và
 @[email protected])
 
2/ Dùng @[email protected] để cài gói vừa tìm được.

Ví dụ

<pre>
$ pacman -S libkipi
resolving dependencies...
looking for inter-conflicts...
:: libkipi and libkipi-git are in conflict. Remove libkipi-git? [y/N] y

Remove (1): libkipi-git-20111014-1

Total Removed Size:   0.34 MB

Targets (1): libkipi-4.7.2-1

Total Download Size:    0.06 MB
Total Installed Size:   0.24 MB

Proceed with installation? [Y/n] Y
:: Retrieving packages from extra...
</pre>

Có lẽ quá dài dòng, trước khi bạn nhận ra rằng

1/ @[email protected] ưu tiên cài gói từ @[email protected] chính thức so với các gói
từ @[email protected] (cài bằng @[email protected] hay chương trình tương tự)

2/ @[email protected] sẽ tạm thời chấp nhận gỡ bỏ gói cài bằng @[email protected] trước khi
cài gói mới, mà không đoái hoài tới các gói phụ thuộc.

Đây chính là cách @[email protected] giải quyết một trong những xung đột giữa các
gói.

Chấm hết :)

-- 
Anh Ky Huynh @ ICT
Registered Linux User #392115