|
|
|
%define __spec_install_post %{nil}
|
|
%define debug_package %{nil}
|
|
%define __os_install_post %{nil}
|
|
|
|
Name: basecoin
|
|
Summary: basecoin is a Proof-of-Stake cryptocurrency and framework
|
|
License: Apache 2.0
|
|
URL: https://tendermint.com/
|
|
Packager: Greg Szabo
|
|
Requires: tendermint >= 0.10.0
|
|
Provides: basecli
|
|
Requires(pre): /sbin/useradd
|
|
Requires(post): %{__python}
|
|
|
|
%description
|
|
Basecoin is an ABCI application designed to be used with the Tendermint consensus engine to form a Proof-of-Stake cryptocurrency. It also provides a general purpose framework for extending the feature-set of the cryptocurrency by implementing plugins.
|
|
|
|
%pre
|
|
if ! %{__grep} -q '^%{name}:' /etc/passwd ; then
|
|
useradd -k /dev/null -r -m -b %{_sysconfdir} %{name}
|
|
fi
|
|
|
|
%prep
|
|
test -d "$GOPATH" || echo "GOPATH not set"
|
|
test -d "$GOPATH"
|
|
%{__mkdir_p} %{name}-%{version}
|
|
cd %{name}-%{version}
|
|
%{__mkdir_p} .%{_bindir} .%{_defaultlicensedir}/%{name} .%{_sysconfdir}/%{name}/tendermint .%{_datadir}/%{name} .%{_sysconfdir}/systemd/system .%{_sysconfdir}/systemd/system-preset
|
|
%{__cp} $GOPATH/bin/%{name} $GOPATH/bin/basecli .%{_bindir}
|
|
%{__cp} $GOPATH/src/github.com/tendermint/%{name}/LICENSE .%{_defaultlicensedir}/%{name}
|
|
#iso8601date=`date -u +"%Y-%m-%dT%H:%M:%SZ"`
|
|
%{__cat} << EOF > .%{_sysconfdir}/%{name}/genesis.json
|
|
{
|
|
"genesis_time": "2017-06-10T03:37:03Z",
|
|
"chain_id": "my_chain_id",
|
|
"validators": [],
|
|
"app_hash": "",
|
|
"app_options": {
|
|
"accounts": [{
|
|
"name": "dev_money",
|
|
"address": "1B1BE55F969F54064628A63B9559E7C21C925165",
|
|
"pub_key": {
|
|
"type": "ed25519",
|
|
"data": "619D3678599971ED29C7529DDD4DA537B97129893598A17C82E3AC9A8BA95279"
|
|
},
|
|
"coins": [
|
|
{
|
|
"denom": "mycoin",
|
|
"amount": 9007199254740992
|
|
}
|
|
]
|
|
}]
|
|
}
|
|
}
|
|
EOF
|
|
%{__cat} << EOF > .%{_sysconfdir}/%{name}/tendermint/config.toml
|
|
# This is a TOML config file.
|
|
# For more information, see https://github.com/toml-lang/toml
|
|
|
|
proxy_app = "tcp://127.0.0.1:36658"
|
|
moniker = ""
|
|
fast_sync = true
|
|
db_backend = "leveldb"
|
|
log_level = "debug"
|
|
|
|
[rpc]
|
|
laddr = "tcp://0.0.0.0:36657"
|
|
|
|
[p2p]
|
|
laddr = "tcp://0.0.0.0:36656"
|
|
seeds = ""
|
|
EOF
|
|
%{__cat} << EOF > .%{_sysconfdir}/systemd/system/%{name}.service
|
|
[Unit]
|
|
Description=Basecoin
|
|
#propagates activation, deactivation and activation fails.
|
|
Requires=network-online.target
|
|
#propagates activation, deactivation, activation fails and stops
|
|
BindTo=%{name}-server.service
|
|
#propagates stop and restart (one-way)
|
|
PartOf=%{name}-server.service
|
|
#order
|
|
Before=%{name}-server.service
|
|
After=network-online.target
|
|
#propagates reload
|
|
PropagatesReloadTo=%{name}-server.service
|
|
ReloadPropagatedFrom=%{name}-server.service
|
|
|
|
[Service]
|
|
Environment="BCHOME=%{_sysconfdir}/%{name}"
|
|
Restart=on-failure
|
|
User=%{name}
|
|
Group=%{name}
|
|
PermissionsStartOnly=true
|
|
ExecStart=%{_bindir}/%{name} start --without-tendermint
|
|
ExecReload=/bin/kill -HUP \$MAINPID
|
|
KillSignal=SIGTERM
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
Also=%{name}-server.service
|
|
EOF
|
|
%{__cat} << EOF > .%{_sysconfdir}/systemd/system/%{name}-server.service
|
|
[Unit]
|
|
Description=Basecoin server
|
|
Requires=network-online.target
|
|
BindTo=%{name}.service
|
|
PartOf=%{name}.service
|
|
After=network-online.target %{name}.service
|
|
PropagatesReloadTo=%{name}.service
|
|
ReloadPropagatedFrom=%{name}.service
|
|
|
|
[Service]
|
|
Environment="TMHOME=%{_sysconfdir}/%{name}/tendermint"
|
|
Restart=on-failure
|
|
User=%{name}
|
|
Group=%{name}
|
|
PermissionsStartOnly=true
|
|
ExecStart=%{_bindir}/tendermint node
|
|
ExecReload=/bin/kill -HUP \$MAINPID
|
|
KillSignal=SIGTERM
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target %{name}.service
|
|
Also=%{name}.service
|
|
EOF
|
|
%{__cat} << EOF > .%{_sysconfdir}/systemd/system-preset/50-%{name}.preset
|
|
disable %{name}.service
|
|
disable %{name}-server.service
|
|
EOF
|
|
%{__cat} << EOF > .%{_datadir}/%{name}/key.json
|
|
{
|
|
"address": "1B1BE55F969F54064628A63B9559E7C21C925165",
|
|
"priv_key": {
|
|
"type": "ed25519",
|
|
"data": "C70D6934B4F55F1B7BC33B56B9CA8A2061384AFC19E91E44B40C4BBA182953D1619D3678599971ED29C7529DDD4DA537B97129893598A17C82E3AC9A8BA95279"
|
|
},
|
|
"pub_key": {
|
|
"type": "ed25519",
|
|
"data": "619D3678599971ED29C7529DDD4DA537B97129893598A17C82E3AC9A8BA95279"
|
|
}
|
|
}
|
|
EOF
|
|
%{__cat} << EOF > .%{_datadir}/%{name}/key2.json
|
|
{
|
|
"address": "1DA7C74F9C219229FD54CC9F7386D5A3839F0090",
|
|
"priv_key": {
|
|
"type": "ed25519",
|
|
"data": "34BAE9E65CE8245FAD035A0E3EED9401BDE8785FFB3199ACCF8F5B5DDF7486A8352195DA90CB0B90C24295B90AEBA25A5A71BC61BAB2FE2387241D439698B7B8"
|
|
},
|
|
"pub_key": {
|
|
"type": "ed25519",
|
|
"data": "352195DA90CB0B90C24295B90AEBA25A5A71BC61BAB2FE2387241D439698B7B8"
|
|
}
|
|
}
|
|
EOF
|
|
%{__cat} << EOF > .%{_datadir}/%{name}/tendermint-genesis-validator.json
|
|
{
|
|
"genesis_time":"2017-06-10T03:37:03Z",
|
|
"chain_id":"my_testchain_id",
|
|
"validators":
|
|
[
|
|
{
|
|
"pub_key":{"type":"ed25519","data":"F651E966D30CEA413839D63D9EC37455DF1FB2DDC409A76555B0CD0B186723E4"},
|
|
"amount":10,
|
|
"name":"my_testchain_node"
|
|
}
|
|
],
|
|
"app_hash":"",
|
|
"app_options": {}
|
|
}
|
|
EOF
|
|
%{__cat} << EOF > .%{_datadir}/%{name}/basecoin-genesis-devmoney.json
|
|
{
|
|
"genesis_time":"2017-06-10T03:37:03Z",
|
|
"chain_id":"my_testchain_id",
|
|
"validators": [],
|
|
"app_hash":"",
|
|
"app_options": {
|
|
"accounts": [{
|
|
"pub_key": {
|
|
"type": "ed25519",
|
|
"data": "619D3678599971ED29C7529DDD4DA537B97129893598A17C82E3AC9A8BA95279"
|
|
},
|
|
"coins": [
|
|
{
|
|
"denom": "mycoin",
|
|
"amount": 9007199254740992
|
|
}
|
|
]
|
|
}]
|
|
}
|
|
}
|
|
EOF
|
|
%{__cat} << EOF > .%{_datadir}/%{name}/priv_validator-example.json
|
|
{"address":"AF5886732763B3A38861FC8D2AA2698A156D28BD","pub_key":{"type":"ed25519","data":"F651E966D30CEA413839D63D9EC37455DF1FB2DDC409A76555B0CD0B186723E4"},"last_height":159,"last_round":0,"last_step":3,"last_signature":{"type":"ed25519","data":"654E93AA49B91F48AFEBE172E2C296900339F8849577467AEA9885200D5D9CD4DC225BB099C436A60C832DD2A3C60B6834D9748C0F8E977420BF3696604E2F04"},"last_signbytes":"7B22636861696E5F6964223A22677265677465737431222C22766F7465223A7B22626C6F636B5F6964223A7B2268617368223A2246333144343534433043343939334237333641323332393738443738333645453846384642433031222C227061727473223A7B2268617368223A2246304430443241333933443241444530323739303244304438333643384532443938333231304234222C22746F74616C223A317D7D2C22686569676874223A3135392C22726F756E64223A302C2274797065223A327D7D","priv_key":{"type":"ed25519","data":"44BD99EE9FFAEA5CECA7E52EF7476A5C949BC8635BCB906468C7CC3456659809F651E966D30CEA413839D63D9EC37455DF1FB2DDC409A76555B0CD0B186723E4"}}
|
|
EOF
|
|
%{__chmod} -Rf a+rX,u+w,g-w,o-w .
|
|
|
|
%build
|
|
# Nothing to do here.
|
|
|
|
%install
|
|
cd %{name}-%{version}
|
|
%{__cp} -a * %{buildroot}
|
|
|
|
%post
|
|
test ! -f %{_sysconfdir}/%{name}/priv_validator.json && tendermint gen_validator > %{_sysconfdir}/%{name}/priv_validator.json && %{__chmod} 0400 %{_sysconfdir}/%{name}/priv_validator.json && %{__chown} %{name}.%{name} %{_sysconfdir}/%{name}/priv_validator.json
|
|
test ! -f %{_sysconfdir}/%{name}/tendermint/priv_validator.json && tendermint gen_validator > %{_sysconfdir}/%{name}/tendermint/priv_validator.json && %{__chmod} 0400 %{_sysconfdir}/%{name}/tendermint/priv_validator.json && %{__chown} %{name}.%{name} %{_sysconfdir}/%{name}/tendermint/priv_validator.json
|
|
tendermint_pubkey=`%{__python} -uc "import json ; print json.loads(open('%{_sysconfdir}/%{name}/tendermint/priv_validator.json').read())['pub_key']['data']"`
|
|
test ! -f %{_sysconfdir}/%{name}/tendermint/genesis.json && %{__cat} << EOF > %{_sysconfdir}/%{name}/tendermint/genesis.json
|
|
{
|
|
"genesis_time": "2017-06-10T03:37:03Z",
|
|
"chain_id": "my_chain_id",
|
|
"validators":
|
|
[
|
|
{
|
|
"pub_key":{"type":"ed25519","data":"$tendermint_pubkey"},
|
|
"amount":10,
|
|
"name":"my_testchain_node"
|
|
}
|
|
],
|
|
"app_hash": "",
|
|
"app_options": {}
|
|
}
|
|
EOF
|
|
%{__chown} %{name}.%{name} %{_sysconfdir}/%{name}/tendermint/genesis.json
|
|
systemctl daemon-reload
|
|
systemctl enable %{name}
|
|
|
|
%preun
|
|
systemctl stop %{name} 2> /dev/null || :
|
|
systemctl stop %{name}-service 2> /dev/null || :
|
|
|
|
%postun
|
|
systemctl daemon-reload
|
|
|
|
%files
|
|
%attr(0755, %{name}, %{name}) %dir %{_sysconfdir}/%{name}
|
|
#%ghost %attr(0400, %{name}, %{name}) %{_sysconfdir}/%{name}/priv_validator.json
|
|
%config(noreplace) %attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/genesis.json
|
|
%attr(0755, %{name}, %{name}) %dir %{_sysconfdir}/%{name}/tendermint
|
|
#%ghost %attr(0400, %{name}, %{name}) %{_sysconfdir}/%{name}/tendermint/priv_validator.json
|
|
%config(noreplace) %attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/tendermint/config.toml
|
|
#%ghost %attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/tendermint/genesis.json
|
|
%{_bindir}/*
|
|
%{_sysconfdir}/systemd/system/*
|
|
%{_sysconfdir}/systemd/system-preset/*
|
|
%dir %{_datadir}/%{name}
|
|
%{_datadir}/%{name}/*
|
|
%dir %{_defaultlicensedir}/%{name}
|
|
%doc %{_defaultlicensedir}/%{name}/LICENSE
|
|
|