RES: Projeto LinUSP (http://linusp.usp.br)
Desculpem os cortes mas já estava grande demais ;-)
-----Mensagem original-----
De: Arnaldo Carvalho de Melo [SMTP:acme@conectiva.com.br]
Enviada em: Sexta-feira, 12 de Fevereiro de 1999 21:21
Para: Daniel Doro Ferrante
Cc: Debian User List - Portuguese
Assunto: Re: Projeto LinUSP (http://linusp.usp.br)
On Wed, 3 Feb 1999, Daniel Doro Ferrante wrote:
> On Wed, 3 Feb 1999, Clovis Sena / Itautec Servicos Recife wrote:
>
> Você citou a distribuição da Conectiva. Em particular, eu acho que
> essa distribuição tem alguns "problemas": Ela não é GPL! Além disso, eles
Não, ela não é 100% GPL, como a debian também não é. Os softwares
disponíveis no Conectiva Linux são liberados sob várias licenças: GPL,
LGPL, BSD, MIT, Artistic, Domínio Público, etc, como são os disponíveis na
debian. Mas todos são de livre distribuição. Somente o segundo CD contém
pacotes "non free", mas são claramente designados como tal e estão em um
CD a parte.
[Itamar] Tudo bem. Assim como a Debian...
> usam o RedHat! :((( Eu acho que deveria ser feito um esforço (e GRANDE pelo
Questão de gosto. Novamente: a melhor distribuição é a que você está
acostumado. O resto é flame war desnecessária. Instale várias, experimente
e use.
[Itamar] Acho que vc não tem direito de falar que o Daniel está instigando uma flame war se ele está demonstrando sua simpatia pela distribuição Debian numa lista de usuários DEBIAN.
> visto... ;) para que a distribuição usada fosse Debian - e acho que os
> motivos disso são bastante óbvios. Não estou menosprezando as outras
Nem tanto. Tema _muito_ polêmico.
> distribuições, mas a Debian é o mais próximo de GPL que há por aí! E, como
> diz o Linus: "Software is like sex; it's better when it's free."
E como o RMS diz: (http://www.gnu.org/philosophy/free-sw.html - What is
Free Software?)
[Itamar] É. Mas se além do que é dito no texto supracitado ele ainda for barato é melhor ainda. ;-)
E como foi dito:
"``Free software'' refers to the users' freedom to run, copy, distribute, study, change and improve the software."
Eu senti menos liberdade de estudar e modificar usando distribuição Conectiva, doque usando Debian, apesar da documentação não estar numa língua que eu domine (mas também não tem problema, sou péssimo em português ;-) ). Como vc disse pode ser uma questão de gosto, ou de estar acostumado.
``Free software'' is a matter of liberty, not price. To understand the
concept, you should think of ``free speech'', not ``free beer.''
> Eu acho bastante inutil fazermos todo um movimento para gerarmos um
> software que não seja Free. Aí o quê estaríamos fazendo seria copiar os
> moldes da Micro$oft!
Leia o conceito de Free Software acima.
[Itamar] Nem oito nem oitenta, ainda acho que ganha quem oferecer um produto de qualidade por menor preço...
> > No ambito mundial existe muito isto, por ex aquele caso do "refund day",
> > congressos, e a atencao ( que por aqui eh mal acompanhada) dada ao
> > julgamento da MS, que com estas lapadas que tem tomado do DOJ americano, tem
> > aberto espaco para outras sistemas. Temos que nos preparar para qdo isto
> > acontecer no brasil. Os distribuidores hoje nao tem maquinas preinstaladas ,
> > pelo menos a maioria nao, mas em breve sera viavel por isto em pratica.
Estamos trabalhando para que isto aconteça, vários OEMs estarão
disponibilizando Linux pré-instalado em máquinas (servidores e estações de
trabalho, sem Windows) aqui no Brasil, em breve. E nos próximos meses mais
160 mil CDs do Linux estarão nas bancas de revistas pelo pais afora, em
adição aos 50 mil que já sairam.
[Itamar] É legal, eu ouvi dizer que a Compaq estão pensando (ou já implementando) em fornecer o Linux pré-instalado em algumas de suas máquinas. Muuiito legal! Pelo menos o indivíduo que estiver comprando sua máquina vai ter alguma opção, e não vai ter aquela idéia inicial de que "computador tem Windows, se tiver outra coisa é um outro tipo de máquina que só profissional sabe mexer".
> O Mercado Brasileiro (assim como os outros) vai certamente se
> livrar do domínio da M$, pelo motivo mais óbvio que existe: o Linux
> FUNICONA!!! Atualmente, pelo que eu tenho ouvido, as novas versões do
:)
>
> Eu acho que, uma vez que já estamos nos engajando em
> "Internacionalização do Debian" poderíamos aproveitar a viagem e começar a
> trabalhar num projeto de "Friendlization" do Debian ;) Afinal, acho que nós
> estamos mais a par das necessidades do nosso público alvo (e de seus
> conhecimentos também).
Exatamente! Quanto mais fáceis forem os processos de instalação das
distribuições mais usuários usarão o Linux!
[Itamar] Não só o processo de instalação, mas a manutenção também.
Acho que este projeto de "Friendilization" tem muito de aprender com a distribuição Conectiva, que é impressionante. Certa vez o Arnaldo me pediu que explicasse a "bagunça" que eu achei na distribuição dele e não consegui resumir meus sentimentos, mas recentemente descobri que usar o dselect para manusear pacotes é muito melhor doque o gerenciador de pacotes do painel de controle, pois nele não tem a vista a descrição de cada pacote, nem a facilidade de encontrá-los pois estão divididos em "diretórios" com alguns nomes que são impronunciáveis.
Mais uma vantagem para a Debian (que eu tenha percebido). Agente encontra pessoas fazendo esforços sem querer dinheiro, fazem coisas simples porque precisaram, agora quem quiser que use, fique à vontade, a exemplo do nosso amigo João Luís, que fez um gerenciador de pacotes muitíssimo útil, porque é simples, maleável e rápido. e ta aí. Quem quiser, use. ( A seguir vai uma mensagem que eu recebi dele, bom proveito ;-) )
Novamente, por favor visitem
http://lie-br.conectiva.com.br e nos unamos por softwares de livre
distribuição que falem nossa língua!
[Itamar] Muito Bom!
[Itamar]
--- Begin Message ---
Ola pessoal.
Sou usuario da distribuicao Debian ja a algum tempo. Ja usei RedHat, mas
acho a Debian um pouco mais organizada. O problema com a Debian e' a
interface de instalacao, o deselect, que e' muito confuso, e `as vezes nao
funciona direito. E usar o dpkg, tendo que resolver na unha as
dependencias, e' uma chatice.
Devido `as minhas proprias necessidades desenvolvi um programa em Perl que
instala pacotes debian, instalando antes, e recursivamente, todas as
dependencias. O programa "dinst" e as instrucoes "leiame" vem em
attachment. Nao esquecer do "chmod 755 dinst" !
Ficaria agradecido por comentarios e sugestoes!
Joao Luis.
#!/usr/bin/perl -w
##################################################################
# Dinst v 0.60p.
# Instala pacotes debian recursivamente.
# Este programa pode ser distribuido gratuitamente e modificado
# segundo as necessidades do usuario.
# Autor: Joao Luis Meloni Assirati <assirati@fma.if.usp.br>
##################################################################
sub usage {
print "Uso: dinst --configure <lista de caminhos>\n";
print " dinst [dpkg options] <pacotes a instalar>\n";
}
#######################################################################
# Pretty much like bash's select. Takes as argument a scalar variable
# with the form opt1|opt2|...|optn and prompt a user selection. Returns
# the selection.
sub select_opts {
my(%opt, @list, $i, $s);
@list = split /\|/, $_[1];
for($i = 1; $i <= @list; $i++) {
$opt{$i} = $list[$i-1];
}
do {
print "$_[0]\n";
foreach $i (sort {$a <=> $b} keys %opt) {
if($i < 10) {
print " $i) $opt{$i}\n";
} else {
print "$i) $opt{$i}\n";
}
}
print "dinst:> ";
chomp($s = <stdin>);
} until(defined($opt{$s}));
return $opt{$s};
}
##################################################################
#
# Interface with debian package database
#
sub comp_versions {
return ! system("/usr/bin/dpkg --compare-versions $_[0] \'$_[1]\' $_[2]");
}
# Returns the system status of a list of packages separed by "|"
sub inst_status {
my(@opts, $item, $status, $ins, $ver1, $sign, $ver2);
@opts = split(/\|/, $_[0]);
foreach $item (@opts) {
$sign = undef; $ver2 = undef;
if( $item =~ /(.*)\(([><=]*)(.*)\)/ ) {
$item = $1; $sign = $2; $ver2 = $3;
}
$status = `/usr/bin/dpkg --status $item`;
$status =~ /\n *(?:Status|STATUS):(.*)\n/; $ins = $1;
if (defined($ins)) {
$status =~ /Version:(.*)/; $ver1 = $1;
if( ($ins =~ / *install ok installed */) &&
((! defined($ver2)) || comp_versions($ver1, $sign, $ver2))) {
return "ii";
}
}
}
return "ni";
}
# Query the dependencies of a given package by its file name
sub dependencies_of {
my($info, $dep, $predep, $tdep);
$info = `/usr/bin/dpkg --info $_[0]`;
$info =~ /\n *(?:Pre-Depends|PRE-DEPENDS):(.*)\n/;
$predep = $1;
$info =~ /\n *(?:Depends|DEPENDS):(.*)\n/;
$dep = $1;
if(defined($predep)) {
if(defined($dep)) {
$tdep = "$predep,$dep";
} else {
$tdep = "$predep";
}
} else {
if(defined($dep)) {
$tdep = "$dep";
} else {
return undef;
}
}
$tdep =~ s/ +//g;
return split /,/, $tdep;
}
# Query the suggestions of a given package by its file name
sub suggestions_of {
my($info, $dep, $predep, $tdep);
$info = `/usr/bin/dpkg --info $_[0]`;
$info =~ /\n *(?:Recommends|RECOMMENDS):(.*)\n/;
$predep = $1;
$info =~ /\n *(?:Suggests|SUGGESTS):(.*)\n/;
$dep = $1;
if(defined($predep)) {
if(defined($dep)) {
$tdep = "$predep,$dep";
} else {
$tdep = "$predep";
}
} else {
if(defined($dep)) {
$tdep = "$dep";
} else {
return undef;
}
}
return $tdep;
}
# Takes as argument something as <package_name> or
# <package_name>(<version_condition>). Then looks for all debian
# files with same package_name and, in case of existing a
# version_condition, selects only the compatible ones, recording them
# as keys in the hash %version, with the respective versions as values.
# After that, sorts the keys of %version and returns the package of
# highest version available.
sub find_pack {
my($pack, $sign, $vers, $f, @list, $dir, @files);
if( ($pack = $_[0]) =~ /(.*)\(([><=]+)(.*)\)/ ) {
$pack = $1; $sign = $2; $vers = $3;
foreach $dir (@pathlist) {
if(defined(@files = glob($dir . "/" . $pack . "_*.deb"))) {
foreach $f (@files) {
(`/usr/bin/dpkg --info $f`) =~ /\n *(?:Version|VERSION):(.*)\n/;
if( comp_versions($1, $sign, $vers) ) {
push(@list, $f);
}
}
}
}
} else {
foreach $dir (@pathlist) {
if(defined(@files = glob($dir . "/" . $pack . "_*.deb"))) {
@list = (@list, @files);
}
}
}
if( @list == 0 ) {
return undef;
}
if( @list == 1 ) {
return $list[0];
}
print "dinst: Mais de um arquivo encontrado para o pacote $_[0].\n";
return select_opts("dinst: Escolha um arquivo:", join("|",@list));
}
sub what_provides {
my($provide);
if(`/usr/bin/dpkg --info $_[0]` =~ /\n *(?:Provides|PROVIDES):(.*)\n/) {
($provide = $1) =~ s/ //g;
return $provide;
}
return undef;
}
#
# End of interface with debian package database
#
##########################################################################
######################################################################
# In a list of options separed with |, substitutes all options
# that match with an available alias in the hash %alias.
sub subst_alias {
my(@opts, $item);
@opts = split(/\|/, $_[0]);
foreach $item (@opts) {
if (defined ($alias{$item})) {
$item = $alias{$item};
}
}
return join "|", @opts;
}
sub detect_cycle {
my($i);
foreach $i (split(/ /, $_[0])) {
if($i eq $_[1]) {
return 1;
}
}
return 0;
}
#################################################################
# Takes as its argument a list of package names and install them
# and their dependencies recursively
sub install {
my($item, $file, $message, $dep, $cycle);
$message = shift @_;
$cycle = shift @_;
foreach $item (@_) {
print "$message $item\n";
$item = subst_alias($item);
if( inst_status($item) eq "ii" ) {
print("dinst: $item ja instalado, desviando...\n");
} else {
if( $item =~ /.*\|.*/ ) {
$item = select_opts("dinst: Escolha uma opcao:", $item);
}
if(defined($file = find_pack $item)) {
print "dinst: Pacote $item encontrado em $file.\n";
if( detect_cycle($cycle, $item) ) {
print "dinst: Dependencias ciclicas!\n";
print "dinst: Ciclo: $cycle $item\n";
print "dinst: Nao posso instalar, encerrando.\n";
exit;
}
if(defined($dep = dependencies_of $file)) {
install("dinst: $item depende de", $cycle . " " . $item, dependencies_of $file);
}
system "/usr/bin/dpkg --install $dopt $file";
if("ii" eq inst_status $item) {
print "dinst: $item instalado com sucesso.\n";
$suggest{$item} = suggestions_of $file;
} else {
push(@problems, $item);
print "dinst: Problemas com a instalacao de $item\n";
print "dinst: Enter continua, ^C aborta.\n";
<STDIN>;
}
} else {
print "dinst: Pacote $item nao encontrado, escolha outro.\n";
print "dinst: (Enter escolhe nenhum)\n";
print "dinst:> ";
chomp($item = <stdin>);
unless ($item =~ /^ *$/) {
install("dinst: Instalando o pacote", $cycle . " " . $item, $item);
}
}
}
}
}
if(@ARGV == 0) {
usage;
exit;
}
if( $ARGV[0] eq "--configure" ) {
shift(@ARGV);
if(@ARGV == 0) {
usage;
exit;
}
$base = join(" ", @ARGV);
print "dinst: Procurando pacotes baseados em $base ...\n";
($find = `/usr/bin/find $base -name \'*.deb\'`) =~ s/\/[^\/]*\n/\n/g;
if(defined($find) && ($find ne "")) {
print "dinst: ... terminado.\n";
} else {
print "dinst: ... falha na busca dos pacotes.\n";
print "dinst: Verifique se os caminhos estao digitados corretamente\n";
print "dinst: e find esta instalado no sistema.\n";
exit;
}
foreach $i (split /\n/, $find) {
$dirs{$i} = "on";
}
@pathlist = keys %dirs;
foreach $path (@pathlist) {
@found = (@found, glob($path . "/*.deb"));
}
$nfound = @found;
print "dinst: Configurando aliases para os pacotes ...\n";
$i = 0;
foreach $file (@found) {
$i++;
print "$i/$nfound - $file\n";
$file =~ /\/([^\/]*)_.*$/;
$name = $1;
$alias{$name} = $name;
if($prov = what_provides($file)) {
foreach $a (split(/,/, $prov)){
if(defined $alias{$a}) {
$alias{$a} = $alias{$a} . "|" . $name;
} else {
$alias{$a} = $name;
}
}
}
}
print "dinst: ... Terminada a configuracao dos aliases.\n";
open(DINSTRC,">$ENV{HOME}/.dinstrc");
print DINSTRC join(":", @pathlist) . "\n";
foreach $a (keys %alias) {
unless($alias{$a} eq $a) {
print DINSTRC "$a = $alias{$a}\n";
}
}
close(DINSTRC);
print "dinst: Terminada a configuracao de dinst.\n";
print "dinst: Para configuracoes suplementares, edite o arquivo .dinstrc.\n";
exit;
}
unless( -f "$ENV{HOME}/.dinstrc") {
print "dinst: dinst nao configurado.\n";
print "dinst: De um \"dinst --configure\".\n";
exit;
}
open(DINSTRC, "$ENV{HOME}/.dinstrc");
chomp($line = <DINSTRC>);
@pathlist = split(/:/, $line);
while( defined ($line = <DINSTRC>) ) {
chomp($line);
unless ( $line =~ / *\#.*/ ) {
$line =~ / *([^ ]*) *= *([^ ]*) */;
$alias{$1} = $2;
}
}
close(DINSTRC);
$dopt = " ";
while($ARGV[0] =~ /^-.*/) {
$dopt = $dopt . " " . shift(@ARGV);
}
install "dinst: Instalando o pacote ", " ", @ARGV;
print "dinst: Fim da instalacao.\n";
foreach $item (keys %suggest) {
if( defined($suggest{$item}) ) {
print "dinst: $item sugere $suggest{$item}.\n";
}
}
print "\n";
if(defined @problems) {
print "dinst: Problemas foram encontrados durante o processamento de:";
print join "\n ", "", @problems;
}
print "\n";
Instrucoes para o uso de dinst v.0.60p.
Dinst instala pacotes debian e suas dependencias recursivamente.
USO:
dinst --configure <lista de caminhos>
Criara um arquivo .dinstrc no diretorio home com os caminhos
para todos os pacotes debian e um banco de dados de nomes
genericos (aliases).
dinst [ <opcoes para dpkg> ] <lista de pacotes>
Instalara todos os pacotes listados. Todas as opcoes para dpkg
sao passadas a dpkg durante a instalacao.
CONCEITOS:
"Pacote" e' a parte do nome do arquivo .deb antes do underscore (por
exemplo, o "pacote" relativo a emacs19_19.34-19.deb e' emacs19), e
pode ser tambem um nome generico, listado no arquivo .dinstrc (por
exemplo, latex e' um nome generico para tetex-bin e c-shell e' um nome
generico simultaneamente para csh e tcsh).
Muitas vezes, uma dependencia e' especificada por um nome generico,
portanto e' importante manter um aruivo .dinstrc atualizado (na
pratica, dar o comando dinst --configure sempre que a lista de
arquivos .deb disponiveis muda).
EXEMPLOS:
dinst --configure /cdrom /usr/local/debpack
Configura dinst para operar usando os pacotes em todos os
subdiretorios de /cdrom e /usr/local/debpack.
dinst xfntbase xbase fvwm
Instalara os tres pacotes depois de suas dependencias.
dinst -G xfntbase xbase fvwm
O mesmo, mas passando a opcao -G para o instalador dpkg.
AUTOR:
Joao Luis Meloni Assirati, <assirati@fma.if.usp.br>.
--- End Message ---
Reply to: