help-guix
[Top][All Lists]
Advanced

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

Re: update-profiles.sh


From: Gottfried
Subject: Re: update-profiles.sh
Date: Mon, 24 Apr 2023 15:42:38 +0000

Hi,
thanks for help

I tried this script in the terminal.

1.
gfp@Tuxedo ~$ ./update-profiles.sh

it said
guix package: Error: Profile /home/gfp/Projects/Calibre/calibre is locked by another process

I didn’t open calibre, so what could be the problem?


2. it installed almost all packages from all profiles
without icecat, probably because I had it opened.

3. It did not install my "Musik" profile with several packages.
is locked by another process

I am not sure about that, because I haven't opened any of those packages.


So we have success.
Thank you very much.
You saved me a lot of time and headache.


Kind regards

Gottfried


#!/bin/sh

GUIX_PROFILES=$HOME/Projekte

for dir in $GUIX_PROFILES/*
do
      name=$(basename "$dir" | tr '[:upper:]' '[:lower:]')
      manifest="$dir"/$name.scm
      profile=$dir/$name
      if [ -r $manifest ]
      then
          guix package --manifest="$manifest" --profile="$profile"
      fi
done



Am 24.04.23 um 14:05 schrieb Wojtek Kosior:
Hi Gottfried,

I see several problems with `update-profiles.sh`.
- You wrote `GUIX_PROFILES=home/gfp/Projekte`, without leading slash.
   This makes the shell treat this path as a relative one. You need to
   use either `/home/gfp/Projekte` or just '$HOME/Projekte'.
- This script assumes manifests to be stored in a completely different
   place than they really are in your case.
- There's no need to `unset` the loop variables at every iteration. At
   least as long as this script is executed and not sourced. I'm
   mentioning this although a few extraneous `unset`s are not going to
   cause problems. Don't worry too much about this.

I edited the script. Try with this version

```
#!/bin/sh

GUIX_PROFILES=$HOME/Projekte

for dir in $GUIX_PROFILES/*
do
      name=$(basename "$dir" | tr '[:upper:]' '[:lower:]')
      manifest="$dir"/$name.scm
      profile=$dir/$name
      if [ -r $manifest ]
      then
          guix package --manifest="$manifest" --profile="$profile"
      fi
done
```

-- (sig_start)
website: https://koszko.org/koszko.html
PGP: https://koszko.org/key.gpg
fingerprint: E972 7060 E3C5 637C 8A4F  4B42 4BC5 221C 5A79 FD1A

♥ R29kIGlzIHRoZXJlIGFuZCBsb3ZlcyBtZQ== | ÷ c2luIHNlcGFyYXRlZCBtZSBmcm9tIEhpbQ==
✝ YnV0IEplc3VzIGRpZWQgdG8gc2F2ZSBtZQ== | ? U2hhbGwgSSBiZWNvbWUgSGlzIGZyaWVuZD8=
-- (sig_end)


On Mon, 24 Apr 2023 11:22:46 +0000
Gottfried <gottfried@posteo.de> wrote:

Hi,

Sorry,
you provided me already with a script for activating all profiles at login,
I don’t know at the moment, why I have mixed it up with other things
and  I didn’t use it.
------------------------------------------------------------
in the meantime all packages are available at login
through the help of Martin
------------------------------------------------------------

so I tried to use your "update-profiles.sh"
I placed it in my home directory: ~/gfp
and changed one sentence, my the place of the profiles:

update-profiles.sh

#!/bin/sh

GUIX_MANIFESTS=$HOME/sys/guix/manifests
GUIX_PROFILES=home/gfp/Projekte

for dir in $GUIX_PROFILES/*
do
      name=$(basename "$dir")
      manifest=$GUIX_MANIFESTS/$name.scm
      profile=$dir/$name
      if [ -r $manifest ]
      then
          guix package --manifest="$manifest" --profile="$profile"
      fi
      unset profile
      unset manifest
      unset name
done

-------------------------------------------------

but running it, it seems not doing anything.

sometimes it’s difficult for me, to know so little, not knowing what I
have to do, not knowing the basics ...

Is it connected with the other script to activate the profiles at login?
so that it doesn’t work?
I guess both scripts are independent.

or is the path to it wrong?
I have the directory
~/gfp/Projekte

and in it many directories/which are the different profiles, e.g:
Musescore, Musik, Emacs, Calibre, Gnucash, Icecat, Libreoffice,
Photoflare, Lilypond

and in each of these directories a scm.file with the same name but in
small letters like: musescore.scm, musik.scm, emacs.scm ...



Kind regards

Gottfried

I believe I already provided you with the code for updating profiles and
activating them, but here it is again for reference:

```update-profiles.sh
#!/bin/sh

GUIX_MANIFESTS=$HOME/sys/guix/manifests
GUIX_PROFILES=$HOME/sys/guix/profiles

for dir in $GUIX_PROFILES/*
do
     name=$(basename "$dir")
     manifest=$GUIX_MANIFESTS/$name.scm
     profile=$dir/$name
     if [ -r $manifest ]
     then
         guix package --manifest="$manifest" --profile="$profile"
     fi
     unset profile
     unset manifest
     unset name
done
```

```activate-profiles.sh
#!/bin/sh

GUIX_PROFILES=$HOME/sys/guix/profiles

for dir in $GUIX_PROFILES/*
do
     name=$(basename "$dir")
     profile=$dir/$name
     if [ -f "$profile"/etc/profile ]
     then
         GUIX_PROFILE="$profile"
         . "$GUIX_PROFILE"/etc/profile
         export MANPATH="$GUIX_PROFILE/share/man${MANPATH:+:}$MANPATH"
         export INFOPATH="$GUIX_PROFILE/share/info${INFOPATH:+:}$INFOPATH"
     fi
     unset profile
     unset name
done
```

These scripts both loop over my manifests or profiles directories,
running the upgrade or activate commands on each one. If you want to
exclude a profile from being upgraded with this script, you can just
take away its manifest's read permissons like so:

```
chmod -r $HOME/sys/guix/manifests/my-excluded-manifest.scm
```

Good luck,
   Gary


Attachment: OpenPGP_0x61FAF349C9FB7F94.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]