Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
unstable
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
PROINFODATA
unstable
Commits
2117425a
Commit
2117425a
authored
11 years ago
by
Eduardo L. Buratti
Browse files
Options
Downloads
Patches
Plain Diff
Copy bootstrap files from buildpackage to build
parent
360a420e
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
build/bootstraps/bootstrap-install.sh
+277
-0
277 additions, 0 deletions
build/bootstraps/bootstrap-install.sh
build/bootstraps/bootstrap-update.sh
+157
-0
157 additions, 0 deletions
build/bootstraps/bootstrap-update.sh
with
434 additions
and
0 deletions
build/bootstraps/bootstrap-install.sh
0 → 100755
+
277
−
0
View file @
2117425a
#!/bin/bash
# Copyright (C) 2009-2012 Centro de Computacao Cientifica e Software Livre
# Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
#
# This file is part of buildpackage
#
# buildpackage is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
# This is the installation bootstrap
# ------------------------------------------------------------------------------
# This function checks the integrity of the tar package
verify_md5
(){
printf
"Verificando MD5... "
>
&3
if
[[
${
MD5_CHECK
}
==
$(
md5sum
${
FILE
}
|
awk
'{print $1}'
)
]]
;
then
printf
"OK!
\n
"
>
&3
else
printf
"ERRO: Este pacote está corrompido. %b"
\
"Por favor, faça um novo download.
\n
"
>
&3
rm
-rf
"
${
FILE
}
"
&> /dev/null
exit
4
fi
}
# ------------------------------------------------------------------------------
# This function collects the agent log, data and runs some tests, in case some
# error ocurred during the installation
collect_information
(){
printf
"
\n
Algumas informações referentes ao agente PROINFODATA %b%b%b%b"
\
"recém instalado serão coletadas. O resultado da coleta "
\
"será armazenado no arquivo temporário
\"
${
LOGFILE
}
\"
. Favor "
\
"enviar esse arquivo para
\"
proinfodata@c3sl.ufpr.br
\"
. Assim "
\
"a equipe ficará ciente do problema para resolvê-lo.
\n\n
"
>
&3
printf
"Iniciando coleta das informações (isso pode demorar alguns %b"
\
"minutos)... "
>
&3
printf
" Configuration files
\n
%b"
\
" ===================
\n\n
"
printf
"version
\n
"
cat
${
AGENT_DIR
}
/client/conf/version
printf
"proxy
\n
"
cat
${
AGENT_DIR
}
/client/conf/proxy
printf
"inep
\n
"
cat
${
AGENT_DIR
}
/client/conf/inep
printf
"
\n\n
----------------------------------
\n\n
"
printf
" OS information
\n
%b"
\
" ==============
\n\n
"
printf
"Distro
\n
"
DISTRO
=
$(
cut
-sd
' '
-f1
/etc/issue |
head
-n
1
)
if
test
-f
"/etc/le_version"
;
then
printf
"Linux Educacional
$(
cat
/etc/le_version
)
\n
"
elif
test
"
${
DISTRO
}
"
=
"Ubuntu"
-a
-f
"/usr/lib/edu/fbedu/tutorial.htm"
;
then
printf
"Linux Educacional
\n
"
elif
test
"
${
DISTRO
}
"
=
"Mandriva"
;
then
head
-n
1 /etc/issue
elif
test
"
${
DISTRO
}
"
=
"Welcome"
;
then
cut
-sd
"
\\
"
-f1
/etc/issue |
cut
-d
' '
-f3-
else
cut
-sd
"
\\
"
-f1
/etc/issue
fi
printf
"Kernel
\n
"
cut
-d
" "
-f3
/proc/version
printf
"
\n\n
----------------------------------
\n\n
"
printf
" Commands
\n
%b"
\
" ========
\n\n
"
printf
"seed_mec user crontab
\n
"
crontab
-u
seed_mec
-l
printf
"ifconfig
\n
"
/sbin/ifconfig
printf
"route
\n
"
/sbin/route
printf
"Routes test
\n
"
for
interface
in
$(
/sbin/route |
grep
default |
awk
'{print $NF}'
)
;
do
printf
"Tested interface:
${
interface
}
\n
"
# Send ICMP ECHO_REQUEST to root server I or J
ping
-c
1
-I
${
interface
}
192.36.148.17
ping
-c
1
-I
${
interface
}
192.58.128.30
done
printf
"
\n\n
----------------------------------
\n\n
"
printf
" seed_mec user files
\n
%b"
\
" ===================
\n\n
"
ls
-lR
"
${
SEED_MEC_HOME
}
"
printf
"
\n\n
----------------------------------
\n\n
"
printf
" Inventory XML
\n
%b"
\
" =============
\n\n
"
cat
${
AGENT_DIR
}
/data/collect-data.xml
printf
"
\n\n
----------------------------------
\n\n
"
printf
" run.sh
\n
%b"
\
" ========
\n\n
"
cat
${
AGENT_DIR
}
/client/run.sh
printf
"
\n\n
----------------------------------
\n\n
"
printf
" agent.sh
\n
%b"
\
" ========
\n\n
"
cat
${
AGENT_DIR
}
/agent.sh
printf
"
\n\n
----------------------------------
\n\n
"
printf
" Collect agent log
\n
%b"
\
" =================
\n\n
"
cat
${
AGENT_DIR
}
/log/collect.log
printf
"
\n\n
----------------------------------
\n\n
"
printf
" Web service client log
\n
%b"
\
" ======================
\n\n
"
cat
${
AGENT_DIR
}
/client/run.log
printf
"
\n\n
----------------------------------
\n\n
"
printf
" TincUCA client log
\n
%b"
\
" ==================
\n\n
"
cat
${
AGENT_DIR
}
/log/tincucaclient-install.log
printf
"
\n\n
----------------------------------
\n\n
"
printf
"feito!
\n\n
Favor enviar o arquivo temporário
\"
${
LOGFILE
}
\"
%b%b%b"
\
" para
\"
proinfodata@c3sl.ufpr.br
\"
.
\n\n
"
\
"Em caso de dúvidas, acesse o portal do PROINFODATA:
\n
"
\
"proinfodata.c3sl.ufpr.br
\n
"
>
&3
}
# ------------------------------------------------------------------------------
printf
"Iniciando instalação do agente PROINFODATA. Tenha certeza de %b%b%b"
\
"estar conectado à Internet e executando este arquivo como super-"
\
"usuário (root). Além disso, para o agente funcionar é necessário "
\
"ter instalado no sistema os pacotes
\"
cron
\"
e
\"
sudo
\"
.
\n
"
# These variables will be replaced when generating the installation package
MD5_CHECK
=
BOOTSTRAP_LINES
=
# Set variables
FILE
=
"SEED2.tgz"
PROJECTOR
=
$(
grep
"Projetor ProInfo"
/etc/issue 2> /dev/null
)
UCA_SERVER
=
$(
grep
"Metasys School Server"
/etc/issue 2> /dev/null
)
UCA_CLASSMATE
=
$(
grep
"Metasys ClassmatePC"
/etc/issue 2> /dev/null
)
if
test
-f
"/usr/sbin/projetor"
-o
-n
"
${
PROJECTOR
}
"
;
then
SEED_MEC_HOME
=
"/mnt/conf/seed_mec"
else
SEED_MEC_HOME
=
"/opt/seed_mec"
fi
AGENT_DIR
=
"
${
SEED_MEC_HOME
}
/SEED2"
LASTEXEC
=
"
${
AGENT_DIR
}
/tmp/lastExec.tmp"
LOGFILE
=
/tmp/collected-information.log
# Save stdout to file descriptor 3 and redirect all output to $LOGFILE
exec
3>&1 &>
${
LOGFILE
}
# Check if lastExec.tmp exist then save its content to prevent that
# agent send a inventory more than once per day
if
test
-f
${
LASTEXEC
}
;
then
LASTEXECBACKUP
=
$(
cat
${
LASTEXEC
}
)
fi
# Remove any previous installation of the agent
rm
-rf
"
${
AGENT_DIR
}
"
/usr/sbin/userdel
-r
seed_mec
/usr/sbin/groupdel seed_mec
# Create seed_mec group and exit on error (except by the error of previous
# existence of seed_mec group)
if
!
/usr/sbin/groupadd
-f
seed_mec
;
then
printf
"ERRO: Falha ao criar o grupo seed_mec.
\n
"
>
&3
exit
1
fi
# Create the directory path to make sure useradd(1) will be able to create the
# home for seed_mec user
mkdir
-p
"
$(
dirname
${
SEED_MEC_HOME
}
)
"
# This is a temporary skel directory to avoid installing in the default skel
TMPSKEL
=
$(
mktemp
-d
)
# Create seed_mec user with seed_mec as group, BASH as default shell,
# $SEED_MEC_HOME as home and $TMPSKEL as temporary skel
/usr/sbin/useradd
-r
-m
-g
seed_mec
-s
/bin/bash
-d
"
${
SEED_MEC_HOME
}
"
\
-k
"
${
TMPSKEL
}
"
seed_mec
RETVAL
=
$?
# If an error occurred (return isn't 0), besides the previous existence of
# seed_mec user (return 9, which means the agent will be reinstalled), print an
# error message and exit
if
test
${
RETVAL
}
-ne
0
-a
${
RETVAL
}
-ne
9
;
then
printf
"ERRO: Falha ao criar o usuário seed_mec.
\n
"
>
&3
exit
2
fi
# Remove the temporary skel, as it isn't needed anymore
rmdir
"
${
TMPSKEL
}
"
# ------------------------------------------------------------------------------
# Ensure seed_mec's home exists
mkdir
-p
"
${
SEED_MEC_HOME
}
"
# Remove old crontab of seed_mec, in case there's one, avoinding a specific
# error of wrong owner (lack of permissions)
crontab
-u
seed_mec
-r
# Check if this is not an UCA Classmate, UCA Server nor PROINFO Projector, and
# if the line that gives root permission doesn't exist before adding it
if
!
test
-n
"
${
PROJECTOR
}
"
-o
-f
"/usr/sbin/projetor"
-o
\
-f
"/etc/cmpc-release"
-o
-n
"
${
UCA_SERVER
}
"
-o
\
-n
"
${
UCA_CLASSMATE
}
"
;
then
# Remove any possible line containing a rule for seed_mec user before adding
# root permissions in the sudoers file
TMPFILE
=
$(
mktemp
)
sed
'/^seed_mec[\t ]*ALL=(ALL/d'
/etc/sudoers
>
"
${
TMPFILE
}
"
mv
"
${
TMPFILE
}
"
/etc/sudoers
chmod
440 /etc/sudoers
# Add root permissions to seed_mec user, without the need of password
if
!
$(
echo
-e
"seed_mec
\t
ALL=(ALL) NOPASSWD: ALL"
>>
/etc/sudoers
)
then
printf
"ERRO: Falha ao adicionar permissões de super-usuário %b"
\
"ao usuário seed_mec.
\n
"
>
&3
exit
3
fi
fi
# ------------------------------------------------------------------------------
# Uncompress tar package and check its integrity
tail
-n
+
${
BOOTSTRAP_LINES
}
$0
>
"
${
SEED_MEC_HOME
}
/
${
FILE
}
"
cd
"
${
SEED_MEC_HOME
}
"
verify_md5
# Remove old agent and extract the new one
rm
-rf
"
${
AGENT_DIR
}
"
&> /dev/null
tar
xzf
"
${
FILE
}
"
&> /dev/null
rm
-rf
"
${
FILE
}
"
&> /dev/null
# Change files' owner
if
!
chown
-R
seed_mec:seed_mec
"
${
SEED_MEC_HOME
}
"
;
then
rm
-rf
"
${
SEED_MEC_HOME
}
"
&> /dev/null
printf
"ERRO: Falha ao mudar dono dos arquivos.
\n
"
>
&3
exit
5
fi
# ------------------------------------------------------------------------------
# Export a variable to inform the agent that this is its first execution
export
FIRST_EXECUTION
=
1
# Restore lastExec.tmp
if
!
test
-z
${
LASTEXECBACKUP
}
;
then
echo
${
LASTEXECBACKUP
}
>
${
LASTEXEC
}
fi
# Run the agent and check if its execution went alright, exiting in case of
# error
if
!
su
-c
"bash
${
AGENT_DIR
}
/update.sh"
seed_mec
||
!
su
-c
"bash
${
AGENT_DIR
}
/inventory.sh"
seed_mec
;
then
printf
"ERRO: Falha na execução do novo agente.
\n
"
>
&3
collect_information
exit
6
fi
# Restore stdout and close fd 3
exec
>
&3 3>&-
printf
"
\n
O agente PROINFODATA foi instalado com sucesso. %b%b"
\
"Em caso de dúvidas, acesse o portal do PROINFODATA:
\n
"
\
"proinfodata.c3sl.ufpr.br
\n
"
exit
0
This diff is collapsed.
Click to expand it.
build/bootstraps/bootstrap-update.sh
0 → 100755
+
157
−
0
View file @
2117425a
#!/bin/bash
# Copyright (C) 2009-2012 Centro de Computacao Cientifica e Software Livre
# Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
#
# This file is part of buildpackage
#
# buildpackage is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
# This is the update bootstrap
# ------------------------------------------------------------------------------
# This function verifies if the package MD5 is correct
verify_md5
(){
printf
"[SEED2-update] Checking MD5... "
if
[[
${
MD5_CHECK
}
==
$(
md5sum
"
${
SEED_MEC_HOME
}
/update/tmp/
${
FILE
}
"
|
\
awk
'{print $1}'
)
]]
;
then
printf
"OK!
\n
"
else
printf
"ERROR: This package is currupted.
\n
"
rm
-rf
${
FILE
}
&> /dev/null
exit
1
fi
}
# ------------------------------------------------------------------------------
# Re-create the inep and proxy's MD5
restore_inep_proxy_md5sum
(){
for
FILE
in
inep proxy
;
do
md5sum
"
${
SEED_MEC_HOME
}
/SEED2/client/conf/
${
FILE
}
"
|cut
-d
' '
-f1
>
\
"
${
SEED_MEC_HOME
}
/
${
UPDATE_DIR
}
/.md5sum/client/conf/
${
FILE
}
"
# The backup md5 is the same
cp
-a
"
${
SEED_MEC_HOME
}
/
${
UPDATE_DIR
}
/.md5sum/client/conf/
${
FILE
}
"
\
"
${
SEED_MEC_HOME
}
/
${
UPDATE_DIR
}
/.md5sum/.backup/client/conf/"
done
}
# ------------------------------------------------------------------------------
# Re-create the inep and proxy files' backup and copy the MD5 files
restore_inep_proxy_backup
(){
for
FILE
in
inep proxy
;
do
# The backup itself
cp
-a
"
${
SEED_MEC_HOME
}
/SEED2/client/conf/
${
FILE
}
"
\
"
${
SEED_MEC_HOME
}
/
${
UPDATE_DIR
}
/.backup/client/conf/"
done
}
# ------------------------------------------------------------------------------
# These variables will be replaced while generating the package
FILE
=
MD5_CHECK
=
BOOTSTRAP_LINES
=
if
test
-n
"
${
HOME
}
"
;
then
SEED_MEC_HOME
=
${
HOME
}
else
SEED_MEC_HOME
=
/opt/seed_mec
fi
UPDATE_DIR
=
"update/tmp/SEED2-run"
# ------------------------------------------------------------------------------
# Create auxiliar directories
mkdir
-p
"
${
SEED_MEC_HOME
}
/update/tmp"
mkdir
-p
"
${
SEED_MEC_HOME
}
/update/old"
# Extract the tar package
tail
-n
+
${
BOOTSTRAP_LINES
}
"
$0
"
>
"
${
SEED_MEC_HOME
}
/update/tmp/
${
FILE
}
"
verify_md5
cd
"
${
SEED_MEC_HOME
}
/update/tmp"
tar
xzf
"
${
FILE
}
"
&> /dev/null
cd
- &> /dev/null
# ------------------------------------------------------------------------------
# Make sure the directories exist in the update tree to backup the inep and
# proxy files, along with their counterparts (backup and MD5)
mkdir
-p
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/client/conf"
mkdir
-p
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/.md5sum/client/conf"
mkdir
-p
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/.backup/client/conf"
mkdir
-p
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/.md5sum/.backup/client/conf"
# Check if the inep and proxy files exist
ERROR
=
0
INEP_PROXY
=
"
${
SEED_MEC_HOME
}
/SEED2/client/conf/inep
${
SEED_MEC_HOME
}
/SEED2/client/conf/proxy"
for
FILE
in
${
INEP_PROXY
}
;
do
test
-f
"
${
FILE
}
"
||
ERROR
=
1
done
# Copy the inep and proxy files. Also, copy their backups and MD5 counterparts,
# if they exist. Otherwise, create them
if
test
"
${
ERROR
}
"
-eq
0
;
then
# Copy inep and proxy to the new tree
cp
-a
"
${
SEED_MEC_HOME
}
/SEED2/client/conf/"
{
inep,proxy
}
\
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/client/conf/"
# Copy or create the md5 files from inep and proxy
(
test
-d
"
${
SEED_MEC_HOME
}
/SEED2/.md5sum"
&&
cp
-a
"
${
SEED_MEC_HOME
}
/SEED2/.md5sum/client/conf/"
{
inep,proxy
}
\
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/.md5sum/client/conf/"
&&
cp
-a
"
${
SEED_MEC_HOME
}
/SEED2/.md5sum/.backup/client/conf/"
{
inep,proxy
}
\
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/.md5sum/.backup/client/conf/"
)
||
restore_inep_proxy_md5sum
# Copy or create the backup files from inep and proxy
(
test
-d
"
${
SEED_MEC_HOME
}
/SEED2/.backup"
&&
cp
-a
"
${
SEED_MEC_HOME
}
/SEED2/.backup/client/conf/"
{
inep,proxy
}
\
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/.backup/client/conf/"
)
||
restore_inep_proxy_backup
fi
# ------------------------------------------------------------------------------
# TODO: do some security backup???
#cp -ra "${SEED_MEC_HOME}/SEED2/" "${SEED_MEC_HOME}/old/"
# If something interrupts the script here, the tree will not be entirely
# correct, so a file is created to mark that something happened. During the next
# next execution the package will try to recover itself
##### CRITICAL #####
touch
"
${
SEED_MEC_HOME
}
/SEED2/updating"
# md5sum and backup folders
rm
-rf
"
${
SEED_MEC_HOME
}
/SEED2/.md5sum"
\
"
${
SEED_MEC_HOME
}
/SEED2/.backup"
&> /dev/null
mv
-f
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/"
{
.md5
*
,.back
*
}
*
\
"
${
SEED_MEC_HOME
}
/SEED2/"
# Copy the files themself
rm
-rf
"
${
SEED_MEC_HOME
}
/SEED2/"
{
bin,lib,net,client,extra,network-scripts,scripts
}
&> /dev/null
mv
-f
"
${
SEED_MEC_HOME
}
/update/tmp/SEED2-run/"
*
\
"
${
SEED_MEC_HOME
}
/SEED2/"
rm
-f
"
${
SEED_MEC_HOME
}
/SEED2/updating"
&> /dev/null
### END CRITICAL ###
# ------------------------------------------------------------------------------
# Remove auxiliar directories
rm
-rf
"
${
SEED_MEC_HOME
}
/update"
&> /dev/null
# Call the agent
"
${
SEED_MEC_HOME
}
/SEED2/update.sh"
exit
0
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment