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
@pacman@ (các gói chính thức) mà bằng @yaurt@ (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 @pacman@ thì
bạn chỉ gói @firefox@ @7.0.1@, trong khi cài bằng @yaourt@ thì bạn có
thể dùng tới phiên bản @8@ (với @firefox-beta-bin@ @8.0b3-1@ tại thời
điểm bài này được viết).
Khi cài bằng @yaourt@ 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 @yaourt@ đã lạc hậu. Ví dụ,
nếu đến cuối năm nay @firefox 9@ ra mắt, thì khi đó, trong máy của bạn
phiên bản cài bằng @yaourt@ vẫn là @8@. 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 @yaourt@ để cài tiếp phiên bản @beta@.
Nhưng nếu bạn muốn dùng bản chính thức (@firefox 9@) thì sao? Thật đơn
giản, chỉ việc
1/ Gỡ bỏ phiên bản @firefox@ hiện có bằng lệnh @pacman -R foobar@
2/ Cài phiên bản @firefox@ bằng @pacman@ để 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 @libkipi-git@ cài bằng @yaourt@, nhưng gói này làm
bộ @KDE@ 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 @yaourt@.
(Bạn để ý là, gói chính thức @firefox@ thì trong @AUR@ có thể có rất
nhiều tên khác nhau; ở các ví dụ trên đó là @firefox-beta-bin@, và
@libkipi-git@.)
2/ Dùng @pacman@ để 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/ @pacman@ ưu tiên cài gói từ @repository@ chính thức so với các gói
từ @AUR@ (cài bằng @yaourt@ hay chương trình tương tự)
2/ @pacman@ sẽ tạm thời chấp nhận gỡ bỏ gói cài bằng @yaourt@ 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 @pacman@ 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