Tôi nên sửa lỗi cài đặt Homebrew sau khi nâng cấp OS X như thế nào?


25

Bối cảnh

Chủ nhân của tôi đã cho tôi một chiếc MacBook Pro cho công việc phát triển; tuy nhiên, hầu hết các công việc phát triển tôi làm trong nhóm nghiên cứu của mình là dành cho nền tảng Linux và vì nhiều lý do chính sách, tôi không thể cài đặt phần mềm ảo hóa trên máy tính xách tay này. Homebrew trông giống như một cách tốt để cài đặt các công cụ này, đặc biệt là vì nó trông rất dễ hack (vì nó sử dụng Ruby; MacPorts trông không thể hack được, vì nó sử dụng Tcl). Tuy nhiên, Homebrew dựa vào các thư viện hệ thống và vì lý do bảo mật, chủ nhân của tôi có thể (và từ những gì tôi nghe thấy, thường xuyên) sẽ nâng cấp hệ thống của tôi bất cứ lúc nào. Tôi đã nghe nói rằng các bản nâng cấp OS X sẽ phá vỡ Homebrew. (Xem, ví dụ: /programming/7779300/how-should-i-upTHER-xcode-after-upgrad-to-os-x-lion ).

Câu hỏi

Làm cách nào để sửa lỗi cài đặt Homebrew của tôi sau khi nâng cấp OS X? Tôi ổn với việc xóa nó và bắt đầu lại từ đầu, miễn là tôi có thể làm như vậy một cách tự động. (Ví dụ: sử dụng Puppet cộng với nhà cung cấp Homebrew để tạo kịch bản cấu hình sẽ tự động xây dựng khi chạy tập lệnh shell.) Tôi đã ở Google ở ​​mọi nơi và dường như không thể tìm thấy câu trả lời nào cho câu hỏi này.

Câu trả lời:


8
brew update

Cập nhật cài đặt Homebrew. Nếu có bất kỳ lỗi nào, chúng nên được báo cáo bởi brew doctor. Hãy thử sửa chúng, bạn có thể sử dụng tập lệnh gỡ cài đặt như sau:

#!/bin/sh
# Just copy and paste the lines below (all at once, it won't work line by line!)
# MAKE SURE YOU ARE HAPPY WITH WHAT IT DOES FIRST! THERE IS NO WARRANTY!

function abort {
  echo "$1"
  exit 1
}

set -e

/usr/bin/which -s git || abort "brew install git first!"
test -d /usr/local/.git || abort "brew update first!"

cd `brew --prefix`
git checkout master
git ls-files -z | pbcopy
rm -rf Cellar
bin/brew prune
pbpaste | xargs -0 rm
rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
test -d Library/LinkedKegs && rm -r Library/LinkedKegs
rmdir -p bin Library share/man/man1 2> /dev/null
rm -rf .git
rm -rf ~/Library/Caches/Homebrew
rm -rf ~/Library/Logs/Homebrew
rm -rf /Library/Caches/Homebrew

Và cài đặt homebrew một lần nữa. Tôi khá chắc chắn rằng tất cả điều này là cấu hình bằng cách sử dụng con rối.


7

Tôi nghĩ rằng bạn có thể đã tự hỏi về việc bạn có cần xây dựng lại tất cả các gói thay vì chỉ gỡ cài đặt. Nếu đó là trường hợp, tôi hiểu nó thường không phải là một vấn đề, như câu trả lời này nói .

Tôi đã gặp sự cố, đặc biệt là khi thay đổi sang OS X Mavericks và Xcode 5 Tôi phải liên kết lại tất cả các gói tôi đã cài đặt - đây là tập lệnh của tôi:

#!/bin/bash
FORMULAS=(`brew list`);
for FORMULA in "${FORMULAS[@]}"
do 
    echo "brew unlink $FORMULA" && echo "brew link $FORMULA";
    OUTPUT=`brew unlink $FORMULA`;
    echo $OUTPUT;
    OUTPUT=`brew link $FORMULA`;
    echo $OUTPUT;
done

Lưu ý đầu ra, một số công thức sẽ yêu cầu --forcecho linkbước này.

Nếu vẫn không được, hãy thử chuỗi lệnh này từ Mike McQuaid :

brew list > brew-list.txt
brew uninstall $(cat brew-list.txt)
brew install $(cat brew-list.txt)

Hiện tại có một rebuildlệnh trong HomeBrew, nhưng hiện tại không giải quyết được các phụ thuộc.


1
Tôi đã cài đặt sạch Mavericks trên máy Mac mới của mình và sau đó tôi đã khôi phục bản sao lưu Time Machine từ máy Mac khác. Nó rời khỏi máy tính với mọi thứ được cài đặt, bao gồm cả Homebrew và các công thức của nó, nhưng tất cả chúng đều không được liên kết. Tôi đã sử dụng tập lệnh để liên kết lại tất cả các công thức cùng một lúc và sửa nó! Hoạt động như một lá bùa, cảm ơn.
Alejandro García Iglesias

1
Trong một vấn đề liên quan, tôi đã phải bỏ / gõ tất cả các vòi, nếu không, brew sẽ không tìm thấy một số công thức mặc dù nó tuyên bố rằng vòi chính xác đã được gõ. for tap in $(brew tap); do brew untap "$tap"; brew tap "$tap"; done
Joel Purra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.