Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
How to share /etc/portage and world file
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Documentation, Tips & Tricks
View previous topic :: View next topic  
Author Message
Massimo B.
Veteran
Veteran


Joined: 09 Feb 2005
Posts: 1810
Location: PB, Germany

PostPosted: Wed Nov 09, 2022 10:23 am    Post subject: How to share /etc/portage and world file Reply with quote

How to share /etc/portage and world file

I have to maintain several Gentoo installations and like to keep them as synchronized as possible. That means after extending overlays, /etc/portage/package* settings or installing new packages (world file changes) I usually merge /etc/portage/ and /var/lib/portage/ between the machines. Currently I still use dirdiff to merge, later I'm going to use git and etckeeper or something like this.

For easier merging of /etc/portage I separated local machine specific changes in *local files while keeping the other files in sync. That means when using dirdiff for instance I only merge files not ending on *local:

package.accept_keywords
Code:
# ls /etc/portage/package.accept_keywords/
categories  custom  local  temp
    categories: Accept whole categories like xfce-*/* (shared)
    custom: My own custom ~arch accepts (shared)
    local: Machine specific accepts (not shared)
    temp: Temporary accepts added by portage itself to get world built.. (shared)


package.use
Code:
# ls /etc/portage/package.use/
abi_x86_32  custom  expand  expand.local  global  local  portage
    abi_x86_32: All lazy 32bit uses like virtual/wine abi_x86_32 (shared)
    custom: My own custom uses (shared)
    local: Machine specific uses like */* -bluetooth (not shared)
    expand: Expands only like */* LANG: -* en_US.UTF-8 (shared)
    expand.local: Machine specific expands (not shared):
    Code:
    */* INPUT_DEVICES: -* evdev
    */* VIDEO_CARDS: -* intel i965 radeon r600
    */* GRUB_PLATFORMS: -* efi-64 pc

    # echo "*/* $(cpuid2cpuflags)" >> /etc/portage/package.use/expand.local
    */* CPU_FLAGS_X86: -*
    */* CPU_FLAGS_X86: aes avx f16c mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3

    global: Global uses (shared)
    Code:
    # ...
    */* -gnome
    */* -ipv6
    */* -kde
    */* -libass
    */* -systemd
    */* bash
    */* bash-completion
    */* cddb
    */* gnome-keyring
    */* gnome-online-accounts
    */* gstreamer
    */* hddtemp
    */* heif
    # ...

    The files {expand*,global} are useful to get that kind of stuff out of make.conf in order to make it mergeable line-by-line.


package.mask
Code:
# ls /etc/portage/package.mask/
custom repos temp
    custom: My custom masks (shared)
    repos: (shared) Here I usually mask everything from all enabled repos because I don't want an enabled repo to insert any unwanted packages:
    Code:
    #...
    */*::akujin
    */*::awesome
    */*::bar
    */*::bgo-overlay
    */*::bombo82
    #...

    temp: Temporary masks added by portage (shared)


package.unmask
Code:
# ls /etc/portage/package.unmask/
custom portage temp
    custom: My custom unmasks (shared)
    I usually unmask specific inofficial overlay packages here because I globally masked all from overlays before:
    Code:
    #...
    acct-group/x2godesktopsharing::akujin
    media-sound/freetube::zGentoo
    media-sound/qpwgraph::flussence
    #...


make.conf
I made /etc/portage/make.conf a directory in order to have separated files for shared and a local parts
Code:
ls /etc/portage/make.conf/
global  local
    global: The usual make.conf that has only shared content (shared)
    local: The machine specific part (not shared)
    Code:
    CHOST="x86_64-pc-linux-gnu"

    ### CFLAGS #####################################
    # native
    CFLAGS="-march=native -mtune=native"

    CFLAGS="${CFLAGS} -O2 -pipe -fomit-frame-pointer"
    CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"
    LDFLAGS="${LDFLAGS} -Wl,--as-needed -Wl,-z,now -Wl,-z,relro"
    ################################################

    MAKEOPTS="-j10 -l16"    # locally



distcc
For temporarilly using distcc I had to switch the make.conf/local part to a distcc configuration before, but now have a separate function doing that:

/etc/bash/bashrc.d/my_emerge-distcc.sh:
function emerge-distcc () {
    DISTCC_FEATURES="distcc"
    DISTCC_MAKEOPTS="-j28 -l24"

    ### CFLAGS #####################################
    # http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel
    # https://blogs.gentoo.org/mgorny/2014/06/23/inlining-marchnative-for-distcc/
    # gcc -v -E -x c -march=native -mtune=native - < /dev/null 2>&1 | grep cc1 | perl -pe 's/^.* - //g;'
    # gcc -### -march=native -x c -
    # resolve-march-native --keep-identical-mtune --keep-default-params

    # explicitly for distcc
    #DISTCC_CFLAGS="-march=ivybridge -mtune=ivybridge"

    # explicitly for distcc
    #DISTCC_CFLAGS="-march=ivybridge --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192 -mtune=ivybridge"

    # explicitly for distcc (resolve-march-native --keep-identical-mtune)
    DISTCC_CFLAGS="-march=ivybridge -maes -mavx -mcx16 -mf16c -mfsgsbase -mfxsr -mmmx -mpclmul -mpopcnt -mrdrnd -msahf -msse -msse2 -msse3 -msse4.1 -msse4.2 -mssse3 -mtune=ivybridge -mxsave -mxsaveopt --param=l1-cache-line-size=64 --param=l1-cache-size=32 --param=l2-cache-size=8192"
    ################################################

    DISTCC_EMERGEARGS=""
    CFLAGS="$DISTCC_CFLAGS" CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden" FEATURES="$FEATURES $DISTCC_FEATURES" MAKEOPTS="$MAKEOPTS $DISTCC_MAKEOPTS" emerge $DISTCC_EMERGEARGS "$@"
}


I hope you got an idea how I'm going to separate those files. I also merge /etc/portage/repos.conf/ and some of the other parts...

World file and package sets
Next job is to share the world file. Previously I just merged /var/lib/portage/world between the machines and run emerge -auUDtv world --keep-going. Now I have separated that as well:

My world file is now only getting machine specific installations. This usually are firmwares for local hardware only.
I could put also intel-related stuff like sys-firmware/intel-microcode sys-power/intel-undervolt there. But because all my current machines are Intel based I'll put that to the shared as well. It always depends on how common or different your machines are.

Almost all packages go into the shared list as all of my machines are used for daily work and development.
/etc/portage/sets/machine_shared get's all shared packages that all machines have installed.
/var/lib/portage/world_sets always contains @machine_shared.

Currently I'm running the same architecture, profile and same global amd64 (stable) keyword on all machines.

Another approach discussed in the discussion thread would be to define a shared profile or to create my own overlay for the machines. Currently for my case I don't see any advantage for a profile or overlay.

~~~~~~~ END ~~~~~~~

Keep this thread clean and post to discussion thread: 8756631
_________________
HP ZBook Power 15.6" G8 i7-11800H|HP EliteDesk 800G1 i7-4790|HP Compaq Pro 6300 i7-3770


Last edited by Massimo B. on Thu Nov 17, 2022 9:19 am; edited 3 times in total
Back to top
View user's profile Send private message
szatox
Advocate
Advocate


Joined: 27 Aug 2013
Posts: 3463

PostPosted: Wed Nov 09, 2022 1:26 pm    Post subject: Reply with quote

Or just use ansible.
Back to top
View user's profile Send private message
Massimo B.
Veteran
Veteran


Joined: 09 Feb 2005
Posts: 1810
Location: PB, Germany

PostPosted: Thu Nov 10, 2022 2:46 pm    Post subject: Reply with quote

I made /etc/portage/make.conf/ a directory now for having separate make.conf files without the need to source.
_________________
HP ZBook Power 15.6" G8 i7-11800H|HP EliteDesk 800G1 i7-4790|HP Compaq Pro 6300 i7-3770
Back to top
View user's profile Send private message
Massimo B.
Veteran
Veteran


Joined: 09 Feb 2005
Posts: 1810
Location: PB, Germany

PostPosted: Tue Nov 15, 2022 10:14 am    Post subject: Reply with quote

I learned that all interactive bash settings like PROMPT_COMMAND and user required aliases and function better go to /etc/bash/bashrc.d/ instead of /etc/profile.d/ so I moved the distcc function there.
_________________
HP ZBook Power 15.6" G8 i7-11800H|HP EliteDesk 800G1 i7-4790|HP Compaq Pro 6300 i7-3770
Back to top
View user's profile Send private message
Massimo B.
Veteran
Veteran


Joined: 09 Feb 2005
Posts: 1810
Location: PB, Germany

PostPosted: Thu Nov 17, 2022 9:21 am    Post subject: Reply with quote

Due to some magic replacing of portage (8759373) I needed to add CXXFLAGS to the emerge-distcc function.
_________________
HP ZBook Power 15.6" G8 i7-11800H|HP EliteDesk 800G1 i7-4790|HP Compaq Pro 6300 i7-3770
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Documentation, Tips & Tricks All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum