Compare commits

..

No commits in common. "main" and "deps-vadim" have entirely different histories.

21 changed files with 650 additions and 1190 deletions

View File

@ -1,137 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.14.2] - 2025-09-30
### Changed
- Don't let mksquashfs take all CPU cores
## [3.14.1] - 2025-09-24
### Fixed
- Fix jenkins build with REUSE_PREV_FS=true
## [3.14.0] - 2025-08-14
### Added
- Fix interfaceAdmin code
- Rename parameters
## [3.13.0] - 2025-08-08
### Added
- Have filebeat collect OGAgentUser logs in /home
## [3.12.1] - 2025-08-05
### Added
- Save a log of early init (oginit/ogfuncions)
## [3.12.0] - 2025-07-31
### Changed
- Have /sbin/init run the python init
## [3.11.2] - 2025-07-18
### Changed
- Don't use the "@euro" locales
## [3.11.1] - 2025-07-11
### Fixed
- Fix opensearch pipeline
## [3.11.0] - 2025-07-11
### Added
- Install filebeat
## [3.10.1] - 2025-07-03
### Changed
- Undo the pcp/dstat change--does nothing
## [3.10.0] - 2025-07-03
### Changed
- Explicitly remove pcp and install dstat
## [3.9.2] - 2025-06-26
### Fixed
- Include dbus env var in .xinitrc
## [3.9.1] - 2025-06-18
### Fixed
- Increase "open files" ulimit for the qt6 browser
## [3.9.0] - 2025-06-16
### Added
- Take ogrepository SSH key from its git repo
## [3.8.0] - 2025-06-16
### Added
- Installation of package opengnsys-gitlib
## [3.7.0] - 2025-05-28
### Changed
- Leave resolv.conf as a symlink to /run/resolvconf/resolv.conf
## [3.6.0] - 2025-05-21
### Changed
- Configure stunnel and dbus via includes rather than in python code
### Added
- Add script for changing the URL in the running browser
## [3.5.0] - 2025-05-19
### Changed
- Configure dbus
## [3.4.0] - 2025-05-18
### Changed
- Install and configure stunnel in the image
## [3.3.0] - 2025-05-14
### Changed
- Add changes required for the new browser
## [3.2.1] - 2025-03-31
### Changed
- Include build date in the final VERSION.txt

View File

@ -30,7 +30,7 @@ ARG OPENGNSYS_HEAD
COPY . /tmp/opengnsys/oglive_builder/
RUN ls -la /tmp/opengnsys/oglive_builder/ && \
mv /tmp/opengnsys/oglive_builder/engine /tmp/opengnsys/oglive_builder/shared /tmp/opengnsys/oglive_builder/ogrepo-ssh-key /tmp/opengnsys/ && \
mv /tmp/opengnsys/oglive_builder/engine /tmp/opengnsys/oglive_builder/shared /tmp/opengnsys/ && \
cp /tmp/opengnsys/oglive_builder/schroot.conf /tmp/opengnsys/oglive_builder/mount-defaults /etc/schroot/ && \
echo '' >/etc/schroot/default/nssdatabases && \
rm -f /etc/schroot/setup.d/*chrootname

150
Jenkinsfile vendored
View File

@ -1,145 +1,11 @@
pipeline {
agent { label 'built-in' }
agent any
options {
timestamps()
// Conserva la concurrencia como en el job original (no añadimos disableConcurrentBuilds)
skipDefaultCheckout(true) // Haremos el checkout con los parámetros manualmente
}
parameters {
string(name: 'OGLIVE_BUILDER_BRANCH', defaultValue: 'main',
description: 'What branch of repository oglive-builder to work in.')
string(name: 'OGCLONE_ENGINE_BRANCH', defaultValue: 'main',
description: 'What branch of repository ogclone-engine to pick files from.')
string(name: 'OGREPOSITORY_BRANCH', defaultValue: 'main',
description: 'What branch of repository ogrepository to pick files from.')
booleanParam(name: 'REUSE_PREV_FS', defaultValue: true,
description: 'Whether to reuse the virtual filesystem from the previous build or to start from scratch.')
}
environment {
CODENAME = 'noble' // Igual que en tu script actual (hardcoded)
}
stages {
stage('Workspace cleanup (pre-build)') {
when {
expression { return params.REUSE_PREV_FS == false }
}
steps {
// Equivalente al PreBuildCleanup del plugin ws-cleanup
cleanWs()
}
stages {
stage('Build') {
steps {
echo 'Jenkinsfile for oglive-builder'
}
}
}
stage('Checkout oglive-builder') {
steps {
checkout([
$class: 'GitSCM',
userRemoteConfigs: [[
url: 'https://ognproject.evlt.uma.es/gitea/opengnsys/oglive-builder.git',
credentialsId: 'gitea-unizar'
]],
branches: [[ name: "refs/heads/${params.OGLIVE_BUILDER_BRANCH}" ]],
extensions: []
])
}
}
stage('Build ogLive') {
steps {
sh '''#!/bin/bash
set -euo pipefail
export CODENAME="${CODENAME}" ## hardcoded at the moment
echo ========================= Parameters
echo OGLIVE_BUILDER_BRANCH=${OGLIVE_BUILDER_BRANCH}
echo OGCLONE_ENGINE_BRANCH=${OGCLONE_ENGINE_BRANCH}
echo OGREPOSITORY_BRANCH=${OGREPOSITORY_BRANCH}
echo REUSE_PREV_FS=${REUSE_PREV_FS}
echo CODENAME=${CODENAME}
echo ========================= Clone/fetch clone-engine repo
if [[ -d ogclone-engine-repo ]]; then
cd ogclone-engine-repo; git fetch; git checkout "${OGCLONE_ENGINE_BRANCH}"; cd ..
else
git clone -c http.sslVerify=false --branch "${OGCLONE_ENGINE_BRANCH}" \
https://ognproject.evlt.uma.es/gitea/opengnsys/ogclone-engine.git ogclone-engine-repo
fi
HEAD=$(git --git-dir ./ogclone-engine-repo/.git rev-parse HEAD)
echo "ogclone-engine HEAD: $HEAD"
echo ========================= Clone/fetch ogrepository repo
if [[ -d ogrepository-repo ]]; then
cd ogrepository-repo; git fetch; git checkout "${OGREPOSITORY_BRANCH}"; cd ..
else
git clone -c http.sslVerify=false --branch "${OGREPOSITORY_BRANCH}" \
https://ognproject.evlt.uma.es/gitea/opengnsys/ogrepository.git ogrepository-repo
fi
HEAD=$(git --git-dir ./ogrepository-repo/.git rev-parse HEAD)
echo "ogrepository HEAD: $HEAD"
echo ========================= Take stuff out of the ogclone-engine repo
mkdir -p shared
mkdir -p engine
cp -a ./ogclone-engine-repo/ogclient/{bin,etc,lib,scripts} shared/
cp -a ./ogclone-engine-repo/ogclient/lib/engine/bin engine/
git --git-dir ./ogclone-engine-repo/.git log --date format:r%Y%m%d --format=%ad.%h -1 > gitrelease
echo ========================= Take stuff out of the ogrepository repo
mkdir -p ogrepo-ssh-key
cp ./ogrepository-repo/installer/ssh-keys/opengnsys ogrepo-ssh-key/
cp ./ogrepository-repo/installer/ssh-keys/opengnsys.pub ogrepo-ssh-key/
# echo ========================= Fetch deb packages from the artefacts server
# AGENT_DEB=$(env - /bin/ls -t /mnt/srv/artefactos/ogagent/*.deb 2>/dev/null | head -n 1)
# BROWSER_DEB=$(env - /bin/ls -t /mnt/srv/artefactos/ogbrowser/* | head -n 1)
# echo "Found agent package '$AGENT_DEB' and browser package '$BROWSER_DEB'"
# cp -vf $AGENT_DEB $BROWSER_DEB .
echo ========================= Build docker image
docker build --build-arg OPENGNSYS_HEAD="$HEAD" -t opengnsys/mkoglive . ## invalidate cache when $HEAD changes
rm -rf shared engine gitrelease ogrepo-ssh-key
echo ========================= Build ogLive
if [[ "${REUSE_PREV_FS}" == "false" ]]; then
echo "Not reusing old build"
sudo chown user:user "$WORKSPACE/ogclient" || true
rm -rf ogclient
else
echo "Reusing old build. In the following 'ls' output there should be something"
ls -la ogclient/ || true
fi
mkdir -p ogclient ## run this as user; otherwise docker may create it as root
if [[ "zjenkins" != "z$(stat --format %U ogclient)" ]]; then
echo "warning: directory 'ogclient' not owned by user 'jenkins'"
fi
docker run --rm --name mkoglive --privileged=true \
--volume "$PWD/ogclient:/var/lib/tftpboot/ogclient" \
opengnsys/mkoglive --codename "$CODENAME" --loglevel debug
echo Uploading to the artefactos NFS share
[[ -d /mnt/srv ]] || mount /mnt
cp -av ogclient/ogLive-*.iso /mnt/srv/artefactos/oglive/ || true
echo Cleaning up
sudo chown jenkins:jenkins "$WORKSPACE/ogclient" || true
rm -vf ogclient/ogclient.sqfs* ogclient/ogLive-*.iso ogclient/*.iso.sum ogclient/oginitrd.img* ogclient/ogvmlinuz* || true
'''
}
}
}
// Si te interesa conservar el ISO como artefacto de Jenkins, descomenta el 'post' siguiente y
// mueve/duplica el borrado de ficheros para que ocurra después del archiveArtifacts.
// post {
// success {
// archiveArtifacts artifacts: 'ogclient/ogLive-*.iso, ogclient/*.iso.sum', allowEmptyArchive: true
// }
// always {
// wsCleanup()
// }
// }
}
}

View File

@ -205,7 +205,7 @@ def debootstrap (btrootfsimg, btrootfsmnt, osarch, oscodename, oshttp):
logger.info (f'debootstrap --arch="{osarch}" --components=main,universe "{oscodename}" "{btrootfsmnt}" "{oshttp}" : ok')
return 0
def copy_og_files (builder, og_shared, ogrepo_ssh_key, ogclientmount, osdistrib, oscodename):
def copy_og_files (builder, og_shared, og_engine, ogclientmount, osdistrib, oscodename):
logger.info ('Iniciando la personalización con datos del repositorio')
sources_list_in = f'{builder}/includes/etc/apt/sources.list.{osdistrib.lower()}'
@ -226,14 +226,9 @@ def copy_og_files (builder, og_shared, ogrepo_ssh_key, ogclientmount, osdistrib,
os.makedirs (f'{ogclientmount}/usr/local/lib', exist_ok=True)
os.makedirs (f'{ogclientmount}/usr/local/plugins', exist_ok=True)
os.makedirs (f'{ogclientmount}/root/.ssh', exist_ok=True)
shutil.copy (f'{ogrepo_ssh_key}/opengnsys', f'{ogclientmount}/root/.ssh/id_ed25519')
shutil.copy (f'{ogrepo_ssh_key}/opengnsys.pub', f'{ogclientmount}/root/.ssh/id_ed25519.pub')
os.chmod (f'{ogclientmount}/root/.ssh/id_ed25519', 0o0600)
os.chmod (f'{ogclientmount}/root/.ssh/id_ed25519.pub', 0o0600)
subprocess.run (f'rsync -aH {builder}/includes/* {ogclientmount}/' , shell=True)
subprocess.run (f'rsync -aH {og_shared}/* {ogclientmount}/opt/opengnsys/', shell=True)
subprocess.run (f'rsync -aH {builder}/includes/* {ogclientmount}/' , shell=True)
subprocess.run (f'rsync -aH {og_shared}/* {ogclientmount}/opt/opengnsys/' , shell=True)
subprocess.run (f'rsync -aH {og_engine}/* {ogclientmount}/opt/opengnsys/lib/engine/bin/', shell=True)
if not os.path.exists (f'{ogclientmount}/etc/pci.ids'):
shutil.copy (f'{og_shared}/lib/pci.ids', f'{ogclientmount}/etc/')
@ -245,7 +240,7 @@ def copy_og_files (builder, og_shared, ogrepo_ssh_key, ogclientmount, osdistrib,
subprocess.run (f'rsync -aH {og_shared}/lib/qtplugins/* {ogclientmount}/usr/local/plugins', shell=True)
# Browser
if os.path.exists (f'{og_shared}/bin/browser'): shutil.copy (f'{og_shared}/bin/browser', f'{ogclientmount}/bin/')
if os.path.exists (f'{og_shared}/bin/browser'): shutil.copy (f'{og_shared}/bin/browser', f'{ogclientmount}/bin/')
def sysctl (btrootfsmnt):
logger.debug ('copiando sysctl.conf')
@ -327,18 +322,8 @@ def mksquashfs (bttargetdir, btrootfsmnt):
now = datetime.datetime.now(datetime.timezone.utc).strftime ('%Y%m%d-%H%M%S%z')
os.rename (f'{bttargetdir}/ogclient.sqfs', f'{bttargetdir}/ogclient.sqfs.{now}')
## for some reason mksqashfs uses all CPU cores available, even within docker
## so, let's count the number of cores...
fd = open ('/proc/cpuinfo', 'r')
nproc = 0
while True:
line = fd.readline()
if not line: break
if 'processor' in line: nproc += 1
## ...and leave one core unused
nproc = str (nproc-1)
utils.run (['mksquashfs', btrootfsmnt, f'{bttargetdir}/ogclient.sqfs', '-processors', nproc, '-e', 'var/lib/apt/lists', '-e', 'usr/share/doc'])
## uses all CPU cores available, even within docker
utils.run (['mksquashfs', btrootfsmnt, f'{bttargetdir}/ogclient.sqfs', '-e', 'var/lib/apt/lists', '-e', 'usr/share/doc'])
os.chmod (f'{bttargetdir}/ogclient.sqfs', 0o744)
utils.write_md5 (f'{bttargetdir}/ogclient.sqfs')

View File

@ -40,7 +40,7 @@ def boottoolsSoftwareInstall (osarch, osrelease):
subprocess.run (['debconf-set-selections'], input=debconf_settings, text=True)
utils.run (['dpkg-reconfigure', '--frontend', 'noninteractive', 'console-setup', 'locales']) ## XXX: despues de esto, debconf-get-selections devuelve los valores antiguos, no se por que...
pkgs = []
pkgs = glob.glob ('/tmp/opengnsys/oglive_builder/ogagent_*.deb') + glob.glob ('/tmp/opengnsys/oglive_builder/OGBrowser*.deb')
for section in config.options('Packages'):
pkgs += re.split (r'[ \n]', config['Packages'].get(section).strip())
@ -87,7 +87,7 @@ def boottoolsSoftwareCompile():
print ('boottoolsSoftwareCompile: spartlnx', file=sys.stderr)
try: utils.run (['which', 'spartl64.run'])
except:
utils.run (['wget', '--tries=5', 'http://damien.guibouret.free.fr/savepart.zip'])
utils.run (['wget', '--quiet', 'http://damien.guibouret.free.fr/savepart.zip'])
utils.run (['unzip', '-o', 'savepart.zip', '-d', '/sbin/', 'spartl64.run', 'spartlnx.run'])
utils.run (['mkdir', '/usr/share/doc/spartlnx'])
utils.run (['unzip', '-j', '-o', 'savepart.zip', '-d', '/usr/share/doc/spartlnx/', 'doc/en/*'])
@ -95,7 +95,7 @@ def boottoolsSoftwareCompile():
if not os.path.exists ('python-libfdisk'):
print ('boottoolsSoftwareCompile: python-libfdisk', file=sys.stderr)
apt.install (['python3-psutil', 'python3-dev', 'libfdisk-dev', 'python3-setuptools'])
utils.run (['git', 'clone', 'https://ognproject.evlt.uma.es/gitea/48k.eu-mirror/python-libfdisk.git'])
utils.run (['git', 'clone', 'git://git.48k.eu/python-libfdisk'])
os.chdir ('python-libfdisk')
utils.run (['python3', 'setup.py', 'install'])
os.chdir ('..')
@ -112,23 +112,15 @@ def boottoolsPythonModules():
utils.run (['pip3', 'install', 'pyblkid', '--break-system-packages'])
def boottoolsRemovePackages():
print ('boottoolsRemovePackages', file=sys.stderr)
apt.remove (['python3-dev', 'python3-setuptools', 'python3-pip'])
## have working DNS during the build
def setup_resolvconf1():
print ('setup_resolvconf1', file=sys.stderr)
os.unlink ('/etc/resolv.conf')
def setup_resolvconf():
if os.path.islink('/etc/resolc.conf'):
os.unlink ('/etc/resolv.conf')
f = open ('/etc/resolv.conf', 'w')
f.write ('nameserver 8.8.8.8')
f.close()
## leave the final configuration for oglive
def setup_resolvconf2():
print ('setup_resolvconf2', file=sys.stderr)
os.unlink ('/etc/resolv.conf')
os.symlink ('/run/resolvconf/resolv.conf', '/etc/resolv.conf')
def boottoolsInitrdGenerate (osrelease):
print ('boottoolsInitrdGenerate', file=sys.stderr)
for f in glob.glob ('/usr/lib/initramfs-tools/bin/*'):
@ -166,10 +158,10 @@ if __name__ == '__main__':
debconf_settings = config['General'].get ('debconf_settings')
updateCaCertificates()
setup_resolvconf1()
setup_resolvconf()
boottoolsSoftwareInstall (args.osarch, args.osrelease)
boottoolsSoftwareCompile()
boottoolsPythonModules()
boottoolsRemovePackages()
setup_resolvconf2()
setup_resolvconf() ## do this again, since someone seems to be overwriting the file
boottoolsInitrdGenerate (args.osrelease)

View File

@ -59,4 +59,5 @@ deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe
#deb-src http://ppa.launchpad.net/zfs-native/stable/ubuntu OSCODENAME main
deb [trusted=yes] https://ognproject.evlt.uma.es/debian-opengnsys/nightly/main OSCODENAME main
deb [trusted=yes] https://ognproject.evlt.uma.es/debian-opengnsys/ OSCODENAME main

View File

@ -1,8 +0,0 @@
<busconfig>
<policy user="root">
<allow own="es.opengnsys.OGBrowser.browser"/>
<allow send_destination="es.opengnsys.OGBrowser.browser"/>
<allow send_interface="es.opengnsys.OGBrowser.browser"/>
<allow send_type="method_call"/>
</policy>
</busconfig>

View File

@ -1,6 +1,4 @@
LC_TYPE=es_ES.UTF-8
LC_ALL=es_ES.UTF-8
LANG=es_ES.UTF-8
LANGUAGE=es_ES.UTF-8
XDG_RUNTIME_DIR=/run/user/0
QTWEBENGINE_CHROMIUM_FLAGS=--no-sandbox
LC_TYPE=es_ES@euro
LC_ALL=es_ES@euro
LANG=es_ES@euro
LANGUAGE=es_ES@euro

View File

@ -1,29 +0,0 @@
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/opengnsys.json.log
- /home/*/opengnsys.json.log
setup.template.settings:
index.number_of_shards: 1
output.elasticsearch:
hosts: ["__OGLOG_IP__:__OGLOG_PORT__"]
pipeline: "filebeat_opengnsys_pipeline"
username: "filebeat_writer"
password: "__OPENSEARCH_PASSWORD__"
protocol: "https"
ssl.enabled: true
ssl.verification_mode: none
#ssl.certificate: "/opt/opengnsys/etc/filebeat.crt.pem"
#ssl.key: "/opt/opengnsys/etc/filebeat.key.pem"
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
seccomp.enabled: false

View File

@ -38,9 +38,6 @@ mkdir -p ${DESTDIR}/var/log
mkdir -p ${DESTDIR}/opt/opengnsys;
mkdir -p ${DESTDIR}/ogboot;
mkdir -p ${DESTDIR}/boot;
mkdir -p ${DESTDIR}/run/user/0
chmod 700 ${DESTDIR}/run/user/0
# Insert basic binaries
copy_exec /bin/bash-static /bin/bash

View File

@ -15,9 +15,6 @@
#fbcon
# Kernel 3.7+ video.
virtio_gpu
vmwgfx
uvesafb
# Generales

View File

@ -1 +1 @@
OpenGnsys Client 3.14.2
OpenGnsys Client 3.2.0

File diff suppressed because it is too large Load Diff

View File

@ -32,104 +32,115 @@
#@date 2013/02/18
#*/
og_ask() {
echo "$1" >>/tmp/oginit.log
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "$1: y/N "; [ $? == 0 ] && sh || echo " "
}
mountroot () {
[ -f /scripts/VERSION.txt ] && OGVERSION=$(cat /scripts/VERSION.txt)
OGVERSION=${OGVERSION:-"OpenGnsys Client"}
echo; echo; echo "$OGVERSION"; echo; echo
#[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
#run_scripts /scripts/og-top
#[ "$quiet" != "y" ] && log_end_msg
. /scripts/functions
. /scripts/ogfunctions
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
sleep 2
og_ask "Stop before get OG variables"
set -a
log_success_msg "Checking kernel parameters"
ogExportKernelParameters
[ -n "$video" ] && ogChangeVideoResolution # Cambiar resolución de vídeo para kernels que usan el parámetro "video".
log_success_msg "Checking OpenGnsys Environmnet"
ogExportVarEnvironment
og_ask "Stop before configure ramfs structure for OG"
ogConfigureRamfs
og_ask "Stop before configure netmoule specified in kernel parameters"
ogLoadNetModule
#[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
#run_scripts /scripts/og-premount
#[ "$quiet" != "y" ] && log_end_msg
og_ask "Stop before configure networking"
if [ -n "$oglive" ]; then
while !(ping -c 1 $oglive &> /dev/null); do
ogConfigureNetworking
done
fi
log_success_msg "config networking"
ogConfigureLoopback
log_success_msg "config loopback"
og_ask "Stop before detect rootserver"
ogGetROOTSERVER && log_success_msg "Get Info from pxe server and ckeck distribuited OG services "
if [ "$ogupdateinitrd" == "true" ]; then
og_ask "Stop before check updating initrd"
fi
if [ "$ogupdateinitrd" == "true" -o ! -d /lib/modules/$(uname -r) ]; then
ogUpdateInitrd # Actualizar Initrd si se solicita o si no se corresponde con su kernel.
fi
og_ask "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE"
ogConnectOgLive && log_success_msg "Merge the initrd with the remote rootfs -ogLive- on $OGSERVERLIVE" || sh
# si es necesario realiza ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
og_ask "Stop before connect with client dir SHARE -engine,scripts,interface, -share- on $OGSERVERSHARE "
ogConnect $OGSERVERSHARE $OGPROTOCOL $SRCOGSHARE $DSTOGSHARE
if [ $? -ne 0 -a "$SRCOGSHARE" != "$DEFOGSHARE" ]; then
ogConnect $OGSERVERSHARE $OGPROTOCOL $DEFOGSHARE $DSTOGSHARE && SRCOGSHARE=$DEFOGSHARE
fi
unset DEFOGSHARE
og_ask "Stop before connect with client dir LOG STORAGE on $OGSERVERLOG "
ogConnect $OGSERVERLOG $OGPROTOCOL $SRCOGLOG $DSTOGLOG
og_ask "Stop before connect with REPOSITORY STORAGE on $OGSERVERIMAGES "
ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES ,ro
og_ask "Stop before doing the postconfiguration"
ogPostConfigureFS
setupcon -k
og_ask "Stop before calling oginit with /etc/inittab"
if [ "$oginit" ]; then
echo "exec oginit ($oginit)" >>/tmp/oginit.log
exec $oginit
else
echo "exec regular init" >>/tmp/oginit.log
exec init
fi
# Parameter: Where to mount the filesystem
mountroot ()
{
[ -f /scripts/VERSION.txt ] && OGVERSION=$(cat /scripts/VERSION.txt)
OGVERSION=${OGVERSION:-"OpenGnsys Client"}
echo; echo; echo "$OGVERSION"; echo; echo
#[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
#run_scripts /scripts/og-top
#[ "$quiet" != "y" ] && log_end_msg
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
. /scripts/functions
. /scripts/ogfunctions
sleep 2
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N "
[ $? == 0 ] && sh || echo " "
set -a
log_success_msg "Checking kernel parameters"
ogExportKernelParameters
# Cambiar resolución de vídeo para kernels que usan el parámetro "video".
[ -n "$video" ] && ogChangeVideoResolution
log_success_msg "Checking OpenGnsys Environmnet"
ogExportVarEnvironment
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N "
[ $? == 0 ] && sh || echo " "
ogConfigureRamfs
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N "
[ $? == 0 ] && sh || echo " "
ogLoadNetModule
#[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
#run_scripts /scripts/og-premount
#[ "$quiet" != "y" ] && log_end_msg
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N "
[ $? == 0 ] && sh || echo " "
if [ -n "$oglive" ]
then
while !(ping -c 1 $oglive &> /dev/null)
do
ogConfigureNetworking
done
fi
log_success_msg "config networking"
ogConfigureLoopback
log_success_msg "config loopback"
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N "
[ $? == 0 ] && sh || echo " "
ogGetROOTSERVER && log_success_msg "Get Info from pxe server and ckeck distribuited OG services "
if [ "$ogdebug" == "true" -a "$ogupdateinitrd" == "true" ]; then
ogYesNo --timeout 5 --default no "Stop before check updating initrd: y/N "
[ $? == 0 ] && sh || echo " "
fi
# Actualizar Initrd si se solicita o si no se corresponde con su kernel.
if [ "$ogupdateinitrd" == "true" -o ! -d /lib/modules/$(uname -r) ]; then
ogUpdateInitrd
fi
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE: y/N "
[ $? == 0 ] && sh || echo " "
ogConnectOgLive && log_success_msg "Merge the initrd with the remote rootfs -ogLive- on $OGSERVERLIVE" || sh
# si es necesario realiza ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir SHARE -engine,scripts,interface, -share- on $OGSERVERSHARE : y/N "
[ $? == 0 ] && sh || echo " "
ogConnect $OGSERVERSHARE $OGPROTOCOL $SRCOGSHARE $DSTOGSHARE
if [ $? -ne 0 -a "$SRCOGSHARE" != "$DEFOGSHARE" ]; then
ogConnect $OGSERVERSHARE $OGPROTOCOL $DEFOGSHARE $DSTOGSHARE && SRCOGSHARE=$DEFOGSHARE
fi
unset DEFOGSHARE
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir LOG STORAGE on $OGSERVERLOG : y/N "
[ $? == 0 ] && sh || echo " "
ogConnect $OGSERVERLOG $OGPROTOCOL $SRCOGLOG $DSTOGLOG
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with REPOSITORY STORAGE on $OGSERVERIMAGES : y/N "
[ $? == 0 ] && sh || echo " "
ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES ,ro
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N "
[ $? == 0 ] && sh || echo " "
ogPostConfigureFS
setupcon -k
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N "
[ $? == 0 ] && sh || echo " "
if [ "$oginit" ]
then
exec $oginit
else
exec init
fi
}

View File

@ -1,5 +1,13 @@
# This is run first except when booting in single-user mode
tty1::respawn:/opt/opengnsys/etc/preinit.py
#
#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh
# /bin/sh invocations on selected ttys
#
# Start an "askfirst" shell on the console (whatever that may be)
#::askfirst:/bin/sh
# Start an "askfirst" shell on /dev/tty2-4
#tty1::respawn:/sbin/getty 38400 tty1
tty1::respawn:/opt/opengnsys/etc/preinit/default.sh
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4

View File

@ -1,15 +0,0 @@
setuid = stunnel4
setgid = stunnel4
pid = /var/run/stunnel4/menu.pid
foreground = yes
debug = info
[menu]
client = yes
accept = 127.0.0.1:81
connect = __OGCORE_IP__:__OGCORE_PORT__
cert = /opt/opengnsys/etc/ogagent.crt
key = /opt/opengnsys/etc/ogagent.key
CAfile = /opt/opengnsys/etc/ca.crt
requireCert = yes
verifyChain = yes

View File

@ -1,112 +0,0 @@
#!/bin/bash
# Compatibilidad con los argumentos usados con el browser original: browser -qws http://google.com
while getopts ":qwsDWX" opt ; do
case $opt in
q) echo "Ignoring option: -q" ;;
w) echo "Ignoring option: -w" ;;
s) echo "Ignoring option: -s" ;;
D) BROWSER_DEBUG=1 ;;
W) DISABLE_WAYLAND=1 ;;
X) DISABLE_X11=1 ;;
esac
done
shift $(expr $OPTIND - 1)
browser_args="$@"
echo "Browser args: $browser_args"
[ -n "$DISABLE_WAYLAND" ] && echo "WAYLAND DISABLED"
[ -n "$DISABLE_X11" ] && echo "X11 DISABLED"
if [ -n "BROWSER_DEBUG" ] ; then
echo "DEBUG MODE ENABLED"
echo "* Terminal available via Win+Enter"
echo "* Session may be killed with Ctrl+Alt+Backspace"
echo ""
fi
[ -x "/usr/bin/kitty" ] && wl_terminal=/usr/bin/kitty
[ -x "/usr/bin/foot" ] && wl_terminal=/usr/bin/foot
#[ -x "/usr/bin/xterm" ] && x11_terminal=/usr/bin/kitty
#[ -x "/usr/bin/i3-sensible-terminal" ] && x11_terminal=/usr/bin/i3-sensible-terminal
# --- El navegador y flags (QtWebEngine/Chromium) ---
# Seguridad: desactiva CORS
QTWEBENGINE_CHROMIUM_FLAGS="--disable-web-security"
# Estabilidad en entornos sin GPU/GL y con /dev/shm limitado:
QTWEBENGINE_CHROMIUM_FLAGS+=" --disable-gpu --use-gl=disabled --disable-gpu-compositing"
QTWEBENGINE_CHROMIUM_FLAGS+=" --disable-features=VaapiVideoDecoder,AcceleratedVideoDecode,CanvasOopRasterization,UseSkiaRenderer"
QTWEBENGINE_CHROMIUM_FLAGS+=" --disable-dev-shm-usage"
# Root: Chromium exige --no-sandbox
if [ "$EUID" -eq 0 ]; then
QTWEBENGINE_CHROMIUM_FLAGS+=" --no-sandbox"
fi
export QTWEBENGINE_CHROMIUM_FLAGS
# Entorno Qt (software puro; X11 por xcb)
export QT_QPA_PLATFORM=xcb
export QSG_RHI_BACKEND=software
export QT_QUICK_BACKEND=software
export LIBGL_ALWAYS_SOFTWARE=1
export QT_XCB_GL_INTEGRATION=none
## sway
mkdir -p $HOME/.config/sway
echo "exec /usr/bin/OGBrowser --ignore-ssl-errors \"$browser_args\"" > $HOME/.config/sway/config
if [ -n "BROWSER_DEBUG" ] ; then
echo "bindsym Mod4+Return exec $wl_terminal" >> $HOME/.config/sway/config
echo "bindsym Control+Alt+Backspace exit" >> $HOME/.config/sway/config
fi
echo "exec touch /run/sway.started" >> $HOME/.config/sway/config
## i3
mkdir -p $HOME/.config/i3
echo "exec /usr/bin/OGBrowser --ignore-ssl-errors \"$browser_args\"" > $HOME/.config/i3/config
if [ -n "BROWSER_DEBUG" ] ; then
echo "bindsym Mod4+Return exec i3-sensible-terminal" >> $HOME/.config/i3/config
echo "bindsym Control+Mod1+BackSpace exit" >> $HOME/.config/i3/config
fi
echo "exec touch /run/x11.started" >> $HOME/.config/i3/config
## xinitrc
if [[ -z $DBUS_SESSION_BUS_ADDRESS ]]; then eval $(cat /proc/$(pidof OGAgent)/environ |sed -e 's/\x00/\x0a/g' |grep DBUS_SESSION_BUS_ADDRESS); fi
echo "export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS" > $HOME/.xinitrc
echo "exec /usr/bin/i3" >> $HOME/.xinitrc
echo "exec /usr/bin/xterm" >> $HOME/.xinitrc
# Make sure libinput works
/usr/bin/udevadm trigger
## go
rm -rf "/run/sway.started" "/run/x11.started"
if [ -x "/usr/bin/sway" -a -z "$DISABLE_WAYLAND" ] ; then
echo "*** Trying to launch Sway ***"
/usr/bin/sway
else
echo Sway not installed in this image, skipping.
fi
if [ ! -f "/run/sway.started" -a -z "$DISABLE_X11" ] ; then
if [ -x "/usr/bin/startx" ] ; then
echo "*** Trying to launch X11 ***"
/usr/bin/startx
else
echo X11 not installed in this image, skipping.
fi
else
echo "Sway was run before, not starting X11".
fi
if [ ! -f "/run/sway.started" -a ! -f "/run/x11.started" ] ; then
echo "Everything failed, dropping into a shell."
exec /usr/bin/bash
else
echo "All done."
fi

View File

@ -1,20 +0,0 @@
#!/usr/bin/python3
import sys
import dbus
if 2 != len(sys.argv):
sys.exit (1)
dest = 'es.opengnsys.OGBrowser.browser'
path = '/'
interface = None
method = 'setURL'
signature = 's'
url = sys.argv[1]
b = dbus.SystemBus()
try:
b.call_blocking (dest, path, interface, method, 's', [url])
except Exception as e:
sys.exit (1)

View File

@ -70,6 +70,11 @@ isolinux_template =
basic =
dialog man-db fbset gdebi-core bash-static busybox-static locales lshw gawk git python3-openssl python3 php-cli dmidecode rpm sqlite3 os-prober moreutils jq
#console-data # ogLive anterior a Ubuntu 20.04
#subversion # ogLive anterior a Ubuntu 18.04
#php5-cli # ogLive anterior a Ubuntu 16.04
#realpath # ogLive hasta Ubuntu 16.04
#zypper # PROBAR
cloning = fsarchiver pv
#pxe-kexec # ubuntu noble: Unable to locate package
@ -77,6 +82,7 @@ cloning = fsarchiver pv
compile =
build-essential libattr1 libattr1-dev uuid-dev attr make m4 gettext libmhash-dev
#libattr* # Satura el tamaño del archivo en Ubuntu 15.04
compressor = lzma zip unzip gzip lzop pigz pbzip2 lbzip2 rzip p7zip-full
@ -86,34 +92,43 @@ filesystem_local =
dmraid dmsetup lvm2 e2fsprogs
jfsutils reiserfsprogs reiser4progs xfsprogs mhddfs hfsplus hfsprogs hfsutils nilfs-tools vmfs-tools
btrfs-progs # ogLive a partir de Ubuntu 20.04
#zfsutils-linux # ogLive a partir de Ubuntu 16.04 -- desactivado temporalmente
zfsutils-linux # ogLive a partir de Ubuntu 16.04
android-tools-adb # ogLive a partir de Ubuntu 16.04
android-tools-fastboot # ogLive a partir de Ubuntu 16.04
f2fs-tools
#drbl-ntfsprogs # Eliminado
#ntfs-config # ogLive anterior a Ubuntu 20.04
#btrfs-tools # ogLive anterior a Ubuntu 20.04
#ufsutils # ogLive anterior a Ubuntu 14.04
#zfsutils # ogLive anterior a Ubuntu 16.04
#android-tools-fsutils # ogLive entre Ubuntu 16.04 y Ubuntu 20.04
filesystem_remote =
sshfs cifs-utils smbclient open-iscsi openssh-server
#nfs-common # Provoca error de instalación en Ubuntu 15.04
#bittornado # ogLive anterior a Ubuntu 20.04
monitoring = htop ncdu bwbar bmon iftop ifstat dstat hdparm sdparm blktool testdisk kitty-terminfo
monitoring = htop ncdu bwbar bmon iftop ifstat dstat hdparm sdparm blktool testdisk
networking = netpipes curl wget tftp-hpa dnsutils
#trickle # ubuntu noble: has no installation candidate
lighttpd ethtool ssmping tcpdump nmap arping ntpdate udpcast aria2 mktorrent #iptraf
lighttpd ethtool ssmping tcpdump nmap arping ntpdate ctorrent udpcast #iptraf
testing =
screen schroot xmlstarlet
efibootmgr efitools refind grub-efi-amd64-bin grub-efi-ia32-bin grub-pc-bin ## UEFI
#libxss1 python-prctl python-six python-requests ## OGAgent
##############
fusioninventory-agent nvme-cli disktype laptop-detect
#discover casper lupin-casper xinit obconf xserver-xorg x11-xserver-utils xterm network-manager-gnome plymouth-x11 plymouth-label plymouth-theme-ubuntu-logo pcmanfm chromium-browser gtk-theme-switch gtk2-engines murrine-themes
####################################3
#gnome-icon-theme gnome-brave-icon-theme dmz-cursor-theme python-wnck python-xlib python-pyinotify python-alsaaudio python-vte maximus gpicview leafpad lxappearance lxmenu-data lxrandr lxterminal nitrogen ttf-ubuntu-font-family time synaptic libglib-perl libgtk2-perl libxml-simple-perl smartmontools gnome-disk-utility policykit-1-gnome policykit-desktop-privileges baobab lshw-gtk usb-creator-gtk wodim curlftpfs libnotify-bin cryptsetup system-config-lvm
xwindows =
v86d # VESA Kernel 3.7+
icewm xserver-common xserver-xorg xserver-xorg-core xserver-xorg-input-all xserver-xorg-video-all xinit i3
#xorg-dev xorg lxde #+300M
#roxterm gparted #+80M
#openbox midori #xvesa en compilacion
ogagent = stunnel4 filebeat ogagent
ogbrowser = sway libinput-tools hwdata ogbrowser
oggit = python3 python3-git python3-pyxattr python3-libarchive-c python3-pylibacl python3-pip python3-hivex opengnsys-libarchive-c python3-termcolor bsdextrautils opengnsys-pyblkid ntfs-3g-system-compression python3-tqdm
oggit = python3 python3-git python3-xattr python3-libarchive-c python3-pylibacl python3-pip opengnsys-libarchive-c python3-termcolor bsdextrautils opengnsys-pyblkid ntfs-3g-system-compression python3-tqdm

View File

@ -75,10 +75,10 @@ def _initramfs_version (gitrelease, osrelease, curdir):
def _copy_og_files (btrootfsimg, btrootfsmnt, osdistrib, oscodename):
_mount_rootfs (btrootfsimg, btrootfsmnt)
builder = '/tmp/opengnsys/oglive_builder'
og_shared = '/tmp/opengnsys/shared'
ogrepo_ssh_key = '/tmp/opengnsys/ogrepo-ssh-key'
btog.copy_og_files (builder, og_shared, ogrepo_ssh_key, btrootfsmnt, osdistrib, oscodename)
builder = '/tmp/opengnsys/oglive_builder'
og_shared = '/tmp/opengnsys/shared'
og_engine = '/tmp/opengnsys/engine'
btog.copy_og_files (builder, og_shared, og_engine, btrootfsmnt, osdistrib, oscodename)
utils.umount (btrootfsmnt)
def _chroot_tasks (cfgfile, curdir, osrelease, osarch):
@ -135,8 +135,7 @@ def _main (cfgfile, config, type_client):
_debootstrap (btrootfsimg, btrootfsmnt, osarch, oscodename, oshttp)
logger.info ('STAGE 2 - copy files to the rootfs')
today = datetime.datetime.now(datetime.timezone.utc).strftime ('%Y%m%d')
_initramfs_version (gitrelease+'_'+today, osrelease, curdir)
_initramfs_version (gitrelease, osrelease, curdir)
_copy_og_files (btrootfsimg, btrootfsmnt, osdistrib, oscodename)
logger.info ('STAGE 3 - perform tasks within the chroot')
@ -146,6 +145,7 @@ def _main (cfgfile, config, type_client):
logger.info ('STAGE 4 - generate distribution files')
pxepkg = _get_pxepkg()
today = datetime.datetime.now(datetime.timezone.utc).strftime ('%Y%m%d')
nameisoclient = '-'.join (['ogLive', oscodename, osrelease, osarch, gitrelease+'_'+today])
_mkinitrd_squashfs_isofs (bttargetdir, osrelease, btrootfsimg, btrootfsmnt, pxepkg, isolinux_tpl, nameisoclient)

View File

@ -1,17 +1,10 @@
[IMGogclient]
type=loopback
file=/var/lib/tftpboot/ogclient/ogclient.img
mount-options=-o offset=32256
description=ogclient Ubuntu image
#priority=1
users=root
groups=root
root-groups=root
mount-options=-o offset=32256
root-users=root
## man 5 schroot.conf
## "In addition to the configuration keys listed above, it is possible to add custom keys. These keys will be used to add additional environment variables to the setup script environment when setup scripts are run"
## We need this because in chroot-tasks.py setup_resolvconf2() we create a symlink /etc/resolv.conf -> /run/resolvconf/resolv.conf
## On the second run of the jenkins job, with REUSE_PREV_FS = true, schroot tries to copy /etc/resolv.conf but it now points to a non-existent file, making schroot fail
## With this line, we tell schroot not to copy any files to the chroot
setup.copyfiles=