Del programos idejimo i startup

1
  • 25 Grd '12

Sveiki,

Pasirasiau C kalboje programele ir noriu ja ideti i linuxu startupa, kad tik kai uzsibootina linuxai ir paleistu ta mano programele. Internete radau visokios info, taciau niekaip neiseidavo pasirasyti to scriptuko, kad veiktu. Gal galite padeti?

1
  • 25 Grd '12
#! /bin/sh

# /etc/init.d/foo

#

touch /var/lock/foo*

case "$1" in

start)

echo "Starting " $0

#

# Do something to startup the target platform here

#

;;

stop)

echo "Stopping " $0

 #

# Do something to stop the target platform here

#

;;

restart)

echo "Restarting " $0

$0 stop

$0 start

;;

status)

echo  "Status Not Implemented"

#

# Do something to process status checks here.

#

;;

*)

echo "Usage: /etc/init.d/$0 {start|stop}"

exit 1

;;

esac

exit 0

Kad ir toks koduko pvz. Tai kaip tureciau pakeisti, kad tik uzsiibootinus paleistu programa.exe?
dekui

A
  • 25 Grd '12

@123456 rašė:
programa.exe

*.exe? tokia galūne eina Windows'e vykdomieji failai..

Ar bandei tiesiog įmesti komanda į "Startup Application" (t.y. tą pačia komanda, kuria naudoji paleidžiant "tai_ką_padarei" per terminalą)?.

1
  • 25 Grd '12

Na nera galimnybes taip imesti. Galiu tik per terminala viska daryt. o tas exe, tai del gcc programa.c -o programa.exe

T
Techtronic
Mindaugas N.
  • 25 Grd '12

As senai turiu tokia ideja sia tema, gal galeciau padeti.
/etc yra toks failiukas initab, jis kontroliuoja kiek turesi tty, run levels ir panasiai. Pats naudoju runlevel 3 (pats prisiloginu ir paleiziu X jeigu reikia). Pakuriau viena programele kuri automatiskai paleidziama ant init 3 kaip agety is initab.
Initab atrodo taip:

c1:12345:respawn:/sbin/agetty --autologin minde --8bits --noissue --noclear --keep-baud 38400 tty1 linux
c2:12345:respawn:/home/minde/bin/autologin
c2:2345:respawn:/sbin/agetty --8bits --keep-baud 38400 tty2 linux

tty1 automatiskai prisilogina i user 'minde', netrina screen ir jokio MOTD.
tty2 paleidzia mano sukurta programa 'autologin'.
tty3 tai clear screen, MOTD (kitaip issue) na ir login prompt (gera ideja tureti viena laisva tty)

autologin atrodo taip:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

#define STARTX "/usr/bin/startx"

#define UNPRIV_UID 1000
#define UNPRIV_GID 100

int main() {
  // Drop root privileges
  if (setgid(UNPRIV_GID)!=0) printf("Failed to set nonroot GID\n");
  if (setuid(UNPRIV_UID)!=0) printf("Failed to set nonroot UID\n");
  // Nustatyti env
  char pwd[] = "/home/minde";
...........
  char* args[] = { pwd, STARTX, NULL };

  printf("Starting Xorg server");
  chdir(pwd);
  execve("/bin/dash",args,envVar);
  return(0);
}

Atkreipk demesi i setgid/setuid, tai labai svarbu jeigu nori paleisti programa is tam tikro user/group.
Planuoju sukurti savo init, kazka panasaus i openrc, nepatinka man ta ideja, kad visi init skriptai naudoja shell skriptus, its fucking slow!

Butu saunu tureti Linux'e normalu init, ty be jokiu shell ar letojo Python.

Tau patarciau naudoti rc.local failiuka, ten uzteks parasyti tavo komanda ir rc.local paleis ant boot. Bet didelis NOTE, programa paleista bus is root userio, gali prisidaryti problemu.
Kur ji rasti ant Ubuntu ir kokiu principu jis veikia nezinau...
Bet tikiu atrasi pats, jis gali buti /etc/rc.local arba /etc/rc.local.d/*

T
Techtronic
Mindaugas N.
  • 25 Grd '12

@123456 rašė:
Na nera galimnybes taip imesti. Galiu tik per terminala viska daryt. o tas exe, tai del gcc programa.c -o programa.exe

Ant GNU Linux nereikia gcc rograma.c -o programa.exe.
Turi buti taip:

gcc programa.c -o programa

Arba dar geriau, jeigu jau C/C++ moki

gcc -ggdb -Wall programa.c -o programa

gali aisku ir -Wpedantic

1
  • 25 Grd '12

Oi... labai dekui Tau uz viska. Radau ta Rc.local failiuka ir kolkas jis tuscias tik komentarai. Tai jeigu irasyciau i ji ./kelias/iki/programos/programa.exe, tai ja paleistu ant boot?

T
Techtronic
Mindaugas N.
  • 25 Grd '12

@123456 rašė:
Oi... labai dekui Tau uz viska. Radau ta Rc.local failiuka ir kolkas jis tuscias tik komentarai. Tai jeigu irasyciau i ji ./kelias/iki/programos/programa.exe, tai ja paleistu ant boot?

Turetu, tik ziurek kad rc.local pradzia butu #!/bin/bash

1
  • 25 Grd '12

Gerai, kad pasakei, nes buvo ten sh. o tas "tty", tai terminalas?

T
Techtronic
Mindaugas N.
  • 25 Grd '12

@123456 rašė:
Gerai, kad pasakei, nes buvo ten sh. o tas "tty", tai terminalas?

Skirtumo nera sh ar bash.
sh yra Shell Script, tai linkas i /bin/bash, todel nera skirtumo sh ar bash.
O del tty tai jau kita tema, tau paleis rc.local kaip servica koki, ant runlevel 3

1
  • 25 Grd '12

Jau visai pasimeciau.
parasau programele:

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

issaugau programa.cpp
ir bandau gcc programa.cpp -o programa ir neina.

T
Techtronic
Mindaugas N.
  • 25 Grd '12

@123456 rašė:
Jau visai pasimeciau.
parasau programele:

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

issaugau programa.cpp
ir bandau gcc programa.cpp -o programa ir neina.

Veikia gerai, aisku ne gcc o c++

c++ programa.cpp -o programa
1
  • 25 Grd '12
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

dar toki darau, tai meta kad neranda iostream

G
  • 25 Grd '12

@Techtronic rašė:
Tau patarciau naudoti rc.local failiuka, ten uzteks parasyti tavo komanda ir rc.local paleis ant boot. Bet didelis NOTE, programa paleista bus is root userio, gali prisidaryti problemu.

Tinkamai nustačius UID file'as bus paleistas to vartotojo privilegijomis, pataisyk, jei klystu.

1
  • 25 Grd '12

Ai jo... ot galva, visai issiblaskes. DD

1
  • 25 Grd '12

Deja, bet nesuveike. Gal dar reikia kazkaip atnaujinti ta rc?

T
Techtronic
Mindaugas N.
  • 25 Grd '12

gcc yra C kompiliatorius, o g++ arba c++ yra C++ kompilaitorius, nemaisyk!
Na aisku, gali naudoti ir taip:

gcc -lstdc++ programa.cpp -o programa

@Ghost rašė:

@Techtronic rašė:
Tau patarciau naudoti rc.local failiuka, ten uzteks parasyti tavo komanda ir rc.local paleis ant boot. Bet didelis NOTE, programa paleista bus is root userio, gali prisidaryti problemu.

Tinkamai nustačius UID file'as bus paleistas to vartotojo privilegijomis, pataisyk, jei klystu.

O kur nustatyti ta UID ? Ant GNU Linux tai sudetinga, as ant C nustates uid/gid ir tai negaliu gauti normaliu teisiu, aisku programa numeta teises, bet group pakinta. Kaip pvz:

/* 
 * @(#)testas.cpp
 */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>


int main(void)
{
  if (setgid(100)!=0) printf("Failed to set nonroot GID\n");
  if (setuid(1000)!=0) printf("Failed to set nonroot UID\n");

  printf("uid: %d\n", getuid());
  printf("gid: %d\n", getgid());

  system("/usr/bin/id");

  return 0;
}

user minde uid 1000 gid 100:

minde: ./foo
uid: 1000
gid: 100
uid=1000(minde) gid=100(users) groups=100(users),10(wheel),12(mail),16(cron),18(audio),19(cdrom),27(video),85(usb),230(ulogd),231(snort),232(vboxguest),233(vboxusers),234(ngrep),235(realtime),241(tcpdump),242(wireshark),250(portage)

user root uid 0 gid 0

root: ./foo
uid: 1000
gid: 100
uid=1000(minde) gid=100(users) groups=100(users),0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
1
  • 25 Grd '12

Ai kad as ir per terminala paleidziu:

stud@ubuntu:~$ ./home/stud/Desktop/programa
bash: ./home/stud/Desktop/programa: No such file or directory

Bet tikrai cia.

T
Techtronic
Mindaugas N.
  • 25 Grd '12

@123456 rašė:
Deja, bet nesuveike. Gal dar reikia kazkaip atnaujinti ta rc?

Gal rc.local nera paleidziamas ant boot, tai nera sunku nustatyti, bet as nemoku nieko ant ubuntu:/
Tikiu tau pades tie kas naudoja Ubuntu

1
  • 25 Grd '12

Ai... tai as zinau. buvau rades intike. Dekui labai. Geru tau svenciu.