Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won

  • Feedback

  • BF$

    1,183 [ Donate ]

buzzkillb last won the day on June 30

buzzkillb had the most liked content!

Community Reputation

304 Excellent


About buzzkillb

  • Rank
    Senior Denarian

Personal Information

  • D Address

Recent Profile Visitors

7629 profile views
  1. Any marketing images / files please post here.
  2. Still learning python 3, this will sign a bitcoin tx based on a sample I found. Want to convert this next to sign a Denarius tx, and work out some of the forced variables I put in here. The idea is to not pull any bitcoin modules in. import struct import base58 import hashlib import ecdsa import codecs import binascii from hashlib import sha256 #References #https://klmoney.wordpress.com/bitcoin-dissecting-transactions-part-2-building-a-transaction-by-hand/ #http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html #https://github.com/shirriff/bitcoin-code #https://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx ################################################################################### #Needs work on checking script lengths to check bytes and throw them in, instead of manually putting in def double_hash(num): first_hash = hashlib.sha256(binascii.unhexlify(num)).hexdigest() #print(first_hash, "first hash") second_hash = hashlib.sha256(binascii.unhexlify(first_hash)).hexdigest() return second_hash #set this up, construction message to be signed #Add four-byte version field version = "01000000" #One-byte variant specifying the number of inputs number_of_inputs = "01" #32-byte hash of the transaction from which we want to redeem an output previous_tx_hash = "416e9b4555180aaa0c417067a46607bc58c96f0131b2f41f7d0fb665eab03a7e" #vout 1 would be -> 01000000 #The index of the previous Output must be a 4 byte entry in little endian format. v_out = "00000000" #one-byte variant which denotes the length of the scriptSig (0x19 = 25 bytes) script_length = "19" #temporary scriptSig which, again, is the scriptPubKey of the output we want to redeem scriptpubkey = "76a91499b1ebcfc11a13df5161aba8160460fe1601d54188ac" #four-byte field denoting the sequence sequence = "ffffffff" #one-byte varint containing the number of outputs in our new transaction number_of_outputs = "01" #8-byte field (64 bit integer) containing the amount we want to redeem from the specified output #100000 denariis, or example 0.00100000 amount_to_send = 20000 amount_to_send_bytes = (hex(amount_to_send)[2:].zfill(16)) print(amount_to_send_bytes) amount_to_send_bytes_flipped = codecs.encode(codecs.decode(amount_to_send_bytes, 'hex')[::-1], 'hex').decode() print(amount_to_send_bytes_flipped) #The Script Length field is Ox19 (25 bytes) which is the length in bytes of the scriptPubKey above script_length = "19" print(script_length) #output script script_pub_key = "76a914e81d742e2c3c7acd4c29de090fc2c4d4120b2bf888ac" #four-byte "lock time" field lock_time = "00000000" #For normal transactions, the SigHash code will be 1 for SIGHASH_ALL. #This signature hash type means that the signature includes all the Inputs and Outputs minus the scriptSig. #The SigHash code is padded to four bytes and entered in little endian format sighash_code = "01000000" complete_tx_message = ( version + number_of_inputs + previous_tx_hash + v_out + script_length + scriptpubkey + sequence + number_of_outputs + amount_to_send_bytes_flipped + script_length + script_pub_key + lock_time + sighash_code ) print("Complete rawtx to Sign") print(complete_tx_message) #double hash complete_tx_message - 2 methods both in hex double_hash_complete_tx_message = double_hash(complete_tx_message) print("double hashed") print(double_hash_complete_tx_message) #or header_complete_tx_message = bytes.fromhex(complete_tx_message) print("double hashed another method") print(sha256(sha256(header_complete_tx_message).digest()).digest().hex()) #derive signature #The private key associated with the previous Output’s address, in hex format privkey = '3cd0560f5b27591916c643a0b7aa69d03839380a738d2e912990dcc573715d2c' print("private key") print(privkey) privateKey_bytes = bytes.fromhex(privkey) print("private key in bytes") print(privateKey_bytes) hash_2 = bytes.fromhex(double_hash_complete_tx_message) print("double hashed in bytes") print(hash_2) sk = ecdsa.SigningKey.from_string(privateKey_bytes, curve=ecdsa.SECP256k1) print(sk) verifying_key = sk.get_verifying_key() print(verifying_key) public_key = bytes.fromhex("04") + verifying_key.to_string() print("public key") print(public_key) signature = sk.sign_digest(hash_2, sigencode = ecdsa.util.sigencode_der_canonize) print("Signature") print(signature) signer_convert = binascii.hexlify(signature) print("signer in hex bytes") print(signer_convert) signer = (signer_convert.decode("utf-8")) print("Signer in Hex") print(signer) #The PUSHDATA opcode 0x47 (or decimal 71) is the number of bytes that will be pushed onto the stack. This includes the one byte sigHash code. pushdata_op = "47" sighash_code = "01" pushdata_op_second = "21" #Recent transactions use compressed public keys as in this example. #Compressed public keys are 32 bytes with a one byte prefix of 02 or 03. #Uncompressed public keys are 64 bytes plus a prefix of 04. pubkey_compressed = "03bf350d2821375158a608b51e3e898e507fe47f2d2e8c774de4a9a7edecf74eda" ####GET THIS SOMEHOW sighash_script_length = "6a" scriptsig = ( pushdata_op + signer + sighash_code + pushdata_op_second + pubkey_compressed ) print("scriptSig") print(scriptsig) prepare_to_broadcast = ( version + number_of_inputs + previous_tx_hash + v_out + sighash_script_length + scriptsig + sequence + number_of_outputs + amount_to_send_bytes_flipped + script_length + script_pub_key + lock_time ) print("Broadcast") print(prepare_to_broadcast) print(version) print(number_of_inputs) print(previous_tx_hash) print(v_out) print(sighash_script_length) print(scriptsig) print(sequence) print(number_of_outputs) print(amount_to_send_bytes_flipped) print(script_length) print(script_pub_key) print(lock_time)
  3. How I did this for python3, trying to learn python. import os import ecdsa import hashlib import base58 import binascii import codecs import struct denariusAddress= "DDD6SzCwXSEcTPHmNwEQX6xbUs2Rf3svNX" print("D Addy:" + denariusAddress) #base58decode denarius address addrToBytes = base58.b58decode(denariusAddress) print(addrToBytes) decodedToHex = addrToBytes.hex() print(decodedToHex) #remove prefix removeZeroBytes = 2 decodedToHexnoPrefix = decodedToHex[removeZeroBytes:] print(decodedToHexnoPrefix) #remove checksum removeChecksum = 40 decodedNoPrefixnoChecksum = decodedToHexnoPrefix[:removeChecksum] print(decodedNoPrefixnoChecksum) #Add OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG opDup = "76" opHash160 = "A9" opsBuffer = "14" opEqualVerify = "88" opChecksig = "AC" preparedtoHash = opDup + opHash160 + opsBuffer + decodedNoPrefixnoChecksum + opEqualVerify + opChecksig print(preparedtoHash.upper()) hashedKey = codecs.decode(preparedtoHash.upper(), 'hex') s = hashlib.new('sha256', hashedKey).digest() r = hashlib.new('ripemd160', s).digest() convertBigEndian = (codecs.encode(s, 'hex').decode("utf-8")) print(convertBigEndian) scriptHash = codecs.encode(codecs.decode(convertBigEndian, 'hex')[::-1], 'hex').decode() print(scriptHash) then throw that last value into something like this import socket import json from time import sleep port = 50001 host = 'electrumx1.denarius.pro' content = { "method": "blockchain.scripthash.get_balance", "params": ["1fbfac24c0ed8084288904ba34eb891f1feaec146065cf7c08209167235ca3dc"], "id": 0 } def electrumx(host, port, content): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.sendall(json.dumps(content).encode('utf-8')+b'\n') sleep(0.5) sock.shutdown(socket.SHUT_WR) res = "" while True: data = sock.recv(1024) if (not data): break res += data.decode() print(res) sock.close() electrumx(host, port, content)
  4. Secure your twitter account using a Yubikey for 2FA. Example Yubikey 5 NFC to buy https://amzn.to/3fwGcju, I would get more than 1 for backups. 2 or 3 seems like a good number at least. Sometimes their main store has deals https://www.yubico.com/store/ Click More -> settings and privacy -> Account -> Security -> Two-factor authentication Click Authentication App verify your password, then open up Yubi Auth on your phone or PC or something to scan the QR. On the phone tap the + in the bottom right corner and tap SCAN QR-CODE. After the scan click save. Tap or insert your Yubikey. I tap the NFC to the phone. Now take your 2nd Yubikey and do the same thing again. This keeps a backup so if you lose 1 yubikey you have a backup. Now both keys can tap the Yubi Auth, or use Yubi Auth on your PC. Input the key and now Authentication is setup. Now lets add the security key so you can just plug the key in and push the button to use on Twitter. Stick the Yubkey into your USB slot on the PC and Click Security Key. Click start and then it will bring up a screen, click OK. I hope this next screen is obvious, Touch your security key. Once that's done you can now use your key to login. Strangely only 1 security will work on twitter. Now go do this on any other sites that use Authentication. This is what the Windows Yubi Auth looks like. No physical key, not getting codes. But really prefer just the key logins when possible like say gmail and github.
  5. Follow the guide to install conky here https://linuxconfig.org/ubuntu-20-04-system-monitoring-with-conky-widgets Once finished go to my github https://github.com/buzzkillb/conky-denarius and grab the .conkyrc and conky.sh files. Overwrite .conkyrc from the guide and change where you are going to store the conky.sh file. Also can grab a Denarius logo from somewhere and throw that into a folder too. In conky.sh change the rpc user/password to match up to your wallet. This is a simple example to add some basic Denarius stats.
  6. To mount the chaindata folder to another location, like external drive. Install snap in devmode, this will not auto update the Denarius snap though. snap install --devmode denarius reference: https://github.com/carsenk/denarius/issues/279#issuecomment-653414967
  7. An example of why running an FS is worthwhile. Someone staked some longterm FortunaStake collateral, and a lucky FS received 199 D in one shot. Lucky lucky and why you want these always running. https://chainz.cryptoid.info/d/block.dws?3462533
  8. A bit curious about how these guys do it. What's GPC?
  9. How to update keepkey firmware in Windows. If you don't have a keepkey, use Carsen's referral link and go buy one https://amzn.to/2CUvQvk Download the updater - https://beta.shapeshift.com/updater-download# Run and wait for No Device Connected screen. Plug in keepkey, click Update Now. Select your option. Mine is new so This Keeykey is New. Unplug the keeykep, plug it back in while holding down the button. Hold down the button. Looks like this on device. Hold the button down until that arrow on the keepkey itself turns into a checkmark. On reconnect the bootloader will update. Hold down button and reconnect. Now time to update firmware. Click Update Now. Hold down the button again and wait for the checkmark, do not unplug yet. Unplug the keeykep and plug back in. And now its all updated. Reconnect while holding the button down to check firmware. All done.
  10. In this example the idea is to run Iquidus Block Explorer with the daemon and traefik for reverse proxy all using a single docker-compose. Hopeful if anyone else tries this they come up with some better configs for the whole thing. I am going to use Ubuntu 20.04 as the example since its latest and greatest. We will be using Denarius docker daemon - https://github.com/buzzkillb/denariusDocker/tree/iquidus Iquidus D-Explorer - https://github.com/buzzkillb/D-explorer Iquidus Docker - https://github.com/buzzkillb/iquidusdocker Install Docker and Docker Compose #Install Docker sudo apt install docker.io sudo systemctl enable --now docker sudo usermod -aG docker SOMEUSERNAME docker --version #Install docker-compose sudo apt install docker-compose docker-compose version I would reboot at this step and make sure docker is still working. 20.04 has been a bit glitchy for me. If docker stops running, this fixed it. rm /etc/docker/daemon.json service docker restart systemctl status docker.service If you are using cloudflare, my traefik isn't setup correctly to use Cloudflare proxy and get the letsencrypt TLS certs once proxied. Will update once I get that config working. Make your .conf file in ~/.denarius/denarius.conf (switch this for your coin, the guide is tailored to Denarius, but should be an easy swap). denarius.conf (note daemon=0 for the docker daemon I built) - based on the docker hub image https://hub.docker.com/r/buzzkillb/denariusd iquidus branch/tag. rpcuser=rpcuser rpcpassword=aLongPasswordLikeThis rpcport=32369 port=33369 daemon=0 listen=1 server=1 txindex=1 rpcallowip=* At the your home folder clone the explorer. cd ~ git clone https://github.com/buzzkillb/iquidusdocker explorer cd explorer 2 things to change, go to your explorer folder inside explorer and switch logo.png to your coin logo, and edit settings.json to your coin. That's it. sample settings.json /* This file must be valid JSON. But comments are allowed Please edit settings.json, not settings.json.template */ { // name your instance! "title": "D-Explorer", "address": "https://explorer.example.com", // coin name "coin": "Denarius", // coin symbol "symbol": "D", // logo "logo": "/images/logo.png", // favicon "favicon": "public/favicon.ico", // Uses bootswatch themes (http://bootswatch.com/) // Valid options: // Cerulean, Cosmo, Cyborg, Darkly, Flatly, Journal, Lumen, Paper, // Readable, Sandstone, Simplex, Slate, Spacelab, Superhero, United, Yeti // theme (see /public/themes for available themes) "theme": "Cyborg", // port to listen for requests on. "port" : 3001, // database settings (MongoDB) "dbsettings": { "user": "", "password": "", "database": "explorerdb", "address": "mongodb", "port": 27017 }, //update script settings "update_timeout": 10, "check_timeout": 250, "block_parallel_tasks": 1, // wallet settings "use_rpc": true, "wallet": { "host": "denarius", "port": 32369, "username": "rpcuser", "password": "aLongPasswordLikeThis" }, // confirmations "confirmations": 10, // language settings "locale": "locale/en.json", // menu settings "display": { "api": true, "markets": true, "richlist": true, "twitter": true, "facebook": false, "googleplus": false, "youtube": false, "search": true, "movement": true, "network": true }, // index page (valid options for difficulty are POW, POS or Hybrid) "index": { "show_hashrate": true, // Show Market Cap in header "show_market_cap": false, // Show Market Cap in place of price box "show_market_cap_over_price": false, "difficulty": "Hybrid", "last_txs": 100, "txs_per_page": 10 }, // ensure links on API page are valid "api": { "blockindex": 1337, "blockhash": "000000000661c86bf89e652eb142093bd9123006f3085595dee183bfe1c24570", "txhash": "776684cfd496890268805a1d86d3fd00f4097c1dbffecc3acd79101c15216594", "address": "DABQj7yoQuvfxVVWMf2mqWhoHLDMUqUJsc" }, // market settings //supported markets: bittrex, poloniex, yobit, empoex, bleutrade, cryptopia, ccex //default market is loaded by default and determines last price in header "markets": { "coin": "D", "exchange": "BTC", "enabled": ["tradeogre"], "tradeogre_id": "BTC-D", "default": "tradeogre" }, // richlist/top100 settings "richlist": { "distribution": true, "received": true, "balance": true }, // movement page settings // min amount: show transactions greater than this value // low flag: greater than this value flagged yellow // high flag: greater than this value flagged red "movement": { "min_amount": 100, "low_flag": 1000, "high_flag": 5000 }, // twitter, facebook, googleplus, youtube "twitter": "denariuscoin", "facebook": "yourfacebookpage", "googleplus": "yourgooglepluspage", "youtube": "youryoutubechannel", //genesis "genesis_tx": "c6d8e8f56c25cac33567e571a3497bfc97f715140fcfe16d971333b38e4ee0f2", "genesis_block": "00000d5dbbda01621cfc16bbc1f9bf3264d641a5dbf0de89fd0182c2c4828fcd", //heavy (enable/disable additional heavy features) "heavy": false, //disable saving blocks & TXs via API during indexing. "lock_during_index": false, //amount of txs to index per address (stores latest n txs) "txcount": 100, "txcount_per_page": 50, //show total sent & received on address page (set false if PoS) "show_sent_received": true, // how to calculate current coin supply // COINBASE : total sent from coinbase (PoW) // GETINFO : retreive from getinfo api call (PoS) // HEAVY: retreive from heavys getsupply api call // BALANCES : total of all address balances // TXOUTSET : retreive from gettxoutsetinfo api call "supply": "GETINFO", // how to acquire network hashrate // getnetworkhashps: uses getnetworkhashps api call, returns in GH/s // netmhashps: uses getmininginfo.netmhashpsm returns in MH/s "nethash": "netmhashps", // nethash unitd: sets nethash API return units // valid options: "P" (PH/s), "T" (TH/s), "G" (GH/s), "M" (MH/s), "K" (KH/s) "nethash_units": "G", // Address labels // example : "JhbrvAmM7kNpwA6wD5KoAsbtikLWWMNPcM": {"label": "This is a burn address", "type":"danger", "url":"http://example.com"} // label (required) = test to display // type (optional) = class of label, valid types: default, primary, warning, danger, success // url (optional) = url to link to for more information "labels": { // "DDD6SzCwXSEcTPHmNwEQX6xbUs2Rf3svNX": {"label": "Cryptopia address", "type":"primary", "url":"http://disney.com"}, // "JSWVXHWeYNknPdG9uDrcBoZHztKMFCsndw": {"label": "Cryptsy"} } } Go back to the main explorer directory and edit docker-compose.yml version: "3" services: traefik: image: "traefik:v2.2" command: #- "--log.level=DEBUG" - "--api.insecure=true" #change to false in production - "--api.dashboard=true" #change to false in production - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.myresolver.acme.tlschallenge=true" #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory" - "[email protected]com" - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" - "8080:8080" volumes: - "./letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock:ro" restart: always denarius: image: buzzkillb/denariusd:iquidus volumes: - ~/.denarius:/data ports: - 33369:33369 - 32369:32369 restart: unless-stopped explorer: build: ./explorer stdin_open: true tty: true ports: - 3001:3001 links: - mongodb - denarius depends_on: - mongodb - denarius command: /bin/bash -c "service cron start && cd /opt/iquidus && npm start" labels: - "traefik.enable=true" - "traefik.http.routers.explorer.rule=Host(`explorer.example.com`)" - "traefik.http.routers.explorer.entrypoints=websecure" - "traefik.http.routers.explorer.tls.certresolver=myresolver" - "traefik.http.services.explorer.loadbalancer.server.port=3001" - "traefik.http.middlewares.explorer_redirect.redirectscheme.scheme=https" - "traefik.http.routers.explorer_insecure.rule=Host(`explorer.example.com`)" - "traefik.http.routers.explorer_insecure.entrypoints=web" - "traef[email protected]docker" mongodb: image: mongo:latest container_name: "mongodb" environment: - MONGO_DATA_DIR=/data/db - MONGO_LOG_DIR=/dev/null volumes: - ./data/db:/data/db ports: - 27017:27017 command: mongod --bind_ip --logpath=/dev/null --quiet --wiredTigerCacheSizeGB 2 restart: unless-stopped Now run docker-compose cd ~/explorer docker-compose up -d And that's about it. Check or your domain. Traefik reverse proxy will automatically pull in letsencrypt TLS certs for you, will also redirect http to https, and generally keep everything up. Traefik once setup is much more clean than using an Nginx reverse proxy. Plus the letsencrypt TLS certs are taken care of automagically so no more certbot cronjobs. This example also shows how to send traffic to port 3001. This block explorer runs heavy, so I doubt this will work on a typical single CPU, 2gb VPS. Anytime you make a change to settings.json, rebuild like this cd ~/explorer docker-compose down rerun docker-compose build docker-compose up -d Build this locally first in a VM, and check it works. Also is the traefik dashboard. I would turn this off in the main docker-compose.yml on the VPS/server itself once ready to setup. While waiting for the full sync, the whole thing starts to go wild using up memory. Quick bash script to restart every 30min to cut down on potential crashing. saveram.sh #!/bin/bash while true; do docker-compose down && docker-compose up -d sleep 1800 done Example site I am syncing before I move to a VPS and different domain. https://explorer.denarius.guide/
  11. How to boot from Raspberry Pi4 USB 3.0 SSD. This is a lot easier than it looks, just read through one time to see. I am bypassing installing the OS on an SDCARD to purely update the eeprom, seems like a huge waste of time when it can just be flashed in seconds from a basically blank SDCARD. For this you need, pi4, sdcard, ssd drive, connector for usb 3.0. What I used: Raspberry Pi4 4gb (handy with the hdmi adapter, proper plug, and case/fan) Samsung (MB-ME32GA/AM) 32GB 95MB/s (U1) microSDHC EVO Select Memory Card with Full-Size Adapter (something cheap if you don't have 1, only to flash firmware) Kingston 240GB A400 SATA 3 2.5" Internal SSD SA400S37/240G - HDD Replacement for Increase Performance StarTech.com SATA to USB Cable - USB 3.0 to 2.5? SATA III Hard Drive Adapter - External Converter for SSD/HDD Data Transfer (USB3S2SAT3CB), Black First I am using Windows 10 for this, the steps are basically same for whatever OS. Format your SDCARD to fat32, get bootloader and unzip the files to that drive. bootloader here -> https://github.com/raspberrypi/rpi-eeprom/blob/master/releases.md Under USB MSD Boot find latest, for this guide its this one https://github.com/raspberrypi/rpi-eeprom/files/4781199/rpi-boot-eeprom-recovery-2020-06-15-vl805-000137ad-BETA.zip Unzip that to the root directory of the fresh formatted SDCARD. Insert SDCARD into pi4, and wait a bit for the green light to flash, about 10-15 seconds, powered back on hooked to monitor and it just worked. That's the first part which now makes the PI4 able to boot from the blue USB 3.0 ports. Now hook up your SSD Drive and SATA adapter to your PC. Get Raspberry Pi Imager - https://www.raspberrypi.org/downloads/ Windows - https://downloads.raspberrypi.org/imager/imager.exe macOS - https://downloads.raspberrypi.org/imager/imager.dmg Ubuntu - https://downloads.raspberrypi.org/imager/imager_amd64.deb Run this and select 32-bit and write. To run Headless: Remove the drive and insert back in. Click into the drive and stick a blank ssh file in. For wifi you want to put a wpa_supplicant.conf file in there. wpa_supplicant.conf country=US ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="NETWORK-NAME" psk="NETWORK-PASSWORD" } Looks like this when done. With or without headless: The next step is to get the latest .elf and .dat files into the root directory of the SSD drive. So make sure after flashing the SSD to unplug and plug back in for Windows to see the new filesystem. https://github.com/raspberrypi/firmware Click clone, then download zip. Double click that downloaded zip and go to the boot directory. Copy the .elf and .dat files to your SSD root directory. At the time of this guide that's 16 files you end up replacing. Now put your SSD/SATA into the pi4 USB 3.0 (blue port) and boot up. The first part will show resizing the drive, the pi4 will then reboot again and go into the OS. The ssh file will allow us to SSH into the headless unit, wpa_supplicant.conf should allow wifi if you aren't using an ethernet cable. Tips: I used a split side by side 4k monitor for this, don't do that as if the pi4 detects weird resolutions, it won't work right. 64-bit Raspberry Pi OS VNC server does not work at the moment, use 32-bit for now. After installed run benchmarks. Nench - Overall Benchmarks https://github.com/n-st/nench (wget -qO- wget.racing/nench.sh | bash; wget -qO- wget.racing/nench.sh | bash) 2>&1 | tee nench.log Raspberry Pi Diagnostics - SD Card Speed Test Click Pi (top left corner) -> Accessories -> Raspberry Pi Diagnostics -> Run Tests After the test runs -> Show Log Test : SD Card Speed Test Run 1 prepare-file;0;0;304818;595 seq-write;0;0;319687;624 rand-4k-write;0;0;71859;17964 rand-4k-read;54979;13744;0;0 Sequential write speed 319687 KB/sec (target 10000) - PASS Random write speed 17964 IOPS (target 500) - PASS Random read speed 13744 IOPS (target 1500) - PASS Test PASS
  12. Stranger Things 3: The Game free until July 2, 2020. https://www.epicgames.com/store/en-US/product/stranger-things-3-the-game/home
  13. AER Memories of Old free until July 2, 2020. https://www.epicgames.com/store/en-US/product/aer-memories-of-old/home
  14. To make the user passwordless like typical, not sure when this changed. Use this https://www.reddit.com/r/Qubes/comments/e39r8l/ubuntu_1804_lts_template_password/ dom0 terminal (change xenial desktop and newpassword) qvm-run -a --user root xenial-desktop "echo \"user:newpassword\"|chpasswd" dom0 terminal qvm-run -a --user root xenial-desktop "sudo usermod -a -G sudo user" shutdown your xenial-desktop and now try sudo apt update
  • Create New...