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?
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/*
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?
@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
@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
#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.
@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.
#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;
}
@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.
@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;
}
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?
Kad ir toks koduko pvz. Tai kaip tureciau pakeisti, kad tik uzsiibootinus paleistu programa.exe?
dekui
*.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ą)?.
Na nera galimnybes taip imesti. Galiu tik per terminala viska daryt. o tas exe, tai del gcc programa.c -o programa.exe
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:
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:
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/*
Ant GNU Linux nereikia gcc rograma.c -o programa.exe.
Turi buti taip:
Arba dar geriau, jeigu jau C/C++ moki
gali aisku ir -Wpedantic
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
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
Jau visai pasimeciau.
parasau programele:
issaugau programa.cpp
ir bandau gcc programa.cpp -o programa ir neina.
Veikia gerai, aisku ne gcc o c++
dar toki darau, tai meta kad neranda iostream
Tinkamai nustačius UID file'as bus paleistas to vartotojo privilegijomis, pataisyk, jei klystu.
Ai jo... ot galva, visai issiblaskes. DD
Deja, bet nesuveike. Gal dar reikia kazkaip atnaujinti ta rc?
gcc yra C kompiliatorius, o g++ arba c++ yra C++ kompilaitorius, nemaisyk!
Na aisku, gali naudoti ir taip:
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:
user minde uid 1000 gid 100:
user root uid 0 gid 0
Ai kad as ir per terminala paleidziu:
Bet tikrai cia.
Gal rc.local nera paleidziamas ant boot, tai nera sunku nustatyti, bet as nemoku nieko ant ubuntu:/
Tikiu tau pades tie kas naudoja Ubuntu
Ai... tai as zinau. buvau rades intike. Dekui labai. Geru tau svenciu.