How to write to a Realm object server on Ubuntu - realm

I have worked through the Realm mobile platform tutorial (link). You create a Swift task app.
I was able to get the app and server working correctly on my local mac. I was able to add tasks to the tableview.
I then created an Ubuntu 16.04 droplet on DigitalOcean. I managed to get the server running and am able to view the Realm dashboard.
The problem is that when I run the app with the new server ip address (the ubuntu instance), I see the 'Add task' pop up but no tasks get added to the tableview on the app.
The following code adds tasks to the db:
try! items.realm?.write {
items.insert(Task(value: ["text": text]), at: items.filter("completed = false").count)
}
When I run the code on my local machine it inserts values but the insert line is never hit when I use the remote server.
Here is where I set the Realm config to the new url:
let configuration = Realm.Configuration(
syncConfiguration: (user, URL(string: "realm://128.199.119.xxx:9080/~/realmtasks")!)
)
Do you have to update the Realm configuration.yml file when you deploy it to a remote server? If yes, does anyone have a configuration.yml example or what needs to be done to get the file setup?
In the tutorial video it is mentioned that the info.plist needs to be updated. Will the below edition to the info.plist be the same for an app accessing a deployed server or an app on the app store?
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Here is the result of cat /var/log/realm-object-server.log:
2016-10-29T03:09:06.501Z - info: sync-server: Connection[5]: Connection from 127.0.0.1:58822
2016-10-29T03:09:06.631Z - info: sync-server: Connection[5]: Received: CLIENT(protocol_version=15, client_info_size=2, client_info='{}')
2016-10-29T03:09:06.788Z - info: sync-server: Connection[5]: Session[1]: Session initiated (session_ident=1).
2016-10-29T03:09:06.789Z - info: sync-server: Connection[5]: Session[1]: Received: BIND(server_path=/72c5a/realmtasks, signed_user_token='...xxm/7UjDkuEqQ==', need_file_ident_pair=0)
2016-10-29T03:09:06.789Z - info: sync-server: Connection[5]: Session[1]: Received: IDENT(server_file_ident=21314, client_file_ident=1, client_file_ident_secret=1477, scan_server_version=2, scan_client_version=2, latest_server_version=2, latest_server_session_ident=1643)
2016-10-29T03:09:17.069Z - info: sync-server: Connection[5]: Session[1]: Session terminated (session_ident=1).
2016-10-29T03:09:17.070Z - info: sync-server: Connection[5]: Connection closed by client: End of input
2016-10-29T03:09:26.769Z - info: sync-server: Connection[6]: Connection from 127.0.0.1:58866
2016-10-29T03:09:26.895Z - info: sync-server: Connection[6]: Received: CLIENT(protocol_version=15, client_info_size=2, client_info='{}')
2016-10-29T03:09:27.053Z - info: sync-server: Connection[6]: Session[1]: Session initiated (session_ident=1).
2016-10-29T03:09:27.053Z - info: sync-server: Connection[6]: Session[1]: Received: BIND(server_path=/a4fdec5a/realmtasks, signed_user_token='...K0k7mw==', need_file_ident_pair=0)
2016-10-29T03:09:27.053Z - info: sync-server: Connection[6]: Session[1]: Received: IDENT(server_file_ident=21094, client_file_ident=1, client_file_ident_secret=14907, scan_server_version=2, scan_client_version=2, latest_server_version=2, latest_server_session_ident=164553)
The object server is running and I can see the task and taskList tables but I cannot write records to the table.
When I check auth.log I get the following
Nov 1 10:53:22 digitalocean sshd[13684]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.229.172.111 user=root
Nov 1 10:53:49 digitalocean sshd[13701]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.229.172.111 user=root
Nov 1 10:53:50 digitalocean sshd[13701]: Failed password for root from 221.229.172.111 port 43992 ssh2
Nov 1 10:53:55 digitalocean sshd[13701]: message repeated 2 times: [ Failed password for root from 221.229.172.111 port 43992 ssh2]
Nov 1 10:53:55 digitalocean sshd[13701]: Received disconnect from 221.229.172.111 port 43992:11: [preauth]
Nov 1 10:53:55 digitalocean sshd[13701]: Disconnected from 221.229.172.111 port 43992 [preauth]
Nov 1 10:53:55 digitalocean sshd[13701]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.229.172.111 user=root

I think I found the probem.
In the tutorial's updateList() function:
func updateList() {
if self.items.realm == nil, let list = self.realm.objects(TaskList.self).first {
self.items = list.items
}
self.tableView.reloadData()
}
self.items will never get set because self.realm.objects(TaskList.self).first will return nil until there is a task added to the list. You need to add a task (in my case using the Mac version of the app) before the iOS version of the code will work.

Related

openfortivpn with pppd failure

Running on ubuntu server:
sudo openfortivpn --trusted-cert 6f0ac15ce35ca1y3253a6307874ffd490029f3c2eba7a1ec289eda308b95cbf13 portal2.assd.bb.com:10443 -u user <<< 'pass'
I get this ouput
INFO: Connected to gateway.
INFO: Authenticated.
INFO: Remote gateway has allocated a VPN.
ERROR: read: Input/output error
INFO: Cancelling threads...
ERROR: pppd: Is not setuid-root and the invoking user is not root.
INFO: Terminated pppd.
INFO: Closed connection to gateway.
INFO: Logged out.
openfortivpn --version
1.6.0
How can I solve it? ppp is alredy installed. Where can I read: read: Input/output error?

Could not connect to Realm Object Server 2.0

I install ROS on my server, but when I called ros start and it will running at my server, here is the log:
login as: root
root#*.*.*.*'s password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-109-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Welcome to Alibaba Cloud Elastic Compute Service !
root#iZwz940pq66re8qvh8adzuZ:~# ros start
info: Loaded feature token capabilities=[Sync], expires=Wed Apr 19 2017 22:15:29 GMT+0800 (CST)
info: Realm Object Server version 2.5.1 is starting
info: [sync] Realm sync server started ([realm-core-4.0.4], [realm- sync-2.1.10])
info: [sync] Directory holding persistent state: /root/data/sync/user_data
info: [sync] Operating mode: master_with_no_slave
info: [sync] Log level: info
info: [sync] Download log compaction is enabled
info: [sync] Max download size: 131072 bytes
info: [sync] Listening on 127.0.0.1:35571 (sync protocol version 22)
info: Realm Object Server has started and is listening on http://0.0.0.0:9080
But when I entered the address in the browser, It told me that I could not connect.And I use Realm Studio to connect it also tell me that could not reach the server, did i forget something steps? Maybe my server's security policy forbide the port?
Per to the log description, Realm Object Server has started and is listening on http://0.0.0.0:9080.
Please ensure you've allowed TCP port 9080 in your ECS security group.
For detail steps, please refer the document
Add a security group rule

Realm - Failed to connect to endpoint ':::9080': Connection refused

I am getting the below error when starting the Realm object server. I am running the server on Mac.
Realm Mobile Platform version is 1.8.1
2017-07-08T09:48:06.362Z - info: Logging to console at level 'info'.
2017-07-08T09:48:06.438Z - info: Realm Object Server sync engine listening on 127.0.0.1:27800.
2017-07-08T09:48:06.484Z - info: permission: Seed permission-Realms
2017-07-08T09:48:06.496Z - info: Realm Object Server web server listening on 127.0.0.1:27080.
2017-07-08T09:48:06.498Z - info: http proxy listening on :::9080.
2017-07-08T09:48:06.503Z - info: client: Opening Realm file: /Users/vkuppusamy/Documents/realm-mobile-platform/realm-object-server/object-server/root_dir/internal_data/auth.realm
2017-07-08T09:48:06.503Z - info: client: Connection[1]: Session[1]: Starting session for '/Users/vkuppusamy/Documents/realm-mobile-platform/realm-object-server/object-server/root_dir/internal_data/auth.realm'
2017-07-08T09:48:06.503Z - info: client: Connection[1]: Resolving ':::9080'
2017-07-08T09:48:06.503Z - info: client: Connection[1]: Connecting to endpoint ':::9080' (1/1)
2017-07-08T09:48:06.503Z - error: client: Connection[1]: Failed to connect to endpoint ':::9080': Connection refused
2017-07-08T09:48:06.503Z - error: client: Connection[1]: Failed to connect to ':::9080': All endpoints failed
2017-07-08T09:48:06.504Z - info: client: Opening Realm file: /Users/vkuppusamy/Documents/realm-mobile-platform/realm-object-server/object-server/realm-object-server/listener/__admin.realm
2017-07-08T09:48:06.504Z - info: client: Connection[2]: Session[2]: Starting session for '/Users/vkuppusamy/Documents/realm-mobile-platform/realm-object-server/object-server/realm-object-server/listener/_
You can ignore that - it's likely due to clients trying to connect before the server has initialized completely.

Why am I not able to write to a remote Realm object server? [duplicate]

I have worked through the Realm mobile platform tutorial (link). You create a Swift task app.
I was able to get the app and server working correctly on my local mac. I was able to add tasks to the tableview.
I then created an Ubuntu 16.04 droplet on DigitalOcean. I managed to get the server running and am able to view the Realm dashboard.
The problem is that when I run the app with the new server ip address (the ubuntu instance), I see the 'Add task' pop up but no tasks get added to the tableview on the app.
The following code adds tasks to the db:
try! items.realm?.write {
items.insert(Task(value: ["text": text]), at: items.filter("completed = false").count)
}
When I run the code on my local machine it inserts values but the insert line is never hit when I use the remote server.
Here is where I set the Realm config to the new url:
let configuration = Realm.Configuration(
syncConfiguration: (user, URL(string: "realm://128.199.119.xxx:9080/~/realmtasks")!)
)
Do you have to update the Realm configuration.yml file when you deploy it to a remote server? If yes, does anyone have a configuration.yml example or what needs to be done to get the file setup?
In the tutorial video it is mentioned that the info.plist needs to be updated. Will the below edition to the info.plist be the same for an app accessing a deployed server or an app on the app store?
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Here is the result of cat /var/log/realm-object-server.log:
2016-10-29T03:09:06.501Z - info: sync-server: Connection[5]: Connection from 127.0.0.1:58822
2016-10-29T03:09:06.631Z - info: sync-server: Connection[5]: Received: CLIENT(protocol_version=15, client_info_size=2, client_info='{}')
2016-10-29T03:09:06.788Z - info: sync-server: Connection[5]: Session[1]: Session initiated (session_ident=1).
2016-10-29T03:09:06.789Z - info: sync-server: Connection[5]: Session[1]: Received: BIND(server_path=/72c5a/realmtasks, signed_user_token='...xxm/7UjDkuEqQ==', need_file_ident_pair=0)
2016-10-29T03:09:06.789Z - info: sync-server: Connection[5]: Session[1]: Received: IDENT(server_file_ident=21314, client_file_ident=1, client_file_ident_secret=1477, scan_server_version=2, scan_client_version=2, latest_server_version=2, latest_server_session_ident=1643)
2016-10-29T03:09:17.069Z - info: sync-server: Connection[5]: Session[1]: Session terminated (session_ident=1).
2016-10-29T03:09:17.070Z - info: sync-server: Connection[5]: Connection closed by client: End of input
2016-10-29T03:09:26.769Z - info: sync-server: Connection[6]: Connection from 127.0.0.1:58866
2016-10-29T03:09:26.895Z - info: sync-server: Connection[6]: Received: CLIENT(protocol_version=15, client_info_size=2, client_info='{}')
2016-10-29T03:09:27.053Z - info: sync-server: Connection[6]: Session[1]: Session initiated (session_ident=1).
2016-10-29T03:09:27.053Z - info: sync-server: Connection[6]: Session[1]: Received: BIND(server_path=/a4fdec5a/realmtasks, signed_user_token='...K0k7mw==', need_file_ident_pair=0)
2016-10-29T03:09:27.053Z - info: sync-server: Connection[6]: Session[1]: Received: IDENT(server_file_ident=21094, client_file_ident=1, client_file_ident_secret=14907, scan_server_version=2, scan_client_version=2, latest_server_version=2, latest_server_session_ident=164553)
The object server is running and I can see the task and taskList tables but I cannot write records to the table.
When I check auth.log I get the following
Nov 1 10:53:22 digitalocean sshd[13684]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.229.172.111 user=root
Nov 1 10:53:49 digitalocean sshd[13701]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.229.172.111 user=root
Nov 1 10:53:50 digitalocean sshd[13701]: Failed password for root from 221.229.172.111 port 43992 ssh2
Nov 1 10:53:55 digitalocean sshd[13701]: message repeated 2 times: [ Failed password for root from 221.229.172.111 port 43992 ssh2]
Nov 1 10:53:55 digitalocean sshd[13701]: Received disconnect from 221.229.172.111 port 43992:11: [preauth]
Nov 1 10:53:55 digitalocean sshd[13701]: Disconnected from 221.229.172.111 port 43992 [preauth]
Nov 1 10:53:55 digitalocean sshd[13701]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.229.172.111 user=root
I think I found the probem.
In the tutorial's updateList() function:
func updateList() {
if self.items.realm == nil, let list = self.realm.objects(TaskList.self).first {
self.items = list.items
}
self.tableView.reloadData()
}
self.items will never get set because self.realm.objects(TaskList.self).first will return nil until there is a task added to the list. You need to add a task (in my case using the Mac version of the app) before the iOS version of the code will work.

Connect to Object Server error when using Realm Browser to connect to Object Server

I am following the Getting started guide for the Realm Mobile Platform. I started the Realm Object server and run the Mac OSX demo task app. I cannot however connect to the object server using the Mac OSX Realm Browser app.
I open the Realm Browser and select Connect to Object Server. I enter realm://127.0.0.1:9080 as the server url and then paste in the long token string ending in == that I get from terminal when I started the Object server with the command start-object-server.command. I now click connect and get the following error:
Failed to connect to Object Server.
Check the url and that the server is accessible.
In terminal I see a log saying that I need to login to http://127.0.0.1:27080/ and create an admin user. I navigate to that url and can see my user which is an admin.
Here are the logs:
info: Logging to console at level 'info'.
info: Realm Object Server sync server listening on 127.0.0.1:27800.
info: Realm Object Server web server listening on 127.0.0.1:27080.
info: http proxy listening on 0.0.0.0:9080.
info: sync-server: Realm sync server started ([realm-core-2.0.0], [realm-sync-1.0.0-BETA-1.0])
info: sync-server: Directory holding persistent state: /Users/grant/Apps/realm-mobile-platform/realm-object-server/object-server/root_dir/user_data
info: sync-server: Listening on 127.0.0.1:27800 (sync protocol version 14)
info: The Realm Object Server requires an initial admin user to start. To continue, please open your web browser to access the dashboard at: http://127.0.0.1:27080 and register your user.
info: sync-server: Connection[1]: Connection from 127.0.0.1:53352
info: sync-server: Connection[1]: Received: CLIENT(protocol_version=14, client_info_size=2, client_info = {})
info: sync-server: Connection[1]: Session[1]: Initiated
info: sync-server: Connection[1]: Session[1]: Received: BIND(server_path='/__admin', signed_user_token=eyJpZGVudGl0eSI6ImF1..., need_file_ident_pair=0)
info: sync-server: Connection[1]: Session[1]: Received: IDENT(server_file_ident=80096, client_file_ident=1, client_file_ident_secret=523599, scan_server_version=13, scan_client_version=24, latest_server_version=13, latest_server_session_ident=7426485)
When I run telnet localhost 9080 I get the following output:
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Any idea why I cannot connect to the object server using the Mac OSX Realm Browser app?
I re-downloaded the latest Realm files and everything works as expected now.

Resources