Topgrade και αναβαθμίστε τα πάντα

Η αναβάθμιση σε μια τυπική διανομή Linux είναι μια απλή υπόθεση σωστά; Αρκεί να επιλέξεις τα πακέτα από το εργαλείο της διανομής σου και είσαι εντάξει σωστά; Ε όχι ακριβώς …

Έχω Linux Mint, και έχω διάφορά εφαρμογίδια, μια επέκταση του cinnamon και κάποια desklets και θέματα. Και αυτά θα πρέπει να τα αναβαθμίσω ξεχωριστά. Επίσης να δω αν υπάρχει κάτι καινούργιο στο conky που χρησιμοποιώ, α ναι και στα flatpacks, α ναι και στα snaps, μισό αλλά έχω κάποια gems που χρησιμοποιώ για ruby, και κάποια cargo πακέτα από την rust. Επίσης έχω αυτό το πρόγραμμα σε node.js α ναι και εκείνο το Python pip, επίσης τα plugins για τα IDE που χρησιμοποιώ, επίσης πρέπει να αναβαθμίσω τα …

Τελικά η αναβάθμιση δεν είναι τόσο απλή υπόθεση, ειδικά αν βάζεις πράγματα εκτός διανομής. Θα μου πεις πως τα μεταξωτά βρακιά θέλουν, ξέρουμε, αλλά τι καλά που θα ήταν να μπορούσαμε με κάποιο τρόπο να τα κάνουμε αυτά με μια απλή εντολή.

Και η εντολή αυτή υπάρχει, όπως θα μάντεψε ήδη ο υποψιασμένος αναγνώστης, αλλιώς γιατί να γραφτεί αυτό το κατεβατό εεε; Και ξέρει πως την λένε και topgrade. Γιατί; Μα το λέει στον τίτλο …

Εγκατάσταση

Το topgrade είναι γραμμένο σε Rust :rust: , και θα αναβαθμίσει τον εαυτό του μέσα από το cargo αν έχουμε ιδέα τι είναι αυτό το Rust και το cargo :grinning: Σε αυτή την περίπτωση

cargo install topgrade

Διαφορετικά το κατεβάζουμε από την σελίδα

Χρήση

Απλά δίνουμε την εντολή

topgrade

Επίσης έχουμε τις παρακάτω επιλογές

Topgrade 2.2.1
Roey Darwish Dror <roey.ghost@gmail.com>
Command line arguments

USAGE:
    topgrade [FLAGS] [OPTIONS]

FLAGS:
    -c, --cleanup     Cleanup temporary or old files
    -n, --dry-run     Print what would be done
    -h, --help        Prints help information
        --no-retry    Do not ask to retry failed steps
    -t, --tmux        Run inside tmux
    -V, --version     Prints version information
    -v, --verbose     Output logs

OPTIONS:
        --disable <disable>...    Do not perform upgrades for the given steps [possible values: vim, git-repos, emacs,
                                  system, gem]

Τι ακριβώς κάνει ;

