Trazer computadores que não estão conectados à rede para o inventário era fácil nas versões anteriores do Ocs Inventory. Bastava gerarmos o arquivo terminado em .ocs no computador cliente do OCS, levarmos esse arquivo até o servidor OCS e, com o OCS aberto no navegador, usarmos um botão para pegarmos esse arquivo. Mas foi retirada a opção para selecionar o arquivo .ocs de dentro de Gerenciar–>Importar no Ocs. Não há mais como usar o OCS pelo navegador para importar arquivos .ocs
Nas versões recentes a opção Gerenciar–>Importar( ou Manager–>Local Import) ainda existe mas quando abrimos há somente alguns campos e nenhum deles é o de selecionar o arquivo .ocs
Para piorar a situação, a página wiki.ocsinventory-ng.org dá a alternativa de usarmos o arquivo(script) chamado Ocsinventory_local.pl mas ele nem existe. Na verdade, ele foi substituído pelo ocsinventory-injector.pl. Para descobrir que o arquivo não era mais o mesmo sofri um pouco e durante dias. Onde iria obter essa informação se nem consta na página oficial?
Bom, vamos ao passo a passo.
Atualização:
Gerando o Arquivo .ocs
Antes de tudo, tenha o OCS agente instalado no Windows ou Linux.
No Linux que é cliente OCS, para gerar o arquivo dentro da pasta /home/maria execute
ocsinventory-agent -l /home/maria/
no Windows que é cliente OCS, execute esses comandos para gerar o arquivo .ocs dentro c:\temp\
"C:\Program Files\OCS Inventory Agent\OCSInventory.exe /local=c:\temp\"
Em meu pc, o arquivo gerado foi esse: MEUPC-2023-04-12-11-34-44.ocs
Leve o arquivo gerado para o servidor OCS usando um pen drive ou outro meio que achar mais conveniente.
Importando o Arquivo .ocs no Servidor OCS
#1 No servidor OCS, abra o terminal e execute o comando abaixo para baixarmos o arquivo ocsinventory-injector.pl
wget https://github.com/OCSInventory-NG/OCSInventory-Server/tree/master/binutils/ocsinventory-injector.pl
#2 agora execute o comando a seguir para importarmos
ocsinventory-injector.pl -f MEUPC-2023-04-12-11-34-44.ocs
ou se precisar colocar a url do servidor ocs
ocsinventory-injector.pl -u http://192.168.0.251/ocsinventory -f MEUPC-2023-04-12-11-34-44.ocs
E isso será tudo! Quando acessar o OCS pelo navegador verá os ativos incluídos.
Script ocsinventory-injector.pl
Se o download do ocsinventory-injector.pl falar, crie o aquivo vazio e cole o código abaixo:
#!/usr/bin/perl -w
###############################################################################
##OCS inventory-NG Version 1.02
##Copyleft Pascal DANEK 2005
##Copyleft Goneri Le Bouder 2006
##Web : http://www.ocsinventory-ng.org
##
##This code is open source and may be copied and modified as long as the source
##code is always made freely available.
##Please refer to the General Public Licence http://www.gnu.org/ or Licence.txt
################################################################################
#Last modification : $Id: ocsinventory-injector.pl,v 1.3 2008-02-18 07:17:52 hunal Exp $
#Local insertion script
use Fcntl qw/:flock/;
use LWP::UserAgent;
use XML::Simple;
use Compress::Zlib;
use Getopt::Long;
use MIME::Base64;
use constant VERSION => 3;
use strict;
my $help;
my $directory;
my $file;
my $url;
my $sslmode;
my $cafile;
my $useragent;
my $remove;
my $verbose;
my $stdin;
my $timeout;
my $username;
my $password;
my $encoded_credentials;
sub loadfile {
$file = shift;
unless ( -r $file ) {
print STDERR "Can't read $file\n";
return;
}
print "Loading $file..." if $verbose;
unless ( open( FILE, "$file" ) && flock( FILE, LOCK_EX | LOCK_NB ) ) {
print STDERR "Failed to access $file : $!";
return;
}
local $/;
my $content = <FILE>;
close FILE or die "Can't close file $file: $!";
sendContent($content);
}
sub loaddirectory {
my $directory = shift;
unless ( -r $directory ) {
print STDERR "Can't read $directory: $!\n";
return;
}
opendir( DIR, $directory ) || die "can't opendir $directory: $!";
foreach ( readdir(DIR) ) {
loadfile("$directory/$_") if (/\.ocs$/);
}
closedir DIR;
}
sub loadstdin {
my $content;
undef $/;
$content = <STDIN>;
sendContent($content);
}
sub sendContent {
my $content = shift;
my $ua = LWP::UserAgent->new(
protocols_allowed => ['http', 'https'],
timeout => $timeout,
ssl_opts => {
verify_hostname => $sslmode,
SSL_ca_file => $cafile
},
);
$ua->agent($useragent);
my $request = HTTP::Request->new( POST => $url );
$request->header(
'Pragma' => 'no-cache',
'Content-type' => 'Application/x-compress'
);
if ($encoded_credentials) {
$request->header('Authorization' => "Basic $encoded_credentials");
} elsif ($username && $password) {
my $encoded = encode_base64("$username:$password");
$request->header('Authorization' => "Basic $encoded");
}
$request->content("$content");
my $res = $ua->request($request);
if($res->is_success){
print "OK\n" if $verbose;
print STDERR "Can't remove $file: $!\n"
if ($remove && (!unlink $file));
}else{
if($verbose){
print "ERROR: ";
print $res->status_line(), "\n";
}
}
}
sub usage {
print <<EOF;
DESCRIPTION:
A command line tools to import .ocs files.
USAGE:
-h --help : this menu
-d --directory : load every .ocs files from a directory
-f --file\ : load a speficic file
-u --url : ocsinventory backend URL, default is http://ocsinventory-ng/ocsinventory
--sslmode : 1 or 0, enable SSL inventory injection
--cafile : path to certificate
--useragent : HTTP user agent, default is OCS-NG_LOCAL_PL_v".VERSION."
-r --remove : remove successfully injected files
-v --verbose : verbose mode
-t --timeout : injector timeout value
--stdin : read data from STDIN
--username : username for basic auth
--password : password for basic auth
--credentials : base64 encoded username:password for basic auth
You can specify a --file or a --directory or STDIN. Current directory is the default
EOF
exit 1;
}
GetOptions(
'h|help' => \$help,
'd|directory=s' => \$directory,
'f|file=s' => \$file,
'u|url=s' => \$url,
'sslmode=s' => \$sslmode,
'cafile=s' => \$cafile,
'useragent=s' => \$useragent,
'r|remove' => \$remove,
'v|verbose' => \$verbose,
't|timeout' => \$timeout,
'stdin' => \$stdin,
'username=s' => \$username,
'password=s' => \$password,
'credentials=s'=> \$encoded_credentials,
);
# Default values
$url = 'http://localhost/ocsinventory' unless $url;
$useragent = 'OCS-NG_INJECTOR_PL_v'.VERSION unless $useragent;
$directory = '.' unless $directory;
$sslmode = 0 unless $sslmode;
$cafile = "cacert.pem" unless $cafile;
$timeout = 10 unless $timeout;
###
$|=1;
if ($file && -f $file) {
loadfile($file);
}
elsif ($stdin) {
loadstdin();
}
elsif($help){
usage();
}
else{
if ($directory && -d $directory) {
loaddirectory($directory);
}
else{
die("Directory does not exist. Abort.");
}
}
Não esquece de conceder permissão ao arquivo com chmod +x ocsinventory-injector.pl
Até consegui rodar e fazer certinho os comandos, porem o arquivo que é gerado no Windows com as informações da maquina (arquivo .ocs) ele é gerado com criptografia. Diferente do documento que é gerado no Ubuntu.
Ao realizar o comando ele até executa e não apresenta erro, porem não carrega nenhuma informação para o servidor