Whatsapp iCloud backup stuck at 0% and just won’t move!

Last successful backup to iCloud was on 10th April 2019, since then the process keeps hanging.

My iCloud is as good as unused, it has 4.5GB/5GB available, so I doubt space is the issue.

Status is “Backing up…” and its hung at “Uploading: 0%”

What did I try:

  • Updated iOS to 12.3.1
  • Updated Whatsapp to 2.19.61
  • Deleted Whatsapp data from iCloud Drive and tried to backup again. Instead of getting stuck at 0% it then got stuck at 3%.
  • In iCloud Drive, turned Whatsapp “Off” and “On”
  • Hard reset on iPhone

Nothing works! Anyone tips or the same problem?

Automation of Asp.Net web API / Console App deployment and backup mechanism [on hold]

I am trying to automate the deployment process of Asp.Net based API and a console application. I have separate servers and separate TFS code branches for every environment (e.g. development, staging and production). Essentially, these are the steps that i want to automate.

  1. Identify the code check-ins in TFS.
  2. Automated build
  3. Taking the backup of existing files on Windows Server. (with specific naming convention for backup folder)
  4. Deployment of currently build app to windows server.

I want to know what kind of tools i can use. What technical approach needed to be adopted to appropriately and efficiently. I use visual studio 2017, Azure devOps for code repository, Windows server. Any technical and theoretical guidance on this is appreciated.

Fixing storing a backup and adding items Python [on hold]

I’m trying to fix some methods such as “restore a backup” in my public library system.. But I’ve been stuck for weeks. Can someone help me out? The code is below, but it’s a lot. Not that complicated to read, I hope.

"""TODO: Done - filling the system with books from a file of books in JSON format (file with books).  You may add a fake ISBN number to book items and generate the number of book items per book. Done - filling the system with customers from a file of people ( file). Done - adding a book item. Done - adding a customer. Done - searching a book. Done - making a book loan. Done - making a backup of the system in JSON format. Not Done - restoring the system from a backup.  """   import json import csv  """     Created class 'Book' for adding a new book,     Returning the new dict() back to the class 'bookItems'     where it will be added to the bookcollection """  class Book:     @staticmethod     def createBook(FileBookcollection):         #parameters is for the inputUser. So it shows the right text for the user         parameters = ["author","country","imageLink","language","link","pages","title","year"]         newBook = dict()         for item in parameters:             inputUser = input("Fill in the " + item + " of the book: ")             if inputUser == "":                 newBook[item] = None             else:                 #adding the parameters as key and inputUser as value to the dict newBook                 newBook[item] = inputUser         #Adding ISBN to the Dict with a counter that counts the Len(Dict) + 1         newBook["ISBN"] = str(len(FileBookcollection) + 1)         return newBook   class bookItems:     def __init__(this,JSONFileBookCollection):         this.JSONFileBookCollection = JSONFileBookCollection         #Adding ISBN to the Dict with a counter that counts the Len(Dict) + 1         #every row has a unique ISBN in total list         numberCounter = 0         for book in JSONFileBookCollection:             numberCounter += 1             book["ISBN"] = str(numberCounter)      def createBook(this):         newBook = Book.createBook(this.JSONFileBookCollection)         this.JSONFileBookCollection.append(newBook)      """Method that will be called from the class 'Catalog' to show all the books"""     def getAllBooks(this):         return this.JSONFileBookCollection """     def restoreBooksBackup(this):         with open(r".\bookCollectionBackup.json") as jsonFile:             bookList = json.load(jsonFile)             this.JSONFileBookCollection = bookList """   class Catalog:     def __init__(this, dumbJSON):         this.dumbJSON = dumbJSON      def getAllBooks(this):         return this.dumbJSON.getAllBooks()      def showAllBooks(this):         for book in this.dumbJSON.getAllBooks():             for itemsBooks in book:                 print(itemsBooks," : ", book[itemsBooks])             print("\n--------------------------------------------------------------\n")      def getBookByLang(this):         booksByLang = []         userInput = input("What language is the book in?" )         for book in this.dumbJSON.getAllBooks():             if book["language"] == userInput:                 booksByLang.append(book)          for results in booksByLang:             print(results)      def getBooksByAuthor(this):         booksByAuthor = []         userInput = input("What author is the book from?")         for book in this.dumbJSON.getAllBooks():             if book["author"] == userInput:                 booksByAuthor.append(book)          for results in booksByAuthor:             print(results)      def getBooksByTitle(this):         booksByTitle = []         userInput = input("What's the title from the book?")         for book in this.dumbJSON.getAllBooks():             if book["title"] == userInput:                 booksByTitle.append(book)          for results in booksByTitle:             print(results)      def getBooksByISBN(this):         booksByISBN = []         userInput = input("What's the ISBN number?")         for book in this.dumbJSON.getAllBooks():             if book["ISBN"] == userInput:                 booksByISBN.append(book)          for results in booksByISBN:             print(results)      def restoreBooksBackup(this):         this.dumbJSON.restoreBooksBackup() """ """ class Person:     def __init__(this, personsList):         this.personsList = personsList      def addPerson(this):         parameters = ["Number", "Gender", "NameSet", "GivenName", "Surname", "StreetAddress", "ZipCode", "City", "EmailAddress", "Username", "TelephoneNumber"]         newPerson = list()         newCustomer = dict()         for item in parameters:             inputUser = input("Fill in the " + item + " of the customer: ")             if inputUser == "":                 newPerson.append(None)             else:                 newPerson.append(inputUser)         this.personsList.append(newPerson)      def getAllPersons(this):         return this.personsList      def restorePersonsListBackup(this):         with open(r".\backupFakeNames.csv","r") as output:             new_csv = csv.reader(output)             totalPersonListBackup = []             for line in new_csv:                 totalPersonListBackup.append(line)         this.personsList = totalPersonListBackup   class Customer:     def __init__(this, allPersonsInfo,userNames, CustomerList):         this.CustomerList = CustomerList         this.allPersonsInfo = allPersonsInfo         this.userNames = userNames           counter = 0         #Repeat itself 20 times but not sure how to debug that. It works for now but could be fixed later         for person in this.allPersonsInfo.getAllPersons():             this.CustomerList[userNames[counter]] = person             counter +=1      def getAllCustomers(this):         return this.CustomerList      def showAllPersonsInfo(this):         for username in this.userNames:             print(this.CustomerList[username])             print("\n")      def getAllPersonsInfo(this):         return this.allPersonsInfo.getAllPersons()      def getAllUserNames(this):         return this.userNames      def restorePersonsListBackup(this):         this.allPersonsInfo.restorePersonsListBackup()  class administration:     def __init__(this, bookCollection, AllCustomers, loanBookList):         this.AllCustomers = AllCustomers         this.bookCollection = bookCollection         this.loanBookList = loanBookList         this.allPersonsInfo = AllCustomers.getAllPersonsInfo()          for book in this.bookCollection.getAllBooks():             this.loanBookList[book["ISBN"]] = None      def setLoanBookPerson(this, isbnCode, customerUsername):         if customerUsername in this.AllCustomers.getAllUserNames():             if isbnCode in this.loanBookList.keys():                 if this.loanBookList[isbnCode] != None:                     print("This book is already used:")                 else:                     this.loanBookList[isbnCode] = customerUsername                     for book in this.bookCollection.getAllBooks():                         if book["ISBN"] == isbnCode:                             print(customerUsername,"loan book by title:",book["title"])             else:                 print("isbn code does not exist!")         else:             print("Username does not exist!")      def setLoanBookNobody(this, isbnCode):         if int(isbnCode) > len(this.loanBookList):             print("Wrong isbn code, type BookLoanedToPerson.showAllIsbnCodes() to check all the isbn codes ")         else:             this.loanBookList[isbnCode] = None      def showAllAvailableBooks(this):         for book in this.loanBookList:             if this.loanBookList[book] == None:                 print("\nThis book is available for loan: ", book)      def showAllIsbnCodes(this):         for code in this.loanBookList.keys():             print("isbn code: " + code)     def makeBackup(this):         with open(r".\backupFakeNames.csv","w",newline="") as output:             new_csv = csv.writer(output)             new_csv.writerows(this.allPersonsInfo)          with open(r".\bookCollectionBackup.json","w") as jsonFile:             json.dump(this.bookCollection.getAllBooks(),jsonFile)          with open(r".\loanbookListBackup.json","w") as jsonFile:             json.dump(this.loanBookList,jsonFile)      def restoreBackUp(this):         pass """         with open(r".\bookCollectionBackup.json") as jsonFile:             bookList = json.load(jsonFile)             this.bookCollection.dumbJSON.JSONFileBookCollection = bookList         with open(r".\backupFakeNames.csv","r") as output:             new_csv = csv.reader(output)             totalPersonListBackup = []             for line in new_csv:                 totalPersonListBackup.append(line)         this.AllCustomers.allPersonsInfo.personsList = totalPersonListBackup         #this.bookCollection.restoreBooksBackup()         with open(r".\loanbookListBackup.json") as jsonFile:             fileLoanBookBackup = json.load(jsonFile)         this.loanBookList = fileLoanBookBackup """  if __name__=="__main__":      reader = csv.reader(open('FakeNameSet20.csv', 'r'))     totalPersonList = []     userNameList = []     PreMadeCustomerDict = dict()      for line in reader:         userNameList.append(line[9])         totalPersonList.append(line)      """PersonalInfoAllpeople exist of list with list of all info over books """     PersonalInfoAllpeople = Person(totalPersonList)     CustomerList = Customer(PersonalInfoAllpeople, userNameList,PreMadeCustomerDict)      with open('booksset1.json') as jsonFile:         bookList = json.load(jsonFile)      bookCollection = bookItems(bookList)     booksCatalog = Catalog(bookCollection)      emptyDict = dict()     BookLoanedToPerson = administration(booksCatalog,CustomerList,emptyDict)      """-----------------------------------------------------------------------------------"""      #Examples of wrong input:     BookLoanedToPerson.setLoanBookPerson("200","kaas")     BookLoanedToPerson.setLoanBookPerson("200","Reech1950")     #Example of putting a ISBN code & username so that person will loan that book     BookLoanedToPerson.setLoanBookPerson("2","Reech1950")     #Example of person delivering book back. Where only the isbn code needs to be given     BookLoanedToPerson.setLoanBookNobody(2)     #Example of searching for a ISBN code. It will give a input where you need to fillin a correct isbn code     booksCatalog.getBooksByISBN()   """ How to add a new book to library: bookCollection.createBook() How to show all the books that is in posession of the library: booksCatalog.showAllBooks() How to show all Persons: CustomerList.showAllPersonsInfo() How to add a new customer: PersonalInfoAllpeople.addPerson() How to search for available books in the library: BookLoanedToPerson.showAllAvailableBooks() How to set certain book on loan: BookLoanedToPerson.setLoanBookPerson(isbn-code,Username) BookLoanedToPerson.setLoanBookPerson("1","Ancion") How to set a backup from all the data BookLoanedToPerson.makeBackup() How to show all the books that's by Language. booksCatalog.getBookByLang() How to show all the isbn codes: BookLoanedToPerson.showAllIsbnCodes() """  

can’t ssh to download data from gcloud instance running centos6 to get moodle backup due to possible hack

I’m noob-server-admin-wannabe so please bare with me.

I have a centos 6 lamp moodle server in a gcloud vm instance, 2 days ago users reported issues accessing moodle with a database connection error.

through my research this is what I found:

  1. restarting the instance didn’t work and it actually cause an issue with apache as I can’t even server html pages from the server eventhough the httpd service is up and restarts ok.

  2. checked apache and security logs, the logs seem to indicate an attempt of hacking, and this is my fault and possible the reason why this is happenning.

I figure I would try to get my data and start over on a new instance but when I try to ssh into the server (ssh web or gcloud ssh cli or filezilla) to download a backup zip file that gets created automatically via a script I setup, I can’t seem to be able to ssh at all here are some details:

  • on browser ssh I get this error:

    Error: The VM guest environment is outdated and only supports the deprecated ‘sshKeys’ metadata item. Please follow the steps here to update

    and even though I’m eventually given access I can’t download anything via browser.

  • on ssh gcloud cli I get this error:

    Permission denied (publickey,gssapi-keyex,gssapi-with-mic). ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

ssh verbose shows this:

MacBook-Pro:.ssh fcortes$   sudo gcloud compute ssh centos6 --ssh-flag="-vvv" Password: OpenSSH_7.9p1, LibreSSL 2.7.3 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 48: Applying options for * debug2: resolve_canonicalize: hostname is address debug2: ssh_connect_direct debug1: Connecting to [] port 22. debug1: Connection established. debug1: identity file /Users/fcortes/.ssh/google_compute_engine type 0 debug1: identity file /Users/fcortes/.ssh/google_compute_engine-cert type -1 debug1: Local version string SSH-2.0-OpenSSH_7.9 debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3 debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000002 debug2: fd 3 setting O_NONBLOCK debug1: Authenticating to as 'root' debug1: using hostkeyalias: compute.8844278207473884047 debug3: hostkeys_foreach: reading file "/Users/fcortes/.ssh/google_compute_known_hosts" debug3: record_hostkey: found key type RSA in file /Users/fcortes/.ssh/google_compute_known_hosts:1 debug3: load_hostkeys: loaded 1 keys from compute.8844278207473884047 debug3: order_hostkeyalgs: prefer hostkeyalgs: rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa debug3: send packet: type 20 debug1: SSH2_MSG_KEXINIT sent debug3: receive packet: type 20 debug1: SSH2_MSG_KEXINIT received debug2: local client KEXINIT proposal debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c debug2: host key algorithms: rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519 debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 debug2: compression ctos: none,zlib@openssh.com,zlib debug2: compression stoc: none,zlib@openssh.com,zlib debug2: languages ctos:  debug2: languages stoc:  debug2: first_kex_follows 0  debug2: reserved 0  debug2: peer server KEXINIT proposal debug2: KEX algorithms: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 debug2: host key algorithms: ssh-rsa,ssh-dss debug2: ciphers ctos: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: ciphers stoc: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: MACs ctos: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: MACs stoc: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: compression ctos: none,zlib@openssh.com debug2: compression stoc: none,zlib@openssh.com debug2: languages ctos:  debug2: languages stoc:  debug2: first_kex_follows 0  debug2: reserved 0  debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: ssh-rsa debug1: kex: server->client cipher: aes128-ctr MAC: umac-64@openssh.com compression: none debug1: kex: client->server cipher: aes128-ctr MAC: umac-64@openssh.com compression: none debug3: send packet: type 34 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(2048<3072<8192) sent debug3: receive packet: type 31 debug1: got SSH2_MSG_KEX_DH_GEX_GROUP debug2: bits set: 1534/3072 debug3: send packet: type 32 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug3: receive packet: type 33 debug1: got SSH2_MSG_KEX_DH_GEX_REPLY debug1: Server host key: ssh-rsa SHA256:FtoD8qoSAeNtVsWukZ5YTbWIiApxpn2T+VsVzcF7SPE debug1: using hostkeyalias: compute.8844278207473884047 debug3: hostkeys_foreach: reading file "/Users/fcortes/.ssh/google_compute_known_hosts" debug3: record_hostkey: found key type RSA in file /Users/fcortes/.ssh/google_compute_known_hosts:1 debug3: load_hostkeys: loaded 1 keys from compute.8844278207473884047 debug1: Host 'compute.8844278207473884047' is known and matches the RSA host key. debug1: Found key in /Users/fcortes/.ssh/google_compute_known_hosts:1 debug2: bits set: 1531/3072 debug3: send packet: type 21 debug2: set_newkeys: mode 1 debug1: rekey after 4294967296 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug3: receive packet: type 21 debug1: SSH2_MSG_NEWKEYS received debug2: set_newkeys: mode 0 debug1: rekey after 4294967296 blocks debug1: Will attempt key: /Users/fcortes/.ssh/google_compute_engine RSA SHA256:CxsVOSJsVd6lZxknFbIRRlzARrtvXpyOItST5IG6mVw explicit debug2: pubkey_prepare: done debug3: send packet: type 5 debug3: receive packet: type 6 debug2: service_accept: ssh-userauth debug1: SSH2_MSG_SERVICE_ACCEPT received debug3: send packet: type 50 debug3: receive packet: type 51 debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic debug3: preferred publickey,keyboard-interactive,password debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Offering public key: /Users/fcortes/.ssh/google_compute_engine RSA SHA256:CxsVOSJsVd6lZxknFbIRRlzARrtvXpyOItST5IG6mVw explicit debug3: send packet: type 50 debug2: we sent a publickey packet, wait for reply debug3: receive packet: type 51 debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic debug2: we did not send a packet, disable method debug1: No more authentication methods to try. root@ Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 

and in my console log the only thing that I found that might be pertinent to my problem is this:

Starting udev: udevd[351]: can not read '/etc/udev/rules.d/75-persistent-net-generator.rules'  udevd[351]: can not read '/etc/udev/rules.d/75-persistent-net-generator.rules' 

but gcloud console does show that I have my rules setup for http and ssh


Any help or guidance on how to get my data or get the server up and running again is really appreciated.

thank you in advance.

App data backup on android devices to google cloud

I have a question about the backup into google cloud on android devices. When you do a backup into google cloud also app data from apps which supports that feature will be uploaded too. But I think there are some conditions WHEN app data of a specific app will be uploaded. E. g. on my android device there are some apps which won’t upload app data and some apps which will upload data (even though they support it). It doesn’t matter if the app data has changed, it won’t upload to google cloud. So is there a way to start app data backup manually? Because app data backup has worked before. I can see this because of the “last updated” timestamp.

Thanks in advance

How to get a date range for Deja-Dup / Duplicity backup?

I’m using TimeShift as recommended for system backup. It’s worked so well I’ve been donating to the project. I’m using Deja-Dup and Duplicity for backing up all user files (the /home directory) to remote google drive.

It took me a while to get deja-dup and duplicity configured for remote only backups, via gnome-online-accounts to Google Drive. So finally after getting it set up correctly, I need to use it. I right-click in my home dir, and select “Restore missing files…” And then I only get the latest backup results to choose from. How can we choose from a date farther back?

Backup Hyper-V VMs during replication

I currently use Hyper-V and am replicating all VMs to a second data centre. This satisfies my requirements in terms of a server failure.

What it doesn’t cover is creating VM backups because if, for example, a VM were to become compromised or corrupt, this corruption would also be replicated.

I’d like to use a tool such as Veeam or similar, but how would this work if the VM is in the process of being replicated? Surely the backup would not be valid.

My goal would be to have at least 7 days backups of each VM that I could revert back to in the above case of data corruption.

I currently have 15 minute replication which is more than enough for my requirements, but it’s still not enough time to take a copy of the VM before the next replica starts.

Any suggestions would be welcome.

Thank you.

3 Questions regarding restoring the backup of whatsapp from Google Drive

My phone Lenovo K53a48 stopped working on the 7th of June. I have a backup of all my WhatsApp messages until the 6th of June on Googe Drive. I installed WhatsApp on an Xperia M2. After I signed in with my phone number the question about if I want to restore my backup from my Google Drive came up. However, it required 9,3GB and the phone has a total internal memory of 8GB. I then bought a memory card of 32GB and put in inside my phone. However, the same message appears, so I understand there is no option to restore and save my WhatsApp history on the memory card. Could you confirm that, please?

Furthermore, If I uninstall the WhatsApp application now, do I have the option to install it on the memory card and so restore my backup on the memory card where there is plenty of space?

Finally, the last question. If I uninstall now WhatsApp without choosing to restore the backup but also without selecting the opposite, will I have the option to do it the next time I install WhatsApp or is it now or never?

Thank you very much for your help!!