Αντιγράφω από το αρχείο README, μιας και είναι πραγματικά πάρα πολλά :slight_smile:

  • Try to self-upgrade if compiled with this feature. Topgrade will respawn itself if it was upgraded.
  • Linux: Run the system package manager:
    • Arch based: Run yay or fall back to pacman
    • Redhat based: Run yum upgrade (or dnf if present)
    • Debian based: Run apt update && apt dist-upgrade
    • Gentoo: Run layman -s ALL && emerge --sync -q && eix-update && emerge -uDNa world
    • openSUSE: Run zypper refresh && zypper dist-upgrade
    • Void: Run xbps-install -Su
  • Linux: Run etc-update:
  • FreeBSD: Upgrade and audit packages
  • Unix: Run brew update && brew upgrade. This should handle both Homebrew and Linuxbrew
  • Unix: Run nix upgrade-nix && nix --upgrade.
  • Unix: Run Pearl pearl update.
  • Windows: Run Topgrade inside WSL.
  • Windows: Upgrade Powershell modules
  • Windows: Upgrade all Chocolatey packages
  • Windows: Upgrade all Scoop packages
  • Check if the following paths are tracked by Git. If so, pull them:
    • ~/.emacs.d (Should work whether you use Spacemacs or a custom configuration)
    • ~/.zshrc
    • ~/.oh-my-zsh
    • ~/.tmux
    • ~/.config/fish
    • ~/.config/nvim
    • ~/.vim
    • ~/.config/openbox
    • ~/.config/bspwm
    • ~/.config/i3
    • Powershell Profile
    • Custom defined paths
  • Unix: Run zplug update
  • Unix: Run fisher
  • Unix: Upgrade tmux plugins with TPM. Note: Do not use
    the -b flag in your configuration as suggested by the TPM readme.
  • Update Rustup by running rustup update. This will also attempt to run rustup self update when Rustup is installed inside the home directory.
  • Run Cargo install-update
  • Upgrade Emacs packages (You’ll get a better output if you have Paradox installed)
  • Upgrade OCaml packages
  • Upgrade vcpkg globally installed packages
  • Upgrade myrepos managed sourcecode repositories
  • Upgrade Python packages installed using pipx
  • Upgrade R globally installed packages
  • Upgrade Vim/Neovim packages. Works with the following plugin frameworks:
  • Node
    • Run yarn global update if yarn is installed.
    • Run npm update -g if NPM is installed and npm root -g is a path inside your home directory.
  • Run composer global update if Composer’s home directory is inside the home directory of the
    user. Run valet install after.
  • Upgrade Atom packages
  • Run gem upgrade --user-install if ~/.gem exists
  • Linux: Update Flatpak packages
  • Linux: Update snap packages
  • Linux: Run fwupdmgr to show firmware upgrade. (View
    only. No upgrades will actually be performed)
  • Linux: Run rpi-update to update Raspberry Pi Firmware
  • Linux: Run pihole updater
  • Run custom defined commands
  • Final stage
    • Linux: Run needrestart
    • Windows: Run Windows Update (You’ll have to install PSWindowsUpdate)
    • macOS: Upgrade App Store applications
    • FreeBSD: Run freebsd-upgrade

Τι δεν κάνει;

Οι παρατηρητικοί θα παρατήρησαν πως δεν φτιάχνει καφέ :coffee:.

Πέραν αυτού δεν κάνει αναβάθμιση στα διάφορα καλούδια του cinnamon ή του conky. Για το cinnamon, στα επόμενα mint κάποια στιγμή, θα λυθεί το πρόβλημα. Είδα να τρέχει το fwupdmgr κατι που δεν μου άρεσε καθόλου. Τα firmware είναι απο τα πραγματα που δεν θέλω καθόλου προτοβουλίες. Αλλά ειδοποιεί μόνο αν υπαρχει κάποια διαθέσιμη αναβάθμιση και δεν τι κάνει. Καλώς.

Όσο για τον καφέ τι να πώ; Απαράδεκτον !!!

15 «Μου αρέσει»

Σημείωση: Για αναβάθμιση των προγραμμάτων σε Rust (αν τα έχετε προσθέσει με το cargo) πλέον θέλει και ένα

cargo install cargo-update
4 «Μου αρέσει»

κάποια λύση για την περίπτωση που αυτή η εντολή δεν ολοκληρώνει την αναβάθμιση;
:pray:

Μια μικρή βοήθεια για το τι πρέπει να κάνω. :pray:

Ευχαριστώ

Για να το κάνεις compile θα χρειαστείς να εγκαταστήσεις πρώτα τη Rust με την εντολή:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

και θα πρέπει να έχεις εγκατεστημένο το πακέτο libssl-dev (ίσως να θέλει και άλλα). Το μήνυμα λάθους μάλλον προκύπτει επειδή η Rust που έχεις εγκατεστημένη είναι παλιά.

Αλλά δεν είναι απαραίτητο να πάρεις τον δύσκολο δρόμο. Μπορείς απλά να το κατεβάσεις από εδώ:

Δεν ξέρω αν θα ενημερώσει έτσι αυτόματα τον εαυτό του, αλλά στη χειρότερη περίπτωση θα σε ενημερώσει να το ξανακατεβάσεις όποτε χρειαστεί.

Τέλος, ένα δυσεπίλυτο πρόβλημα που μπορεί να προκύψει είναι να σταματάει η εντολή λίγο πριν κάνει αναβάθμιση τα Flatpacks. Σε αυτή την περίπτωση απλά δίνεις την εντολή fg και συνεχίζει.

Στα συστήματα που το τρέχω κάποιες φορές μπορεί να προκύψει. Το έλυσα με ένα απλό script που έχει μέσα τα παρακάτω

#!/bin/bash
${HOME}/.cargo/bin/topgrade --yes --only flatpak 
${HOME}/.cargo/bin/topgrade 

Μαζί με ένα αρχείο ρυθμίσεων στη θέση ~/.config/topgrade.toml με

disable = ["firmware", "flatpak"]
cleanup = true
assume_yes = true

ΥΓ: Δυστυχώς εξακολουθεί να μη φτιάχνει καφέ :coffee: .

1 «Μου αρέσει»

Σ’ ευχαριστώ πάρα πολύ για την απάντηση @Asfodelus.
Απεγκατέστησα τη Rust, γιατί μάλλον η προηγούμενη έκδοση ήταν παλιά και την εγκατέστησα πάλι.
Στη συνέχεια πέρασα και το πακέτο libssl-dev και όλα μια χαρά. Τρέχει χωρίς κανένα πρόβλημα πλέον.

Tnx και για τις πρόσθετες πληροφορίες! :+1:

ελπίζω να μην γίνομαι κουραστικός ρωτώντας ξανά:
η πιο πάνω εντολή cargo install cargo-update αδυνατεί να ολοκληρώσει την αναβάθμιση και δίνει στο τέλος:
error: failed to compile cargo-update v10.0.0, intermediate artifacts can be found at `/tmp/cargo-installEIy3th

Για να εγκατασταθεί η cargo-update θέλει να υπάρχει εγκατεστημένο το cmake και το pkg-config καθώς και οι εξής βιβλιοθήκες σε Debian

  • libgit2-dev
  • libssh-dev
  • libssl-dev

Πηγή: https://crates.io/crates/cargo-update#required-libraries

2 «Μου αρέσει»

κατάφερα να εγκαταστήσω το cargo-update αλλά μετά το topgrade δεν μπορεί να κάνει update στο exa και δίνει fail.

βρήκα έναν οδηγό εγκατάστασης του exa αλλά ζητάει την εγκατάσταση του rustup
την προσπάθησα και παίρνω error: can't install while rust is installed

να απεγκαταστήσω την rust ;

Ευχαριστώ πολύ!!!

Κατ αρχήν δεν υπάρχει κανένας λόγος να εγκαθιστάς προγράμματά της Rust με μεταγλώττιση, εφόσον αυτά υπάρχουν στα αποθετήρια.

  • To topgrade δεν υπάρχει σήμερα στα αποθετήρια, άρα είτε το κατεβάζουμε, είτε το χτίζουμε

  • Το exa όμως υπάρχει στα αποθετήρια. Ακόμα και αν βγάλει σήμερα μια καινούργια έκδοση, τι μπορεί να κάνει παραπάνω που να καίγεσαι να το θέλεις σήμερα;

Η μεταγλώττιση είναι ζόρι και κουπί και δεν μπορείς πάντα να κάνεις το παπί, θα πρέπει να είσαι λιγάκι προγραμματιστής για να εντοπίζεις κάθε φορά το πρόβλημα, να βρίσκεις τι βιβλιοθήκες ή εργαλεία απαιτεί κλπ…

Απλά σβήστε το exa απο το ~/.cargo/bin και εγκατέστησε το με ένα απλό apt install exa η ότι άλλο χρησιμοποιεί η διανομή σου.

ΥΓ: Εγώ μπορεί να το κάνω, αλλά γράφω σε Rust και με ενδιαφέρει να βλέπω τι βιβλιοθήκες χρησιμοποιούν λίγο τον κώδικα αν θέλω κάτι παρόμοιο κλπ…

1 «Μου αρέσει»

Δεν ξέρω τι εννοείς με τον όρο μεταγλώττιση … δεν έχω ιδέα τι είναι το exa.
Αφού το cargo install cargo-update όπως είπα πιο πάνω ολοκληρώθηκε επιτυχώς, είδα το topgrade να βγάζει μνμ λάθους για το exa πράγμα που δεν το έκανε πριν και για αυτό ρωτάω… δεν το χρησιμοποιώ! Εκτός αν είναι κάτι που χρειάζεται συνολικά στο σύστημα για να δουλέψει σωστά!

1 «Μου αρέσει»

Ας δούμε ένα παράδειγμα που μόλις έπεσα πάνω του. Πήρα ένα μήνυμά λάθους.

  = note: /usr/bin/ld: cannot find -lX11-xcb: No such file or directory
          collect2: error: ld returned 1 exit status

κάτι έχει να κάνει με το xcb ότι και αν είναι αυτό. Έψαξα για κάποιο πακέτο που να περιέχει τις λέξεις xcb και dev. Το lib11-xkb-dev είναι ελπιδοφόρο και πράγματι η εγκατάσταση του έλυσε το πρόβλημα.

Ok στην πραγματικότητα ξέρω τι είναι το xcb και μάλιστα το έλεγε και στις οδηγίες :slight_smile:, απλά το αναφέρω ως παράδειγμα.

Θα επαναλάβω: Η εγκατάστασή κάποιου προγράμματος της Rust με τη χρήση του cargo είναι για προχωρημένους χρήστες. H στο ελάχιστο τουλάχιστον να ξέρουν τι σημαίνει ο όρος μεταγλώτιση (compiling για τους ελληνομαθείς) :stuck_out_tongue_winking_eye:

Ας ξαναδούμε τις επιλογές μας για την εγκατάσταση του topgrade:

  • Αν υπάρχει σαν πακέτο στη διανομή, πάμε με αυτό τον τρόπο. Τελεία. Δυστυχώς, δεν υπάρχει σε πολλές διανομές σήμερα.
  • Αλλιώς κοιτάζουμε αν υπάρχει κάπου να το κατεβάσουμε σαν deb ή σαν appImage. Και υπάρχει εδώ Releases · r-darwish/topgrade · GitHub
  • Στην έσχατη περίπτωση εγκαθιστούμε τη Rust και χρησιμοποιούμε το cargo

@DomieMic65 ρίξε μια ματιά στο παρακάτω άρθρο. Πιστεύω ότι θα σε βοηθήσει να καταλάβεις τι είναι το compile (μεταγλώττιση).


Μια ερώτηση.

Έχω εγκαταστήσει τον package manager nix.
Κάθε φορά που τρέχω την topgrade, βλέπω το παρακάτω.

Υπάρχει κάποια εξήγηση γι’ αυτό;

1 «Μου αρέσει»

Παιδιά σας ευχαριστώ για τις πληροφορίες!

@Asfodelus όπως έχεις καταλάβει είμαι απολύτως basic χρήστης!
Δεν είμαι σίγουρος τι καταλαβαίνω από το τελευταίο σου μνμ! Ή μάλλον πως μπορώ να εφαρμόσω αυτά που λες.
Όταν με παρέπεμψες στο νήμα του topgrade, έχοντας ρωτήσει κάτι άλλο περί linux mint δεν ήξερα ομολογώ πως έχω περασμένα τα cargo/rust στο σύστημά μου.
Απλά έδωσα την εντολή και το topgrade εγκαταστάθηκε.

Υπάρχει κάποια άποψη για το πως να προχωρήσω;
Αυτή τη στιγμή κάθε φορά που δίνω topgrade προσπαθεί να κάνει compile το exa και δίνει σφάλμα. (Παρεμπιπτόντως, το exa το έσβησα από το ~/.cargo/bin όπως πρότεινες πιο πάνω).
Μήπως να προσπαθήσω να αφαιρέσω τα πάντα από το σύστημα (cargo/rust/topgrade/…) και να προσπαθήσω να το εγκαταστήσω σαν deb ή appimage όπως λες;

Σε κάθε περίπτωση σε ευχαριστώ για την βοήθεια και για τα χρήσιμα εργαλεία που προτείνεις που μας οδηγούν να μάθουμε νέα πράγματα!! Ίσως και με τον λάθος τρόπο από την μεριά μου!!!

Αν σβήσεις τον κρυφό φάκελλο ~/.cargo επιστρέφεις σε μια κατάσταση που δεν έχει εγκατεστημένο τίποτα σχετικό με την Rust.

Αν δεν τα καταφέρεις με γραφικό τρόπο, από το τερματικό:

yes | rm -r ~/.cargo/
1 «Μου αρέσει»