Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/debianlima/hack_miner_deroluna

O Hack Miner é uma modificação do Astrominer do MinerOS que permite monitorar o DeroLuna utilizando a API do MinerOS. Este script permite a coleta de estatísticas em tempo real sobre o desempenho dos minerador, facilitando a análise e otimização das operações de mineração.
https://github.com/debianlima/hack_miner_deroluna

criptomoedas linux mineracao

Last synced: 24 days ago
JSON representation

O Hack Miner é uma modificação do Astrominer do MinerOS que permite monitorar o DeroLuna utilizando a API do MinerOS. Este script permite a coleta de estatísticas em tempo real sobre o desempenho dos minerador, facilitando a análise e otimização das operações de mineração.

Awesome Lists containing this project

README

        

Hack Miner - Modificação do MinerOS para Monitoramento do Deroluna

Visão Geral



O Hack Miner é uma modificação do Astrominer do MinerOS que permite monitorar o DeroLuna utilizando a API do MinerOS. Este script permite a coleta de estatísticas em tempo real sobre o desempenho dos minerador, facilitando a análise e otimização das operações de mineração.


Nesta caso, vamos habilitar o modo hack do MinerOS, ativando o parâmetro em SKIP_SYNC=true no arquivo nano /config/hack.txt.


Assim, é necessário reiniciar o MinerOS para ativar o modo. Após reiniciar, execute a screen client; nela deverá conter a advertência:



Sync WARNING Synchronization disabled by hack.txt SKIP_SYNC=1

que indica que o modo hack está ativo.


Agora, antes de instalar o Deroluna, precisamos desativar a função que substitui arquivos alterados no MinerOS. Apesar de o modo hack garantir que isso não aconteça, acaba ocorrendo.


Vamos comentar a função de substituição compare() nos dois arquivos abaixo:



  • /home/client/restore/sync.php

  • /home/client/modules/syncService.php



Para que fique no formato abaixo, comentando a comparação e substituição de diretórios de arquivos, para não apagar nosso Deroluna personalizado.



private function compare($serverFiles, $systemFiles, $folderType, $folderDestinationPath)
{
$hasChanges = false;

if (!is_array($serverFiles) || !is_array($systemFiles)) {
return false;
}

/*
foreach ($serverFiles as $filePath => $fileParams) {
Log::info("File: ".Log::wrap($filePath, "bold"));

if (isset($systemFiles[$filePath])) {
if ($fileParams['crc32'] != $systemFiles[$filePath]['crc32']) {
$hasChanges = true;
Log::error(Log::wrap(" Error ", "red.reverse")." ".Log::wrap("CRC does not match", "red"));
$this->statistics['changed_files_count'] += 1;
$result = $this->download($filePath, $fileParams, $folderType, $folderDestinationPath);
if($result) {
$this->statistics['downloaded_files_count'] += 1;
} else {
$this->statistics['downloading_errors_count'] += 1;
}
} else if ($fileParams['perm'] != $systemFiles[$filePath]['perm']) {
$hasChanges = true;
Log::error("Wrong permissions, doing chmod (".$folderDestinationPath.$filePath.")");
chmod($folderDestinationPath.$filePath, $fileParams['perm'] & 0xFFF);
} else {
Log::info(Log::wrap(" OK ", "green.reverse")." ".Log::wrap("Already the latest version", "dim"));
}

unset($systemFiles[$filePath]);
} else {
$hasChanges = true;
Log::error("Not found");
if ($fileParams['perm'] & 0x4000) {
Log::info("Creating dir ".$filePath);
mkdir($folderDestinationPath.$filePath, ($fileParams['perm'] & 0xFFF), 1);
} else {
$this->statistics['new_files_count'] += 1;
$this->download($filePath, $fileParams, $folderType, $folderDestinationPath);
}
}
}

// Removing files
foreach($systemFiles as $filePath => $fileParams) {
if ($fileParams['perm'] & 0x4000) {
continue;
}

Log::info("Removing old file: ".$filePath);
if (unlink($folderDestinationPath . '/' . $filePath)) {
$this->statistics['removed_files'] += 1;
}
unset($systemFiles[$filePath]);
}

// Removing dirs
$dirs = array_reverse($systemFiles);
foreach($dirs as $filePath => $fileParams) {
if ($fileParams['perm'] & 0x4000) {
Log::info("Removing old folder: ".$filePath);
if (rmdir($folderDestinationPath . '/' . $filePath)) {
$this->statistics['removed_dirs'] += 1;
};
}
unset($systemFiles[$filePath]);
}
*/

return $hasChanges;
}

Baixando e Instalando o Deroluna



Agora vamos baixar o Deroluna e descompactá-lo do diretório oficial.

# Baixar o arquivo

curl -L -o deroluna-miner-linux-amd64.tar.gz https://github.com/DeroLuna/dero-miner/releases/download/v1.13-beta/deroluna-miner-linux-amd64.tar.gz

# Descompactar o arquivo
tar -xzvf deroluna-miner-linux-amd64.tar.gz


Agora vamos substituir o arquivo do Astrominer pelo script abaixo. Este script captura as variáveis enviadas pela API do MinerOS, não precisando que você as configure, e personaliza para executar o Deroluna. Quando você configurar a versão e o minerador na API Web do MinerOS, esta versão que estamos substituindo utilizará a carteira e a pool especificadas lá.

#!/bin/bash

# Definir valores padrão
# POOL="community-pools.mysrv.cloud:10300"
# WALLET="dero1qy3wt54g5p2reegnjx4m9dy3y0dwwdxfhalegenws20r80r885chjqgucq3t2"

API_LISTEN="127.0.0.1:44001"

# Verificar e capturar parâmetros da linha de comando
if [[ $@ =~ -r[[:space:]]+([^[:space:]]+) ]]; then
POOL="${BASH_REMATCH[1]}"
fi

if [[ $@ =~ -w[[:space:]]+([^[:space:]]+) ]]; then
WALLET="${BASH_REMATCH[1]}"
fi

# Função para mostrar uso do script
usage() {
echo "Uso: $0 [-r POOL] [-w WALLET]"
echo " -r POOL Especifica o pool de mineração (padrão: $POOL)"
echo " -w WALLET Especifica o endereço da carteira (padrão: $WALLET)"
exit 1
}

# Montar a linha de comando final
cmd="./deroluna -w $WALLET -d $POOL --api-listen $API_LISTEN"

echo "Iniciando o deroluna com o seguinte comando:"
echo "$cmd"

# Executar o comando em um loop infinito
while :
do
$cmd
sleep 1
done


Após criar o script, copie o arquivo descompactado do Deroluna para /home/miners/astrominer/1.9.2.R5. No diretório, terá o primeiro arquivo com o script Astromine para compatibilizar as variáveis da interface web e a execução automática do sistema e o segundo arquivo que é o minerador Deroluna.


Depois, vamos modificar o script astrominer.php para conter nosso script de monitoramento, que é script astromine.php. No diretório /home/client/mstat, este script é que permite que o guarda da rig e o monitoramento da interface funcionem.

Funcionalidades




  • Coleta de Estatísticas em Tempo Real: O script coleta dados essenciais como hashrate, uptime, ações aceitas e rejeitadas.


  • Formatação de Saída: Os dados são apresentados em um formato de array PHP, tornando mais fácil a leitura e análise.


  • Exibição de Erros: Mensagens de erro são exibidas em cores diferentes no terminal para facilitar a identificação de problemas.

Estrutura do Script


O script realiza as seguintes etapas:



  1. Inicialização da Sessão cURL:

    O script inicia uma sessão cURL para se conectar ao endpoint da API do Deroluna e solicitar estatísticas.
    $url = 'http://localhost:44001/stats';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);



  2. Execução da Requisição:

    Os dados são recuperados através da execução da requisição cURL.
    $stats_raw = curl_exec($ch);



  3. Tratamento de Erros:

    Se ocorrer um erro, o script exibe uma mensagem de erro apropriada.
    if (curl_errno($ch) || empty($stats_raw)) {
      echo "\033[33mFailed to read miner from $url\033[0m\n";
    }



  4. Processamento de Dados:

    Os dados brutos são processados e convertidos em um array associativo, facilitando a análise.
    $stats_array = explode(" ", trim($stats_raw));



  5. Formato de Saída:

    Os dados são formatados em um array PHP, apresentando as informações relevantes.
    return [
      'uptime' => (int)$uptime,
      'speed' => [
        'total' => (float)$hs,
      ],
      'shares' => [
        'total' => (int)$acc,
        'reject' => (int)$rej,
        'invalid' => 0,
      ],
    ];


Exemplo de Uso


Ao executar o script, o resultado será um array PHP formatado assim:


Array
(
  [uptime] => 41
  [speed] => Array
(    [total] => 27124.40
)
  [shares] => Array
(    [total] => 827
    [reject] => 51
    [invalid] => 0
)
)

Contribuições


Sinta-se à vontade para contribuir com melhorias, correções ou novas funcionalidades. Para contribuir, faça um fork deste repositório, crie uma nova branch e envie um pull request.

Licença


Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.